class Chef::Knife::IonoscloudNicCreate

Attributes

description[R]
required_options[R]

Public Class Methods

new(args = []) click to toggle source
Calls superclass method
# File lib/chef/knife/ionoscloud_nic_create.rb, line 48
def initialize(args = [])
  super(args)
  @description =
  "Creates a NIC on the specified server. The Ionoscloud platform supports adding multiple NICs to a server. These NICs "\
  "can be used to create different, segmented networks on the platform."
  @required_options = [:datacenter_id, :server_id, :lan, :ionoscloud_username, :ionoscloud_password]
end

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/ionoscloud_nic_create.rb, line 56
def run
  $stdout.sync = true
  handle_extra_config
  validate_required_params(@required_options, config)

  print "#{ui.color('Creating nic...', :magenta)}"

  config[:ips] = config[:ips].split(',') if config[:ips] && config[:ips].instance_of?(String)

  params = {
    name: config[:name],
    ips: config[:ips],
    dhcp: config[:dhcp],
    lan: config[:lan],
    nat: !config[:nat].nil?,
  }

  nic_api = Ionoscloud::NicApi.new(api_client)

  nic, _, headers = nic_api.datacenters_servers_nics_post_with_http_info(
    config[:datacenter_id],
    config[:server_id],
    { properties: params.compact },
  )

  dot = ui.color('.', :magenta)
  api_client.wait_for { print dot; is_done? get_request_id headers }

  nic = nic_api.datacenters_servers_nics_find_by_id(
    config[:datacenter_id],
    config[:server_id],
    nic.id,
  )

  puts "\n"
  puts "#{ui.color('ID', :cyan)}: #{nic.id}"
  puts "#{ui.color('Name', :cyan)}: #{nic.properties.name}"
  puts "#{ui.color('IPs', :cyan)}: #{nic.properties.ips.to_s}"
  puts "#{ui.color('DHCP', :cyan)}: #{nic.properties.dhcp}"
  puts "#{ui.color('LAN', :cyan)}: #{nic.properties.lan}"
  puts "#{ui.color('NAT', :cyan)}: #{nic.properties.nat}"

  puts 'done'
end