class Chef::Knife::LinodeServerDelete

Public Instance Methods

destroy_item(klass, name, type_name) click to toggle source

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.

# File lib/chef/knife/linode_server_delete.rb, line 53
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
run() click to toggle source
# File lib/chef/knife/linode_server_delete.rb, line 61
def run
  validate!

  @name_args.each do |linode_id|

    begin
      server = connection.servers.detect do |s|
        s.id.to_s == linode_id || s.name == linode_id
      end
      raise Fog::Compute::Linode::NotFound.new unless server
      delete_id = server.id

      msg_pair("Linode ID", server.id.to_s)
      msg_pair("Name", server.name)
      msg_pair("IPs", server.ips.map { |x| x.ip }.join(",") )
      msg_pair("Status", status_to_ui(server.status) )

      puts "\n"
      confirm("Do you really want to delete this server")

      connection.servers.get(delete_id).destroy

      ui.warn("Deleted server #{delete_id}")

      if config[:purge]
        if config[:chef_node_name]
          thing_to_delete = config[:chef_node_name]
        else
          thing_to_delete = server.name
        end
        destroy_item(Chef::Node, thing_to_delete, "node")
        destroy_item(Chef::ApiClient, thing_to_delete, "client")
      else
        ui.warn("Corresponding node and client for the #{linode_id} server were not deleted and remain registered with the Chef Server")
      end
    rescue Fog::Compute::Linode::NotFound
      ui.error("Could not locate server '#{linode_id}'.")
    end

  end
end