Class: Chef::Knife::AzurermServerDelete

Inherits:
Chef::Knife show all
Includes:
AzurermBase
Defined in:
lib/chef/knife/azurerm_server_delete.rb

Instance Method Summary collapse

Methods included from AzurermBase

#authentication_details, #azure_authentication, #check_token_validity, #find_file, #get_azure_cli_version, included, #is_token_valid?, #msg_server_summary, #parse_publish_settings_file, #refresh_token, #service, #token_details_for_linux, #token_details_for_windows, #token_details_from_accessToken_file, #validate_arm_keys!, #validate_azure_login, #validate_params!

Instance Method Details

#delete_resource_groupObject



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/chef/knife/azurerm_server_delete.rb', line 92

def delete_resource_group
  resource_group_name = config[:azure_resource_group_name]
  ui.warn "Deleting resource group will delete all the virtual_machines inside it."
  begin
    ui.confirm("Do you really want to delete resource group")
  rescue SystemExit   # Need to handle this as confirming with N/n raises SystemExit exception
    server = nil      # Cleanup is implicitly performed in other cloud plugins
    ui.warn "Resource group not deleted. Proceeding for server delete ..."
    service.delete_server(config[:azure_resource_group_name], @vm_name)
    exit
  end
  ui.info "Deleting Resource Group " + resource_group_name + " and Virtual Machine " + @vm_name + " .."
  service.delete_resource_group(config[:azure_resource_group_name])
  ui.warn "Deleted resource_group_name #{resource_group_name} and #{@vm_name}"
end

#destroy_item(klass, name, type_name) ⇒ Object

Extracted from Chef::Knife.delete_object, because it has a confirmation step built in… By specifying the ‘–purge’ flag (and also explicitly confirming the server destruction!) the user is already making their intent known. It is not necessary to make them confirm two more times.



62
63
64
65
66
67
68
# File 'lib/chef/knife/azurerm_server_delete.rb', line 62

def destroy_item(klass, name, type_name)
  object = klass.load(name)
  object.destroy
  ui.warn("Deleted #{type_name} #{name}")
rescue Net::HTTPServerException
  ui.warn("Could not find a #{type_name} named #{name} to delete!")
end

#purge_nodeObject



108
109
110
111
112
113
114
115
116
# File 'lib/chef/knife/azurerm_server_delete.rb', line 108

def purge_node
  node_to_delete = config[:chef_node_name] || @vm_name
  if node_to_delete
    destroy_item(Chef::Node, node_to_delete, "node")
    destroy_item(Chef::ApiClient, node_to_delete, "client")
  else
    ui.warn("Node name to purge not provided. Corresponding client node will remain on Chef Server.")
  end
end

#runObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/chef/knife/azurerm_server_delete.rb', line 70

def run
  $stdout.sync = true
  # check azure cli version due to azure changed `azure` to `az` in azure-cli2.0
  get_azure_cli_version
  validate_arm_keys!(:azure_resource_group_name)
  @vm_name = @name_args[0]

  if config[:delete_resource_group]
    delete_resource_group
  else
    service.delete_server(config[:azure_resource_group_name], @vm_name)
  end

  if config[:purge]
    purge_node
  else
    ui.warn("Corresponding node and client for the #{@vm_name} server were not deleted and remain registered with the Chef Server")
  end
rescue => error
  service.common_arm_rescue_block(error)
end