Class: CopyMsWindowsAmi::AmiRegisteredState

Inherits:
CopyMsWindowsAmiState show all
Defined in:
lib/scripts/ec2/copy_mswindows_ami.rb

Overview

AMI is registered. Now only cleanup is missing, i.e. shut down instances and remote the volumes that were created. Start with cleaning the ressources in the local region. Steps:

- cleanup source region
  - unmount temp volume
  - detach source and temp volume
  - terminate instance
  - delete source and temp volume
- cleanup target region
  - unmount temp volume
  - detach temp volume
  - terminate instance
  - delete source and temp volume

Instance Attribute Summary

Attributes inherited from ScriptExecutionState

#context, #logger

Instance Method Summary collapse

Methods inherited from CopyMsWindowsAmiState

load_state, #local_region, #remote_region

Methods inherited from ScriptExecutionState

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

Methods included from StateTransitionHelper

#attach_volume, #connect, #copy_distribution, #create_fs, #create_image_from_instance, #create_labeled_fs, #create_security_group_with_rules, #create_snapshot, #create_volume, #create_volume_from_snapshot, #delete_security_group, #delete_snapshot, #delete_volume, #describe_instance, #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_count, #get_partition_fs_type, #get_partition_fs_type_and_label, #get_partition_label, #get_partition_table, #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, #local_dump_device_to_file, #local_dump_file_to_device, #mount_fs, #mount_fs_old, #register_snapshot, #remote_copy, #remote_copy_old, #remote_handler, #remote_handler=, #retrieve_instances, #retrieve_security_groups, #set_partition_table, #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



547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
# File 'lib/scripts/ec2/copy_mswindows_ami.rb', line 547

def enter()
  post_message("Cleaning Source and Target Regions...")
  error = []
  local_region()
  begin
    connect(@context[:source_dns_name], @context[:source_ssh_username], nil, @context[:source_ssh_keydata])
    mount_point = "/mnt/tmp_#{@context[:source_temp_volume_id]}"
    unmount_fs(mount_point)
    disconnect()
  rescue Exception => e
    error << e
    post_message("Unable to umount temporary volume '/mnt/tmp_#{@context[:source_temp_volume_id]}' in source region: #{e.to_s}")
  end
  begin
    detach_volume(@context[:source_temp_volume_id], @context[:source_instance_id])
   rescue Exception => e
    error << e
    post_message("Unable to detach temporary volume '#{@context[:source_temp_volume_id]}' in source region: #{e.to_s}")
  end
  begin    
    detach_volume(@context[:source_volume_id], @context[:source_instance_id])
  rescue Exception => e
    error << e
    post_message("Unable to detach volume '#{@context[:source_volume_id]}' in source region: #{e.to_s}")
  end
  begin
    shut_down_instance(@context[:source_instance_id])
  rescue Exception => e
    error << e
    post_message("Unable to shutdown instance '#{@context[:source_instance_id]}' in source region: #{e.to_s}")
  end
  begin
    delete_volume(@context[:source_temp_volume_id])
  rescue Exception => e
    error << e
    post_message("Unable to delete volume '#{@context[:source_temp_volume_id]}' in source region: #{e.to_s}")
  end
  begin
    delete_volume(@context[:source_volume_id])
  rescue Exception => e
    error << e
    post_message("Unable to delete volume '#{@context[:source_volume_id]}' in source region: #{e.to_s}")
  end

  #XXX: delete Security Group according to its name
  if @context[:source_security_group].eql?(Ec2Script::CS_SEC_GRP_NAME)
    begin
      delete_security_group(@context[:source_security_group])
    rescue Exception => e
      error << e
      post_message("Unable to delete Security Group '#{@context[:source_security_group]}' in source region: #{e.to_s}")
    end
  end

  #
  remote_region()
  begin
    connect(@context[:target_dns_name], @context[:target_ssh_username], nil, @context[:target_ssh_keydata])
    mount_point = "/mnt/tmp_#{@context[:target_temp_volume_id]}"
    unmount_fs(mount_point)
    disconnect()
  rescue Exception => e
    error << e
    post_message("Unable to umount temporary volume '/mnt/tmp_#{@context[:target_temp_volume_id]}' in target region: #{e.to_s}")
  end
  begin
    detach_volume(@context[:target_temp_volume_id], @context[:target_instance_id])
   rescue Exception => e
    error << e
    post_message("Unable to detach temporary volume '#{@context[:target_temp_volume_id]}' in target region: #{e.to_s}")
  end
  begin
    shut_down_instance(@context[:target_instance_id])
  rescue Exception => e
    error << e
    post_message("Unable to shutdown instance '#{@context[:target_instance_id]}' in target region: #{e.to_s}")
  end
  begin
    delete_volume(@context[:target_temp_volume_id])
  rescue Exception => e
    error << e
    post_message("Unable to delete temporary volume '#{@context[:target_temp_volume_id]}' in target region: #{e.to_s}")
  end
  #delete_volume(@context[:target_volume_id])
  #XXX: delete Security Group according to its name
  if @context[:target_security_group].eql?(Ec2Script::CS_SEC_GRP_NAME)
    begin
      delete_security_group(@context[:target_security_group])
    rescue Exception => e
      error << e
      post_message("Unable to delete Security Group '#{@context[:target_security_group]}' in target region: #{e.to_s}")
    end
  end

  if error.size() > 0
    raise Exception.new("Cleanup error(s)")
  end
 
  Done.new(@context)
end