From 35b87081aaf138ac2738620df3a78b65ccf70d2f Mon Sep 17 00:00:00 2001 From: Nestor Date: Thu, 5 Dec 2013 14:59:06 -0600 Subject: [PATCH 1/3] Separated eip and eip-associations --- lib/harp-runtime/models/compute.rb | 3 ++ .../resources/compute/elastic_ip.rb | 7 +-- .../compute/elastic_ip_association.rb | 49 +++++++++++++++++++ lib/harp-runtime/resources/compute/types.rb | 1 + spec/compute_cloud_spec.rb | 5 ++ 5 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 lib/harp-runtime/resources/compute/elastic_ip_association.rb diff --git a/lib/harp-runtime/models/compute.rb b/lib/harp-runtime/models/compute.rb index b175410..b0f0ae8 100644 --- a/lib/harp-runtime/models/compute.rb +++ b/lib/harp-runtime/models/compute.rb @@ -13,6 +13,9 @@ class ElasticIP < HarpResource property :public_ip_address, String end +class ElasticIPAssociation < HarpResource +end + class SecurityGroup < HarpResource end diff --git a/lib/harp-runtime/resources/compute/elastic_ip.rb b/lib/harp-runtime/resources/compute/elastic_ip.rb index f9d9d0c..bcd2555 100644 --- a/lib/harp-runtime/resources/compute/elastic_ip.rb +++ b/lib/harp-runtime/resources/compute/elastic_ip.rb @@ -10,14 +10,10 @@ class ElasticIP < AvailableResource include Harp::Resources - attribute :id + attribute :id, :aliases => 'allocationId' attribute :public_ip_address attribute :public_ip, :aliases => 'publicIp' - attribute :allocation_id, :aliases => 'allocationId' - attribute :association_id, :aliases => 'associationId' attribute :server_id, :aliases => 'instanceId' - attribute :network_interface_id, :aliases => 'networkInterfaceId' - attribute :network_interface_owner_id, :aliases => 'networkInterfaceOwnerId' attribute :domain register_resource :elastic_ip, RESOURCES_COMPUTE @@ -31,6 +27,7 @@ def keep(attribs) super end + def self.persistent_type() ::ElasticIP end diff --git a/lib/harp-runtime/resources/compute/elastic_ip_association.rb b/lib/harp-runtime/resources/compute/elastic_ip_association.rb new file mode 100644 index 0000000..eb59122 --- /dev/null +++ b/lib/harp-runtime/resources/compute/elastic_ip_association.rb @@ -0,0 +1,49 @@ +require 'set' +require 'fog/core/model' +require 'harp-runtime/models/compute' +require 'json' + +module Harp + module Resources + + class ElasticIPAssociation < AvailableResource + + include Harp::Resources + + attribute :id, :aliases => 'associationId' + attribute :allocation_id, :aliases => 'allocationId' + attribute :server_id, :aliases => 'instanceId' + attribute :network_interface_id, :aliases => 'networkInterfaceId' + attribute :network_interface_owner_id, :aliases => 'networkInterfaceOwnerId' + + + register_resource :elastic_ip_association, RESOURCES_COMPUTE + + # Only keeping a few properties, simplest define keeps. + @keeps = /^id$/ + + def self.persistent_type() + ::ElasticIPAssociation + end + + + def create(service) + create_attribs = self.attribs + address = service.addresses.create(create_attribs) + @id = SecureRandom.urlsafe_base64(16) + return address + end + + def destroy(service) + destroy_attribs = self.attribs + if @id + address = service.addresses.destroy(destroy_attribs) + else + puts "No ID set, cannot delete." + end + return address + end + + end + end +end diff --git a/lib/harp-runtime/resources/compute/types.rb b/lib/harp-runtime/resources/compute/types.rb index 58c0006..f6f3add 100644 --- a/lib/harp-runtime/resources/compute/types.rb +++ b/lib/harp-runtime/resources/compute/types.rb @@ -1,6 +1,7 @@ require 'set' require 'harp-runtime/resources/compute/elastic_ip' +require 'harp-runtime/resources/compute/elastic_ip_association' require 'harp-runtime/resources/compute/instance' require 'harp-runtime/resources/compute/security_group' require 'harp-runtime/resources/compute/volume' diff --git a/spec/compute_cloud_spec.rb b/spec/compute_cloud_spec.rb index 4e40905..88d6487 100644 --- a/spec/compute_cloud_spec.rb +++ b/spec/compute_cloud_spec.rb @@ -14,6 +14,11 @@ "public_ip" => "123.4.5.6" } +elastic_ip_association_resource = { + "type" => "Std::ElasticIPAssociation", + "public_ip" => "123.4.5.6" +} + security_group_resource = { "type" => "Std::SecurityGroup", "name" => "web-security-group", From 0e40f296a964fadf271a241be332b517238b04e6 Mon Sep 17 00:00:00 2001 From: Nestor Date: Thu, 5 Dec 2013 17:24:12 -0600 Subject: [PATCH 2/3] added eip-association tests, updated eip ids --- .../resources/compute/elastic_ip.rb | 5 ++- .../compute/elastic_ip_association.rb | 9 ++++- spec/compute_cloud_spec.rb | 39 +++++++++++++++++-- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/lib/harp-runtime/resources/compute/elastic_ip.rb b/lib/harp-runtime/resources/compute/elastic_ip.rb index bcd2555..a9cb318 100644 --- a/lib/harp-runtime/resources/compute/elastic_ip.rb +++ b/lib/harp-runtime/resources/compute/elastic_ip.rb @@ -10,7 +10,7 @@ class ElasticIP < AvailableResource include Harp::Resources - attribute :id, :aliases => 'allocationId' + attribute :id, :aliases => 'allocation_id' attribute :public_ip_address attribute :public_ip, :aliases => 'publicIp' attribute :server_id, :aliases => 'instanceId' @@ -24,6 +24,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] super end @@ -36,7 +37,7 @@ def self.persistent_type() def create(service) create_attribs = self.attribs address = service.addresses.create(create_attribs) - @id = SecureRandom.urlsafe_base64(16) + address.allocation_id = SecureRandom.urlsafe_base64(16) 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 eb59122..7573c00 100644 --- a/lib/harp-runtime/resources/compute/elastic_ip_association.rb +++ b/lib/harp-runtime/resources/compute/elastic_ip_association.rb @@ -22,6 +22,12 @@ class ElasticIPAssociation < AvailableResource # Only keeping a few properties, simplest define keeps. @keeps = /^id$/ + # Return persistable attributes with only desired attributes to keep + def keep(attribs) + attribs[:id] = attribs[:association_id] + super + end + def self.persistent_type() ::ElasticIPAssociation end @@ -30,12 +36,13 @@ def self.persistent_type() def create(service) create_attribs = self.attribs address = service.addresses.create(create_attribs) - @id = SecureRandom.urlsafe_base64(16) + address.association_id = SecureRandom.urlsafe_base64(16) return address end def destroy(service) destroy_attribs = self.attribs + binding.pry if @id address = service.addresses.destroy(destroy_attribs) else diff --git a/spec/compute_cloud_spec.rb b/spec/compute_cloud_spec.rb index 88d6487..38d29b0 100644 --- a/spec/compute_cloud_spec.rb +++ b/spec/compute_cloud_spec.rb @@ -9,14 +9,30 @@ "instanceType" => "t1.micro" } +ins_for_asso = { + "type" => "Std::ComputeInstance", + "imageId" => "ami-d0f89fb9", + "instanceType" => "t1.micro" +} + +eip_for_asso = { + "type" => "Std::ElasticIP", + "server_id" => "" +} + +eip_association_resource = { + "type" => "Std::ElasticIPAssociation", + "allocation_id" => "", + "server_id" => "" +} + elastic_ip_resource = { "type" => "Std::ElasticIP", "public_ip" => "123.4.5.6" } -elastic_ip_association_resource = { +eip_association_resource = { "type" => "Std::ElasticIPAssociation", - "public_ip" => "123.4.5.6" } security_group_resource = { @@ -31,6 +47,8 @@ "size" => 5 } + + describe Harp::Cloud::CloudMutator, "#create" do include_context "when have mutator" @@ -40,6 +58,21 @@ expect(result.name).to eq("test_eip1") end + it "creates elastic ip association" do + inst = mutator.create("ins_asso", ins_for_asso) + eip_for_asso["server_id"] = inst.instance_variable_get(:@id) + + eip = mutator.create("eip_asso", eip_for_asso) + eip_association_resource["allocation_id"] = eip.instance_variable_get(:@id) + eip_association_resource["server_id"] = inst.instance_variable_get(:@id) + + + result = mutator.create("test_eip_asso1", eip_association_resource) + expect(result.class).to eq(ElasticIPAssociation) + expect(result.name).to eq("test_eip_asso1") + expect(result.state).to eq(Harp::Resources::AvailableResource::CREATED) + end + it "creates a cloud instance" do result = mutator.create("test_inst1", instance_resource) @@ -55,7 +88,7 @@ expect(result.description).to eq("A web security group") end - + it "creates a volume" do result = mutator.create("test_vol1", volume_resource) expect(result.class).to eq(Volume) From f130093d48aa506101083e35141037697c7a9e01 Mon Sep 17 00:00:00 2001 From: Nestor Date: Mon, 9 Dec 2013 12:13:55 -0600 Subject: [PATCH 3/3] Updated variable for clarification --- spec/compute_cloud_spec.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spec/compute_cloud_spec.rb b/spec/compute_cloud_spec.rb index 38d29b0..b139da9 100644 --- a/spec/compute_cloud_spec.rb +++ b/spec/compute_cloud_spec.rb @@ -59,17 +59,16 @@ end it "creates elastic ip association" do - inst = mutator.create("ins_asso", ins_for_asso) + inst = mutator.create("ins_for_asso", ins_for_asso) eip_for_asso["server_id"] = inst.instance_variable_get(:@id) - eip = mutator.create("eip_asso", eip_for_asso) + eip = mutator.create("eip_for_asso", eip_for_asso) eip_association_resource["allocation_id"] = eip.instance_variable_get(:@id) eip_association_resource["server_id"] = inst.instance_variable_get(:@id) - - result = mutator.create("test_eip_asso1", eip_association_resource) + result = mutator.create("test_eip_asso", eip_association_resource) expect(result.class).to eq(ElasticIPAssociation) - expect(result.name).to eq("test_eip_asso1") + expect(result.name).to eq("test_eip_asso") expect(result.state).to eq(Harp::Resources::AvailableResource::CREATED) end