module Chef::Knife::MaasBase

Base Maas module with common methods

Public Class Methods

included(includer) click to toggle source
# File lib/chef/knife/maas_base.rb, line 5
def self.included(includer)
  includer.class_eval do
    deps do
      require 'chef/maas/maas'
      require 'chef/api_client'
      require 'chef/node'
      Chef::Knife.load_deps
    end
  end
end

Public Instance Methods

acquire_node(hostname: nil, zone: nil) click to toggle source
# File lib/chef/knife/maas_base.rb, line 32
def acquire_node(hostname: nil, zone: nil)
  unless hostname || zone
    ui.error 'Please specify either a zone or hostname'
    exit 1
  end

  if !hostname.nil?
    client.acquire_node(hostname: hostname)
  elsif !zone.nil?
    client.acquire_node(zone: zone)
  end
end
client() click to toggle source
# File lib/chef/knife/maas_base.rb, line 16
def client
  @client ||= begin
    api_key = locate_config_value(:maas_api_key)
    site_uri = locate_config_value(:maas_site)
    ::Maas::Client.new(api_key, site_uri)
  end
end
destroy_item(klass, name, type_name) click to toggle source
# File lib/chef/knife/maas_base.rb, line 24
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
ensure_chef_node_name!() click to toggle source
# File lib/chef/knife/maas_base.rb, line 84
def ensure_chef_node_name!
  hostname = locate_config_value(:hostname)
  node_name = config[:chef_node_name] || hostname
  unless node_name
    ui.error ('You must provide the hostname or chef_node_name')
    exit 1
  end
  node_name
end
ensure_system_id!() click to toggle source
# File lib/chef/knife/maas_base.rb, line 75
def ensure_system_id!
  system_id = locate_config_value(:system_id) || name_args[0]
  unless system_id
    ui.error('You must provide the system id of the node')
    exit 1
  end
  system_id
end
locate_config_value(key) click to toggle source
# File lib/chef/knife/maas_base.rb, line 53
def locate_config_value(key)
  key = key.to_sym
  config[key] || Chef::Config[:knife][key]
end
print_node_status(response_json) click to toggle source
wait_with_dots(sleep_seconds = 1) click to toggle source
# File lib/chef/knife/maas_base.rb, line 71
def wait_with_dots(sleep_seconds = 1)
  print('.') && sleep(sleep_seconds)
end
with_timeout(max_time = nil, &block) click to toggle source
# File lib/chef/knife/maas_base.rb, line 58
def with_timeout(max_time = nil, &block)
  if max_time
    Timeout.timeout(max_time) do
      block.call
    end
  else
    block.call
  end
rescue Timeout::Error
  ui.error "Request took longer than #{max_time}"
  exit 1
end