1
0
Fork 0
mirror of https://github.com/fog/fog-aws.git synced 2022-11-09 13:50:52 -05:00
fog--fog-aws/lib/fog/aws/models/rds/server.rb
Josh Lane d48d376e9c initial import
* take the liberty of correcting Aws naming
2014-12-31 09:17:51 -08:00

142 lines
5.9 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 :iops, :aliases => 'Iops'
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', :type => :array
attribute :storage_type, :aliases => 'StorageType'
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 promote_read_replica
requires :id
service.promote_read_replica(id)
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,
'Iops' => iops,
'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,
'VpcSecurityGroups' => vpc_security_groups,
'StorageType' => storage_type,
}
options.delete_if {|key, value| value.nil?}
end
end
end
end
end