knife-azure 3.0.6 → 4.0.0

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/azure/custom_errors.rb +1 -1
  3. data/lib/azure/resource_management/ARM_deployment_template.rb +5 -5
  4. data/lib/azure/resource_management/ARM_interface.rb +4 -6
  5. data/lib/azure/resource_management/windows_credentials.rb +2 -2
  6. data/lib/chef/knife/azurerm_server_create.rb +1 -1
  7. data/lib/chef/knife/bootstrap/bootstrapper.rb +5 -10
  8. data/lib/chef/knife/helpers/azurerm_base.rb +4 -4
  9. data/lib/knife-azure/version.rb +1 -1
  10. metadata +30 -43
  11. data/lib/azure/service_management/ASM_interface.rb +0 -310
  12. data/lib/azure/service_management/ag.rb +0 -99
  13. data/lib/azure/service_management/certificate.rb +0 -235
  14. data/lib/azure/service_management/connection.rb +0 -102
  15. data/lib/azure/service_management/deploy.rb +0 -221
  16. data/lib/azure/service_management/disk.rb +0 -68
  17. data/lib/azure/service_management/host.rb +0 -184
  18. data/lib/azure/service_management/image.rb +0 -94
  19. data/lib/azure/service_management/loadbalancer.rb +0 -78
  20. data/lib/azure/service_management/rest.rb +0 -126
  21. data/lib/azure/service_management/role.rb +0 -717
  22. data/lib/azure/service_management/storageaccount.rb +0 -127
  23. data/lib/azure/service_management/utility.rb +0 -40
  24. data/lib/azure/service_management/vnet.rb +0 -134
  25. data/lib/chef/knife/azure_ag_create.rb +0 -73
  26. data/lib/chef/knife/azure_ag_list.rb +0 -35
  27. data/lib/chef/knife/azure_image_list.rb +0 -56
  28. data/lib/chef/knife/azure_internal-lb_create.rb +0 -74
  29. data/lib/chef/knife/azure_internal-lb_list.rb +0 -35
  30. data/lib/chef/knife/azure_server_create.rb +0 -531
  31. data/lib/chef/knife/azure_server_delete.rb +0 -136
  32. data/lib/chef/knife/azure_server_list.rb +0 -38
  33. data/lib/chef/knife/azure_server_show.rb +0 -41
  34. data/lib/chef/knife/azure_vnet_create.rb +0 -74
  35. data/lib/chef/knife/azure_vnet_list.rb +0 -35
  36. data/lib/chef/knife/bootstrap_azure.rb +0 -191
  37. data/lib/chef/knife/helpers/azure_base.rb +0 -392
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a120193f05d7ce565f575ffd1937b482a84b6ba67feef7ff1cb6a6e00d3b692
4
- data.tar.gz: 5f6b7262ad5d2a88ebe3f15530fe0d46c77bb22e72525963986ae9d5d9125f64
3
+ metadata.gz: ba6a2397f4641337ac1c0e35e060bdec8878111da9ca1d41d5207e15a0209b71
4
+ data.tar.gz: fb2691f81f0ba4c79d3dd86e7d04ff1ec92b85da1dfda35641b8b65d8b8f1025
5
5
  SHA512:
