module Chef::Knife::IonoscloudBase

Public Class Methods

included(includer) click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 6
def self.included(includer)
  includer.class_eval do
    deps do
      require 'ionoscloud'
    end

    option :ionoscloud_username,
            short: '-u USERNAME',
            long: '--username USERNAME',
            description: 'Your Ionoscloud username'

    option :ionoscloud_password,
            short: '-p PASSWORD',
            long: '--password PASSWORD',
            description: 'Your Ionoscloud password'

    option :extra_config_file,
            short: '-e EXTRA_CONFIG_FILE_PATH',
            long: '--extra-config EXTRA_CONFIG_FILE_PATH',
            description: 'Path to the additional config file'
  end
end

Public Instance Methods

api_client() click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 63
def api_client
  api_config = Ionoscloud::Configuration.new()

  api_config.username = config[:ionoscloud_username]
  api_config.password = config[:ionoscloud_password]

  api_config.debugging = config[:ionoscloud_debug] || false

  @api_client ||= Ionoscloud::ApiClient.new(api_config)
end
get_request_id(headers) click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 74
def get_request_id(headers)
  begin
    headers['Location'].scan(%r{/requests/(\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b)}).last.first
  rescue NoMethodError
    nil
  end
end
handle_extra_config() click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 45
def handle_extra_config
  return if config[:extra_config_file].nil?

  available_options = options.map { |key, _| key }
  ionoscloud_options = available_options[available_options.find_index(:ionoscloud_username)..]
  ignored_options = []

  JSON[File.read(config[:extra_config_file])].transform_keys(&:to_sym).each do |key, value|
    if config.key?(key) || !ionoscloud_options.include?(key)
      ignored_options << key
    else
      config[key] = value 
    end
  end

  ui.warn "The following options #{ignored_options} from the specified JSON file will be ignored." unless ignored_options.empty?
end
is_done?(request_id) click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 82
def is_done?(request_id)
  response = Ionoscloud::RequestApi.new(api_client).requests_status_get(request_id)
  if response.metadata.status == 'FAILED'
    puts "\nRequest #{request_id} failed\n#{response.metadata.message.to_s}"
    exit(1)
  end
  response.metadata.status == 'DONE'
end
msg_pair(label, value, color = :cyan) click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 29
def msg_pair(label, value, color = :cyan)
  if !value.nil? && !value.to_s.empty?
    puts "#{ui.color(label, color)}: #{value}"
  end
end
validate_required_params(required_params, params) click to toggle source
# File lib/chef/knife/ionoscloud_base.rb, line 35
def validate_required_params(required_params, params)
  missing_params = required_params.select do |param|
    params[param].nil?
  end
  if missing_params.any?
    puts "Missing required parameters #{missing_params}"
    exit(1)
  end
end