class Chef::Knife::IonoscloudRequestList

Attributes

description[R]
required_options[R]

Public Class Methods

new(args = []) click to toggle source
Calls superclass method
# File lib/chef/knife/ionoscloud_request_list.rb, line 32
def initialize(args = [])
  super(args)
  @description =
  'This operation allows you to retrieve a list of requests. Cloud API calls generate a '\
  'request which is assigned an id. This "request id" can be used to get information about '\
  'the request and its current status. The "list request" operation described here will '\
  'return an array of request items. Each returned request item will have an id that can be '\
  'used to get additional information as described in the Get Request and Get Request Status sections.'
  @required_options = [:ionoscloud_username, :ionoscloud_password]
end

Public Instance Methods

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

  request_list = [
    ui.color('ID', :bold),
    ui.color('Status', :bold),
    ui.color('Method', :bold),
    ui.color('Targets', :bold),
  ]

  request_api = Ionoscloud::RequestApi.new(api_client)

  begin
    config[:limit] = Integer(config[:limit])
  rescue *[ArgumentError, TypeError]
    if config[:limit]
      ui.warn('limit should be an Integer!')
    end
    config[:limit] = 20
  end

  begin
    config[:offset] = Integer(config[:offset])
  rescue *[ArgumentError, TypeError]
    if config[:offset]
      ui.warn('offset should be an Integer!')
    end
    config[:offset] = 0
  end

  opts = {
    depth: 2,
    limit: config[:limit],
    offset: config[:offset],
  }

  if config[:status] && ['QUEUED', 'RUNNING', 'DONE', 'FAILED'].include?(config[:status])
    opts[:filter_request_status] = config[:status]
  end

  if config[:status] && !['QUEUED', 'RUNNING', 'DONE', 'FAILED'].include?(config[:status])
    ui.warn('status should be one of [QUEUED, RUNNING, DONE, FAILED]')
  end

  if config[:method] && ['POST', 'PUT', 'PATCH', 'DELETE'].include?(config[:method])
    opts[:filter_method] = config[:method]
  end

  if config[:method] && !['POST', 'PUT', 'PATCH', 'DELETE'].include?(config[:method])
    ui.warn('method should be one of [POST, PUT, PATCH, DELETE]')
  end

  request_api.requests_get(opts).items.each do |request|
    request_list << request.id
    request_list << request.metadata.request_status.metadata.status
    request_list << request.properties.method
    request_list << request.metadata.request_status.metadata.targets.map { |target| [target.target.id, target.target.type] }.to_s
  end

  puts ui.list(request_list, :uneven_columns_across, 4)
end