app/models/manageiq/providers/amazon/cloud_manager/provision/cloning.rb
module ManageIQ::Providers::Amazon::CloudManager::Provision::Cloning
def do_clone_task_check(clone_task_ref)
source.with_provider_connection(:sdk_v2 => true) do |ec2|
instance = ec2.instance(clone_task_ref)
return false, :pending unless instance.exists?
status = instance.state.name.to_sym
return true if status == :running
return false, status
end
end
def prepare_for_clone_task
clone_options = super
clone_options[:min_count] = 1
clone_options[:max_count] = 1
# Specifies whether you can terminate the instance using the EC2 API.
# true => cannot terminate the instance using the API (i.e., the instance is “locked”)
# false => can terminate the instance using the API
# If you set this to true, and you later want to terminate the instance, you must first enable API termination.
clone_options[:disable_api_termination] = false
clone_options[:image_id] = source.ems_ref
clone_options[:instance_type] = instance_type.name
if cloud_subnet
clone_options[:subnet_id] = cloud_subnet.ems_ref
else
clone_options.delete(:subnet_id)
end
if security_groups.any?
clone_options[:security_group_ids] = security_groups.collect(&:ems_ref)
else
clone_options.delete(:security_group_ids)
end
# CloudWatch
# true => Advanced Monitoring
# false => Basic Monitoring
clone_options[:monitoring] = {
:enabled => get_option(:monitoring).to_s.downcase == "advanced"
}
if clone_options[:availability_zone].present?
clone_options[:placement] = {:availability_zone => clone_options[:availability_zone]}
end
clone_options.delete(:availability_zone)
clone_options
end
def log_clone_options(clone_options)
_log.info("Provisioning [#{source.name}] to [#{dest_name}]")
_log.info("Source Template: [#{self[:options][:src_vm_id].last}]")
if dest_availability_zone
_log.info("Destination Availability Zone: [#{dest_availability_zone.name} (#{dest_availability_zone.ems_ref})]")
else
_log.info("Destination Availability Zone: Default selection from provider")
end
_log.info("Guest Access Key Pair: [#{clone_options[:key_name].inspect}]")
_log.info("Security Group: [#{clone_options[:security_group_ids].inspect}]")
_log.info("Instance Type: [#{clone_options[:instance_type].inspect}]")
_log.info("Cloud Subnet: [#{clone_options[:subnet_id].inspect}]")
_log.info("Cloud Watch: [#{clone_options[:monitoring][:enabled].inspect}]")
dump_obj(clone_options, "#{_log.prefix} Clone Options: ", $log, :info)
dump_obj(options, "#{_log.prefix} Prov Options: ", $log, :info, :protected => {:path => workflow_class.encrypted_options_field_regs})
end
def start_clone(clone_options)
source.with_provider_connection(:service => :EC2) do |ec2|
instances = ec2.create_instances(clone_options)
return instances.first.id
end
end
end