Class: Chef::Knife::AzurermServerDelete

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

Constant Summary

Constants included from Azure::ARM::ReadCred

Azure::ARM::ReadCred::CRED_TYPE_DOMAIN_CERTIFICATE, Azure::ARM::ReadCred::CRED_TYPE_DOMAIN_PASSWORD, Azure::ARM::ReadCred::CRED_TYPE_DOMAIN_VISIBLE_PASSWORD, Azure::ARM::ReadCred::CRED_TYPE_GENERIC

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?, #locate_config_value, #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!

Methods included from Azure::ARM::WindowsCredentials

#latest_credential_target, #target_name, #token_details_from_WCM

Instance Method Details

#delete_resource_groupObject



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

def delete_resource_group
  resource_group_name = locate_config_value(: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(locate_config_value(: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(locate_config_value(: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.



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

def destroy_item(klass, name, type_name)
  begin
    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
end

#purge_nodeObject



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

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



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

def run
  begin
    $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 locate_config_value(:delete_resource_group)
      delete_resource_group
    else
      service.delete_server(locate_config_value(: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
end