class Chef::Knife::ClcServerList

Public Instance Methods

cloud_servers() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 56
def cloud_servers
  if config[:clc_datacenter]
    connection.list_servers(config[:clc_datacenter])
  elsif config[:clc_all]
    datacenters = connection.list_datacenters

    datacenters.map do |dc|
      connection.list_servers(dc['id'])
    end.flatten
  end
end
execute() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 29
def execute
  servers = cloud_servers
  merge_public_ips!(servers)
  merge_chef_nodes!(servers) if config[:clc_chef_nodes]

  context[:servers] = servers

  render
end
fields() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 81
def fields
  # TODO AS: Displaying shortened list of fields for now
  # default_fields = %w(id name publicIP groupId locationId osType status)
  default_fields = %w(name publicIP status)
  config[:clc_chef_nodes] ? default_fields.insert(3, 'chefNode') : default_fields
end
filters() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 88
def filters
  {
    'publicIP' => ->(ip) { ip || '-' },
    'chefNode' => ->(name) { name || '-' }
  }
end
headers() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 68
def headers
  {
    'id' => 'ID',
    'name' => 'Name',
    'publicIP' => 'Public IP',
    'chefNode' => 'Chef Node',
    'groupId' => 'Group',
    'osType' => 'OS Type',
    'status' => 'Status',
    'locationId' => 'DC'
  }
end
merge_chef_nodes!(servers) click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 47
def merge_chef_nodes!(servers)
  nodes = Chef::Node.list(true).values
  servers.map! do |server|
    existing_node = nodes.find { |node| node['machinename'] == server['name'] }
    server['chefNode'] = existing_node.name if existing_node
    server
  end
end
merge_public_ips!(servers) click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 39
def merge_public_ips!(servers)
  servers.map! do |server|
    ip_link = server['links'].find { |link| link['rel'] == 'publicIPAddress' }
    server['publicIP'] = ip_link['id'] if ip_link
    server
  end
end
parse_and_validate_parameters() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 112
def parse_and_validate_parameters
  if config[:clc_datacenter].nil? && !config[:clc_all]
    errors << 'Datacenter ID is required'
  end
end
render() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 102
def render
  ui.info Hirb::Helpers::AutoTable.render(context[:servers],
    :headers => headers,
    :fields => fields,
    :filters => filters,
    :max_fields => width_limits,
    :resize => false,
    :description => false)
end
width_limits() click to toggle source
# File lib/chef/knife/clc_server_list.rb, line 95
def width_limits
  {
    'chefNode' => 21,
    'status' => 15
  }
end