From 9ad0c2b38130da1c7ffa227d83c06507a9d9758c Mon Sep 17 00:00:00 2001 From: Dev Mohanty Date: Wed, 27 Nov 2013 13:09:58 -0600 Subject: [PATCH 1/3] created rds/ rds security groups --- lib/harp-runtime/cloud/cloud_mutator.rb | 10 ++++ lib/harp-runtime/models/rds.rb | 5 ++ .../resources/available_resources.rb | 4 ++ .../resources/rds/db_security_group.rb | 50 +++++++++++++++++++ lib/harp-runtime/resources/rds/types.rb | 10 ++++ spec/compute_cloud_spec.rb | 1 - spec/rds_cloud_spec.rb | 28 +++++++++++ spec/spec_helper.rb | 1 + 8 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 lib/harp-runtime/models/rds.rb create mode 100644 lib/harp-runtime/resources/rds/db_security_group.rb create mode 100644 lib/harp-runtime/resources/rds/types.rb create mode 100644 spec/rds_cloud_spec.rb diff --git a/lib/harp-runtime/cloud/cloud_mutator.rb b/lib/harp-runtime/cloud/cloud_mutator.rb index 1d9a076..08a9ad9 100644 --- a/lib/harp-runtime/cloud/cloud_mutator.rb +++ b/lib/harp-runtime/cloud/cloud_mutator.rb @@ -17,6 +17,7 @@ def initialize(options) @secret = options[:secret] @cloud_type = options[:cloud_type] @compute = nil + @rds = nil @mock = (options.include? :mock) ? true : false end @@ -31,6 +32,15 @@ def establish_connect(resource_type) @compute = Fog::Compute.new(:provider => 'AWS', :aws_access_key_id => @access, :aws_secret_access_key => @secret) return @compute + elsif Harp::Resources::RESOURCES_RDS.include? resource_type.class + if ! @rds.nil? + return @rds + end + if @mock + Fog.mock! + end + @rds = Fog::AWS::RDS.new({:aws_access_key_id => @access, :aws_secret_access_key => @secret}) + return @rds end end diff --git a/lib/harp-runtime/models/rds.rb b/lib/harp-runtime/models/rds.rb new file mode 100644 index 0000000..912a6eb --- /dev/null +++ b/lib/harp-runtime/models/rds.rb @@ -0,0 +1,5 @@ +require 'data_mapper' +require 'harp-runtime/models/base' + +class DbSecurityGroup < HarpResource +end \ No newline at end of file diff --git a/lib/harp-runtime/resources/available_resources.rb b/lib/harp-runtime/resources/available_resources.rb index 37f9755..6f7c8af 100644 --- a/lib/harp-runtime/resources/available_resources.rb +++ b/lib/harp-runtime/resources/available_resources.rb @@ -13,6 +13,9 @@ module Resources # Set to contain all compute resources RESOURCES_COMPUTE = Set.new + + # Set to contain all rds resources + RESOURCES_RDS = Set.new class AvailableResource < Fog::Model @@ -123,6 +126,7 @@ def output_token(args={}) end require "harp-runtime/resources/compute/types" +require "harp-runtime/resources/rds/types" class String def underscore diff --git a/lib/harp-runtime/resources/rds/db_security_group.rb b/lib/harp-runtime/resources/rds/db_security_group.rb new file mode 100644 index 0000000..5925f4c --- /dev/null +++ b/lib/harp-runtime/resources/rds/db_security_group.rb @@ -0,0 +1,50 @@ +require 'set' +require 'fog/core/model' +require 'harp-runtime/models/rds' + +module Harp + module Resources + + class DbSecurityGroup < AvailableResource + + include Harp::Resources + + attribute :id, :aliases => 'DBSecurityGroupName' + attribute :description, :aliases => 'DBSecurityGroupDescription' + attribute :ec2_security_groups, :aliases => 'EC2SecurityGroups' + attribute :ip_ranges, :aliases => 'IPRanges' + attribute :owner_id, :aliases => 'OwnerId' + + register_resource :db_security_group, RESOURCES_RDS + + # Only keeping a few properties, simplest define keeps. + @keeps = /^id$|description/ + + @output = false + + def self.persistent_type() + ::DbSecurityGroup + end + + def create(service) + create_attribs = self.attribs[:attributes] + create_attribs[:tags] = {"Name" => @name} + create_attribs[:id] = @name + security_group = service.security_groups.create(create_attribs) + @id = security_group.id + return security_group + end + + def destroy(service) + destroy_attribs = self.attribs + if @id + security_group = service.security_groups.destroy(destroy_attribs) + else + puts "No ID set, cannot delete." + end + return security_group + end + + end + end +end \ No newline at end of file diff --git a/lib/harp-runtime/resources/rds/types.rb b/lib/harp-runtime/resources/rds/types.rb new file mode 100644 index 0000000..24d812e --- /dev/null +++ b/lib/harp-runtime/resources/rds/types.rb @@ -0,0 +1,10 @@ +require 'set' + +require 'harp-runtime/resources/rds/db_security_group' + +module Harp + module Resources + extend self + end +end + diff --git a/spec/compute_cloud_spec.rb b/spec/compute_cloud_spec.rb index 005ec4d..a1d1840 100644 --- a/spec/compute_cloud_spec.rb +++ b/spec/compute_cloud_spec.rb @@ -45,5 +45,4 @@ expect(result.description).to eq("A web security group") end - end \ No newline at end of file diff --git a/spec/rds_cloud_spec.rb b/spec/rds_cloud_spec.rb new file mode 100644 index 0000000..da5e672 --- /dev/null +++ b/spec/rds_cloud_spec.rb @@ -0,0 +1,28 @@ +require File.dirname(__FILE__) + '/spec_helper' +require "rubygems" +require "harp_runtime" +require "harp-runtime/cloud/cloud_mutator" + +db_security_group_resource = { + "type" => "Std::DbSecurityGroup", + "description" => "A web db security group" +} + +describe Harp::Cloud::CloudMutator, "#create" do + 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 + +end \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e63a1e1..a45f4da 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -21,6 +21,7 @@ require 'harp-runtime/models/base' require 'harp-runtime/models/compute' +require 'harp-runtime/models/rds' DataMapper.finalize DataMapper.auto_migrate! From 4e34092b580a8c8c8cc0dcbb55c436eb8320fefa Mon Sep 17 00:00:00 2001 From: Dev Mohanty Date: Wed, 27 Nov 2013 13:16:54 -0600 Subject: [PATCH 2/3] corrected camel case --- lib/harp-runtime/models/rds.rb | 2 +- lib/harp-runtime/resources/rds/db_security_group.rb | 4 ++-- spec/rds_cloud_spec.rb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/harp-runtime/models/rds.rb b/lib/harp-runtime/models/rds.rb index 912a6eb..a06393d 100644 --- a/lib/harp-runtime/models/rds.rb +++ b/lib/harp-runtime/models/rds.rb @@ -1,5 +1,5 @@ require 'data_mapper' require 'harp-runtime/models/base' -class DbSecurityGroup < HarpResource +class DBSecurityGroup < HarpResource end \ No newline at end of file diff --git a/lib/harp-runtime/resources/rds/db_security_group.rb b/lib/harp-runtime/resources/rds/db_security_group.rb index 5925f4c..a8a94c1 100644 --- a/lib/harp-runtime/resources/rds/db_security_group.rb +++ b/lib/harp-runtime/resources/rds/db_security_group.rb @@ -5,7 +5,7 @@ module Harp module Resources - class DbSecurityGroup < AvailableResource + class DBSecurityGroup < AvailableResource include Harp::Resources @@ -23,7 +23,7 @@ class DbSecurityGroup < AvailableResource @output = false def self.persistent_type() - ::DbSecurityGroup + ::DBSecurityGroup end def create(service) diff --git a/spec/rds_cloud_spec.rb b/spec/rds_cloud_spec.rb index da5e672..28928c0 100644 --- a/spec/rds_cloud_spec.rb +++ b/spec/rds_cloud_spec.rb @@ -4,7 +4,7 @@ require "harp-runtime/cloud/cloud_mutator" db_security_group_resource = { - "type" => "Std::DbSecurityGroup", + "type" => "Std::DBSecurityGroup", "description" => "A web db security group" } @@ -19,7 +19,7 @@ mutator = Harp::Cloud::CloudMutator.new(context) result = mutator.create("test_db_sg1", db_security_group_resource) - expect(result.class).to eq(DbSecurityGroup) + expect(result.class).to eq(DBSecurityGroup) expect(result.name).to eq("test_db_sg1") expect(result.description).to eq("A web db security group") From 34025fe2e7f63af3f53f915cb4a33e78bafc3526 Mon Sep 17 00:00:00 2001 From: Dev Mohanty Date: Wed, 27 Nov 2013 16:21:50 -0600 Subject: [PATCH 3/3] added db_instance --- lib/harp-runtime/models/rds.rb | 3 + lib/harp-runtime/resources/rds/db_instance.rb | 74 +++++++++++++++++++ lib/harp-runtime/resources/rds/types.rb | 1 + spec/rds_cloud_spec.rb | 20 +++++ 4 files changed, 98 insertions(+) create mode 100644 lib/harp-runtime/resources/rds/db_instance.rb diff --git a/lib/harp-runtime/models/rds.rb b/lib/harp-runtime/models/rds.rb index a06393d..d92a55f 100644 --- a/lib/harp-runtime/models/rds.rb +++ b/lib/harp-runtime/models/rds.rb @@ -2,4 +2,7 @@ require 'harp-runtime/models/base' class DBSecurityGroup < HarpResource +end + +class DBInstance < HarpResource end \ No newline at end of file diff --git a/lib/harp-runtime/resources/rds/db_instance.rb b/lib/harp-runtime/resources/rds/db_instance.rb new file mode 100644 index 0000000..18d082b --- /dev/null +++ b/lib/harp-runtime/resources/rds/db_instance.rb @@ -0,0 +1,74 @@ +require 'set' +require 'fog/core/model' +require 'harp-runtime/models/rds' + +module Harp + module Resources + + class DBInstance < AvailableResource + + include Harp::Resources + + attribute :id, :aliases => 'DBInstanceIdentifier' + attribute :engine, :aliases => 'Engine' + attribute :engine_version, :aliases => 'EngineVersion' + attribute :state, :aliases => 'DBInstanceStatus' + attribute :allocated_storage, :aliases => 'AllocatedStorage' + attribute :availability_zone , :aliases => 'AvailabilityZone' + attribute :flavor_id, :aliases => 'DBInstanceClass' + attribute :endpoint, :aliases => 'Endpoint' + attribute :read_replica_source, :aliases => 'ReadReplicaSourceDBInstanceIdentifier' + attribute :read_replica_identifiers, :aliases => 'ReadReplicaDBInstanceIdentifiers' + attribute :master_username, :aliases => 'MasterUsername' + attribute :multi_az, :aliases => 'MultiAZ' + attribute :created_at, :aliases => 'InstanceCreateTime' + attribute :last_restorable_time, :aliases => 'LatestRestorableTime' + attribute :auto_minor_version_upgrade, :aliases => 'AutoMinorVersionUpgrade' + attribute :pending_modified_values, :aliases => 'PendingModifiedValues' + attribute :preferred_backup_window, :aliases => 'PreferredBackupWindow' + attribute :preferred_maintenance_window, :aliases => 'PreferredMaintenanceWindow' + attribute :db_name, :aliases => 'DBName' + attribute :db_security_groups, :aliases => 'DBSecurityGroups' + attribute :db_parameter_groups, :aliases => 'DBParameterGroups' + attribute :backup_retention_period, :aliases => 'BackupRetentionPeriod' + attribute :license_model, :aliases => 'LicenseModel' + attribute :db_subnet_group_name, :aliases => 'DBSubnetGroupName' + attribute :publicly_accessible, :aliases => 'PubliclyAccessible' + attribute :vpc_security_groups, :aliases => 'VpcSecurityGroups' + attribute :password + + attr_accessor :parameter_group_name, :security_group_names, :port + + register_resource :db_instance, RESOURCES_RDS + + # Only keeping a few properties, simplest define keeps. + @keeps = /^id$|^name$/ + + @output = false + + def self.persistent_type() + ::DBInstance + end + + def create(service) + create_attribs = self.attribs[:attributes] + create_attribs[:tags] = {"Name" => @name} + create_attribs[:id] = @name + instance = service.servers.create(create_attribs) + @id = instance.id + return instance + end + + def destroy(service) + destroy_attribs = self.attribs + if @id + instance = service.servers.destroy(destroy_attribs) + else + puts "No ID set, cannot delete." + end + return instance + end + + end + end +end \ No newline at end of file diff --git a/lib/harp-runtime/resources/rds/types.rb b/lib/harp-runtime/resources/rds/types.rb index 24d812e..4a4f6b0 100644 --- a/lib/harp-runtime/resources/rds/types.rb +++ b/lib/harp-runtime/resources/rds/types.rb @@ -1,6 +1,7 @@ require 'set' require 'harp-runtime/resources/rds/db_security_group' +require 'harp-runtime/resources/rds/db_instance' module Harp module Resources diff --git a/spec/rds_cloud_spec.rb b/spec/rds_cloud_spec.rb index 28928c0..154fc73 100644 --- a/spec/rds_cloud_spec.rb +++ b/spec/rds_cloud_spec.rb @@ -8,6 +8,14 @@ "description" => "A web db security group" } +db_instance_resource = { + "type" => "Std::DBInstance", + "engine" => "MySQL", + "allocated_storage" => "5", + "master_username" => "masterdbusername", + "password" => "masterpassword" +} + describe Harp::Cloud::CloudMutator, "#create" do it "creates a db security group" do context = {} @@ -24,5 +32,17 @@ 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 \ No newline at end of file