Class: CopyMsWindowsSnapshot::TargetSnapshotCreatedState

Inherits:
CopyMsWindowsSnapshotState show all
Defined in:
lib/scripts/ec2/copy_mswindows_snapshot.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 both regions. 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 CopyMsWindowsSnapshotState

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



455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
# File 'lib/scripts/ec2/copy_mswindows_snapshot.rb', line 455

def enter()
  error = []
  local_region()
  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()
  begin
    detach_volume(@context[:source_temp_volume_id], @context[:source_instance_id])
  rescue Exception => e
    error << e
    post_message("Unable to detach 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
  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()
  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()
  begin
    detach_volume(@context[:target_temp_volume_id], @context[:target_instance_id])
  rescue Exception => e
    error << e
    post_message("Unable to detach 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 volume '#{@context[:target_temp_volume_id]}' in target region: #{e.to_s}")
  end
  begin
    delete_volume(@context[:target_volume_id])
  rescue Exception => e
    error << e
    post_message("Unable to delete volume '#{@context[:target_volume_id]}' in target region: #{e.to_s}")
  end
  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