knife-azure 1.5.2 → 1.6.0.rc.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|