class Chef::Knife::HmcDiskAdd

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/hmc_disk_add.rb, line 49
def run
            Chef::Log.debug("Adding disk...")

  validate!([:frame_name,:lpar_name,:vio2_name,:vio1_name,:size])

  hmc = Hmc.new(get_config(:hmc_host), get_config(:hmc_username) , {:password => get_config(:hmc_password)}) 
  hmc.connect

  #Populate hash to make LPAR object
  lpar_hash = hmc.get_lpar_options(get_config(:frame_name),get_config(:lpar_name))
  #Create LPAR object based on hash, and VIO objects
  lpar = Lpar.new(lpar_hash)
  vio1 = Vio.new(hmc, get_config(:frame_name), get_config(:vio1_name))
  vio2 = Vio.new(hmc, get_config(:frame_name), get_config(:vio2_name))

  #Get vSCSI Information
  lpar_vscsi = lpar.get_vscsi_adapters
  first_slot = nil
  second_slot = nil
  adapter_cnt = 0

  if lpar_vscsi.empty? == true
    #Add vSCSI Adapters
    lpar.add_vscsi(vio1)
    lpar.add_vscsi(vio2)
    lpar_vscsi = lpar.get_vscsi_adapters
  else
    lpar_vscsi.each do |adapter|
      if adapter.remote_lpar_name == vio1.name
        first_slot = adapter.remote_slot_num
        adapter_cnt += 1
      elsif adapter.remote_lpar_name == vio2.name
        second_slot = adapter.remote_slot_num
        adapter_cnt += 1
      end
    end 

    if first_slot.nil? or second_slot.nil? or adapter_cnt != 2
      #Could not determine which vSCSIs to use
      error = "Unable to determine which vSCSI adapters to use"
      puts "#{error}"
      ui.error(error)
      exit 1         
    end
  end  
  
  #Find the vHosts
  first_vhost = vio1.find_vhost_given_virtual_slot(lpar_vscsi[0].remote_slot_num)
  second_vhost = vio2.find_vhost_given_virtual_slot(lpar_vscsi[1].remote_slot_num)
  
  #Check for volume group flag and add LUN to LPAR
  if validate([:volume_group])
    if get_config(:volume_group).to_s.downcase == "rootvg"
      vio1.map_single_disk_by_size(first_vhost,vio2,second_vhost,get_config(:size).to_i)
      puts "Successfully attached LUN to #{get_config(:lpar_name)}"        
    else
      vio1.map_by_size(first_vhost,vio2,second_vhost,get_config(:size).to_i)
      puts "Successfully attached LUN(s) to #{get_config(:lpar_name)}"  
    end
  else
    vio1.map_by_size(first_vhost,vio2,second_vhost,get_config(:size).to_i)
    puts "Successfully attached LUN(s) to #{get_config(:lpar_name)}" 
  end       
  hmc.disconnect        
end