class Chef::Knife::IonoscloudCompositeServerCreate
Attributes
description[R]
required_options[R]
Public Class Methods
new(args = [])
click to toggle source
Calls superclass method
# File lib/chef/knife/ionoscloud_composite_server_create.rb, line 117 def initialize(args = []) super(args) @description = 'This creates a new composite server with an attached volume and NIC in a specified virtual data center.' @required_options = [ :datacenter_id, :name, :cores, :ram, :size, :type, :dhcp, :lan, :ionoscloud_username, :ionoscloud_password, ] end
Public Instance Methods
run()
click to toggle source
# File lib/chef/knife/ionoscloud_composite_server_create.rb, line 126 def run $stdout.sync = true handle_extra_config validate_required_params(@required_options, config) config[:ssh_keys] = config[:ssh_keys].split(',') if config[:ssh_keys] && config[:ssh_keys].instance_of?(String) config[:ips] = config[:ips].split(',') if config[:ips] && config[:ips].instance_of?(String) print ui.color('Creating composite server...', :magenta).to_s volume = Ionoscloud::Volume.new( properties: Ionoscloud::VolumeProperties.new({ name: config[:volume_name], size: config[:size], bus: config[:bus] || 'VIRTIO', image: config[:image], image_alias: config[:image_alias], ssh_keys: config[:ssh_keys], image_password: config[:image_password], type: config[:type], licence_type: config[:licence_type], availability_zone: config[:volume_availability_zone], }.compact) ) nic = Ionoscloud::Nic.new( properties: Ionoscloud::NicProperties.new({ name: config[:nic_name], ips: config[:ips], dhcp: config[:dhcp], lan: config[:lan], nat: !config[:nat].nil?, }.compact) ) server = Ionoscloud::Server.new( properties: Ionoscloud::ServerProperties.new({ name: config[:name], cores: config[:cores], cpu_family: config[:cpu_family], ram: config[:ram], availability_zone: config[:availability_zone], }.compact), entities: Ionoscloud::ServerEntities.new( volumes: { items: [volume], }, nics: { items: [nic], }, ), ) server_api = Ionoscloud::ServerApi.new(api_client) server, _, headers = server_api.datacenters_servers_post_with_http_info(config[:datacenter_id], server) dot = ui.color('.', :magenta) api_client.wait_for { print dot; is_done? get_request_id headers } server = server_api.datacenters_servers_find_by_id(config[:datacenter_id], server.id) puts "\n" puts "#{ui.color('ID', :cyan)}: #{server.id}" puts "#{ui.color('Name', :cyan)}: #{server.properties.name}" puts "#{ui.color('Cores', :cyan)}: #{server.properties.cores}" puts "#{ui.color('CPU Family', :cyan)}: #{server.properties.cpu_family}" puts "#{ui.color('Ram', :cyan)}: #{server.properties.ram}" puts "#{ui.color('Availability Zone', :cyan)}: #{server.properties.availability_zone}" puts "#{ui.color('Boot Volume', :cyan)}: #{server.properties.boot_volume ? server.properties.boot_volume.id : ''}" puts "#{ui.color('Boot CDROM', :cyan)}: #{server.properties.boot_cdrom ? server.properties.boot_cdrom.id : ''}" puts 'done' end