Class: Chef::Knife::Cloud::VraService

Inherits:
Service
  • Object
show all
Includes:
VraServiceHelpers
Defined in:
lib/chef/knife/cloud/vra_service.rb

Instance Method Summary collapse

Methods included from VraServiceHelpers

#check_for_missing_config_values!, #create_service_instance, #validate!, #verify_ssl?, #wait_for_request

Constructor Details

#initialize(options = {}) ⇒ VraService

Returns a new instance of VraService.



32
33
34
35
36
37
38
39
40
41
# 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

Instance Method Details

#catalog_request(options) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/chef/knife/cloud/vra_service.rb', line 126

def catalog_request(options)
  catalog_request = connection.catalog.request(options[:catalog_id])

  catalog_request.image_mapping  = options[:image_mapping]
  catalog_request.flavor_mapping = options[:flavor_mapping]
  catalog_request.name           = options[:name]
  catalog_request.project_id     = options[:project_id]
  catalog_request.version        = options[:version] unless options[:version].nil?

  options[:extra_params]&.each do |param|
    catalog_request.set_parameter(param[:key], param[:type], param[:value])
  end
  # rubocop:enable all

  catalog_request
end

#connectionObject



43
44
45
46
47
48
49
50
51
52
# 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 = {}) ⇒ Object

Raises:

  • (CloudExceptions::ServerCreateError)


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/chef/knife/cloud/vra_service.rb', line 54

def create_server(options = {})
   = catalog_request(options).submit
  ui.msg("Catalog request #{.id} submitted.")
  wait_for_request(, (options[:wait_time] || 600).to_i, options[:refresh_rate] || 2)
  ui.msg("Catalog request complete.\n")
  request_summary()

  raise CloudExceptions::ServerCreateError if .failed?

  servers = .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(deployment_id) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/chef/knife/cloud/vra_service.rb', line 70

def delete_server(deployment_id)
  deployment = get_deployment(deployment_id)
  server = deployment.resources.select(&:vm?).first
  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 = deployment.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_deployment(deployment_id) ⇒ Object



102
103
104
# File 'lib/chef/knife/cloud/vra_service.rb', line 102

def get_deployment(deployment_id)
  connection.deployments.by_id(deployment_id)
end

#get_server(deployment_id) ⇒ Object



106
107
108
109
# File 'lib/chef/knife/cloud/vra_service.rb', line 106

def get_server(deployment_id)
  deployment = connection.deployments.by_id(deployment_id)
  deployment.resources.select(&:vm?).first
end

#list_catalog_items(project_id, entitled) ⇒ Object



94
95
96
97
98
99
100
# File 'lib/chef/knife/cloud/vra_service.rb', line 94

def list_catalog_items(project_id, entitled)
  if entitled
    connection.catalog.entitled_items(project_id)
  else
    connection.catalog.all_items
  end
end

#list_serversObject



90
91
92
# File 'lib/chef/knife/cloud/vra_service.rb', line 90

def list_servers
  connection.deployments.all
end

#request_summary(request) ⇒ Object



120
121
122
123
124
# File 'lib/chef/knife/cloud/vra_service.rb', line 120

def request_summary(request)
  ui.msg("")
  msg_pair("Request Status", request.status)
  ui.msg("")
end

#server_summary(server, _columns_with_info = nil) ⇒ Object



111
112
113
114
115
116
117
118
# File 'lib/chef/knife/cloud/vra_service.rb', line 111

def server_summary(server, _columns_with_info = nil)
  deployment = connection.deployments.by_id(server.deployment_id)
  msg_pair("Deployment ID", deployment.id)
  msg_pair("Deployment Name", deployment.name)
  msg_pair("IP Address", server.ip_address.nil? ? "none" : server.ip_address)
  msg_pair("Status", server.status)
  msg_pair("Owner Names", server.owner_names.empty? ? "none" : server.owner_names)
end