class Chef::Knife::IonoscloudNodepoolCreate

Attributes

description[R]
required_options[R]

Public Class Methods

new(args = []) click to toggle source
Calls superclass method
# File lib/chef/knife/ionoscloud_nodepool_create.rb, line 96
def initialize(args = [])
  super(args)
  @description =
  "Creates a node pool into an existing Kubernetes cluster. "\
  "The Kubernetes cluster must be in state \"ACTIVE\" before creating a node pool.\n\n"\
  "The worker nodes within the node pools will be deployed into an existing data centers."
  @required_options = [
    :datacenter_id, :cluster_id, :name, :version, :node_count, :cpu_family, :cores, :ram,
    :availability_zone, :storage_type, :storage_size, :ionoscloud_username, :ionoscloud_password,
  ]
end

Public Instance Methods

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

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

  kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)

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

  nodepool_properties = {
    name: config[:name],
    k8sVersion: config[:version],
    datacenterId: config[:datacenter_id],
    nodeCount: config[:node_count],
    cpuFamily: config[:cpu_family],
    coresCount: config[:cores],
    ramSize: config[:ram],
    availabilityZone: config[:availability_zone],
    storageType: config[:storage_type],
    storageSize: config[:storage_size],
    publicIps: config[:public_ips],
  }

  if config[:maintenance_day] && config[:maintenance_time]
    nodepool_properties[:maintenanceWindow] = {
      dayOfTheWeek: config[:maintenance_day],
      time: config[:maintenance_time],
    }
  end

  if config[:min_node_count] || config[:max_node_count]
    nodepool_properties[:autoScaling] = {}
    nodepool_properties[:autoScaling][:minNodeCount] = config[:min_node_count] unless config[:min_node_count].nil?
    nodepool_properties[:autoScaling][:maxNodeCount] = config[:max_node_count] unless config[:max_node_count].nil?
  end

  if config[:lans]
    nodepool_properties[:lans] = config[:lans].split(',').map! { |lan| { id: Integer(lan) } }
  end

  nodepool = kubernetes_api.k8s_nodepools_post(config[:cluster_id], { properties: nodepool_properties })

  auto_scaling = "Min node count: #{nodepool.properties.auto_scaling.min_node_count}, Max node count:#{nodepool.properties.auto_scaling.max_node_count}"
  maintenance_window = "#{nodepool.properties.maintenance_window.day_of_the_week}, #{nodepool.properties.maintenance_window.time}"

  puts "\n"
  puts "#{ui.color('ID', :cyan)}: #{nodepool.id}"
  puts "#{ui.color('Name', :cyan)}: #{nodepool.properties.name}"
  puts "#{ui.color('K8s Version', :cyan)}: #{nodepool.properties.k8s_version}"
  puts "#{ui.color('Datacenter ID', :cyan)}: #{nodepool.properties.datacenter_id}"
  puts "#{ui.color('Node Count', :cyan)}: #{nodepool.properties.node_count}"
  puts "#{ui.color('CPU Family', :cyan)}: #{nodepool.properties.cpu_family}"
  puts "#{ui.color('Cores Count', :cyan)}: #{nodepool.properties.cores_count}"
  puts "#{ui.color('RAM', :cyan)}: #{nodepool.properties.ram_size}"
  puts "#{ui.color('Storage Type', :cyan)}: #{nodepool.properties.storage_type}"
  puts "#{ui.color('Storage Size', :cyan)}: #{nodepool.properties.storage_size}"
  puts "#{ui.color('Availability Zone', :cyan)}: #{nodepool.properties.availability_zone}"
  puts "#{ui.color('Auto Scaling', :cyan)}: #{auto_scaling}"
  puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
  puts "#{ui.color('State', :cyan)}: #{nodepool.metadata.state}"
  puts 'done'
end