Class: Chef::Knife::BmcsServerDelete

Inherits:
Chef::Knife show all
Includes:
BmcsCommonOptions, BmcsHelper
Defined in:
lib/chef/knife/bmcs_server_delete.rb

Overview

Server Delete Command: Delete a BMCS instance.

Instance Method Summary collapse

Methods included from BmcsCommonOptions

included

Methods included from BmcsHelper

#bmcs_config, #check_can_access_instance, #compartment_id, #compute_client, #confirm, #display_list, #display_server_info, #error_and_exit, #identity_client, #network_client, #show_value, #validate_required_params, #warn_if_page_is_truncated

Instance Method Details

#confirm_deletionObject



90
91
92
93
# File 'lib/chef/knife/bmcs_server_delete.rb', line 90

def confirm_deletion
  return if confirm('Delete server? (y/n)')
  error_and_exit 'Server delete canceled.'
end

#end_progress_indicatorObject



100
101
102
# File 'lib/chef/knife/bmcs_server_delete.rb', line 100

def end_progress_indicator
  print ui.color("done\n", :magenta)
end

#get_wait_options(wait_for) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/chef/knife/bmcs_server_delete.rb', line 82

def get_wait_options(wait_for)
  opts = {
    max_interval_seconds: MAX_INTERVAL_SECONDS
  }
  opts[:max_wait_seconds] = wait_for if wait_for > 0
  opts
end

#runObject



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/chef/knife/bmcs_server_delete.rb', line 32

def run
  $stdout.sync = true
  validate_required_params(i[instance_id], config)
  wait_for = validate_wait

  confirm_deletion

  check_can_access_instance(config[:instance_id])

  terminate_instance(config[:instance_id])

  wait_for_instance_terminated(config[:instance_id], wait_for) if wait_for
end

#show_progressObject



95
96
97
98
# File 'lib/chef/knife/bmcs_server_delete.rb', line 95

def show_progress
  print ui.color('.', :magenta)
  $stdout.flush
end

#terminate_instance(instance_id) ⇒ Object



46
47
48
49
50
# File 'lib/chef/knife/bmcs_server_delete.rb', line 46

def terminate_instance(instance_id)
  compute_client.terminate_instance(instance_id)

  ui.msg "Initiated delete of instance #{instance_id}"
end

#validate_waitObject



73
74
75
76
77
78
79
80
# File 'lib/chef/knife/bmcs_server_delete.rb', line 73

def validate_wait
  wait_for = nil
  if config[:wait]
    wait_for = Integer(config[:wait])
    error_and_exit 'Wait value must be 0 or greater' if wait_for < 0
  end
  wait_for
end

#wait_for_instance_terminated(instance_id, wait_for) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/chef/knife/bmcs_server_delete.rb', line 52

def wait_for_instance_terminated(instance_id, wait_for)
  print ui.color('Waiting for instance to terminate...', :magenta)
  begin
    begin
      compute_client.get_instance(instance_id).wait_until(:lifecycle_state,
                                                          OracleBMC::Core::Models::Instance::LIFECYCLE_STATE_TERMINATED,
                                                          get_wait_options(wait_for)) do
        show_progress
      end
    ensure
      end_progress_indicator
    end
  rescue OracleBMC::Waiter::Errors::MaximumWaitTimeExceededError
    error_and_exit 'Timeout exceeded while waiting for instance to terminate'
  rescue OracleBMC::Errors::ServiceError => service_error
    raise unless service_error.serviceCode == 'NotAuthorizedOrNotFound'
    # we'll soak this exception since the terminate may have completed before we started waiting for it.
    ui.warn 'Instance not authorized or not found'
  end
end