6
- metadata.gz: fe70cb6103a17b9b19360614bc22819dddd767f7b63f769074c6dd08b91c5ff93a77c03c47d75e7cb4c32f59dedb48f59a05463f838a605e53ef700f191737e9
7
- data.tar.gz: f2ab1d40bad24448b0f10824a16fcc4196393b35c6396d1b9016c8cf08bbc00d72fbd80bda17d29dee049c09029062a9eeec6d3b3341f17c1690a74b9c46af2e
6
+ metadata.gz: c9f8f4ba4b588eeca8037853e842cae06e7cb699fc758fbe83c3e0e7b6d05ae67319a65bb85e4a97fc34c28c5590dad65980856052883be1becf2bd4bbf7d9b9
7
+ data.tar.gz: c7f1e891b81df8dc594a349ddffb61b9fb0fb6d8cc90ff3d6a972b82b1e2a199fa2b8a89631f86cf41678d9ae5dd8949806d21a0c76365d1e57db6d7750f3d5c
@@ -29,6 +29,6 @@ module CustomErrors
29
29
  caller.first =~ /in \`(.+)\'/
30
30
  method_name = $1
31
31
  raise CustomErrors::InterfaceNotImplementedError.new("#{klass.class.name} needs to implement '#{method_name}' for interface #{name}!")
32
- end
32
+ end
33
33
  end
34
34
  end
@@ -51,7 +51,7 @@ module Azure::ARM
51
51
  # Security Rule priority can be set between 100 and 4096
52
52
  rule_no = 300
53
53
  incremental = 0
54
- for port in tcp_ports
54
+ tcp_ports.each do |port|
55
55
  rule_no += 2
56
56
  sec_grp_json["properties"]["securityRules"].push(
57
57
  "name" => vm_name + "_rule_" + incremental.to_s,
@@ -510,7 +510,7 @@ module Azure::ARM
510
510
  }
511
511
 
512
512
  length = template["resources"].length.to_i - 1
513
- for i in 0..length do
513
+ (0..length).each do |i|
514
514
  if template["resources"][i]["type"] == "Microsoft.Compute/virtualMachines"
515
515
  template["resources"][i]["dependsOn"] << "[concat('Microsoft.Compute/availabilitySets/', parameters('availabilitySetName'))]"
516
516
  template["resources"][i]["properties"]["availabilitySet"] = { "id" => "[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySetName'))]" }
@@ -523,7 +523,7 @@ module Azure::ARM
523
523
  sec_grp_json = tcp_ports(params[:tcp_endpoints], params[:azure_vm_name])
524
524
  template["resources"].insert(1, sec_grp_json)
525
525
  length = template["resources"].length.to_i - 1
526
- for i in 0..length do
526
+ (0..length).each do |i|
527
527
  if template["resources"][i]["type"] == "Microsoft.Network/virtualNetworks"
528
528
  template["resources"][i] = template["resources"][i].merge({ "dependsOn" => [sec_grp] })
529
529
  end
@@ -558,7 +558,7 @@ module Azure::ARM
558
558
  end
559
559
  if params[:server_count].to_i > 1 && params[:chef_extension_private_param][:validation_key].nil?
560
560
  template["resources"].last["properties"]["protectedSettings"]["client_pem"] = "[parameters(concat('client_pem',copyIndex()))]"
561
- 0.upto (params[:server_count].to_i - 1) do |count|
561
+ 0.upto(params[:server_count].to_i - 1) do |count|
562
562
  template["parameters"]["client_pem" + count.to_s] = {
563
563
  "type" => "string",
564
564
  "metadata" => {
@@ -658,7 +658,7 @@ module Azure::ARM
658
658
  },
659
659
  }
660
660
  if params[:server_count].to_i > 1 && params[:chef_extension_private_param][:validation_key].nil?
661
- 0.upto (params[:server_count].to_i - 1) do |count|
661
+ 0.upto(params[:server_count].to_i - 1) do |count|
662
662
  parameters["client_pem#{count}"] = {
663
663
  "value" => "#{params[:chef_extension_private_param][("client_pem" + count.to_s).to_sym]}",
664
664
  }
@@ -307,7 +307,7 @@ module Azure
307
307
  ## chef-client run did not complete within maximum timeout of 30 minutes ##
308
308
  ## fetch whatever logs available under the chef-client.log file ##
309
309
  color = :yellow
310
- end
310
+ end
311
311
  puts ui.color(status, color, :bold).to_s
312
312
  puts "----> chef-client run logs: "
313
313
  puts "\n#{message}\n" ## message field of substatus contains the chef-client run logs ##
@@ -484,11 +484,9 @@ module Azure
484
484
  err_details = err_json["error"]["details"] if err_json["error"]
485
485
  if err_details
486
486
  err_details.each do |err|
487
- begin
488
- ui.error(JSON.parse(err["message"])["error"]["message"])
489
- rescue JSON::ParserError => e
490
- ui.error(err["message"])
491
- end
487
+ ui.error(JSON.parse(err["message"])["error"]["message"])
488
+ rescue JSON::ParserError => e
489
+ ui.error(err["message"])
492
490
  end
493
491
  else
494
492
  ui.error(err_json["error"]["message"])
@@ -66,7 +66,7 @@ module Azure
66
66
  :Attributes, CREDENTIAL_ATTRIBUTE,
67
67
  :TargetAlias, :LPTSTR,
68
68
  :UserName, :LPTSTR
69
- end
69
+ end
70
70
 
71
71
  # Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374804(v=vs.85).aspx
72
72
  safe_attach_function :CredReadW, %i{LPCTSTR DWORD DWORD pointer}, :BOOL
@@ -178,5 +178,5 @@ module Azure
178
178
  end
179
179
  end
180
180
  end
181
- end
181
+ end
182
182
  end
@@ -292,7 +292,7 @@ class Chef
292
292
  def set_os_image(publisher, img_offer, default_os_version)
293
293
  config[:azure_image_reference_publisher] = publisher
294
294
  config[:azure_image_reference_offer] = img_offer
295
- config[:azure_image_reference_sku] = config[:azure_image_reference_sku] ? config[:azure_image_reference_sku] : default_os_version
295
+ config[:azure_image_reference_sku] = config[:azure_image_reference_sku] || default_os_version
296
296
  end
297
297
 
298
298
  def is_image_os_type?
@@ -49,16 +49,11 @@ class Chef
49
49
  config[:azure_chef_extension_version]
50
50
  else
51
51
  chef_extension_name ||= get_chef_extension_name
52
- if @service.instance_of? Azure::ResourceManagement::ARMInterface
53
- service.get_latest_chef_extension_version(
54
- azure_service_location: config[:azure_service_location],
55
- chef_extension_publisher: get_chef_extension_publisher,
56
- chef_extension: chef_extension_name
57
- )
58
- elsif @service.instance_of? Azure::ServiceManagement::ASMInterface
59
- extensions = service.get_extension(chef_extension_name, get_chef_extension_publisher)
60
- extensions.css("Version").max.text.split(".").first + ".*"
61
- end
52
+ service.get_latest_chef_extension_version(
53
+ azure_service_location: config[:azure_service_location],
54
+ chef_extension_publisher: get_chef_extension_publisher,
55
+ chef_extension: chef_extension_name
56
+ )
62
57
  end
63
58
  end
64
59
 
@@ -76,7 +76,7 @@ class Chef
76
76
  errors = []
77
77
  keys.each do |k|
78
78
  if config[k].nil?
79
- errors << "You did not provide a valid '#{pretty_key(k)}' value. Please set knife[:#{k}] in your knife.rb."
79
+ errors << "You did not provide a valid '#{pretty_key(k)}' value. Please set knife[:#{k}] in your config.rb (knife.rb)."
80
80
  end
81
81
  end
82
82
  if errors.each { |e| ui.error(e) }.any?
@@ -275,10 +275,10 @@ class Chef
275
275
  end
276
276
 
277
277
  if !is_image_windows?
278
- if (config[:azure_vm_name].match /^(?=.*[a-zA-Z-])([a-zA-z0-9-]{1,64})$/).nil?
278
+ if (config[:azure_vm_name].match(/^(?=.*[a-zA-Z-])([a-zA-z0-9-]{1,64})$/)).nil?
279
279
  raise ArgumentError, "VM name can only contain alphanumeric and hyphen(-) characters and maximum length cannot exceed 64 characters."
280
280
  end
281
- elsif (config[:azure_vm_name].match /^(?=.*[a-zA-Z-])([a-zA-z0-9-]{1,15})$/).nil?
281
+ elsif (config[:azure_vm_name].match(/^(?=.*[a-zA-Z-])([a-zA-z0-9-]{1,15})$/)).nil?
282
282
  raise ArgumentError, "VM name can only contain alphanumeric and hyphen(-) characters and maximum length cannot exceed 15 characters."
283
283
  end
284
284
 
@@ -349,7 +349,7 @@ class Chef
349
349
  ## in Windows Credentails Manager (WCM).
350
350
  ## Newer versions use the same pattern across platforms where credentials gets
351
351
  ## stored in ~/.azure/accessTokens.json file.
352
- "Please run XPLAT's '#{@azure_prefix} login' command OR specify azure_tenant_id, azure_subscription_id, azure_client_id, azure_client_secret in your knife.rb"
352
+ "Please run XPLAT's '#{@azure_prefix} login' command OR specify azure_tenant_id, azure_subscription_id, azure_client_id, azure_client_secret in your config.rb (knife.rb)."
353
353
  end
354
354
  end
355
355
  end
@@ -17,7 +17,7 @@
17
17
 
18
18
  module Knife
19
19
  module Azure
20
- VERSION = "3.0.6".freeze
20
+ VERSION = "4.0.0".freeze
21
21
  MAJOR, MINOR, TINY = VERSION.split(".")
22
22
  end
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-azure
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.6
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Barry Davis
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-09 00:00:00.000000000 Z
12
+ date: 2021-06-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: chef
15
+ name: knife
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 15.10.21
20
+ version: '0'
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: 15.10.21
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: nokogiri
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -83,22 +83,22 @@ dependencies:
83
83
  name: azure_mgmt_storage
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: 0.20.0
89
86
  - - "~>"
90
87
  - !ruby/object:Gem::Version
91
88
  version: '0.20'
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 0.20.0
92
92
  type: :runtime
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: 0.20.0
99
96
  - - "~>"
100
97
  - !ruby/object:Gem::Version
101
98
  version: '0.20'
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 0.20.0
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: azure_mgmt_network
104
104
  requirement: !ruby/object:Gem::Requirement
@@ -161,7 +161,21 @@ dependencies:
161
161
  - - ">="
162
162
  - !ruby/object:Gem::Version
163
163
  version: '0'
164
- description: A plugin to the Chef knife tool for creating instances on the Microsoft
164
+ - !ruby/object:Gem::Dependency
165
+ name: rb-readline
166
+ requirement: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ type: :runtime
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ description: A plugin to the Chef Infra knife tool for creating instances on the Microsoft
165
179
  Azure platform
166
180
  email: oss@chef.io
167
181
  executables: []
@@ -177,40 +191,13 @@ files:
177
191
  - lib/azure/resource_management/ARM_interface.rb
178
192
  - lib/azure/resource_management/vnet_config.rb
179
193
  - 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
194
  - lib/chef/knife/azurerm_server_create.rb
206
195
  - lib/chef/knife/azurerm_server_delete.rb
207
196
  - lib/chef/knife/azurerm_server_list.rb
208
197
  - lib/chef/knife/azurerm_server_show.rb
209
198
  - lib/chef/knife/bootstrap/bootstrapper.rb
210
199
  - lib/chef/knife/bootstrap/common_bootstrap_options.rb
211
- - lib/chef/knife/bootstrap_azure.rb
212
200
  - lib/chef/knife/bootstrap_azurerm.rb
213
- - lib/chef/knife/helpers/azure_base.rb
214
201
  - lib/chef/knife/helpers/azurerm_base.rb
215
202
  - lib/knife-azure/version.rb
216
203
  homepage: https://github.com/chef/knife-azure
@@ -225,16 +212,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
212
  requirements:
226
213
  - - ">="
227
214
  - !ruby/object:Gem::Version
228
- version: '2.6'
215
+ version: '2.7'
229
216
  required_rubygems_version: !ruby/object:Gem::Requirement
230
217
  requirements:
231
218
  - - ">="
232
219
  - !ruby/object:Gem::Version
233
220
  version: '0'
234
221
  requirements: []
235
- rubygems_version: 3.0.3
222
+ rubygems_version: 3.1.4
236
223
  signing_key:
237
224
  specification_version: 4
238
- summary: A plugin to the Chef knife tool for creating instances on the Microsoft Azure
239
- platform
225
+ summary: A plugin to the Chef Infra knife tool for creating instances on the Microsoft
226
+ Azure platform
240
227
  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