Class: CopyAmi::AmiSnapshotCreatedState

Inherits:
CopyAmiState show all
Defined in:
lib/scripts/ec2/copy_ami.rb

Overview

Snapshot is created from the AMI. Create a volume from the snapshot, attach and mount the volume as second device.

Instance Attribute Summary

Attributes inherited from ScriptExecutionState

#context, #logger

Instance Method Summary collapse

Methods inherited from CopyAmiState

load_state, #local_region, #remote_region

Methods inherited from ScriptExecutionState

#done?, #end_state, #failed?, #initialize, #register_state_change_listener, #start_state_machine, #to_s

Methods included from StateTransitionHelper

#attach_volume, #connect, #copy_distribution, #create_fs, #create_labeled_fs, #create_snapshot, #create_volume, #create_volume_from_snapshot, #delete_snapshot, #delete_volume, #detach_volume, #determine_file, #disable_ssh_tty, #disconnect, #ec2_handler, #ec2_handler=, #enable_ssh_tty, #get_aws_kernel_image_aki, #get_aws_region_from_endpoint, #get_partition_fs_type, #get_partition_fs_type_and_label, #get_partition_label, #get_root_device_name, #get_root_partition_fs_type, #get_root_partition_fs_type_and_label, #get_root_partition_label, #get_root_volume_id, #launch_instance, #local_decompress_and_dump_file_to_device, #local_dump_and_compress_device_to_file, #mount_fs, #mount_fs_old, #register_snapshot, #remote_copy, #remote_copy_old, #remote_handler, #remote_handler=, #retrieve_instances, #retrieve_security_groups, #shut_down_instance, #snapshot_accessible, #start_instance, #stop_instance, #unmount_fs, #upload_file, #zip_volume

Methods included from VCloudTransitionHelper

#retrieve_ip_services

Constructor Details

This class inherits a constructor from ScriptExecutionState

Instance Method Details

#enterObject



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/scripts/ec2/copy_ami.rb', line 117

def enter()
  @context[:source_volume_id] = create_volume_from_snapshot(@context[:snapshot_id],
    @context[:source_availability_zone])
  device = @context[:temp_device_name]
  mount_point = "/mnt/tmp_#{@context[:source_volume_id]}"
  attach_volume(@context[:source_volume_id], @context[:source_instance_id], device)
  connect(@context[:source_dns_name], @context[:source_ssh_username], nil, @context[:source_ssh_keydata]) 
  # detect if there is a shift for device mapping (between AWS and the operating system of the system)
  root_device_name = get_root_device_name()
  # detect letters
  aws_root_device = @context[:root_device_name]
  aws_letter = aws_root_device.split('/')[2].gsub('sd', '').gsub('xvd', '').gsub(/[0-9]/, '')
  os_letter = root_device_name.split('/')[2].gsub('sd', '').gsub('xvd', '').gsub(/[0-9]/, '')
  aws_device_letter = device.split('/')[2].gsub('sd', '').gsub('xvd', '').gsub(/[0-9]/, '')
  if !aws_letter.eql?(os_letter)
    post_message("Detected specific kernel with shift between AWS and Kernel OS for device naming")
  end
  while !aws_letter.eql?(os_letter)
    aws_letter.succ!
    aws_device_letter.succ!
  end
  device = "/dev/sd#{aws_device_letter}" 
  post_message("Using AWS name '#{@context[:temp_device_name]}' and OS name '#{device}'")
  mount_fs(mount_point, device)
  # get root partition label and filesystem type
  #@context[:label] = get_root_partition_label()
  #@context[:fs_type] = get_root_partition_fs_type()
  @context[:fs_type], @context[:label] = get_root_partition_fs_type_and_label()
  disconnect()
  SourceVolumeReadyState.new(@context)
end