class Chef::Knife::OciServerDelete
Server Delete Command: Delete an OCI instance.
Constants
- MAX_INTERVAL_SECONDS
max interval for polling the server state
Public Instance Methods
confirm_deletion(prompt)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 131 def confirm_deletion(prompt) if confirm(prompt) # we have user's confirmation, so avoid any further confirmation prompts from Chef config[:yes] = true return end error_and_exit 'Server delete canceled.' end
delete_chef_client(client_name)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 86 def delete_chef_client(client_name) object = Chef::ApiClient.load(client_name) return unless object && !object.validator object.destroy ui.msg "Deleted Chef client '#{client_name}'" end
delete_chef_node(node)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 81 def delete_chef_node(node) node.destroy ui.msg "Deleted Chef node '#{node.name}'" end
end_progress_indicator()
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 145 def end_progress_indicator print ui.color("done\n", :magenta) end
get_chef_node(node_name)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 76 def get_chef_node(node_name) node = Chef::Node.load(node_name) node end
get_wait_options(wait_for)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 123 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
run()
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 41 def run $stdout.sync = true validate_required_params(%i[instance_id], config) wait_for = validate_wait if config[:chef_node_name] && !config[:purge] error_and_exit('--node-name requires --purge argument') end response = check_can_access_instance(config[:instance_id]) ui.msg "Instance name: #{response.data.display_name}" deletion_prompt = 'Delete server? (y/n)' chef_node = nil if config[:purge] deletion_prompt = 'Delete server and chef node? (y/n)' node_name = response.data.display_name node_name = config[:chef_node_name] if config[:chef_node_name] chef_node = get_chef_node(node_name) ui.msg "Chef node name: #{chef_node.name}" end confirm_deletion(deletion_prompt) terminate_instance(config[:instance_id]) delete_chef_node(chef_node) if config[:purge] delete_chef_client(node_name) if config[:purge] wait_for_instance_terminated(config[:instance_id], wait_for) if wait_for end
show_progress()
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 140 def show_progress print ui.color('.', :magenta) $stdout.flush end
terminate_instance(instance_id)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 70 def terminate_instance(instance_id) compute_client.terminate_instance(instance_id) ui.msg "Initiated delete of instance #{instance_id}" end
validate_wait()
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 114 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)
click to toggle source
# File lib/chef/knife/oci_server_delete.rb, line 93 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, OCI::Core::Models::Instance::LIFECYCLE_STATE_TERMINATED, get_wait_options(wait_for)) do show_progress end ensure end_progress_indicator end rescue OCI::Waiter::Errors::MaximumWaitTimeExceededError error_and_exit 'Timeout exceeded while waiting for instance to terminate' rescue OCI::Errors::ServiceError => service_error raise unless service_error.service_code == '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