knife-azure 1.5.2 → 1.6.0.rc.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.
- checksums.yaml +4 -4
- data/README.md +15 -3
- data/lib/azure/role.rb +2 -1
- data/lib/azure/vnet.rb +19 -3
- data/lib/chef/knife/azure_server_create.rb +54 -27
- data/lib/knife-azure/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d3c8d33de70a5a13ab8266a296901adc92470ce
|
4
|
+
data.tar.gz: e96796e88386edfea3100daf1248d025eaff0610
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83df38d52600057e3b877bb03c46a28da6614c166a0286f66dd3bb0ac0d657e3f68875cffb2c917e438f20581e5e9cbcf174e0d5673b2ba6ac73386a4ab0e652
|
7
|
+
data.tar.gz: aae9e02a525a0f023632a5335b509a95fb7a8f8ad4d2c9fc436f587f9b8b76620310ec330288deb8ab0dbecd077416ad13217163bb234287cbe313aa8e3b210a
|
data/README.md
CHANGED
@@ -7,14 +7,14 @@ delete, and enumerate
|
|
7
7
|
resources to be managed by Chef.
|
8
8
|
|
9
9
|
## Installation
|
10
|
-
Be sure you are running the latest version of Chef, which can be installed
|
10
|
+
Be sure you are running the latest version of Chef DK, which can be installed
|
11
11
|
via:
|
12
12
|
|
13
|
-
|
13
|
+
https://downloads.chef.io/chef-dk/
|
14
14
|
|
15
15
|
This plugin is distributed as a Ruby Gem. To install it, run:
|
16
16
|
|
17
|
-
gem install knife-azure
|
17
|
+
chef gem install knife-azure
|
18
18
|
|
19
19
|
Depending on your system's configuration, you may need to run this command
|
20
20
|
with root/administrator privileges.
|
@@ -272,8 +272,20 @@ In general, systems bootstrapped via `cloud-api` do not require incoming or outg
|
|
272
272
|
--bootstrap-protocol 'cloud-api'
|
273
273
|
--delete-chef-extension-config
|
274
274
|
|
275
|
+
We have also added cloud-api support for Centos now, for this you just need to select centos image in above example.
|
276
|
+
|
275
277
|
`--delete-chef-extension-config` determines if Chef configuration files should be removed when Azure removes the Chef resource extension from the VM or not. This option is only valid for the 'cloud-api' bootstrap protocol. The default value is false. This is useful when `update` and `uninstall` commands are run for the extension on the VM created.
|
276
278
|
|
279
|
+
#### Azure Server Create with Domain Join
|
280
|
+
Following options are used for creating server with domain join
|
281
|
+
|
282
|
+
:azure_domain_name Specifies the domain name to join. If the domains name is not specified, --azure-domain-user must specify the user principal name (UPN) format (user@fully-qualified-DNS-domain) or the fully-qualified-DNS-domain\\username format
|
283
|
+
:azure_domain_user Specifies the username who has access to join the domain.Supported format: username(if domain is already specified in --azure-domain-name option),fully-qualified-DNS-domain\username, user@fully-qualified-DNS-domain
|
284
|
+
:azure_domain_passwd Specifies the password for domain user who has access to join the domain
|
285
|
+
|
286
|
+
Command:
|
287
|
+
knife azure server create -I a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-20151022-en.us-127GB.vhd --azure-vm-size Medium -x 'azure' -P 'admin@123' --azure-domain-passwd 'admin@123' --azure-domain-user 'some.domain.com\user' --azure-domain-name 'some.domain.com' -c '~\chef-repo\.chef\knife.rb' --azure-network-name 'mynetwork' --azure-subnet-name 'subnet1' --azure-service-location 'West US'
|
288
|
+
|
277
289
|
|
278
290
|
### Azure Server Delete Subcommand
|
279
291
|
Deletes an existing server in the currently configured Azure account. By
|
data/lib/azure/role.rb
CHANGED
@@ -305,6 +305,7 @@ class Azure
|
|
305
305
|
end
|
306
306
|
|
307
307
|
def setup(params)
|
308
|
+
azure_user_domain_name = params[:azure_user_domain_name] || params[:azure_domain_name]
|
308
309
|
builder = Nokogiri::XML::Builder.new do |xml|
|
309
310
|
xml.PersistentVMRole(
|
310
311
|
'xmlns'=>'http://schemas.microsoft.com/windowsazure',
|
@@ -345,7 +346,7 @@ class Azure
|
|
345
346
|
if params[:azure_domain_name]
|
346
347
|
xml.DomainJoin {
|
347
348
|
xml.Credentials {
|
348
|
-
xml.Domain
|
349
|
+
xml.Domain azure_user_domain_name
|
349
350
|
xml.Username params[:azure_domain_user]
|
350
351
|
xml.Password params[:azure_domain_passwd]
|
351
352
|
}
|
data/lib/azure/vnet.rb
CHANGED
@@ -104,15 +104,31 @@ class Azure
|
|
104
104
|
vnet = Nokogiri::XML::Node.new('VirtualNetworkSite', response) if add
|
105
105
|
vnet['name'] = params[:azure_vnet_name]
|
106
106
|
vnet['AffinityGroup'] = params[:azure_ag_name]
|
107
|
-
|
107
|
+
if add || !vnet.at_css('AddressSpace') ## create a new AddressSpace block in XML if VNet or AddressSpace block does not already exist
|
108
|
+
addr_space = Nokogiri::XML::Node.new('AddressSpace', response)
|
109
|
+
else ## retrieve object of existing AddressSpace if VNet or AddressSpace already exist
|
110
|
+
addr_space = vnet.at_css('AddressSpace')
|
111
|
+
end
|
108
112
|
addr_prefix = Nokogiri::XML::Node.new('AddressPrefix', response)
|
109
113
|
addr_prefix.content = params[:azure_address_space]
|
114
|
+
if add || !vnet.at_css('Subnets') ## create a new Subnets block in XML if VNet or Subnets block does not already exist
|
115
|
+
subnets = Nokogiri::XML::Node.new('Subnets', response)
|
116
|
+
else ## retrieve object of existing Subnets if VNet or Subnets already exist
|
117
|
+
subnets = vnet.at_css('Subnets')
|
118
|
+
end
|
119
|
+
saddr_prefix = Nokogiri::XML::Node.new('AddressPrefix', response)
|
120
|
+
saddr_prefix.content = params[:azure_address_space]
|
121
|
+
subnet = Nokogiri::XML::Node.new('Subnet', response)
|
122
|
+
subnet['name'] = params[:azure_subnet_name]
|
123
|
+
subnet.children = saddr_prefix
|
124
|
+
subnets.children = subnet
|
125
|
+
vnet.add_child(subnets) if add || !vnet.at_css('Subnets')
|
110
126
|
addr_space.children = addr_prefix
|
111
|
-
vnet.
|
127
|
+
vnet.add_child(addr_space) if add || !vnet.at_css('AddressSpace')
|
112
128
|
vnets.last.add_next_sibling(vnet) if add
|
113
129
|
puts("Updating existing Virtual Network: #{params[:azure_vnet_name]}...")
|
114
130
|
end
|
115
131
|
@connection.query_azure('networking/media', 'put', response.to_xml)
|
116
132
|
end
|
117
133
|
end
|
118
|
-
end
|
134
|
+
end
|
@@ -139,6 +139,11 @@ class Chef
|
|
139
139
|
:description => "Verify the SSL cert for HTTPS requests to the Chef server API.",
|
140
140
|
:boolean => true
|
141
141
|
|
142
|
+
option :bootstrap_proxy,
|
143
|
+
:long => "--bootstrap-proxy PROXY_URL",
|
144
|
+
:description => "The proxy server for the node being bootstrapped",
|
145
|
+
:proc => Proc.new { |p| Chef::Config[:knife][:bootstrap_proxy] = p }
|
146
|
+
|
142
147
|
option :bootstrap_no_proxy,
|
143
148
|
:long => "--bootstrap-no-proxy [NO_PROXY_URL|NO_PROXY_IP]",
|
144
149
|
:description => "Do not proxy locations for the node being bootstrapped; this option is used internally by Opscode",
|
@@ -349,12 +354,18 @@ class Chef
|
|
349
354
|
|
350
355
|
option :azure_domain_user,
|
351
356
|
:long => "--azure-domain-user DOMAIN_USER_NAME",
|
352
|
-
:description =>
|
357
|
+
:description => 'Optional. Specifies the username who has access to join the domain.
|
358
|
+
Supported format: username(if domain is already specified in --azure-domain-name option),
|
359
|
+
fully-qualified-DNS-domain\username, user@fully-qualified-DNS-domain'
|
353
360
|
|
354
361
|
option :azure_domain_passwd,
|
355
362
|
:long => "--azure-domain-passwd DOMAIN_PASSWD",
|
356
363
|
:description => "Optional. Specifies the password for domain user who has access to join the domain."
|
357
364
|
|
365
|
+
option :azure_extension_client_config,
|
366
|
+
:long => "--azure-extension-client-config CLIENT_PATH",
|
367
|
+
:description => "Optional. Path to a client.rb file for use by the bootstrapped node. Only honored when --bootstrap-protocol is set to `cloud-api`."
|
368
|
+
|
358
369
|
def strip_non_ascii(string)
|
359
370
|
string.gsub(/[^0-9a-z ]/i, '')
|
360
371
|
end
|
@@ -873,22 +884,6 @@ class Chef
|
|
873
884
|
:winrm_max_timeout => locate_config_value(:winrm_max_timeout).to_i * 60 * 1000, #converting minutes to milliseconds
|
874
885
|
:winrm_max_memoryPerShell => locate_config_value(:winrm_max_memory_per_shell)
|
875
886
|
}
|
876
|
-
# If user is connecting a new VM to an existing dns, then
|
877
|
-
# the VM needs to have a unique public port. Logic below takes care of this.
|
878
|
-
if is_image_windows? && locate_config_value(:bootstrap_protocol) == 'winrm'
|
879
|
-
if locate_config_value(:azure_connect_to_existing_dns)
|
880
|
-
port = locate_config_value(:winrm_port) || Random.rand(64000) + 1000
|
881
|
-
else
|
882
|
-
port = locate_config_value(:winrm_port) || '5985'
|
883
|
-
end
|
884
|
-
elsif locate_config_value(:bootstrap_protocol) == 'ssh'
|
885
|
-
if locate_config_value(:azure_connect_to_existing_dns)
|
886
|
-
port = locate_config_value(:ssh_port) || Random.rand(64000) + 1000
|
887
|
-
else
|
888
|
-
port = locate_config_value(:ssh_port) || '22'
|
889
|
-
end
|
890
|
-
end
|
891
|
-
server_def[:port] = port
|
892
887
|
|
893
888
|
if locate_config_value(:bootstrap_protocol) == 'cloud-api'
|
894
889
|
server_def[:chef_extension] = get_chef_extension_name
|
@@ -925,6 +920,7 @@ class Chef
|
|
925
920
|
end
|
926
921
|
end
|
927
922
|
end
|
923
|
+
|
928
924
|
if is_image_windows?
|
929
925
|
server_def[:os_type] = 'Windows'
|
930
926
|
server_def[:admin_password] = locate_config_value(:winrm_password)
|
@@ -938,24 +934,37 @@ class Chef
|
|
938
934
|
server_def[:identity_file_passphrase] = locate_config_value(:identity_file_passphrase)
|
939
935
|
end
|
940
936
|
|
937
|
+
azure_connect_to_existing_dns = locate_config_value(:azure_connect_to_existing_dns)
|
938
|
+
if is_image_windows? && server_def[:bootstrap_proto] == 'winrm'
|
939
|
+
port = locate_config_value(:winrm_port) || '5985'
|
940
|
+
port = locate_config_value(:winrm_port) || Random.rand(64000) + 1000 if azure_connect_to_existing_dns
|
941
|
+
elsif server_def[:bootstrap_proto] == 'ssh'
|
942
|
+
port = locate_config_value(:ssh_port) || '22'
|
943
|
+
port = locate_config_value(:ssh_port) || Random.rand(64000) + 1000 if azure_connect_to_existing_dns
|
944
|
+
end
|
945
|
+
|
946
|
+
server_def[:port] = port
|
947
|
+
|
941
948
|
server_def[:is_vm_image] = connection.images.is_vm_image(locate_config_value(:azure_source_image))
|
949
|
+
server_def[:azure_domain_name] = locate_config_value(:azure_domain_name) if locate_config_value(:azure_domain_name)
|
942
950
|
|
943
|
-
if locate_config_value(:
|
944
|
-
server_def[:azure_domain_name] = locate_config_value(:azure_domain_name)
|
945
|
-
server_def[:azure_domain_user] = locate_config_value(:azure_domain_user)
|
946
|
-
elsif locate_config_value(:azure_domain_user)
|
951
|
+
if locate_config_value(:azure_domain_user)
|
947
952
|
# extract domain name since it should be part of username
|
948
953
|
case locate_config_value(:azure_domain_user)
|
949
954
|
when /(\S+)\\(.+)/ # format - fully-qualified-DNS-domain\username
|
950
|
-
server_def[:azure_domain_name] = $1
|
955
|
+
server_def[:azure_domain_name] = $1 if locate_config_value(:azure_domain_name).nil?
|
956
|
+
server_def[:azure_user_domain_name] = $1
|
951
957
|
server_def[:azure_domain_user] = $2
|
952
958
|
when /(.+)@(\S+)/ # format - user@fully-qualified-DNS-domain
|
953
|
-
server_def[:azure_domain_name] = $2
|
959
|
+
server_def[:azure_domain_name] = $2 if locate_config_value(:azure_domain_name).nil?
|
960
|
+
server_def[:azure_user_domain_name] = $2
|
954
961
|
server_def[:azure_domain_user] = $1
|
955
962
|
else
|
956
|
-
|
957
|
-
|
958
|
-
|
963
|
+
if locate_config_value(:azure_domain_name).nil?
|
964
|
+
ui.error('--azure-domain-name should be specified if --azure-domain-user is not in one of the following formats: fully-qualified-DNS-domain\username, user@fully-qualified-DNS-domain')
|
965
|
+
exit 1
|
966
|
+
end
|
967
|
+
server_def[:azure_domain_user] = locate_config_value(:azure_domain_user)
|
959
968
|
end
|
960
969
|
end
|
961
970
|
server_def[:azure_domain_passwd] = locate_config_value(:azure_domain_passwd)
|
@@ -983,7 +992,12 @@ class Chef
|
|
983
992
|
|
984
993
|
def get_chef_extension_public_params
|
985
994
|
pub_config = Hash.new
|
986
|
-
|
995
|
+
if(locate_config_value(:azure_extension_client_config))
|
996
|
+
pub_config[:client_rb] = File.read(locate_config_value(:azure_extension_client_config))
|
997
|
+
else
|
998
|
+
pub_config[:client_rb] = "chef_server_url \t #{Chef::Config[:chef_server_url].to_json}\nvalidation_client_name\t#{Chef::Config[:validation_client_name].to_json}"
|
999
|
+
end
|
1000
|
+
|
987
1001
|
pub_config[:runlist] = locate_config_value(:run_list).empty? ? "" : locate_config_value(:run_list).join(",").to_json
|
988
1002
|
pub_config[:autoUpdateClient] = locate_config_value(:auto_update_client) ? "true" : "false"
|
989
1003
|
pub_config[:deleteChefConfig] = locate_config_value(:delete_chef_extension_config) ? "true" : "false"
|
@@ -997,6 +1011,9 @@ class Chef
|
|
997
1011
|
pub_config[:bootstrap_options][:chef_server_url] = Chef::Config[:chef_server_url] if Chef::Config[:chef_server_url]
|
998
1012
|
pub_config[:bootstrap_options][:validation_client_name] = Chef::Config[:validation_client_name] if Chef::Config[:validation_client_name]
|
999
1013
|
pub_config[:bootstrap_options][:node_verify_api_cert] = locate_config_value(:node_verify_api_cert) ? "true" : "false" if config.key?(:node_verify_api_cert)
|
1014
|
+
pub_config[:bootstrap_options][:bootstrap_version] = locate_config_value(:bootstrap_version) if locate_config_value(:bootstrap_version)
|
1015
|
+
pub_config[:bootstrap_options][:node_ssl_verify_mode] = locate_config_value(:node_ssl_verify_mode) if locate_config_value(:node_ssl_verify_mode)
|
1016
|
+
pub_config[:bootstrap_options][:bootstrap_proxy] = locate_config_value(:bootstrap_proxy) if locate_config_value(:bootstrap_proxy)
|
1000
1017
|
Base64.encode64(pub_config.to_json)
|
1001
1018
|
end
|
1002
1019
|
|
@@ -1023,6 +1040,16 @@ class Chef
|
|
1023
1040
|
else
|
1024
1041
|
pri_config[:validation_key] = File.read(Chef::Config[:validation_key])
|
1025
1042
|
end
|
1043
|
+
|
1044
|
+
# SSL cert bootstrap support
|
1045
|
+
if locate_config_value(:cert_path)
|
1046
|
+
if File.exist?(File.expand_path(locate_config_value(:cert_path)))
|
1047
|
+
pri_config[:chef_server_crt] = File.read(locate_config_value(:cert_path))
|
1048
|
+
else
|
1049
|
+
ui.error('Specified SSL certificate does not exist.')
|
1050
|
+
exit 1
|
1051
|
+
end
|
1052
|
+
end
|
1026
1053
|
Base64.encode64(pri_config.to_json)
|
1027
1054
|
end
|
1028
1055
|
|
data/lib/knife-azure/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.6.0.rc.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Barry Davis
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|