diff --git a/lib/harp-runtime/cloud/cloud_mutator.rb b/lib/harp-runtime/cloud/cloud_mutator.rb index 4cb8a04..395f4cb 100644 --- a/lib/harp-runtime/cloud/cloud_mutator.rb +++ b/lib/harp-runtime/cloud/cloud_mutator.rb @@ -100,7 +100,6 @@ def destroy(resource_name, resource_def) destroyed = resource.destroy(service) #pr = persist_resource(resource_name, resource, resource, "destroy") - #persisted.live_resource = resource persisted.state = Harp::Resources::AvailableResource::DESTROYED remember(persisted) persisted.save diff --git a/lib/harp-runtime/resources/autoscaling/autoscaling_group.rb b/lib/harp-runtime/resources/autoscaling/autoscaling_group.rb index a133bb1..611364d 100644 --- a/lib/harp-runtime/resources/autoscaling/autoscaling_group.rb +++ b/lib/harp-runtime/resources/autoscaling/autoscaling_group.rb @@ -29,6 +29,10 @@ class AutoScalingGroup < AvailableResource attribute :tags, :aliases => 'Tags' attribute :termination_policies, :aliases => 'TerminationPolicies' attribute :vpc_zone_identifier, :aliases => 'VPCZoneIdentifier' + attribute :description + attribute :state + attribute :type + attribute :live_resource register_resource :auto_scaling_group, RESOURCES_AUTOSCALE @@ -48,9 +52,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - group = service.groups.destroy(destroy_attribs) + if id + group = service.groups.destroy(id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/autoscaling/launch_configuration.rb b/lib/harp-runtime/resources/autoscaling/launch_configuration.rb index 7e8655d..fe96b97 100644 --- a/lib/harp-runtime/resources/autoscaling/launch_configuration.rb +++ b/lib/harp-runtime/resources/autoscaling/launch_configuration.rb @@ -26,7 +26,10 @@ class LaunchConfiguration < AvailableResource attribute :security_groups, :aliases => 'SecurityGroups' attribute :user_data, :aliases => 'UserData' attribute :spot_price, :aliases => 'SpotPrice' - + attribute :description + attribute :state + attribute :type + attribute :live_resource register_resource :launch_configuration, RESOURCES_AUTOSCALE @@ -45,9 +48,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - configuration = service.configurations.destroy(destroy_attribs) + if id + configuration = service.configurations.destroy(id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/autoscaling/scaling_policy.rb b/lib/harp-runtime/resources/autoscaling/scaling_policy.rb index c002743..4d7c5cc 100644 --- a/lib/harp-runtime/resources/autoscaling/scaling_policy.rb +++ b/lib/harp-runtime/resources/autoscaling/scaling_policy.rb @@ -18,6 +18,10 @@ class ScalingPolicy < AvailableResource attribute :cooldown, :aliases => 'Cooldown' attribute :min_adjustment_step, :aliases => 'MinAdjustmentStep' attribute :scaling_adjustment, :aliases => 'ScalingAdjustment' + attribute :description + attribute :state + attribute :type + attribute :live_resource register_resource :scaling_policy, RESOURCES_AUTOSCALE @@ -36,9 +40,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - policy = service.policies.destroy(destroy_attribs) + if id + policy = service.delete_policy(auto_scaling_group_name, id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/beanstalk/elastic_application.rb b/lib/harp-runtime/resources/beanstalk/elastic_application.rb index 2a93e47..04de766 100644 --- a/lib/harp-runtime/resources/beanstalk/elastic_application.rb +++ b/lib/harp-runtime/resources/beanstalk/elastic_application.rb @@ -17,6 +17,10 @@ class ElasticApplication < AvailableResource attribute :updated_at, :aliases => 'DateUpdated' attribute :description, :aliases => 'Description' attribute :version_names, :aliases => 'Versions' + attribute :description + attribute :state + attribute :type + attribute :live_resource register_resource :elastic_application, RESOURCES_BEANSTALK @@ -41,9 +45,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - application = service.applications.destroy(destroy_attribs) + if id + application = service.applications.destroy(id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/beanstalk/elastic_environment.rb b/lib/harp-runtime/resources/beanstalk/elastic_environment.rb index 8b9d4d5..144b115 100644 --- a/lib/harp-runtime/resources/beanstalk/elastic_environment.rb +++ b/lib/harp-runtime/resources/beanstalk/elastic_environment.rb @@ -29,7 +29,11 @@ class ElasticEnvironment < AvailableResource attribute :version_label, :aliases => 'VersionLabel' attribute :option_settings, :aliases => 'OptionSettings' attribute :options_to_remove, :aliases => 'OptionsToRemove' - + attribute :description + attribute :state + attribute :type + attribute :live_resource + register_resource :elastic_environment, RESOURCES_BEANSTALK # Only keeping a few properties, simplest define keeps. @@ -47,9 +51,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - environment = service.environments.destroy(destroy_attribs) + if id + environment = service.environments.destroy(id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/compute/elastic_ip.rb b/lib/harp-runtime/resources/compute/elastic_ip.rb index 127bf13..f5ce7a2 100644 --- a/lib/harp-runtime/resources/compute/elastic_ip.rb +++ b/lib/harp-runtime/resources/compute/elastic_ip.rb @@ -10,11 +10,16 @@ class ElasticIP < AvailableResource include Harp::Resources - attribute :id, :aliases => 'allocation_id' + attribute :id attribute :public_ip_address attribute :public_ip, :aliases => 'publicIp' attribute :server_id, :aliases => 'instanceId' attribute :domain + + attribute :description + attribute :type + attribute :live_resource + attribute :state register_resource :elastic_ip, RESOURCES_COMPUTE @@ -24,7 +29,7 @@ class ElasticIP < AvailableResource # Return persistable attributes with only desired attributes to keep def keep(attribs) attribs[:public_ip_address] = attribs[:public_ip] - attribs[:id] = attribs[:allocation_id] + attribs[:id] = attribs[:public_ip] super end @@ -37,7 +42,7 @@ def self.persistent_type() def create(service) create_attribs = self.attribs address = service.addresses.create(create_attribs) - address.allocation_id = SecureRandom.urlsafe_base64(16) + @id = address.public_ip return address end diff --git a/lib/harp-runtime/resources/compute/elastic_ip_association.rb b/lib/harp-runtime/resources/compute/elastic_ip_association.rb index 7573c00..ee2b4f4 100644 --- a/lib/harp-runtime/resources/compute/elastic_ip_association.rb +++ b/lib/harp-runtime/resources/compute/elastic_ip_association.rb @@ -15,6 +15,12 @@ class ElasticIPAssociation < AvailableResource attribute :server_id, :aliases => 'instanceId' attribute :network_interface_id, :aliases => 'networkInterfaceId' attribute :network_interface_owner_id, :aliases => 'networkInterfaceOwnerId' + attribute :public_ip + + attribute :description + attribute :type + attribute :live_resource + attribute :state register_resource :elastic_ip_association, RESOURCES_COMPUTE @@ -34,17 +40,16 @@ def self.persistent_type() def create(service) - create_attribs = self.attribs - address = service.addresses.create(create_attribs) - address.association_id = SecureRandom.urlsafe_base64(16) - return address + create_attribs = self.attribs[:attributes] + address = service.associate_address(create_attribs[:server_id],create_attribs[:public_ip],nil,nil) + #id = address.association_id + return self end def destroy(service) - destroy_attribs = self.attribs - binding.pry - if @id - address = service.addresses.destroy(destroy_attribs) + public_ip = self.attribs[:attributes][:public_ip] + if public_ip + address = service.disassociate_address(public_ip) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/compute/security_group.rb b/lib/harp-runtime/resources/compute/security_group.rb index aa93e65..f01bc8a 100644 --- a/lib/harp-runtime/resources/compute/security_group.rb +++ b/lib/harp-runtime/resources/compute/security_group.rb @@ -16,6 +16,10 @@ class SecurityGroup < AvailableResource attribute :ip_permissions_egress, :aliases => 'ipPermissionsEgress' attribute :owner_id, :aliases => 'ownerId' attribute :vpc_id, :aliases => 'vpcId' + + attribute :type + attribute :live_resource + attribute :state register_resource :security_group, RESOURCES_COMPUTE @@ -46,7 +50,7 @@ def create(service) def destroy(service) if id - security_groups = service.security_groups.destroy(id) + security_groups = service.security_groups.destroy(name) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/compute/volume.rb b/lib/harp-runtime/resources/compute/volume.rb index 563d159..dce0c16 100644 --- a/lib/harp-runtime/resources/compute/volume.rb +++ b/lib/harp-runtime/resources/compute/volume.rb @@ -23,6 +23,10 @@ class Volume < AvailableResource attribute :state, :aliases => 'status' attribute :tags, :aliases => 'tagSet' attribute :type, :aliases => 'volumeType' + + attribute :description + attribute :live_resource + attribute :state register_resource :volume, RESOURCES_COMPUTE diff --git a/lib/harp-runtime/resources/elastic_load_balancing/load_balancer.rb b/lib/harp-runtime/resources/elastic_load_balancing/load_balancer.rb index 5012dfb..de7eb66 100644 --- a/lib/harp-runtime/resources/elastic_load_balancing/load_balancer.rb +++ b/lib/harp-runtime/resources/elastic_load_balancing/load_balancer.rb @@ -23,6 +23,11 @@ class LoadBalancer < AvailableResource attribute :scheme, :aliases => 'Scheme' attribute :vpc_id, :aliases => 'VPCId' attribute :listeners + + attribute :description + attribute :type + attribute :live_resource + attribute :state register_resource :load_balancer, RESOURCES_ELASTIC_LOAD_BALANCING @@ -45,9 +50,9 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - load_balancer = service.load_balancers.destroy(destroy_attribs) + id + if id + load_balancer = service.load_balancers.destroy(id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/rds/db_instance.rb b/lib/harp-runtime/resources/rds/db_instance.rb index 18d082b..c786270 100644 --- a/lib/harp-runtime/resources/rds/db_instance.rb +++ b/lib/harp-runtime/resources/rds/db_instance.rb @@ -36,6 +36,10 @@ class DBInstance < AvailableResource attribute :publicly_accessible, :aliases => 'PubliclyAccessible' attribute :vpc_security_groups, :aliases => 'VpcSecurityGroups' attribute :password + + attribute :description + attribute :type + attribute :live_resource attr_accessor :parameter_group_name, :security_group_names, :port @@ -60,9 +64,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - instance = service.servers.destroy(destroy_attribs) + if id + instance = service.servers.destroy(id) else puts "No ID set, cannot delete." end diff --git a/lib/harp-runtime/resources/rds/db_security_group.rb b/lib/harp-runtime/resources/rds/db_security_group.rb index a8a94c1..fbb45e0 100644 --- a/lib/harp-runtime/resources/rds/db_security_group.rb +++ b/lib/harp-runtime/resources/rds/db_security_group.rb @@ -14,6 +14,10 @@ class DBSecurityGroup < AvailableResource attribute :ec2_security_groups, :aliases => 'EC2SecurityGroups' attribute :ip_ranges, :aliases => 'IPRanges' attribute :owner_id, :aliases => 'OwnerId' + + attribute :type + attribute :live_resource + attribute :state register_resource :db_security_group, RESOURCES_RDS @@ -36,9 +40,8 @@ def create(service) end def destroy(service) - destroy_attribs = self.attribs - if @id - security_group = service.security_groups.destroy(destroy_attribs) + if id + security_group = service.security_groups.destroy(id) else puts "No ID set, cannot delete." end diff --git a/spec/autoscaling_cloud_spec.rb b/spec/autoscaling_cloud_spec.rb index 3f44be3..14926d0 100644 --- a/spec/autoscaling_cloud_spec.rb +++ b/spec/autoscaling_cloud_spec.rb @@ -47,4 +47,31 @@ expect(result.class).to eq(ScalingPolicy) expect(result.name).to eq("test_as_policy1") end -end \ No newline at end of file +end + +describe Harp::Cloud::CloudMutator, "#destroy" do + include_context "when have mutator" + it "destroys launch configuration" do + launch_config_resource["id"] = "testLC2" + created = mutator.create("test_lc2", launch_config_resource) + result = mutator.destroy("test_lc2", launch_config_resource) + expect(result.class).to eq(LaunchConfiguration) + expect(result.name).to eq("test_lc2") + end + + it "destroys AS group" do + autoscaling_group_resource["id"] = "testASG2" + created = mutator.create("test_as_group2", autoscaling_group_resource) + result = mutator.destroy("test_as_group2", autoscaling_group_resource) + expect(result.class).to eq(AutoScalingGroup) + expect(result.name).to eq("test_as_group2") + end + + it "destroys AutoScaling Policy" do + autoscaling_policy_resource["id"] = "testScalingPolicy2" + created = mutator.create("test_as_policy2", autoscaling_policy_resource) + result = mutator.destroy("test_as_policy2", autoscaling_policy_resource) + expect(result.class).to eq(ScalingPolicy) + expect(result.name).to eq("test_as_policy2") + end +end diff --git a/spec/compute_cloud_spec.rb b/spec/compute_cloud_spec.rb index 73d8416..a99f67b 100644 --- a/spec/compute_cloud_spec.rb +++ b/spec/compute_cloud_spec.rb @@ -27,8 +27,7 @@ } elastic_ip_resource = { - "type" => "Std::ElasticIP", - "public_ip" => "123.4.5.6" + "type" => "Std::ElasticIP" } eip_association_resource = { @@ -41,6 +40,12 @@ "description" => "A web security group" } +security_group_resource_2 = { + "type" => "Std::SecurityGroup", + "name" => "web-security-group-2", + "description" => "A web security group 2" +} + volume_resource = { "type" => "Std::Volume", "availability_zone" => "us-east-1", @@ -63,22 +68,18 @@ eip_for_asso["server_id"] = inst.instance_variable_get(:@id) eip = mutator.create("eip_for_asso", eip_for_asso) - eip_association_resource["allocation_id"] = eip.instance_variable_get(:@id) + eip_association_resource["public_ip"] = eip.instance_variable_get(:@id) eip_association_resource["server_id"] = inst.instance_variable_get(:@id) result = mutator.create("test_eip_asso", eip_association_resource) expect(result.class).to eq(ElasticIPAssociation) expect(result.name).to eq("test_eip_asso") - expect(result.state).to eq(Harp::Resources::AvailableResource::CREATED) end it "creates a cloud instance" do result = mutator.create("test_inst1", instance_resource) expect(result.class).to eq(ComputeInstance) expect(result.name).to eq("test_inst1") - expect(result.state).to eq(Harp::Resources::AvailableResource::CREATED) - state = mutator.get_state("test_inst1", instance_resource) - expect(state).to eq("running") end it "creates a security group" do @@ -103,29 +104,36 @@ result = mutator.destroy("test_inst1", instance_resource) expect(result.class).to eq(ComputeInstance) expect(result.name).to eq("test_inst1") - expect(result.state).to eq(Harp::Resources::AvailableResource::DESTROYED) - state = mutator.get_state("test_inst1", instance_resource) - expect(state).to eq("shutting-down") end - # it "destroys an elastic ip" do -# result = mutator.destroy("test_eip1", elastic_ip_resource) -# -# expect(result.class).to eq(ElasticIP) -# expect(result.name).to eq("test_eip1") -# expect(result.state).to eq(Harp::Resources::AvailableResource::DESTROYED) -# end -# it "destroys a security group" do -# result = mutator.destroy("test_sg1", security_group_resource) -# -# expect(result.class).to eq(SecurityGroup) -# expect(result.name).to eq("test_sg1") -# expect(result.state).to eq(Harp::Resources::AvailableResource::DESTROYED) -# end -# it "destroys a volume" do -# result = mutator.destroy("test_vol1", volume_resource) -# -# expect(result.class).to eq(Volume) -# expect(result.name).to eq("test_vol1") -# expect(result.state).to eq(Harp::Resources::AvailableResource::DESTROYED) -# end + it "destroys an elastic ip" do + created = mutator.create("test_eip2", elastic_ip_resource) + result = mutator.destroy("test_eip2", elastic_ip_resource) + expect(result.class).to eq(ElasticIP) + expect(result.name).to eq("test_eip2") + end + it "destroys an elastic ip association" do + inst = mutator.create("ins_for_asso", ins_for_asso) + eip_for_asso["server_id"] = inst.instance_variable_get(:@id) + + eip = mutator.create("eip_for_asso", eip_for_asso) + eip_association_resource["public_ip"] = eip.instance_variable_get(:@id) + eip_association_resource["server_id"] = inst.instance_variable_get(:@id) + + created = mutator.create("test_eip_asso", eip_association_resource) + result = mutator.destroy("test_eip_asso", eip_association_resource) + expect(result.name).to eq("test_eip_asso") + expect(result.class).to eq(ElasticIPAssociation) + end + it "destroys a security group" do + created = mutator.create("test_sg2", security_group_resource_2) + result = mutator.destroy("test_sg2", security_group_resource_2) + expect(result.class).to eq(SecurityGroup) + expect(result.name).to eq("test_sg2") + end + it "destroys a volume" do + created = mutator.create("test_vol1", volume_resource) + result = mutator.destroy("test_vol1", volume_resource) + expect(result.class).to eq(Volume) + expect(result.name).to eq("test_vol1") + end end diff --git a/spec/elastic_load_balancing_cloud_spec.rb b/spec/elastic_load_balancing_cloud_spec.rb index 7f0f93c..ce37d09 100644 --- a/spec/elastic_load_balancing_cloud_spec.rb +++ b/spec/elastic_load_balancing_cloud_spec.rb @@ -16,3 +16,13 @@ expect(result.name).to eq("test_lb_lb1") end end + +describe Harp::Cloud::CloudMutator, "#destroy" do + include_context "when have mutator" + it "destroys a loadbalancer" do + created = mutator.create("test_lb_lb2", lb_load_balancer_resource) + result = mutator.destroy("test_lb_lb2", lb_load_balancer_resource) + expect(result.class).to eq(LoadBalancer) + expect(result.name).to eq("test_lb_lb2") + end +end diff --git a/spec/rds_cloud_spec.rb b/spec/rds_cloud_spec.rb index b440c0f..c74aef7 100644 --- a/spec/rds_cloud_spec.rb +++ b/spec/rds_cloud_spec.rb @@ -19,31 +19,30 @@ describe Harp::Cloud::CloudMutator, "#create" do include_context "when have mutator" it "creates a db security group" do - # context = {} -# context[:cloud_type] = :aws # for the moment, assume AWS cloud -# context[:mock] = true -# context[:debug] = true -# context[:access] = "test" -# context[:secret] = "test" - #mutator = Harp::Cloud::CloudMutator.new(context) - result = mutator.create("test_db_sg1", db_security_group_resource) expect(result.class).to eq(DBSecurityGroup) expect(result.name).to eq("test_db_sg1") - expect(result.description).to eq("A web db security group") end it "creates a db instance" do - # context = {} -# context[:cloud_type] = :aws # for the moment, assume AWS cloud -# context[:mock] = true -# context[:debug] = true -# context[:access] = "test" -# context[:secret] = "test" - #mutator = Harp::Cloud::CloudMutator.new(context) - result = mutator.create("test_db_db1", db_instance_resource) expect(result.class).to eq(DBInstance) expect(result.name).to eq("test_db_db1") end +end + +describe Harp::Cloud::CloudMutator, "#destroy" do + include_context "when have mutator" + it "destroys a db security group" do + created = mutator.create("test_db_sg2", db_security_group_resource) + result = mutator.destroy("test_db_sg2", db_security_group_resource) + expect(result.class).to eq(DBSecurityGroup) + expect(result.name).to eq("test_db_sg2") + end + it "destroys a db instance" do + created = mutator.create("test_db_db2", db_instance_resource) + result = mutator.destroy("test_db_db2", db_instance_resource) + expect(result.class).to eq(DBInstance) + expect(result.name).to eq("test_db_db2") + end end \ No newline at end of file