knife-azure 1.9.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/azure/azure_interface.rb +2 -3
- data/lib/azure/custom_errors.rb +1 -1
- data/lib/azure/helpers.rb +1 -1
- data/lib/azure/resource_management/ARM_deployment_template.rb +157 -162
- data/lib/azure/resource_management/ARM_interface.rb +72 -73
- data/lib/azure/resource_management/vnet_config.rb +11 -10
- data/lib/azure/resource_management/windows_credentials.rb +19 -19
- data/lib/azure/service_management/ASM_interface.rb +6 -5
- data/lib/azure/service_management/ag.rb +11 -11
- data/lib/azure/service_management/certificate.rb +7 -5
- data/lib/azure/service_management/connection.rb +10 -10
- data/lib/azure/service_management/deploy.rb +12 -14
- data/lib/azure/service_management/disk.rb +4 -2
- data/lib/azure/service_management/host.rb +7 -4
- data/lib/azure/service_management/image.rb +4 -4
- data/lib/azure/service_management/loadbalancer.rb +2 -2
- data/lib/azure/service_management/rest.rb +9 -8
- data/lib/azure/service_management/role.rb +67 -70
- data/lib/azure/service_management/storageaccount.rb +5 -3
- data/lib/azure/service_management/utility.rb +1 -1
- data/lib/azure/service_management/vnet.rb +1 -1
- data/lib/chef/knife/azure_ag_create.rb +13 -13
- data/lib/chef/knife/azure_ag_list.rb +1 -1
- data/lib/chef/knife/azure_base.rb +49 -66
- data/lib/chef/knife/azure_image_list.rb +6 -6
- data/lib/chef/knife/azure_internal-lb_create.rb +14 -14
- data/lib/chef/knife/azure_internal-lb_list.rb +1 -1
- data/lib/chef/knife/azure_server_create.rb +233 -268
- data/lib/chef/knife/azure_server_delete.rb +31 -31
- data/lib/chef/knife/azure_server_list.rb +1 -1
- data/lib/chef/knife/azure_server_show.rb +1 -1
- data/lib/chef/knife/azure_vnet_create.rb +15 -19
- data/lib/chef/knife/azure_vnet_list.rb +1 -1
- data/lib/chef/knife/azurerm_base.rb +39 -28
- data/lib/chef/knife/azurerm_server_create.rb +112 -177
- data/lib/chef/knife/azurerm_server_delete.rb +13 -13
- 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 +34 -238
- data/lib/chef/knife/bootstrap/common_bootstrap_options.rb +77 -76
- data/lib/chef/knife/bootstrap_azure.rb +56 -33
- data/lib/chef/knife/bootstrap_azurerm.rb +46 -29
- data/lib/knife-azure/version.rb +18 -1
- metadata +28 -16
- data/lib/chef/knife/bootstrap/bootstrap_options.rb +0 -105
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright
|
2
|
+
# Copyright:: Copyright 2010-2019, Chef Software Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -86,15 +86,14 @@ module Azure
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
-
def list_images
|
90
|
-
end
|
89
|
+
def list_images; end
|
91
90
|
|
92
91
|
def list_servers(resource_group_name = nil)
|
93
|
-
if resource_group_name.nil?
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
servers = if resource_group_name.nil?
|
93
|
+
compute_management_client.virtual_machines.list_all
|
94
|
+
else
|
95
|
+
compute_management_client.virtual_machines.list(resource_group_name)
|
96
|
+
end
|
98
97
|
|
99
98
|
cols = ["VM Name", "Resource Group Name", "Location", "Provisioning State", "OS Type"]
|
100
99
|
rows = []
|
@@ -152,14 +151,14 @@ module Azure
|
|
152
151
|
network_interface_name = server.network_profile.network_interfaces[0].id.split("/")[-1]
|
153
152
|
network_interface_data = network_resource_client.network_interfaces.get(resource_group, network_interface_name)
|
154
153
|
public_ip_id_data = network_interface_data.ip_configurations[0].public_ipaddress
|
155
|
-
|
154
|
+
if public_ip_id_data.nil?
|
155
|
+
public_ip_data = nil
|
156
|
+
else
|
156
157
|
public_ip_name = public_ip_id_data.id.split("/")[-1]
|
157
158
|
public_ip_data = network_resource_client.public_ipaddresses.get(resource_group, public_ip_name)
|
158
|
-
else
|
159
|
-
public_ip_data = nil
|
160
159
|
end
|
161
160
|
|
162
|
-
details =
|
161
|
+
details = []
|
163
162
|
details << ui.color("Server Name", :bold, :cyan)
|
164
163
|
details << server.name
|
165
164
|
|
@@ -188,18 +187,18 @@ module Azure
|
|
188
187
|
details << server.storage_profile.os_disk.os_type
|
189
188
|
|
190
189
|
details << ui.color("Public IP address", :bold, :cyan)
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
190
|
+
details << if public_ip_data.nil?
|
191
|
+
" -- "
|
192
|
+
else
|
193
|
+
public_ip_data.ip_address
|
194
|
+
end
|
196
195
|
|
197
196
|
details << ui.color("FQDN", :bold, :cyan)
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
197
|
+
details << if public_ip_data.nil? || public_ip_data.dns_settings.nil?
|
198
|
+
" -- "
|
199
|
+
else
|
200
|
+
public_ip_data.dns_settings.fqdn
|
201
|
+
end
|
203
202
|
|
204
203
|
puts ui.list(details, :columns_across, 2)
|
205
204
|
end
|
@@ -243,11 +242,11 @@ module Azure
|
|
243
242
|
|
244
243
|
def platform(image_reference)
|
245
244
|
@platform ||= begin
|
246
|
-
if image_reference =~ /WindowsServer.*/
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
245
|
+
platform = if image_reference =~ /WindowsServer.*/
|
246
|
+
"Windows"
|
247
|
+
else
|
248
|
+
"Linux"
|
249
|
+
end
|
251
250
|
platform
|
252
251
|
end
|
253
252
|
end
|
@@ -279,7 +278,18 @@ module Azure
|
|
279
278
|
## fetch substatus field which contains the chef-client run logs ##
|
280
279
|
substatus = fetch_substatus(resource_group_name, virtual_machine_name, chef_extension_name)
|
281
280
|
|
282
|
-
|
281
|
+
if substatus.nil?
|
282
|
+
## unavailability of the substatus field indicates that chef-client run is not completed yet on the server ##
|
283
|
+
fetch_process_wait_time = ((Time.now - fetch_process_start_time) / 60).round
|
284
|
+
if fetch_process_wait_time <= fetch_process_wait_timeout
|
285
|
+
print ui.color(".", :bold).to_s
|
286
|
+
sleep 30
|
287
|
+
fetch_chef_client_logs(resource_group_name, virtual_machine_name, chef_extension_name, fetch_process_start_time, fetch_process_wait_timeout)
|
288
|
+
else
|
289
|
+
## wait time exceeded 30 minutes timeout ##
|
290
|
+
ui.error "\nchef-client run logs could not be fetched since fetch process exceeded wait timeout of #{fetch_process_wait_timeout} minutes.\n"
|
291
|
+
end
|
292
|
+
else
|
283
293
|
## chef-client run logs becomes available ##
|
284
294
|
status = parse_substatus_code(substatus.code, 2)
|
285
295
|
message = substatus.message
|
@@ -287,31 +297,20 @@ module Azure
|
|
287
297
|
puts "\n\n******** Please find the chef-client run details below ********\n\n"
|
288
298
|
print "----> chef-client run status: "
|
289
299
|
case status
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
+
when "succeeded"
|
301
|
+
## chef-client run succeeded ##
|
302
|
+
color = :green
|
303
|
+
when "failed"
|
304
|
+
## chef-client run failed ##
|
305
|
+
color = :red
|
306
|
+
when "transitioning"
|
307
|
+
## chef-client run did not complete within maximum timeout of 30 minutes ##
|
308
|
+
## fetch whatever logs available under the chef-client.log file ##
|
309
|
+
color = :yellow
|
300
310
|
end
|
301
|
-
puts
|
311
|
+
puts ui.color(status, color, :bold).to_s
|
302
312
|
puts "----> chef-client run logs: "
|
303
313
|
puts "\n#{message}\n" ## message field of substatus contains the chef-client run logs ##
|
304
|
-
else
|
305
|
-
## unavailability of the substatus field indicates that chef-client run is not completed yet on the server ##
|
306
|
-
fetch_process_wait_time = ((Time.now - fetch_process_start_time) / 60).round
|
307
|
-
if fetch_process_wait_time <= fetch_process_wait_timeout
|
308
|
-
print "#{ui.color('.', :bold)}"
|
309
|
-
sleep 30
|
310
|
-
fetch_chef_client_logs(resource_group_name, virtual_machine_name, chef_extension_name, fetch_process_start_time, fetch_process_wait_timeout)
|
311
|
-
else
|
312
|
-
## wait time exceeded 30 minutes timeout ##
|
313
|
-
ui.error "\nchef-client run logs could not be fetched since fetch process exceeded wait timeout of #{fetch_process_wait_timeout} minutes.\n"
|
314
|
-
end
|
315
314
|
end
|
316
315
|
end
|
317
316
|
|
@@ -341,11 +340,11 @@ module Azure
|
|
341
340
|
params[:azure_vnet_subnet_name]
|
342
341
|
)
|
343
342
|
if params[:tcp_endpoints]
|
344
|
-
if @platform == "Windows"
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
343
|
+
params[:tcp_endpoints] = if @platform == "Windows"
|
344
|
+
params[:tcp_endpoints] + ",3389"
|
345
|
+
else
|
346
|
+
params[:tcp_endpoints] + ",22,16001"
|
347
|
+
end
|
349
348
|
random_no = rand(100..1000)
|
350
349
|
params[:azure_sec_group_name] = params[:azure_vm_name] + "_sec_grp_" + random_no.to_s
|
351
350
|
if security_group_exist?(params[:azure_resource_group_name], params[:azure_sec_group_name])
|
@@ -362,22 +361,21 @@ module Azure
|
|
362
361
|
ui.log("Deployment name is: #{deployment.name}")
|
363
362
|
ui.log("Deployment ID is: #{deployment.id}")
|
364
363
|
deployment.properties.dependencies.each do |deploy|
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
)
|
373
|
-
end
|
374
|
-
|
375
|
-
ui.log("VM Details ...")
|
376
|
-
ui.log("-------------------------------")
|
377
|
-
ui.log("Virtual Machine name is: #{deploy.resource_name}")
|
378
|
-
ui.log("Virtual Machine ID is: #{deploy.id}")
|
379
|
-
show_server(deploy.resource_name, params[:azure_resource_group_name])
|
364
|
+
next unless deploy.resource_type == "Microsoft.Compute/virtualMachines"
|
365
|
+
|
366
|
+
if params[:chef_extension_public_param][:extendedLogs] == "true"
|
367
|
+
print "\n\nWaiting for the first chef-client run on virtual machine #{deploy.resource_name}"
|
368
|
+
fetch_chef_client_logs(params[:azure_resource_group_name],
|
369
|
+
deploy.resource_name,
|
370
|
+
params[:chef_extension],
|
371
|
+
Time.now)
|
380
372
|
end
|
373
|
+
|
374
|
+
ui.log("VM Details ...")
|
375
|
+
ui.log("-------------------------------")
|
376
|
+
ui.log("Virtual Machine name is: #{deploy.resource_name}")
|
377
|
+
ui.log("Virtual Machine ID is: #{deploy.id}")
|
378
|
+
show_server(deploy.resource_name, params[:azure_resource_group_name])
|
381
379
|
end
|
382
380
|
end
|
383
381
|
end
|
@@ -398,7 +396,7 @@ module Azure
|
|
398
396
|
end
|
399
397
|
|
400
398
|
def create_resource_group(params = {})
|
401
|
-
resource_group = ResourceGroup.new
|
399
|
+
resource_group = ResourceGroup.new
|
402
400
|
resource_group.name = params[:azure_resource_group_name]
|
403
401
|
resource_group.location = params[:azure_service_location]
|
404
402
|
|
@@ -414,7 +412,7 @@ module Azure
|
|
414
412
|
|
415
413
|
def create_virtual_machine_using_template(params)
|
416
414
|
template = create_deployment_template(params)
|
417
|
-
parameters = create_deployment_parameters(params
|
415
|
+
parameters = create_deployment_parameters(params)
|
418
416
|
|
419
417
|
deploy_prop = DeploymentProperties.new
|
420
418
|
deploy_prop.template = template
|
@@ -466,7 +464,8 @@ module Azure
|
|
466
464
|
ext_version = compute_management_client.virtual_machine_extension_images.list_versions(
|
467
465
|
params[:azure_service_location],
|
468
466
|
params[:chef_extension_publisher],
|
469
|
-
params[:chef_extension]
|
467
|
+
params[:chef_extension]
|
468
|
+
).last.name
|
470
469
|
ext_version_split_values = ext_version.split(".")
|
471
470
|
ext_version = ext_version_split_values[0] + "." + ext_version_split_values[1]
|
472
471
|
ext_version
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Aliasgar Batterywala (aliasgar.batterywala@clogeny.com)
|
3
|
-
#
|
4
|
-
# Copyright:: Copyright 2016-2018 Chef Software, Inc.
|
3
|
+
# Copyright:: Copyright 2010-2019, Chef Software Inc.
|
5
4
|
# License:: Apache License, Version 2.0
|
6
5
|
#
|
7
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -60,8 +59,8 @@ module Azure::ARM
|
|
60
59
|
{
|
61
60
|
"name" => subnet_name,
|
62
61
|
"properties" => {
|
63
|
-
"addressPrefix" => subnet_prefix
|
64
|
-
}
|
62
|
+
"addressPrefix" => subnet_prefix,
|
63
|
+
},
|
65
64
|
}
|
66
65
|
end
|
67
66
|
|
@@ -138,8 +137,8 @@ module Azure::ARM
|
|
138
137
|
else ## subnets exist in vnet, calculate new address_prefix for the new subnet based on the space taken by these existing subnets under the given address space of the virtual network ##
|
139
138
|
vnet_network_address = IPAddress(vnet_address_prefix)
|
140
139
|
subnets = sort_subnets_by_cidr_prefix(subnets)
|
141
|
-
available_networks_pool =
|
142
|
-
used_networks_pool =
|
140
|
+
available_networks_pool = []
|
141
|
+
used_networks_pool = []
|
143
142
|
subnets.each do |subnet|
|
144
143
|
## in case the larger network is not divided into smaller subnets but
|
145
144
|
## divided into only 1 largest subnet of the complete network size ##
|
@@ -160,7 +159,8 @@ module Azure::ARM
|
|
160
159
|
|
161
160
|
## sort both the network pools before trimming the available_networks_pool ##
|
162
161
|
available_networks_pool, used_networks_pool = sort_pools(
|
163
|
-
available_networks_pool, used_networks_pool
|
162
|
+
available_networks_pool, used_networks_pool
|
163
|
+
)
|
164
164
|
|
165
165
|
## trim the available_networks_pool based on the networks already
|
166
166
|
## allocated to the existing subnets ##
|
@@ -172,7 +172,8 @@ module Azure::ARM
|
|
172
172
|
|
173
173
|
## sort both the network pools after trimming the available_networks_pool ##
|
174
174
|
available_networks_pool, used_networks_pool = sort_pools(
|
175
|
-
available_networks_pool, used_networks_pool
|
175
|
+
available_networks_pool, used_networks_pool
|
176
|
+
)
|
176
177
|
end
|
177
178
|
|
178
179
|
## space available in the vnet_address_prefix network for the new subnet ##
|
@@ -225,7 +226,7 @@ module Azure::ARM
|
|
225
226
|
vnet_config[:virtualNetworkName] = vnet_name
|
226
227
|
if vnet ## handle resources in the existing virtual network ##
|
227
228
|
vnet_config[:addressPrefixes] = vnet_address_spaces(vnet)
|
228
|
-
vnet_config[:subnets] =
|
229
|
+
vnet_config[:subnets] = []
|
229
230
|
subnets = subnets_list(resource_group_name, vnet_name)
|
230
231
|
if subnets
|
231
232
|
subnets.each do |subnet|
|
@@ -238,7 +239,7 @@ module Azure::ARM
|
|
238
239
|
end
|
239
240
|
else ## create config for new vnet ##
|
240
241
|
vnet_config[:addressPrefixes] = [ "10.0.0.0/16" ]
|
241
|
-
vnet_config[:subnets] =
|
242
|
+
vnet_config[:subnets] = []
|
242
243
|
vnet_config[:subnets].push(
|
243
244
|
subnet(vnet_subnet_name, "10.0.0.0/24")
|
244
245
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Nimisha Sharad (nimisha.sharad@clogeny.com)
|
3
|
-
# Copyright:: Copyright
|
3
|
+
# Copyright:: Copyright 2010-2019, Chef Software Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -40,35 +40,35 @@ module Azure::ARM
|
|
40
40
|
# Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
|
41
41
|
class FILETIME < FFI::Struct
|
42
42
|
layout :dwLowDateTime, :DWORD,
|
43
|
-
|
43
|
+
:dwHighDateTime, :DWORD
|
44
44
|
end
|
45
45
|
|
46
46
|
# Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374790(v=vs.85).aspx
|
47
47
|
class CREDENTIAL_ATTRIBUTE < FFI::Struct
|
48
48
|
layout :Keyword, :LPTSTR,
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
:Flags, :DWORD,
|
50
|
+
:ValueSize, :DWORD,
|
51
|
+
:Value, :LPBYTE
|
52
52
|
end
|
53
53
|
|
54
54
|
# Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx
|
55
55
|
class CREDENTIAL_OBJECT < FFI::Struct
|
56
56
|
layout :Flags, :DWORD,
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
57
|
+
:Type, :DWORD,
|
58
|
+
:TargetName, :LPTSTR,
|
59
|
+
:Comment, :LPTSTR,
|
60
|
+
:LastWritten, FILETIME,
|
61
|
+
:CredentialBlobSize, :DWORD,
|
62
|
+
:CredentialBlob, :LPBYTE,
|
63
|
+
:Persist, :DWORD,
|
64
|
+
:AttributeCount, :DWORD,
|
65
|
+
:Attributes, CREDENTIAL_ATTRIBUTE,
|
66
|
+
:TargetAlias, :LPTSTR,
|
67
|
+
:UserName, :LPTSTR
|
68
68
|
end
|
69
69
|
|
70
70
|
# Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374804(v=vs.85).aspx
|
71
|
-
safe_attach_function :CredReadW,
|
71
|
+
safe_attach_function :CredReadW, %i{LPCTSTR DWORD DWORD pointer}, :BOOL
|
72
72
|
end
|
73
73
|
|
74
74
|
module WindowsCredentials
|
@@ -100,7 +100,7 @@ module Azure::ARM
|
|
100
100
|
credential[:tokentype] = tokentype[0].split(":")[1]
|
101
101
|
credential[:user] = user[0].split(":")[1]
|
102
102
|
credential[:token] = access_token[0].split(":")[1]
|
103
|
-
#Todo: refresh_token is not complete currently
|
103
|
+
# Todo: refresh_token is not complete currently
|
104
104
|
# target_name method needs to be modified for that
|
105
105
|
credential[:refresh_token] = refresh_token[0].split(":")[1]
|
106
106
|
credential[:clientid] = clientid[0].split(":")[1]
|
@@ -118,7 +118,7 @@ module Azure::ARM
|
|
118
118
|
exit
|
119
119
|
end
|
120
120
|
|
121
|
-
#Todo: For getting the complete refreshToken, both credentials (ending with --0-2 and --1-2) have to be read
|
121
|
+
# Todo: For getting the complete refreshToken, both credentials (ending with --0-2 and --1-2) have to be read
|
122
122
|
def target_name
|
123
123
|
# cmdkey command is used for accessing windows credential manager.
|
124
124
|
# Multiple credentials get created in windows credential manager for a single Azure account in xplat-cli
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright
|
2
|
+
# Copyright:: Copyright 2010-2019, Chef Software Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -64,9 +64,10 @@ module Azure
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def rdp_port(arr_ports)
|
67
|
-
|
67
|
+
unless arr_ports
|
68
68
|
return ""
|
69
69
|
end
|
70
|
+
|
70
71
|
if arr_ports.length > 0
|
71
72
|
arr_ports.each do |port|
|
72
73
|
if port["Name"] == "Remote Desktop"
|
@@ -78,7 +79,7 @@ module Azure
|
|
78
79
|
end
|
79
80
|
|
80
81
|
def find_server(params = {})
|
81
|
-
server = connection.roles.find(params[:name], params = { :
|
82
|
+
server = connection.roles.find(params[:name], params = { azure_dns_name: params[:azure_dns_name] })
|
82
83
|
end
|
83
84
|
|
84
85
|
def delete_server(params = {})
|
@@ -117,7 +118,7 @@ module Azure
|
|
117
118
|
|
118
119
|
puts ""
|
119
120
|
if role
|
120
|
-
details =
|
121
|
+
details = []
|
121
122
|
details << ui.color("Role name", :bold, :cyan)
|
122
123
|
details << role.name
|
123
124
|
details << ui.color("Status", :bold, :cyan)
|
@@ -226,7 +227,7 @@ module Azure
|
|
226
227
|
remove_hosted_service_on_failure = nil
|
227
228
|
end
|
228
229
|
|
229
|
-
#If Storage Account is not specified, check if the geographic location has one to re-use
|
230
|
+
# If Storage Account is not specified, check if the geographic location has one to re-use
|
230
231
|
if not params[:azure_storage_account]
|
231
232
|
storage_accts = connection.storageaccounts.all
|
232
233
|
storage = storage_accts.find { |storage_acct| storage_acct.location.to_s == params[:azure_service_location] }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Jeff Mendoza (jeffmendoza@live.com)
|
3
|
-
# Copyright:: Copyright
|
3
|
+
# Copyright:: Copyright 2010-2019, Chef Software Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,11 +26,11 @@ module Azure
|
|
26
26
|
@ags ||= begin
|
27
27
|
@ags = {}
|
28
28
|
response = @connection.query_azure("affinitygroups",
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
"get",
|
30
|
+
"",
|
31
|
+
"",
|
32
|
+
true,
|
33
|
+
false)
|
34
34
|
response.css("AffinityGroup").each do |ag|
|
35
35
|
item = AG.new(@connection).parse(ag)
|
36
36
|
@ags[item.name] = item
|
@@ -89,11 +89,11 @@ module Azure
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
@connection.query_azure("affinitygroups",
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
"post",
|
93
|
+
builder.to_xml,
|
94
|
+
"",
|
95
|
+
true,
|
96
|
+
false)
|
97
97
|
end
|
98
98
|
end
|
99
99
|
end
|