class Chef::Knife::Cloud::VraService

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method
# File lib/chef/knife/cloud/vra_service.rb, line 32
def initialize(options = {})
  super(config: options)

  @username   = options[:username]
  @password   = options[:password]
  @base_url   = options[:base_url]
  @tenant     = options[:tenant]
  @verify_ssl = options[:verify_ssl]
  @page_size  = options[:page_size]
end

Public Instance Methods

catalog_request(options) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 123
def catalog_request(options)
  catalog_request = connection.catalog.request(options[:catalog_id])

  catalog_request.cpus          = options[:cpus]
  catalog_request.memory        = options[:memory]
  catalog_request.requested_for = options[:requested_for]
  catalog_request.lease_days    = options[:lease_days]    unless options[:lease_days].nil?
  catalog_request.notes         = options[:notes]         unless options[:notes].nil?
  catalog_request.subtenant_id  = options[:subtenant_id]  unless options[:subtenant_id].nil?
  options[:extra_params]&.each do |param|
    catalog_request.set_parameter(param[:key], param[:type], param[:value])
  end
  # rubocop:enable all

  catalog_request
end
connection() click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 43
def connection
  @client ||= Vra::Client.new(
    base_url:   @base_url,
    username:   @username,
    password:   @password,
    tenant:     @tenant,
    page_size:  @page_size,
    verify_ssl: @verify_ssl
  )
end
create_server(options = {}) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 54
def create_server(options = {})
  submitted_request = catalog_request(options).submit
  ui.msg("Catalog request #{submitted_request.id} submitted.")
  wait_for_request(submitted_request, options[:wait_time].to_i, options[:refresh_rate])
  ui.msg("Catalog request complete.\n")
  request_summary(submitted_request)

  raise CloudExceptions::ServerCreateError, submitted_request.completion_details if submitted_request.failed?

  servers = submitted_request.resources.select(&:vm?)
  raise CloudExceptions::ServerCreateError, "The vRA request created more than one server, but we were only expecting 1" if servers.length > 1
  raise CloudExceptions::ServerCreateError, "The vRA request did not create any servers" if servers.length == 0

  servers.first
end
delete_server(instance_id) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 70
def delete_server(instance_id)
  server = get_server(instance_id)
  server_summary(server)
  ui.msg("")

  if server.status == "DELETED"
    ui.warn("Server is already deleted.\n")
    return
  end

  ui.confirm("Do you really want to delete this server")

  destroy_request = server.destroy
  ui.msg("Destroy request #{destroy_request.id} submitted.")
  wait_for_request(destroy_request)
  ui.msg("Destroy request complete.")
  request_summary(destroy_request)
end
get_server(instance_id) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 101
def get_server(instance_id)
  connection.resources.by_id(instance_id)
end
list_catalog_items(entitled) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 93
def list_catalog_items(entitled)
  if entitled
    connection.catalog.entitled_items
  else
    connection.catalog.all_items
  end
end
list_servers() click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 89
def list_servers
  connection.resources.all_resources.select(&:vm?)
end
request_summary(request) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 115
def request_summary(request)
  ui.msg("")
  msg_pair("Request Status", request.status)
  msg_pair("Completion State", request.completion_state)
  msg_pair("Completion Details", request.completion_details)
  ui.msg("")
end
server_summary(server, _columns_with_info = nil) click to toggle source
# File lib/chef/knife/cloud/vra_service.rb, line 105
def server_summary(server, _columns_with_info = nil)
  msg_pair("Server ID", server.id)
  msg_pair("Server Name", server.name)
  msg_pair("IP Addresses", server.ip_addresses.nil? ? "none" : server.ip_addresses.join(", "))
  msg_pair("Status", server.status)
  msg_pair("Catalog Name", server.catalog_name)
  msg_pair("Owner IDs", server.owner_ids.empty? ? "none" : server.owner_ids.join(", "))
  msg_pair("Owner Names", server.owner_names.empty? ? "none" : server.owner_names.join(", "))
end