class Chef::Knife::ClcServerShow

Public Instance Methods

execute() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 37
def execute
  ui.info 'Requesting server info...'

  context[:server] = get_server
  context[:creds] = get_creds if config[:clc_creds]
  context[:ip_addresses] = get_ip_addresses if config[:clc_ports]

  render
end
format_permission(permission) click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 154
def format_permission(permission)
  protocol = permission['protocol']

  if %w(tcp udp).include? protocol.downcase
    ports = permission.values_at('port', 'portTo').compact
    [protocol, ports.join('-')].join(':')
  else
    protocol
  end
end
get_creds() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 61
def get_creds
  creds_link = context[:server]['links'].find { |link| link['rel'] == 'credentials' }
  connection.follow(creds_link) if creds_link
end
get_ip_addresses() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 66
def get_ip_addresses
  context[:ip_addresses] = connection.list_ip_addresses(context[:server]['id'])
end
get_server() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 47
def get_server
  server = connection.show_server(name_args[0], config[:clc_uuid])

  server['details'] ||= {}
  server['details'].tap do |details|
    details['ipAddresses'] ||= []
    public_ips = server['details']['ipAddresses'].map { |addr| addr['public'] }.compact
    private_ips = server['details']['ipAddresses'].map { |addr| addr['internal'] }.compact
    details.merge!('publicIps' => public_ips, 'privateIps' => private_ips)
  end

  server
end
ip_fields() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 134
def ip_fields
  %w(id internalIPAddress ports sourceRestrictions)
end
ip_filters() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 147
def ip_filters
  {
    'sourceRestrictions' => ->(sources) { sources.empty? ? '-' : sources.map { |source| source['cidr'] }.join(', ') },
    'ports' => ->(ports) { ports.map { |permission| format_permission(permission) }.join(', ') }
  }
end
ip_headers() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 138
def ip_headers
  {
    'id' => 'Public IP',
    'internalIPAddress' => 'Internal IP',
    'ports' => 'Ports',
    'sourceRestrictions' => 'Sources'
  }
end
parse_and_validate_parameters() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 31
def parse_and_validate_parameters
  unless name_args[0]
    errors << 'Server ID is required'
  end
end
property_filters() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 104
def property_filters
  {
    'description' => ->(description) { description.empty? ? '-' : description },
    'memoryMB' => ->(memory) { "#{memory} MB" },
    'storageGB' => ->(storage) { "#{storage} GB" },
    'publicIps' => ->(ips) { ips.empty? ? '-' : ips.join(', ') },
    'privateIps' => ->(ips) { ips.empty? ? '-' : ips.join(', ') }
  }
end
property_labels() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 84
def property_labels
  {
    'id' => 'ID',
    'name' => 'Name',
    'description' => 'Description',
    'groupId' => 'Group',
    'locationId' => 'Location',
    'osType' => 'OS Type',
    'cpu' => 'CPUs',
    'memoryMB' => 'Memory',
    'storageGB' => 'Storage',
    'status' => 'Status',
    'powerState' => 'Power State',
    'publicIps' => 'Public IPs',
    'privateIps' => 'Private IPs',
    'userName' => 'Username',
    'password' => 'Password'
  }
end
render() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 70
def render
  render_properties
  render_creds if config[:clc_creds]
  render_addresses if config[:clc_ports]
end
render_addresses() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 121
def render_addresses
  if context[:ip_addresses].empty?
    ui.info 'No additional networking info available'
  else
    ui.info Hirb::Helpers::AutoTable.render(context[:ip_addresses],
      :headers => ip_headers,
      :fields => ip_fields,
      :filters => ip_filters,
      :resize => false,
      :description => false)
  end
end
render_creds() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 165
def render_creds
  render_fields(fields: %w(userName password), container: context[:creds] || {})
end
render_fields(fields: [], labels: property_labels, filters: property_filters, container: {}) click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 170
def render_fields(fields: [], labels: property_labels, filters: property_filters, container: {})
  fields.each do |field|
    value = container[field]
    filter = filters[field]

    formatted_value = if value
      filter ? filter.call(value) : value
    else
      '-'
    end

    label = labels[field] || field

    ui.info "#{ui.color(label + ':', :bold)} #{formatted_value}"
  end
end
render_properties() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 114
def render_properties
  server = context[:server]

  render_fields(:fields => server_properties, :container => server)
  render_fields(:fields => server_detail_properties, :container => server['details'])
end
server_detail_properties() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 80
def server_detail_properties
  %w(powerState cpu memoryMB storageGB publicIps privateIps)
end
server_properties() click to toggle source
# File lib/chef/knife/clc_server_show.rb, line 76
def server_properties
  %w(id name description groupId locationId osType status)
end