knife-vrealize 3.0.0 → 4.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/{LICENSE.txt → LICENSE} +0 -0
- data/lib/chef/knife/cloud/vra_service.rb +27 -27
- data/lib/chef/knife/cloud/vra_service_helpers.rb +8 -8
- data/lib/chef/knife/cloud/vra_service_options.rb +16 -16
- data/lib/chef/knife/vra_catalog_list.rb +18 -18
- data/lib/chef/knife/vra_server_create.rb +48 -48
- data/lib/chef/knife/vra_server_delete.rb +9 -9
- data/lib/chef/knife/vra_server_list.rb +15 -15
- data/lib/chef/knife/vra_server_show.rb +10 -10
- data/lib/chef/knife/vro_workflow_execute.rb +27 -27
- data/lib/knife-vrealize/version.rb +2 -2
- metadata +20 -100
- data/.github/ISSUE_TEMPLATE.md +0 -23
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- data/.gitignore +0 -17
- data/.rubocop.yml +0 -19
- data/.travis.yml +0 -27
- data/CHANGELOG.md +0 -118
- data/Gemfile +0 -4
- data/Jenkinsfile +0 -28
- data/README.md +0 -217
- data/Rakefile +0 -21
- data/knife-vrealize.gemspec +0 -34
- data/spec/spec_helper.rb +0 -18
- data/spec/unit/cloud/vra_service_helpers_spec.rb +0 -153
- data/spec/unit/cloud/vra_service_spec.rb +0 -251
- data/spec/unit/vra_catalog_list_spec.rb +0 -44
- data/spec/unit/vra_server_create_spec.rb +0 -171
- data/spec/unit/vra_server_delete_spec.rb +0 -64
- data/spec/unit/vra_server_list_spec.rb +0 -51
- data/spec/unit/vra_server_show_spec.rb +0 -44
- data/spec/unit/vro_workflow_execute_spec.rb +0 -366
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fc49e40f8108c889eeefee0e36abd650d75360e0d684428dc73fbe0f5343bdb7
|
4
|
+
data.tar.gz: 804f29de229fb86018eec056a4823ce7467acc6c926213555f21c0a31594dc96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e049bf4c9c8bf7ebcba24120ed1af301cdd768950254f7df570190ea1e39427067ebabe7c1ec848f59f5801eef44d8c5d2f577539ffacd65a98d4490ec21bfa
|
7
|
+
data.tar.gz: a0a23e3c51faa889ae4198cc4f5631425f73cb6a33caa8095a2ed52b59dd025bb1732466d2906595f72cdcaad80b98f031c5e5ac0f94eceb0084ba945fc553fb
|
data/{LICENSE.txt → LICENSE}
RENAMED
File without changes
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
5
|
-
# Copyright::
|
5
|
+
# Copyright:: 2015-2019, Chef Software, Inc.
|
6
6
|
# License:: Apache License, Version 2.0
|
7
7
|
#
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -18,18 +18,18 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
21
|
+
require "chef/knife/cloud/exceptions"
|
22
|
+
require "chef/knife/cloud/service"
|
23
|
+
require "chef/knife/cloud/helpers"
|
24
|
+
require "chef/knife/cloud/vra_service_helpers"
|
25
|
+
require "vra"
|
26
26
|
|
27
27
|
class Chef
|
28
28
|
class Knife
|
29
29
|
class Cloud
|
30
30
|
class VraService < Service
|
31
31
|
include VraServiceHelpers
|
32
|
-
def initialize(options={})
|
32
|
+
def initialize(options = {})
|
33
33
|
super(options)
|
34
34
|
|
35
35
|
@username = options[:username]
|
@@ -51,7 +51,7 @@ class Chef
|
|
51
51
|
)
|
52
52
|
end
|
53
53
|
|
54
|
-
def create_server(options={})
|
54
|
+
def create_server(options = {})
|
55
55
|
submitted_request = catalog_request(options).submit
|
56
56
|
ui.msg("Catalog request #{submitted_request.id} submitted.")
|
57
57
|
wait_for_request(submitted_request, options[:wait_time].to_i, options[:refresh_rate])
|
@@ -61,8 +61,8 @@ class Chef
|
|
61
61
|
raise CloudExceptions::ServerCreateError, submitted_request.completion_details if submitted_request.failed?
|
62
62
|
|
63
63
|
servers = submitted_request.resources.select(&:vm?)
|
64
|
-
raise CloudExceptions::ServerCreateError,
|
65
|
-
raise CloudExceptions::ServerCreateError,
|
64
|
+
raise CloudExceptions::ServerCreateError, "The vRA request created more than one server, but we were only expecting 1" if servers.length > 1
|
65
|
+
raise CloudExceptions::ServerCreateError, "The vRA request did not create any servers" if servers.length == 0
|
66
66
|
|
67
67
|
servers.first
|
68
68
|
end
|
@@ -70,19 +70,19 @@ class Chef
|
|
70
70
|
def delete_server(instance_id)
|
71
71
|
server = get_server(instance_id)
|
72
72
|
server_summary(server)
|
73
|
-
ui.msg(
|
73
|
+
ui.msg("")
|
74
74
|
|
75
|
-
if server.status ==
|
75
|
+
if server.status == "DELETED"
|
76
76
|
ui.warn("Server is already deleted.\n")
|
77
77
|
return
|
78
78
|
end
|
79
79
|
|
80
|
-
ui.confirm(
|
80
|
+
ui.confirm("Do you really want to delete this server")
|
81
81
|
|
82
82
|
destroy_request = server.destroy
|
83
83
|
ui.msg("Destroy request #{destroy_request.id} submitted.")
|
84
84
|
wait_for_request(destroy_request)
|
85
|
-
ui.msg(
|
85
|
+
ui.msg("Destroy request complete.")
|
86
86
|
request_summary(destroy_request)
|
87
87
|
end
|
88
88
|
|
@@ -102,22 +102,22 @@ class Chef
|
|
102
102
|
connection.resources.by_id(instance_id)
|
103
103
|
end
|
104
104
|
|
105
|
-
def server_summary(server, _columns_with_info=nil)
|
106
|
-
msg_pair(
|
107
|
-
msg_pair(
|
108
|
-
msg_pair(
|
109
|
-
msg_pair(
|
110
|
-
msg_pair(
|
111
|
-
msg_pair(
|
112
|
-
msg_pair(
|
105
|
+
def server_summary(server, _columns_with_info = nil)
|
106
|
+
msg_pair("Server ID", server.id)
|
107
|
+
msg_pair("Server Name", server.name)
|
108
|
+
msg_pair("IP Addresses", server.ip_addresses.nil? ? "none" : server.ip_addresses.join(", "))
|
109
|
+
msg_pair("Status", server.status)
|
110
|
+
msg_pair("Catalog Name", server.catalog_name)
|
111
|
+
msg_pair("Owner IDs", server.owner_ids.empty? ? "none" : server.owner_ids.join(", "))
|
112
|
+
msg_pair("Owner Names", server.owner_names.empty? ? "none" : server.owner_names.join(", "))
|
113
113
|
end
|
114
114
|
|
115
115
|
def request_summary(request)
|
116
|
-
ui.msg(
|
117
|
-
msg_pair(
|
118
|
-
msg_pair(
|
119
|
-
msg_pair(
|
120
|
-
ui.msg(
|
116
|
+
ui.msg("")
|
117
|
+
msg_pair("Request Status", request.status)
|
118
|
+
msg_pair("Completion State", request.completion_state)
|
119
|
+
msg_pair("Completion Details", request.completion_details)
|
120
|
+
ui.msg("")
|
121
121
|
end
|
122
122
|
|
123
123
|
def catalog_request(options)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
5
|
-
# Copyright::
|
5
|
+
# Copyright:: 2015-2019, Chef Software, Inc.
|
6
6
|
# License:: Apache License, Version 2.0
|
7
7
|
#
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
-
require
|
21
|
+
require "chef/knife/cloud/helpers"
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Knife
|
@@ -39,10 +39,10 @@ class Chef
|
|
39
39
|
!locate_config_value(:vra_disable_ssl_verify)
|
40
40
|
end
|
41
41
|
|
42
|
-
def wait_for_request(request, wait_time=600, refresh_rate=2)
|
43
|
-
print
|
42
|
+
def wait_for_request(request, wait_time = 600, refresh_rate = 2)
|
43
|
+
print "Waiting for request to complete."
|
44
44
|
|
45
|
-
last_status =
|
45
|
+
last_status = ""
|
46
46
|
|
47
47
|
begin
|
48
48
|
Timeout.timeout(wait_time) do
|
@@ -55,7 +55,7 @@ class Chef
|
|
55
55
|
end
|
56
56
|
|
57
57
|
if last_status == request.status
|
58
|
-
print
|
58
|
+
print "."
|
59
59
|
else
|
60
60
|
last_status = request.status
|
61
61
|
print "\n"
|
@@ -66,7 +66,7 @@ class Chef
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
rescue Timeout::Error
|
69
|
-
ui.msg(
|
69
|
+
ui.msg("")
|
70
70
|
ui.error("Request did not complete in #{wait_time} seconds. Check the Requests tab in the vRA UI for more information.")
|
71
71
|
exit 1
|
72
72
|
end
|
@@ -81,7 +81,7 @@ class Chef
|
|
81
81
|
missing = keys.select { |x| locate_config_value(x).nil? }
|
82
82
|
|
83
83
|
unless missing.empty?
|
84
|
-
ui.error("The following required parameters are missing: #{missing.join(
|
84
|
+
ui.error("The following required parameters are missing: #{missing.join(", ")}")
|
85
85
|
exit(1)
|
86
86
|
end
|
87
87
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
5
|
-
# Copyright::
|
5
|
+
# Copyright:: 2015-2019, Chef Software, Inc.
|
6
6
|
# License:: Apache License, Version 2.0
|
7
7
|
#
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -27,37 +27,37 @@ class Chef
|
|
27
27
|
def self.included(includer)
|
28
28
|
includer.class_eval do
|
29
29
|
option :vra_base_url,
|
30
|
-
long:
|
31
|
-
description:
|
32
|
-
proc: proc { |url| url.sub(%r{/(\/)+$/},
|
30
|
+
long: "--vra-base-url API_URL",
|
31
|
+
description: "URL for the vRA server",
|
32
|
+
proc: proc { |url| url.sub(%r{/(\/)+$/}, "") }
|
33
33
|
|
34
34
|
option :vra_username,
|
35
|
-
long:
|
36
|
-
description:
|
35
|
+
long: "--vra-username USERNAME",
|
36
|
+
description: "Username to use with the vRA API"
|
37
37
|
|
38
38
|
option :vra_password,
|
39
|
-
long:
|
40
|
-
description:
|
39
|
+
long: "--vra-password PASSWORD",
|
40
|
+
description: "Password to use with the vRA API"
|
41
41
|
|
42
42
|
option :vra_tenant,
|
43
|
-
long:
|
44
|
-
description:
|
43
|
+
long: "--vra-tenant TENANT",
|
44
|
+
description: "Tenant name (organization) to use with the vRA API"
|
45
45
|
|
46
46
|
option :vra_disable_ssl_verify,
|
47
|
-
long:
|
48
|
-
description:
|
47
|
+
long: "--vra-disable-ssl-verify",
|
48
|
+
description: "Skip any SSL verification for the vRA API",
|
49
49
|
boolean: true,
|
50
50
|
default: false
|
51
51
|
|
52
52
|
option :vra_page_size,
|
53
|
-
long:
|
54
|
-
description:
|
53
|
+
long: "--page-size NUM_OF_ITEMS",
|
54
|
+
description: "Maximum number of items to fetch from the vRA API when pagination is forced",
|
55
55
|
default: 200,
|
56
56
|
proc: proc { |page_size| page_size.to_i }
|
57
57
|
|
58
58
|
option :request_refresh_rate,
|
59
|
-
long:
|
60
|
-
description:
|
59
|
+
long: "--request-refresh-rate SECS",
|
60
|
+
description: "Number of seconds to sleep between each check of the request status, defaults to 2",
|
61
61
|
default: 2,
|
62
62
|
proc: proc { |secs| secs.to_i }
|
63
63
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
5
|
-
# Copyright::
|
5
|
+
# Copyright:: 2015-2019, Chef Software, Inc.
|
6
6
|
# License:: Apache License, Version 2.0
|
7
7
|
#
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -18,11 +18,11 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
21
|
+
require "chef/knife"
|
22
|
+
require "chef/knife/cloud/list_resource_command"
|
23
|
+
require "chef/knife/cloud/vra_service"
|
24
|
+
require "chef/knife/cloud/vra_service_helpers"
|
25
|
+
require "chef/knife/cloud/vra_service_options"
|
26
26
|
|
27
27
|
class Chef
|
28
28
|
class Knife
|
@@ -31,24 +31,24 @@ class Chef
|
|
31
31
|
include VraServiceHelpers
|
32
32
|
include VraServiceOptions
|
33
33
|
|
34
|
-
banner
|
34
|
+
banner "knife vra catalog list"
|
35
35
|
|
36
36
|
option :entitled,
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
long: "--entitled-only",
|
38
|
+
description: "only list entitled vRA catalog entries",
|
39
|
+
boolean: true,
|
40
|
+
default: false
|
41
41
|
|
42
42
|
def before_exec_command
|
43
43
|
@columns_with_info = [
|
44
|
-
{ label:
|
45
|
-
{ label:
|
46
|
-
{ label:
|
47
|
-
{ label:
|
48
|
-
{ label:
|
44
|
+
{ label: "Catalog ID", key: "id" },
|
45
|
+
{ label: "Name", key: "name" },
|
46
|
+
{ label: "Description", key: "description" },
|
47
|
+
{ label: "Status", key: "status", value_callback: method(:format_status_value) },
|
48
|
+
{ label: "Subtenant", key: "subtenant_name" },
|
49
49
|
]
|
50
50
|
|
51
|
-
@sort_by_field =
|
51
|
+
@sort_by_field = "name"
|
52
52
|
end
|
53
53
|
|
54
54
|
def query_resource
|
@@ -57,7 +57,7 @@ class Chef
|
|
57
57
|
|
58
58
|
def format_status_value(status)
|
59
59
|
status = status.downcase
|
60
|
-
color = if status ==
|
60
|
+
color = if status == "published"
|
61
61
|
:green
|
62
62
|
else
|
63
63
|
:red
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
5
|
-
# Copyright::
|
5
|
+
# Copyright:: 2015-2019, Chef Software, Inc.
|
6
6
|
# License:: Apache License, Version 2.0
|
7
7
|
#
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -18,12 +18,12 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
21
|
+
require "chef/knife"
|
22
|
+
require "chef/knife/cloud/server/create_command"
|
23
|
+
require "chef/knife/cloud/server/create_options"
|
24
|
+
require "chef/knife/cloud/vra_service"
|
25
|
+
require "chef/knife/cloud/vra_service_helpers"
|
26
|
+
require "chef/knife/cloud/vra_service_options"
|
27
27
|
|
28
28
|
class Chef
|
29
29
|
class Knife
|
@@ -33,57 +33,57 @@ class Chef
|
|
33
33
|
include VraServiceOptions
|
34
34
|
include ServerCreateOptions
|
35
35
|
|
36
|
-
banner
|
36
|
+
banner "knife vra server create CATALOG_ID (options)"
|
37
37
|
|
38
38
|
option :cpus,
|
39
|
-
|
40
|
-
|
39
|
+
long: "--cpus NUM_CPUS",
|
40
|
+
description: "Number of CPUs the server should have"
|
41
41
|
|
42
42
|
option :node_ssl_verify_mode,
|
43
|
-
|
44
|
-
|
43
|
+
long: "--node-ssl-verify-mode [peer|none]",
|
44
|
+
description: "Whether or not to verify the SSL cert for all HTTPS requests when bootstrapping"
|
45
45
|
option :memory,
|
46
|
-
|
47
|
-
|
46
|
+
long: "--memory RAM_IN_MB",
|
47
|
+
description: "Amount of RAM, in MB, the server should have"
|
48
48
|
|
49
49
|
option :requested_for,
|
50
|
-
|
51
|
-
|
50
|
+
long: "--requested-for LOGIN",
|
51
|
+
description: "The login to list as the owner of this resource. Will default to the vra_username parameter"
|
52
52
|
|
53
53
|
option :server_create_timeout,
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
long: "--server-create-timeout SECONDS",
|
55
|
+
description: "number of seconds to wait for the server to complete",
|
56
|
+
default: 600
|
57
57
|
|
58
58
|
option :subtenant_id,
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
long: "--subtenant-id ID",
|
60
|
+
description: 'The subtenant ID (a.k.a "business group") to list as the owner of this resource. ' \
|
61
|
+
"Will default to the blueprint subtenant if it exists."
|
62
62
|
|
63
63
|
option :lease_days,
|
64
|
-
|
65
|
-
|
64
|
+
long: "--lease-days NUM_DAYS",
|
65
|
+
description: "Number of days requested for the server lease, provided the blueprint allows this to be specified"
|
66
66
|
|
67
67
|
option :notes,
|
68
|
-
|
69
|
-
|
68
|
+
long: "--notes NOTES",
|
69
|
+
description: "String of text to be included in the request notes."
|
70
70
|
|
71
71
|
option :extra_params,
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
72
|
+
long: "--extra-param KEY=TYPE:VALUE",
|
73
|
+
description: 'Additional parameters to pass to vRA for this catalog request. TYPE must be "string" or "integer". ' \
|
74
|
+
"Can be used multiple times.",
|
75
|
+
default: {},
|
76
|
+
proc: proc { |param|
|
77
|
+
Chef::Config[:knife][:vra_extra_params] ||= {}
|
78
|
+
key, value_str = param.split("=")
|
79
|
+
Chef::Config[:knife][:vra_extra_params].merge!(key => value_str)
|
80
|
+
}
|
81
81
|
|
82
82
|
def validate_params!
|
83
83
|
super
|
84
84
|
|
85
85
|
if @name_args.empty?
|
86
|
-
ui.error(
|
86
|
+
ui.error("You must supply a Catalog ID to use for your new server.")
|
87
87
|
exit 1
|
88
88
|
end
|
89
89
|
|
@@ -96,16 +96,16 @@ class Chef
|
|
96
96
|
super
|
97
97
|
|
98
98
|
@create_options = {
|
99
|
-
catalog_id:
|
100
|
-
cpus:
|
101
|
-
memory:
|
102
|
-
requested_for:
|
103
|
-
subtenant_id:
|
104
|
-
lease_days:
|
105
|
-
notes:
|
106
|
-
extra_params:
|
107
|
-
wait_time:
|
108
|
-
refresh_rate:
|
99
|
+
catalog_id: @name_args.first,
|
100
|
+
cpus: locate_config_value(:cpus),
|
101
|
+
memory: locate_config_value(:memory),
|
102
|
+
requested_for: locate_config_value(:requested_for),
|
103
|
+
subtenant_id: locate_config_value(:subtenant_id),
|
104
|
+
lease_days: locate_config_value(:lease_days),
|
105
|
+
notes: locate_config_value(:notes),
|
106
|
+
extra_params: extra_params,
|
107
|
+
wait_time: locate_config_value(:server_create_timeout),
|
108
|
+
refresh_rate: locate_config_value(:request_refresh_rate),
|
109
109
|
}
|
110
110
|
end
|
111
111
|
|
@@ -120,7 +120,7 @@ class Chef
|
|
120
120
|
return if Chef::Config[:knife][:vra_extra_params].nil? || Chef::Config[:knife][:vra_extra_params].empty?
|
121
121
|
|
122
122
|
Chef::Config[:knife][:vra_extra_params].each_with_object([]) do |(key, value_str), memo|
|
123
|
-
type, value = value_str.split(
|
123
|
+
type, value = value_str.split(":")
|
124
124
|
memo << { key: key, type: type, value: value }
|
125
125
|
end
|
126
126
|
end
|
@@ -131,7 +131,7 @@ class Chef
|
|
131
131
|
extra_params.each do |param|
|
132
132
|
raise ArgumentError, "No type and value set for extra parameter #{param[:key]}" if param[:type].nil? || param[:value].nil?
|
133
133
|
raise ArgumentError, "Invalid parameter type for #{param[:key]} - must be string or integer" unless
|
134
|
-
param[:type] ==
|
134
|
+
param[:type] == "string" || param[:type] == "integer"
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|