knife-azure 3.0.6 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/azure/azure_interface.rb +1 -1
- data/lib/azure/custom_errors.rb +2 -2
- data/lib/azure/helpers.rb +1 -1
- data/lib/azure/resource_management/ARM_deployment_template.rb +82 -27
- data/lib/azure/resource_management/ARM_interface.rb +112 -118
- data/lib/azure/resource_management/rest/arm_client.rb +208 -0
- data/lib/azure/resource_management/rest/environments.rb +89 -0
- data/lib/azure/resource_management/rest/errors.rb +57 -0
- data/lib/azure/resource_management/rest/http.rb +335 -0
- data/lib/azure/resource_management/rest/rest_object.rb +103 -0
- data/lib/azure/resource_management/rest/secure_connection.rb +57 -0
- data/lib/azure/resource_management/rest/token_provider.rb +125 -0
- data/lib/azure/resource_management/vnet_config.rb +4 -4
- data/lib/azure/resource_management/windows_credentials.rb +3 -3
- data/lib/chef/knife/azurerm_server_create.rb +22 -10
- data/lib/chef/knife/azurerm_server_delete.rb +1 -1
- data/lib/chef/knife/azurerm_server_list.rb +1 -1
- data/lib/chef/knife/azurerm_server_show.rb +1 -1
- data/lib/chef/knife/bootstrap/bootstrapper.rb +142 -14
- data/lib/chef/knife/bootstrap/common_bootstrap_options.rb +4 -6
- data/lib/chef/knife/bootstrap_azurerm.rb +1 -1
- data/lib/chef/knife/helpers/azurerm_base.rb +170 -9
- data/lib/knife-azure/version.rb +2 -2
- metadata +37 -95
- data/lib/azure/service_management/ASM_interface.rb +0 -310
- data/lib/azure/service_management/ag.rb +0 -99
- data/lib/azure/service_management/certificate.rb +0 -235
- data/lib/azure/service_management/connection.rb +0 -102
- data/lib/azure/service_management/deploy.rb +0 -221
- data/lib/azure/service_management/disk.rb +0 -68
- data/lib/azure/service_management/host.rb +0 -184
- data/lib/azure/service_management/image.rb +0 -94
- data/lib/azure/service_management/loadbalancer.rb +0 -78
- data/lib/azure/service_management/rest.rb +0 -126
- data/lib/azure/service_management/role.rb +0 -717
- data/lib/azure/service_management/storageaccount.rb +0 -127
- data/lib/azure/service_management/utility.rb +0 -40
- data/lib/azure/service_management/vnet.rb +0 -134
- data/lib/chef/knife/azure_ag_create.rb +0 -73
- data/lib/chef/knife/azure_ag_list.rb +0 -35
- data/lib/chef/knife/azure_image_list.rb +0 -56
- data/lib/chef/knife/azure_internal-lb_create.rb +0 -74
- data/lib/chef/knife/azure_internal-lb_list.rb +0 -35
- data/lib/chef/knife/azure_server_create.rb +0 -531
- data/lib/chef/knife/azure_server_delete.rb +0 -136
- data/lib/chef/knife/azure_server_list.rb +0 -38
- data/lib/chef/knife/azure_server_show.rb +0 -41
- data/lib/chef/knife/azure_vnet_create.rb +0 -74
- data/lib/chef/knife/azure_vnet_list.rb +0 -35
- data/lib/chef/knife/bootstrap_azure.rb +0 -191
- data/lib/chef/knife/helpers/azure_base.rb +0 -392
data/lib/knife-azure/version.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Copyright:: Copyright (c)
|
|
2
|
+
# Copyright:: Copyright (c) 2012-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
|
|
3
3
|
# License:: Apache License, Version 2.0
|
|
4
4
|
#
|
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
module Knife
|
|
19
19
|
module Azure
|
|
20
|
-
VERSION = "
|
|
20
|
+
VERSION = "5.0.1".freeze
|
|
21
21
|
MAJOR, MINOR, TINY = VERSION.split(".")
|
|
22
22
|
end
|
|
23
23
|
end
|
metadata
CHANGED
|
@@ -1,140 +1,102 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: knife-azure
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Barry Davis
|
|
8
8
|
- Chirag Jog
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2026-10-15 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
|
-
name:
|
|
15
|
+
name: knife
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
18
|
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
20
|
+
version: '18.10'
|
|
21
21
|
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
25
|
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version:
|
|
27
|
+
version: '18.10'
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
29
|
+
name: abbrev
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
32
|
- - ">="
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
34
|
+
version: '0'
|
|
35
35
|
type: :runtime
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
39
|
- - ">="
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
41
|
+
version: '0'
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
43
|
+
name: chef
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
|
-
- - "~>"
|
|
47
|
-
- !ruby/object:Gem::Version
|
|
48
|
-
version: '0.17'
|
|
49
46
|
- - ">="
|
|
50
47
|
- !ruby/object:Gem::Version
|
|
51
|
-
version:
|
|
48
|
+
version: '18.10'
|
|
52
49
|
type: :runtime
|
|
53
50
|
prerelease: false
|
|
54
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
55
52
|
requirements:
|
|
56
|
-
- - "~>"
|
|
57
|
-
- !ruby/object:Gem::Version
|
|
58
|
-
version: '0.17'
|
|
59
53
|
- - ">="
|
|
60
54
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
55
|
+
version: '18.10'
|
|
62
56
|
- !ruby/object:Gem::Dependency
|
|
63
|
-
name:
|
|
57
|
+
name: nokogiri
|
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
|
65
59
|
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0.18'
|
|
69
60
|
- - ">="
|
|
70
61
|
- !ruby/object:Gem::Version
|
|
71
|
-
version:
|
|
62
|
+
version: 1.5.5
|
|
72
63
|
type: :runtime
|
|
73
64
|
prerelease: false
|
|
74
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
75
66
|
requirements:
|
|
76
|
-
- - "~>"
|
|
77
|
-
- !ruby/object:Gem::Version
|
|
78
|
-
version: '0.18'
|
|
79
67
|
- - ">="
|
|
80
68
|
- !ruby/object:Gem::Version
|
|
81
|
-
version:
|
|
69
|
+
version: 1.5.5
|
|
82
70
|
- !ruby/object:Gem::Dependency
|
|
83
|
-
name:
|
|
71
|
+
name: listen
|
|
84
72
|
requirement: !ruby/object:Gem::Requirement
|
|
85
73
|
requirements:
|
|
86
|
-
- - ">="
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: 0.20.0
|
|
89
74
|
- - "~>"
|
|
90
75
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: '
|
|
76
|
+
version: '3.1'
|
|
92
77
|
type: :runtime
|
|
93
78
|
prerelease: false
|
|
94
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
95
80
|
requirements:
|
|
96
|
-
- - ">="
|
|
97
|
-
- !ruby/object:Gem::Version
|
|
98
|
-
version: 0.20.0
|
|
99
81
|
- - "~>"
|
|
100
82
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: '
|
|
83
|
+
version: '3.1'
|
|
102
84
|
- !ruby/object:Gem::Dependency
|
|
103
|
-
name:
|
|
85
|
+
name: ipaddress
|
|
104
86
|
requirement: !ruby/object:Gem::Requirement
|
|
105
87
|
requirements:
|
|
106
|
-
- - "~>"
|
|
107
|
-
- !ruby/object:Gem::Version
|
|
108
|
-
version: '0.18'
|
|
109
88
|
- - ">="
|
|
110
89
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: 0
|
|
90
|
+
version: '0'
|
|
112
91
|
type: :runtime
|
|
113
92
|
prerelease: false
|
|
114
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
115
94
|
requirements:
|
|
116
|
-
- - "~>"
|
|
117
|
-
- !ruby/object:Gem::Version
|
|
118
|
-
version: '0.18'
|
|
119
95
|
- - ">="
|
|
120
96
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 0
|
|
122
|
-
- !ruby/object:Gem::Dependency
|
|
123
|
-
name: listen
|
|
124
|
-
requirement: !ruby/object:Gem::Requirement
|
|
125
|
-
requirements:
|
|
126
|
-
- - "~>"
|
|
127
|
-
- !ruby/object:Gem::Version
|
|
128
|
-
version: '3.1'
|
|
129
|
-
type: :runtime
|
|
130
|
-
prerelease: false
|
|
131
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
132
|
-
requirements:
|
|
133
|
-
- - "~>"
|
|
134
|
-
- !ruby/object:Gem::Version
|
|
135
|
-
version: '3.1'
|
|
97
|
+
version: '0'
|
|
136
98
|
- !ruby/object:Gem::Dependency
|
|
137
|
-
name:
|
|
99
|
+
name: ffi
|
|
138
100
|
requirement: !ruby/object:Gem::Requirement
|
|
139
101
|
requirements:
|
|
140
102
|
- - ">="
|
|
@@ -148,7 +110,7 @@ dependencies:
|
|
|
148
110
|
- !ruby/object:Gem::Version
|
|
149
111
|
version: '0'
|
|
150
112
|
- !ruby/object:Gem::Dependency
|
|
151
|
-
name:
|
|
113
|
+
name: rb-readline
|
|
152
114
|
requirement: !ruby/object:Gem::Requirement
|
|
153
115
|
requirements:
|
|
154
116
|
- - ">="
|
|
@@ -161,7 +123,7 @@ dependencies:
|
|
|
161
123
|
- - ">="
|
|
162
124
|
- !ruby/object:Gem::Version
|
|
163
125
|
version: '0'
|
|
164
|
-
description: A plugin to the Chef knife tool for creating instances on the Microsoft
|
|
126
|
+
description: A plugin to the Chef Infra knife tool for creating instances on the Microsoft
|
|
165
127
|
Azure platform
|
|
166
128
|
email: oss@chef.io
|
|
167
129
|
executables: []
|
|
@@ -175,49 +137,29 @@ files:
|
|
|
175
137
|
- lib/azure/helpers.rb
|
|
176
138
|
- lib/azure/resource_management/ARM_deployment_template.rb
|
|
177
139
|
- lib/azure/resource_management/ARM_interface.rb
|
|
140
|
+
- lib/azure/resource_management/rest/arm_client.rb
|
|
141
|
+
- lib/azure/resource_management/rest/environments.rb
|
|
142
|
+
- lib/azure/resource_management/rest/errors.rb
|
|
143
|
+
- lib/azure/resource_management/rest/http.rb
|
|
144
|
+
- lib/azure/resource_management/rest/rest_object.rb
|
|
145
|
+
- lib/azure/resource_management/rest/secure_connection.rb
|
|
146
|
+
- lib/azure/resource_management/rest/token_provider.rb
|
|
178
147
|
- lib/azure/resource_management/vnet_config.rb
|
|
179
148
|
- lib/azure/resource_management/windows_credentials.rb
|
|
180
|
-
- lib/azure/service_management/ASM_interface.rb
|
|
181
|
-
- lib/azure/service_management/ag.rb
|
|
182
|
-
- lib/azure/service_management/certificate.rb
|
|
183
|
-
- lib/azure/service_management/connection.rb
|
|
184
|
-
- lib/azure/service_management/deploy.rb
|
|
185
|
-
- lib/azure/service_management/disk.rb
|
|
186
|
-
- lib/azure/service_management/host.rb
|
|
187
|
-
- lib/azure/service_management/image.rb
|
|
188
|
-
- lib/azure/service_management/loadbalancer.rb
|
|
189
|
-
- lib/azure/service_management/rest.rb
|
|
190
|
-
- lib/azure/service_management/role.rb
|
|
191
|
-
- lib/azure/service_management/storageaccount.rb
|
|
192
|
-
- lib/azure/service_management/utility.rb
|
|
193
|
-
- lib/azure/service_management/vnet.rb
|
|
194
|
-
- lib/chef/knife/azure_ag_create.rb
|
|
195
|
-
- lib/chef/knife/azure_ag_list.rb
|
|
196
|
-
- lib/chef/knife/azure_image_list.rb
|
|
197
|
-
- lib/chef/knife/azure_internal-lb_create.rb
|
|
198
|
-
- lib/chef/knife/azure_internal-lb_list.rb
|
|
199
|
-
- lib/chef/knife/azure_server_create.rb
|
|
200
|
-
- lib/chef/knife/azure_server_delete.rb
|
|
201
|
-
- lib/chef/knife/azure_server_list.rb
|
|
202
|
-
- lib/chef/knife/azure_server_show.rb
|
|
203
|
-
- lib/chef/knife/azure_vnet_create.rb
|
|
204
|
-
- lib/chef/knife/azure_vnet_list.rb
|
|
205
149
|
- lib/chef/knife/azurerm_server_create.rb
|
|
206
150
|
- lib/chef/knife/azurerm_server_delete.rb
|
|
207
151
|
- lib/chef/knife/azurerm_server_list.rb
|
|
208
152
|
- lib/chef/knife/azurerm_server_show.rb
|
|
209
153
|
- lib/chef/knife/bootstrap/bootstrapper.rb
|
|
210
154
|
- lib/chef/knife/bootstrap/common_bootstrap_options.rb
|
|
211
|
-
- lib/chef/knife/bootstrap_azure.rb
|
|
212
155
|
- lib/chef/knife/bootstrap_azurerm.rb
|
|
213
|
-
- lib/chef/knife/helpers/azure_base.rb
|
|
214
156
|
- lib/chef/knife/helpers/azurerm_base.rb
|
|
215
157
|
- lib/knife-azure/version.rb
|
|
216
158
|
homepage: https://github.com/chef/knife-azure
|
|
217
159
|
licenses:
|
|
218
160
|
- Apache 2.0
|
|
219
161
|
metadata: {}
|
|
220
|
-
post_install_message:
|
|
162
|
+
post_install_message:
|
|
221
163
|
rdoc_options: []
|
|
222
164
|
require_paths:
|
|
223
165
|
- lib
|
|
@@ -225,16 +167,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
225
167
|
requirements:
|
|
226
168
|
- - ">="
|
|
227
169
|
- !ruby/object:Gem::Version
|
|
228
|
-
version: '
|
|
170
|
+
version: '3.1'
|
|
229
171
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
172
|
requirements:
|
|
231
173
|
- - ">="
|
|
232
174
|
- !ruby/object:Gem::Version
|
|
233
175
|
version: '0'
|
|
234
176
|
requirements: []
|
|
235
|
-
rubygems_version: 3.
|
|
236
|
-
signing_key:
|
|
177
|
+
rubygems_version: 3.3.27
|
|
178
|
+
signing_key:
|
|
237
179
|
specification_version: 4
|
|
238
|
-
summary: A plugin to the Chef knife tool for creating instances on the Microsoft
|
|
239
|
-
platform
|
|
180
|
+
summary: A plugin to the Chef Infra knife tool for creating instances on the Microsoft
|
|
181
|
+
Azure platform
|
|
240
182
|
test_files: []
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
|
3
|
-
# License:: Apache License, Version 2.0
|
|
4
|
-
#
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
require_relative "../azure_interface"
|
|
19
|
-
require_relative "rest"
|
|
20
|
-
require_relative "connection"
|
|
21
|
-
|
|
22
|
-
module Azure
|
|
23
|
-
class ServiceManagement
|
|
24
|
-
class ASMInterface < AzureInterface
|
|
25
|
-
include AzureAPI
|
|
26
|
-
|
|
27
|
-
attr_accessor :connection
|
|
28
|
-
|
|
29
|
-
def initialize(params = {})
|
|
30
|
-
@rest = Rest.new(params)
|
|
31
|
-
@connection = Azure::ServiceManagement::Connection.new(@rest)
|
|
32
|
-
super
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def list_images
|
|
36
|
-
connection.images.all
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def list_servers
|
|
40
|
-
servers = connection.roles.all
|
|
41
|
-
cols = ["DNS Name", "VM Name", "Status", "IP Address", "SSH Port", "WinRM Port", "RDP Port"]
|
|
42
|
-
rows = []
|
|
43
|
-
servers.each do |server|
|
|
44
|
-
rows << server.hostedservicename.to_s + ".cloudapp.net" # Info about the DNS name at http://msdn.microsoft.com/en-us/library/ee460806.aspx
|
|
45
|
-
rows << server.name.to_s
|
|
46
|
-
rows << begin
|
|
47
|
-
state = server.status.to_s.downcase
|
|
48
|
-
case state
|
|
49
|
-
when "shutting-down", "terminated", "stopping", "stopped"
|
|
50
|
-
ui.color(state, :red)
|
|
51
|
-
when "pending"
|
|
52
|
-
ui.color(state, :yellow)
|
|
53
|
-
else
|
|
54
|
-
ui.color("ready", :green)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
rows << server.publicipaddress.to_s
|
|
58
|
-
rows << server.sshport.to_s
|
|
59
|
-
rows << server.winrmport.to_s
|
|
60
|
-
ports = server.tcpports
|
|
61
|
-
rows << rdp_port(ports)
|
|
62
|
-
end
|
|
63
|
-
display_list(ui, cols, rows)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def rdp_port(arr_ports)
|
|
67
|
-
unless arr_ports
|
|
68
|
-
return ""
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
if arr_ports.length > 0
|
|
72
|
-
arr_ports.each do |port|
|
|
73
|
-
if port["Name"] == "Remote Desktop"
|
|
74
|
-
return port["PublicPort"]
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
""
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def find_server(params = {})
|
|
82
|
-
server = connection.roles.find(params[:name], params = { azure_dns_name: params[:azure_dns_name] })
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def delete_server(params = {})
|
|
86
|
-
server = find_server({ name: params[:name], azure_dns_name: params[:azure_dns_name] })
|
|
87
|
-
|
|
88
|
-
unless server
|
|
89
|
-
puts "\n"
|
|
90
|
-
ui.error("Server #{params[:name]} does not exist")
|
|
91
|
-
exit!
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
puts "\n"
|
|
95
|
-
msg_pair(ui, "DNS Name", server.hostedservicename + ".cloudapp.net")
|
|
96
|
-
msg_pair(ui, "VM Name", server.name)
|
|
97
|
-
msg_pair(ui, "Size", server.size)
|
|
98
|
-
msg_pair(ui, "Public Ip Address", server.publicipaddress)
|
|
99
|
-
puts "\n"
|
|
100
|
-
|
|
101
|
-
begin
|
|
102
|
-
ui.confirm("Do you really want to delete this server")
|
|
103
|
-
rescue SystemExit # Need to handle this as confirming with N/n raises SystemExit exception
|
|
104
|
-
server = nil # Cleanup is implicitly performed in other cloud plugins
|
|
105
|
-
exit!
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
params[:azure_dns_name] = server.hostedservicename
|
|
109
|
-
|
|
110
|
-
connection.roles.delete(params)
|
|
111
|
-
|
|
112
|
-
puts "\n"
|
|
113
|
-
ui.warn("Deleted server #{server.name}")
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def show_server(name)
|
|
117
|
-
role = connection.roles.find name
|
|
118
|
-
|
|
119
|
-
puts ""
|
|
120
|
-
if role
|
|
121
|
-
details = []
|
|
122
|
-
details << ui.color("Role name", :bold, :cyan)
|
|
123
|
-
details << role.name
|
|
124
|
-
details << ui.color("Status", :bold, :cyan)
|
|
125
|
-
details << role.status
|
|
126
|
-
details << ui.color("Size", :bold, :cyan)
|
|
127
|
-
details << role.size
|
|
128
|
-
details << ui.color("Hosted service name", :bold, :cyan)
|
|
129
|
-
details << role.hostedservicename
|
|
130
|
-
details << ui.color("Deployment name", :bold, :cyan)
|
|
131
|
-
details << role.deployname
|
|
132
|
-
details << ui.color("Host name", :bold, :cyan)
|
|
133
|
-
details << role.hostname
|
|
134
|
-
unless role.sshport.nil?
|
|
135
|
-
details << ui.color("SSH port", :bold, :cyan)
|
|
136
|
-
details << role.sshport
|
|
137
|
-
end
|
|
138
|
-
unless role.winrmport.nil?
|
|
139
|
-
details << ui.color("WinRM port", :bold, :cyan)
|
|
140
|
-
details << role.winrmport
|
|
141
|
-
end
|
|
142
|
-
details << ui.color("Public IP", :bold, :cyan)
|
|
143
|
-
details << role.publicipaddress.to_s
|
|
144
|
-
|
|
145
|
-
unless role.thumbprint.empty?
|
|
146
|
-
details << ui.color("Thumbprint", :bold, :cyan)
|
|
147
|
-
details << role.thumbprint
|
|
148
|
-
end
|
|
149
|
-
puts ui.list(details, :columns_across, 2)
|
|
150
|
-
if role.tcpports.length > 0 || role.udpports.length > 0
|
|
151
|
-
details.clear
|
|
152
|
-
details << ui.color("Ports open", :bold, :cyan)
|
|
153
|
-
details << ui.color("Local port", :bold, :cyan)
|
|
154
|
-
details << ui.color("IP", :bold, :cyan)
|
|
155
|
-
details << ui.color("Public port", :bold, :cyan)
|
|
156
|
-
if role.tcpports.length > 0
|
|
157
|
-
role.tcpports.each do |port|
|
|
158
|
-
details << "tcp"
|
|
159
|
-
details << port["LocalPort"]
|
|
160
|
-
details << port["Vip"]
|
|
161
|
-
details << port["PublicPort"]
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
if role.udpports.length > 0
|
|
165
|
-
role.udpports.each do |port|
|
|
166
|
-
details << "udp"
|
|
167
|
-
details << port["LocalPort"]
|
|
168
|
-
details << port["Vip"]
|
|
169
|
-
details << port["PublicPort"]
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
puts ui.list(details, :columns_across, 4)
|
|
173
|
-
end
|
|
174
|
-
else
|
|
175
|
-
puts "No VM found"
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
rescue => error
|
|
179
|
-
puts "#{error.class} and #{error.message}"
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def list_internal_lb
|
|
183
|
-
lbs = connection.lbs.all
|
|
184
|
-
cols = %w{Name Service Subnet VIP}
|
|
185
|
-
rows = []
|
|
186
|
-
lbs.each do |lb|
|
|
187
|
-
cols.each { |col| rows << lb.send(col.downcase).to_s }
|
|
188
|
-
end
|
|
189
|
-
display_list(ui, cols, rows)
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def create_internal_lb(params = {})
|
|
193
|
-
connection.lbs.create(params)
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def list_vnets
|
|
197
|
-
vnets = connection.vnets.all
|
|
198
|
-
cols = ["Name", "Affinity Group", "State"]
|
|
199
|
-
rows = []
|
|
200
|
-
vnets.each do |vnet|
|
|
201
|
-
%w{name affinity_group state}.each { |col| rows << vnet.send(col).to_s }
|
|
202
|
-
end
|
|
203
|
-
display_list(ui, cols, rows)
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def create_vnet(params = {})
|
|
207
|
-
connection.vnets.create(params)
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
def list_affinity_groups
|
|
211
|
-
affinity_groups = connection.ags.all
|
|
212
|
-
cols = %w{Name Location Description}
|
|
213
|
-
rows = []
|
|
214
|
-
affinity_groups.each do |affinity_group|
|
|
215
|
-
cols.each { |col| rows << affinity_group.send(col.downcase).to_s }
|
|
216
|
-
end
|
|
217
|
-
display_list(ui, cols, rows)
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
def create_affinity_group(params = {})
|
|
221
|
-
connection.ags.create(params)
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
def create_server(params = {})
|
|
225
|
-
remove_hosted_service_on_failure = params[:azure_dns_name]
|
|
226
|
-
if connection.hosts.exists?(params[:azure_dns_name])
|
|
227
|
-
remove_hosted_service_on_failure = nil
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
# If Storage Account is not specified, check if the geographic location has one to re-use
|
|
231
|
-
if not params[:azure_storage_account]
|
|
232
|
-
storage_accts = connection.storageaccounts.all
|
|
233
|
-
storage = storage_accts.find { |storage_acct| storage_acct.location.to_s == params[:azure_service_location] }
|
|
234
|
-
unless storage
|
|
235
|
-
params[:azure_storage_account] = [strip_non_ascii(params[:azure_vm_name]), random_string].join.downcase
|
|
236
|
-
remove_storage_service_on_failure = params[:azure_storage_account]
|
|
237
|
-
else
|
|
238
|
-
remove_storage_service_on_failure = nil
|
|
239
|
-
params[:azure_storage_account] = storage.name.to_s
|
|
240
|
-
end
|
|
241
|
-
else
|
|
242
|
-
if connection.storageaccounts.exists?(params[:azure_storage_account])
|
|
243
|
-
remove_storage_service_on_failure = nil
|
|
244
|
-
else
|
|
245
|
-
remove_storage_service_on_failure = params[:azure_storage_account]
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
begin
|
|
250
|
-
connection.deploys.create(params)
|
|
251
|
-
rescue Exception => e
|
|
252
|
-
Chef::Log.error("Failed to create the server -- exception being rescued: #{e}")
|
|
253
|
-
backtrace_message = "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
|
|
254
|
-
Chef::Log.debug("#{backtrace_message}")
|
|
255
|
-
cleanup_and_exit(remove_hosted_service_on_failure, remove_storage_service_on_failure)
|
|
256
|
-
end
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
def cleanup_and_exit(remove_hosted_service_on_failure, remove_storage_service_on_failure)
|
|
260
|
-
Chef::Log.warn("Cleaning up resources...")
|
|
261
|
-
|
|
262
|
-
if remove_hosted_service_on_failure
|
|
263
|
-
ret_val = connection.hosts.delete(remove_hosted_service_on_failure)
|
|
264
|
-
ret_val.content.empty? ? Chef::Log.warn("Deleted created DNS: #{remove_hosted_service_on_failure}.") : Chef::Log.warn("Deletion failed for created DNS:#{remove_hosted_service_on_failure}. " + ret_val.text)
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
if remove_storage_service_on_failure
|
|
268
|
-
ret_val = connection.storageaccounts.delete(remove_storage_service_on_failure)
|
|
269
|
-
ret_val.content.empty? ? Chef::Log.warn("Deleted created Storage Account: #{remove_storage_service_on_failure}.") : Chef::Log.warn("Deletion failed for created Storage Account: #{remove_storage_service_on_failure}. " + ret_val.text)
|
|
270
|
-
end
|
|
271
|
-
exit 1
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
def get_role_server(dns_name, vm_name)
|
|
275
|
-
deploy = connection.deploys.queryDeploy(dns_name)
|
|
276
|
-
deploy.find_role(vm_name)
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
def get_extension(name, publisher)
|
|
280
|
-
connection.query_azure("resourceextensions/#{publisher}/#{name}")
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
def deployment_name(dns_name)
|
|
284
|
-
connection.deploys.get_deploy_name_for_hostedservice(dns_name)
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
def deployment(path)
|
|
288
|
-
connection.query_azure(path)
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
def valid_image?(name)
|
|
292
|
-
connection.images.exists?(name)
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
def vm_image?(name)
|
|
296
|
-
connection.images.is_vm_image(name)
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
def add_extension(name, params = {})
|
|
300
|
-
ui.info "Started with Chef Extension deployment on the server #{name}..."
|
|
301
|
-
connection.roles.update(name, params)
|
|
302
|
-
ui.info "\nSuccessfully deployed Chef Extension on the server #{name}."
|
|
303
|
-
rescue Exception => e
|
|
304
|
-
Chef::Log.error("Failed to add extension to the server -- exception being rescued: #{e}")
|
|
305
|
-
backtrace_message = "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
|
|
306
|
-
Chef::Log.debug("#{backtrace_message}")
|
|
307
|
-
end
|
|
308
|
-
end
|
|
309
|
-
end
|
|
310
|
-
end
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Jeff Mendoza (jeffmendoza@live.com)
|
|
3
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
|
4
|
-
# License:: Apache License, Version 2.0
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
module Azure
|
|
20
|
-
class AGs
|
|
21
|
-
def initialize(connection)
|
|
22
|
-
@connection = connection
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def load
|
|
26
|
-
@ags ||= begin
|
|
27
|
-
@ags = {}
|
|
28
|
-
response = @connection.query_azure("affinitygroups",
|
|
29
|
-
"get",
|
|
30
|
-
"",
|
|
31
|
-
"",
|
|
32
|
-
true,
|
|
33
|
-
false)
|
|
34
|
-
response.css("AffinityGroup").each do |ag|
|
|
35
|
-
item = AG.new(@connection).parse(ag)
|
|
36
|
-
@ags[item.name] = item
|
|
37
|
-
end
|
|
38
|
-
@ags
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def all
|
|
43
|
-
load.values
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def exists?(name)
|
|
47
|
-
load.key?(name)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def find(name)
|
|
51
|
-
load[name]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def create(params)
|
|
55
|
-
ag = AG.new(@connection)
|
|
56
|
-
ag.create(params)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
module Azure
|
|
62
|
-
class AG
|
|
63
|
-
attr_accessor :name, :label, :description, :location
|
|
64
|
-
|
|
65
|
-
def initialize(connection)
|
|
66
|
-
@connection = connection
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def parse(image)
|
|
70
|
-
@name = image.at_css("Name").content
|
|
71
|
-
@label = image.at_css("Label").content
|
|
72
|
-
@description = image.at_css("Description").content if
|
|
73
|
-
image.at_css("Description")
|
|
74
|
-
@location = image.at_css("Location").content if image.at_css("Location")
|
|
75
|
-
self
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def create(params)
|
|
79
|
-
builder = Nokogiri::XML::Builder.new(encoding: "utf-8") do |xml|
|
|
80
|
-
xml.CreateAffinityGroup(
|
|
81
|
-
xmlns: "http://schemas.microsoft.com/windowsazure"
|
|
82
|
-
) do
|
|
83
|
-
xml.Name params[:azure_ag_name]
|
|
84
|
-
xml.Label Base64.strict_encode64(params[:azure_ag_name])
|
|
85
|
-
unless params[:azure_ag_desc].nil?
|
|
86
|
-
xml.Description params[:azure_ag_desc]
|
|
87
|
-
end
|
|
88
|
-
xml.Location params[:azure_location]
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
@connection.query_azure("affinitygroups",
|
|
92
|
-
"post",
|
|
93
|
-
builder.to_xml,
|
|
94
|
-
"",
|
|
95
|
-
true,
|
|
96
|
-
false)
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|