lib/terraforming/resource/rds.rb
module Terraforming
module Resource
class RDS
include Terraforming::Util
def self.tf(client: Aws::RDS::Client.new)
self.new(client).tf
end
def self.tfstate(client: Aws::RDS::Client.new)
self.new(client).tfstate
end
def initialize(client)
@client = client
end
def tf
apply_template(@client, "tf/rds")
end
def tfstate
db_instances.inject({}) do |resources, instance|
attributes = {
"address" => instance.endpoint.address,
"allocated_storage" => instance.allocated_storage.to_s,
"availability_zone" => instance.availability_zone,
"backup_retention_period" => instance.backup_retention_period.to_s,
"backup_window" => instance.preferred_backup_window,
"db_subnet_group_name" => instance.db_subnet_group ? instance.db_subnet_group.db_subnet_group_name : "",
"endpoint" => instance.endpoint.address,
"engine" => instance.engine,
"engine_version" => instance.engine_version,
"final_snapshot_identifier" => "#{instance.db_instance_identifier}-final",
"id" => instance.db_instance_identifier,
"identifier" => instance.db_instance_identifier,
"instance_class" => instance.db_instance_class,
"maintenance_window" => instance.preferred_maintenance_window,
"multi_az" => instance.multi_az.to_s,
"name" => instance.db_name,
"parameter_group_name" => instance.db_parameter_groups[0].db_parameter_group_name,
"password" => "xxxxxxxx",
"port" => instance.endpoint.port.to_s,
"publicly_accessible" => instance.publicly_accessible.to_s,
"security_group_names.#" => instance.db_security_groups.length.to_s,
"status" => instance.db_instance_status,
"storage_type" => instance.storage_type,
"username" => instance.master_username,
"vpc_security_group_ids.#" => instance.vpc_security_groups.length.to_s,
}
resources["aws_db_instance.#{module_name_of(instance)}"] = {
"type" => "aws_db_instance",
"primary" => {
"id" => instance.db_instance_identifier,
"attributes" => attributes
}
}
resources
end
end
private
def db_instances
@client.describe_db_instances.map(&:db_instances).flatten
end
def module_name_of(instance)
normalize_module_name(instance.db_instance_identifier)
end
end
end
end