1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/aws/models/rds/server.rb
Timur Alperovich 436a1cee34 Add VPC security groups to the RDS instances.
Amazon splits credentials between DB Security and VPC Security Groups
for RDS instances. Fog currently does not parse the VPC security
groups. This patch adds that attribute to a Fog::AWS::RDS::Server.
2013-07-19 18:28:06 -07:00

134 lines
5.5 KiB
Ruby

require 'fog/core/model'
module Fog
module AWS
class RDS
class Server < Fog::Model
identity :id, :aliases => 'DBInstanceIdentifier'
attribute :engine, :aliases => 'Engine'
attribute :engine_version, :aliases => 'EngineVersion'
attribute :state, :aliases => 'DBInstanceStatus'
attribute :allocated_storage, :aliases => 'AllocatedStorage', :type => :integer
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', :type => :array
attribute :master_username, :aliases => 'MasterUsername'
attribute :multi_az, :aliases => 'MultiAZ'
attribute :created_at, :aliases => 'InstanceCreateTime', :type => :time
attribute :last_restorable_time, :aliases => 'LatestRestorableTime', :type => :time
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', :type => :array
attribute :db_parameter_groups, :aliases => 'DBParameterGroups'
attribute :backup_retention_period, :aliases => 'BackupRetentionPeriod', :type => :integer
attribute :license_model, :aliases => 'LicenseModel'
attribute :db_subnet_group_name, :aliases => 'DBSubnetGroupName'
attribute :publicly_accessible, :aliases => 'PubliclyAccessible'
attribute :vpc_security_groups, :aliases => 'VpcSecurityGroups'
attr_accessor :password, :parameter_group_name, :security_group_names, :port
def create_read_replica(replica_id, options={})
options[:security_group_names] ||= options['DBSecurityGroups']
params = self.class.new(options).attributes_to_params
service.create_db_instance_read_replica(replica_id, id, params)
service.servers.get(replica_id)
end
def ready?
state == 'available'
end
def destroy(snapshot_identifier=nil)
requires :id
service.delete_db_instance(id, snapshot_identifier, snapshot_identifier.nil?)
true
end
def reboot
service.reboot_db_instance(id)
true
end
def snapshots
requires :id
service.snapshots(:server => self)
end
def tags
requires :id
service.list_tags_for_resource(id).
body['ListTagsForResourceResult']['TagList']
end
def add_tags(new_tags)
requires :id
service.add_tags_to_resource(id, new_tags)
tags
end
def remove_tags(tag_keys)
requires :id
service.remove_tags_from_resource(id, tag_keys)
tags
end
def modify(immediately, options)
options[:security_group_names] ||= options['DBSecurityGroups']
params = self.class.new(options).attributes_to_params
data = service.modify_db_instance(id, immediately, params)
merge_attributes(data.body['ModifyDBInstanceResult']['DBInstance'])
true
end
def save
requires :engine
requires :allocated_storage
requires :master_username
requires :password
self.flavor_id ||= 'db.m1.small'
data = service.create_db_instance(id, attributes_to_params)
merge_attributes(data.body['CreateDBInstanceResult']['DBInstance'])
true
end
# Converts attributes to a parameter hash suitable for requests
def attributes_to_params
options = {
'AllocatedStorage' => allocated_storage,
'AutoMinorVersionUpgrade' => auto_minor_version_upgrade,
'BackupRetentionPeriod' => backup_retention_period,
'DBName' => db_name,
'DBParameterGroupName' => parameter_group_name || attributes['DBParameterGroupName'],
'DBSecurityGroups' => security_group_names,
'DBInstanceIdentifier' => id,
'AvailabilityZone' => availability_zone,
'DBInstanceClass' => flavor_id,
'Port' => port || attributes['Port'],
'Engine' => engine,
'EngineVersion' => engine_version,
'MasterUsername' => master_username,
'MasterUserPassword' => password || attributes['MasterUserPassword'],
'PreferredMaintenanceWindow' => preferred_maintenance_window,
'PreferredBackupWindow' => preferred_backup_window,
'MultiAZ' => multi_az,
'LicenseModel' => license_model,
'DBSubnetGroupName' => db_subnet_group_name,
'PubliclyAccessible' => publicly_accessible
}
options.delete_if {|key, value| value.nil?}
end
end
end
end
end