Class: Chef::Knife::HmcServerDelete

Inherits:
Chef::Knife show all
Includes:
HmcBase
Defined in:
lib/chef/knife/hmc_server_delete.rb

Instance Method Summary collapse

Methods included from HmcBase

#get_config, included, #tcp_ssh_alive, #validate, #validate!

Instance Method Details

#destroy_chef_node(objectClass, name, type) ⇒ Object

Extracted from Chef::Knife.delete_object. That function requires an extra confirmation before proceeding, which seems overly cautious of an operation that will destroy the server that the node represents.



59
60
61
62
63
# File 'lib/chef/knife/hmc_server_delete.rb', line 59

def destroy_chef_node(objectClass,name,type)
  object = objectClass.load(name)
  object.destroy
  puts "Deleted #{type} #{name}"
end

#runObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/chef/knife/hmc_server_delete.rb', line 65

def run
 Chef::Log.debug("Deleting server...")

  validate!([:frame_name,:lpar_name])
 
  hmc = Hmc.new(get_config(:hmc_host), get_config(:hmc_username) , {:password => get_config(:hmc_password)}) 
  hmc.connect
  lpar_hash = hmc.get_lpar_options(get_config(:frame_name),get_config(:lpar_name))
  lpar = Lpar.new(lpar_hash)
     
  if get_config(:vio1_name).nil? and get_config(:vio2_name).nil?
    lpar.delete()
    puts "#{get_config(:lpar_name)} destroyed"
  else
    validate!([:vio1_name, :vio2_name])
    vio1 = Vio.new(hmc, get_config(:frame_name), get_config(:vio1_name))
    vio2 = Vio.new(hmc, get_config(:frame_name), get_config(:vio2_name))
    lpar.delete([vio1,vio2])
    puts "#{get_config(:lpar_name)} destroyed"
  end

  Chef::Log.debug("Server #{lpar.name} has been deleted.")

  #If :purge option was specified, delete the Chef node that
  #represents the LPAR we just deleted
  if get_config(:purge)
    Chef::Log.debug("Removing Chef node for #{lpar.name}")
    node_name = get_config(:chef_node_name) || lpar.name
    puts "Removing Chef node for #{lpar.name}"
    destroy_chef_node(Chef::Node, node_name, "node")
    destroy_chef_node(Chef::ApiClient, node_name, "client")
  end

  hmc.disconnect
end