vagrant-azure 2.0.0.pre1 → 2.0.0.pre2
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/Gemfile +3 -3
- data/README.md +7 -7
- data/Rakefile +8 -0
- data/dummy.box +0 -0
- data/lib/vagrant-azure/action.rb +11 -0
- data/lib/vagrant-azure/action/read_ssh_info.rb +2 -2
- data/lib/vagrant-azure/action/read_state.rb +3 -3
- data/lib/vagrant-azure/action/read_winrm_info.rb +38 -0
- data/lib/vagrant-azure/action/run_instance.rb +81 -35
- data/lib/vagrant-azure/action/start_instance.rb +1 -1
- data/lib/vagrant-azure/action/stop_instance.rb +1 -1
- data/lib/vagrant-azure/action/terminate_instance.rb +5 -1
- data/lib/vagrant-azure/capabilities/winrm.rb +12 -0
- data/lib/vagrant-azure/config.rb +31 -2
- data/lib/vagrant-azure/plugin.rb +5 -0
- data/lib/vagrant-azure/provider.rb +13 -0
- data/lib/vagrant-azure/util/vm_await.rb +1 -1
- data/lib/vagrant-azure/version.rb +1 -1
- data/locales/en.yml +2 -0
- data/templates/arm/deployment.json.erb +55 -13
- data/templates/arm/selfsignedcert.json.erb +19 -0
- data/templates/arm/setup-winrm.ps1.erb +7 -0
- data/vagrant-azure.gemspec +7 -5
- metadata +31 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bec96dd4b99f7a5bf92f5d5b8056b1ce4885d44
|
4
|
+
data.tar.gz: aa65b0f1615ae25b591ffd59efd462332ea4de93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f838e34d66d8795e0b0dc00ad4f2529ad230f996e06923ba37adb4e1d16403c263dfca156d292ccc204c5e63ec39fe63491474f8164e8e0efbfc515a90457e2
|
7
|
+
data.tar.gz: 3e057b8906ad18b76e15dcf5f8a674bbaa3b050880de1e5e4a188a1efa07c0d811fee2b4e2c855764862bf1b2a8fc151372d4d6709ce252f1eb7f01ac1defe21
|
data/Gemfile
CHANGED
@@ -10,10 +10,10 @@ group :development do
|
|
10
10
|
# We depend on Vagrant for development, but we don't add it as a
|
11
11
|
# gem dependency because we expect to be installed within the
|
12
12
|
# Vagrant environment itself using `vagrant plugin`.
|
13
|
-
gem 'vagrant', git: '
|
14
|
-
gem '
|
13
|
+
gem 'vagrant', git: 'https://github.com/mitchellh/vagrant.git'
|
14
|
+
gem 'bundler', '~>1.10.5'
|
15
15
|
end
|
16
16
|
|
17
17
|
group :plugins do
|
18
18
|
gem 'vagrant-azure', path: '.'
|
19
|
-
end
|
19
|
+
end
|
data/README.md
CHANGED
@@ -7,14 +7,14 @@ provider to Vagrant, allowing Vagrant to control and provision machines in Micro
|
|
7
7
|
|
8
8
|
## Usage
|
9
9
|
|
10
|
-
|
10
|
+
[Download Vagrant](http://www.vagrantup.com/downloads.html)
|
11
11
|
|
12
12
|
Install the vagrant-azure plugin using the standard Vagrant 1.1+ installation methods. After installing the plugin, you can ```vagrant up``` and use ```azure``` provider. For example:
|
13
13
|
|
14
14
|
```
|
15
|
-
|
15
|
+
vagrant plugin install vagrant-azure --plugin-version '2.0.0.pre1' --plugin-prerelease
|
16
16
|
...
|
17
|
-
|
17
|
+
vagrant up --provider=azure
|
18
18
|
...
|
19
19
|
```
|
20
20
|
|
@@ -25,7 +25,7 @@ You'll need an ```azure``` box before you can do ```vagrant up``` though.
|
|
25
25
|
You can use the dummy box and specify all the required details manually in the ```config.vm.provider``` block in your ```Vagrantfile```. Add the dummy box with the name you want:
|
26
26
|
|
27
27
|
```
|
28
|
-
|
28
|
+
vagrant box add azure https://github.com/azure/vagrant-azure/raw/v2.0/dummy.box
|
29
29
|
...
|
30
30
|
```
|
31
31
|
|
@@ -55,7 +55,7 @@ end
|
|
55
55
|
Now you can run
|
56
56
|
|
57
57
|
```
|
58
|
-
|
58
|
+
vagrant up --provider=azure
|
59
59
|
```
|
60
60
|
|
61
61
|
This will bring up an Azure VM as per the configuration options set above.
|
@@ -87,8 +87,8 @@ For instructions on how to setup an Azure Active Directory Application see: http
|
|
87
87
|
* `location`: (Optional) Azure location to build the VM -- defaults to 'westus'
|
88
88
|
* `vm_name`: (Optional) Name of the virtual machine
|
89
89
|
* `vm_password`: (Optional for *nix) Password for the VM -- This is not recommended for *nix deployments
|
90
|
-
* `vm_size`: (Optional) VM size to be used -- defaults to '
|
91
|
-
* `vm_image_urn`: (Optional) Name of the virtual machine image urn to use -- defaults to 'canonical:ubuntuserver:16.04
|
90
|
+
* `vm_size`: (Optional) VM size to be used -- defaults to 'Standard_DS2_v2'. See: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-sizes/
|
91
|
+
* `vm_image_urn`: (Optional) Name of the virtual machine image urn to use -- defaults to 'canonical:ubuntuserver:16.04-LTS:latest'. See: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-cli-ps-findimage/
|
92
92
|
* `virtual_network_name`: (Optional) Name of the virtual network resource
|
93
93
|
* `subnet_name`: (Optional) Name of the virtual network subnet resource
|
94
94
|
* `instance_ready_timeout`: (Optional) The timeout to wait for an instance to become ready -- default 120 seconds.
|
data/Rakefile
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'bundler/setup'
|
7
|
+
require 'rspec/core/rake_task'
|
7
8
|
|
8
9
|
$stdout.sync = true
|
9
10
|
$stderr.sync = true
|
@@ -11,3 +12,10 @@ $stderr.sync = true
|
|
11
12
|
Dir.chdir(File.expand_path('../', __FILE__))
|
12
13
|
|
13
14
|
Bundler::GemHelper.install_tasks
|
15
|
+
|
16
|
+
# Install the `spec` task so that we can run tests.
|
17
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
18
|
+
t.rspec_opts = '--order defined'
|
19
|
+
end
|
20
|
+
# Default task is to run the unit tests
|
21
|
+
task :default => :spec
|
data/dummy.box
CHANGED
Binary file
|
data/lib/vagrant-azure/action.rb
CHANGED
@@ -75,6 +75,16 @@ module VagrantPlugins
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
# This action is called to read the WinRM info of the machine. The
|
79
|
+
# resulting state is expected to be put into the `:machine_winrm_info` key.
|
80
|
+
def self.action_read_winrm_info
|
81
|
+
Vagrant::Action::Builder.new.tap do |b|
|
82
|
+
b.use ConfigValidate
|
83
|
+
b.use ConnectAzure
|
84
|
+
b.use ReadWinrmInfo
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
78
88
|
# This action is called to read the state of the machine. The
|
79
89
|
# resulting state is expected to be put into the `:machine_state_id`
|
80
90
|
# key.
|
@@ -178,6 +188,7 @@ module VagrantPlugins
|
|
178
188
|
autoload :MessageNotCreated, action_root.join('message_not_created')
|
179
189
|
autoload :MessageWillNotDestroy, action_root.join('message_will_not_destroy')
|
180
190
|
autoload :ReadSSHInfo, action_root.join('read_ssh_info')
|
191
|
+
autoload :ReadWinrmInfo, action_root.join('read_winrm_info')
|
181
192
|
autoload :ReadState, action_root.join('read_state')
|
182
193
|
autoload :RestartVM, action_root.join('restart_vm')
|
183
194
|
autoload :RunInstance, action_root.join('run_instance')
|
@@ -24,9 +24,9 @@ module VagrantPlugins
|
|
24
24
|
def read_ssh_info(azure, env)
|
25
25
|
return nil if env[:machine].id.nil?
|
26
26
|
parsed = parse_machine_id(env[:machine].id)
|
27
|
-
public_ip = azure.network.public_ipaddresses.get(parsed[:group], "#{parsed[:name]}-vagrantPublicIP")
|
27
|
+
public_ip = azure.network.public_ipaddresses.get(parsed[:group], "#{parsed[:name]}-vagrantPublicIP")
|
28
28
|
|
29
|
-
{:host => public_ip.
|
29
|
+
{:host => public_ip.dns_settings.fqdn, :port => 22}
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -29,9 +29,9 @@ module VagrantPlugins
|
|
29
29
|
parsed = parse_machine_id(machine.id)
|
30
30
|
vm = nil
|
31
31
|
begin
|
32
|
-
vm = azure.compute.virtual_machines.get(parsed[:group], parsed[:name], 'instanceView')
|
32
|
+
vm = azure.compute.virtual_machines.get(parsed[:group], parsed[:name], 'instanceView')
|
33
33
|
rescue MsRestAzure::AzureOperationError => ex
|
34
|
-
if vm.nil? || tearing_down?(vm.
|
34
|
+
if vm.nil? || tearing_down?(vm.instance_view.statuses)
|
35
35
|
# The machine can't be found
|
36
36
|
@logger.info('Machine not found or terminated, assuming it got destroyed.')
|
37
37
|
machine.id = nil
|
@@ -40,7 +40,7 @@ module VagrantPlugins
|
|
40
40
|
end
|
41
41
|
|
42
42
|
# Return the state
|
43
|
-
power_state(vm.
|
43
|
+
power_state(vm.instance_view.statuses)
|
44
44
|
end
|
45
45
|
|
46
46
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache License, Version 2.0.
|
4
|
+
# See License.txt in the project root for license information.
|
5
|
+
#--------------------------------------------------------------------------
|
6
|
+
require 'log4r'
|
7
|
+
require 'vagrant-azure/util/machine_id_helper'
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module Azure
|
11
|
+
module Action
|
12
|
+
class ReadWinrmInfo
|
13
|
+
include VagrantPlugins::Azure::Util::MachineIdHelper
|
14
|
+
|
15
|
+
def initialize(app, env)
|
16
|
+
@app = app
|
17
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::read_winrm_info')
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
if env[:machine].config.vm.guest == :windows
|
22
|
+
env[:machine_winrm_info] = read_winrm_info(env[:azure_arm_service], env)
|
23
|
+
end
|
24
|
+
|
25
|
+
@app.call(env)
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_winrm_info(azure, env)
|
29
|
+
return nil if env[:machine].id.nil?
|
30
|
+
parsed = parse_machine_id(env[:machine].id)
|
31
|
+
public_ip = azure.network.public_ipaddresses.get(parsed[:group], "#{parsed[:name]}-vagrantPublicIP")
|
32
|
+
|
33
|
+
{:host => public_ip.dns_settings.fqdn, :port => env[:machine].config.winrm.port}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -28,18 +28,25 @@ module VagrantPlugins
|
|
28
28
|
machine = env[:machine]
|
29
29
|
|
30
30
|
# Get the configs
|
31
|
-
config
|
32
|
-
endpoint
|
33
|
-
resource_group_name
|
34
|
-
location
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
31
|
+
config = machine.provider_config
|
32
|
+
endpoint = config.endpoint
|
33
|
+
resource_group_name = config.resource_group_name
|
34
|
+
location = config.location
|
35
|
+
ssh_user_name = machine.config.ssh.username
|
36
|
+
vm_name = config.vm_name
|
37
|
+
vm_password = config.vm_password
|
38
|
+
vm_size = config.vm_size
|
39
|
+
vm_image_urn = config.vm_image_urn
|
40
|
+
virtual_network_name = config.virtual_network_name
|
41
|
+
subnet_name = config.subnet_name
|
42
|
+
tcp_endpoints = config.tcp_endpoints
|
43
|
+
availability_set_name = config.availability_set_name
|
44
|
+
admin_user_name = config.admin_username
|
45
|
+
admin_password = config.admin_password
|
46
|
+
winrm_port = machine.config.winrm.port
|
47
|
+
winrm_install_self_signed_cert = config.winrm_install_self_signed_cert
|
48
|
+
dns_label_prefix = Haikunator.haikunate(100)
|
49
|
+
deployment_template = config.deployment_template
|
43
50
|
|
44
51
|
# Launch!
|
45
52
|
env[:ui].info(I18n.t('vagrant_azure.launching_instance'))
|
@@ -47,6 +54,8 @@ module VagrantPlugins
|
|
47
54
|
env[:ui].info(" -- Subscription Id: #{config.subscription_id}")
|
48
55
|
env[:ui].info(" -- Resource Group Name: #{resource_group_name}")
|
49
56
|
env[:ui].info(" -- Location: #{location}")
|
57
|
+
env[:ui].info(" -- SSH User Name: #{ssh_user_name}") if ssh_user_name
|
58
|
+
env[:ui].info(" -- Admin Username: #{admin_user_name}") if admin_user_name
|
50
59
|
env[:ui].info(" -- VM Name: #{vm_name}")
|
51
60
|
env[:ui].info(" -- VM Size: #{vm_size}")
|
52
61
|
env[:ui].info(" -- Image URN: #{vm_image_urn}")
|
@@ -54,6 +63,7 @@ module VagrantPlugins
|
|
54
63
|
env[:ui].info(" -- Subnet Name: #{subnet_name}") if subnet_name
|
55
64
|
env[:ui].info(" -- TCP Endpoints: #{tcp_endpoints}") if tcp_endpoints
|
56
65
|
env[:ui].info(" -- Availability Set Name: #{availability_set_name}") if availability_set_name
|
66
|
+
env[:ui].info(" -- DNS Label Prefix: #{dns_label_prefix}")
|
57
67
|
|
58
68
|
image_publisher, image_offer, image_sku, image_version = vm_image_urn.split(':')
|
59
69
|
|
@@ -65,7 +75,7 @@ module VagrantPlugins
|
|
65
75
|
@logger.info("Time to fetch os image details: #{env[:metrics]['get_image_details']}")
|
66
76
|
|
67
77
|
deployment_params = {
|
68
|
-
dnsLabelPrefix:
|
78
|
+
dnsLabelPrefix: dns_label_prefix,
|
69
79
|
vmSize: vm_size,
|
70
80
|
vmName: vm_name,
|
71
81
|
imagePublisher: image_publisher,
|
@@ -73,24 +83,46 @@ module VagrantPlugins
|
|
73
83
|
imageSku: image_sku,
|
74
84
|
imageVersion: image_version,
|
75
85
|
subnetName: subnet_name,
|
76
|
-
virtualNetworkName: virtual_network_name
|
86
|
+
virtualNetworkName: virtual_network_name,
|
77
87
|
}
|
78
88
|
|
79
|
-
|
89
|
+
# we need to pass different parameters depending upon the OS
|
90
|
+
operating_system = get_image_os(image_details)
|
91
|
+
|
92
|
+
template_params = {
|
93
|
+
operating_system: operating_system,
|
94
|
+
winrm_install_self_signed_cert: winrm_install_self_signed_cert,
|
95
|
+
winrm_port: winrm_port,
|
96
|
+
dns_label_prefix: dns_label_prefix,
|
97
|
+
location: location,
|
98
|
+
deployment_template: deployment_template
|
99
|
+
}
|
100
|
+
|
101
|
+
if operating_system != 'Windows'
|
80
102
|
private_key_paths = machine.config.ssh.private_key_path
|
81
|
-
if private_key_paths.empty?
|
103
|
+
if private_key_paths.nil? || private_key_paths.empty?
|
82
104
|
raise I18n.t('vagrant_azure.private_key_not_specified')
|
83
105
|
end
|
84
106
|
|
85
107
|
paths_to_pub = private_key_paths.map{ |k| File.expand_path( k + '.pub') }.select{ |p| File.exists?(p) }
|
86
108
|
raise I18n.t('vagrant_azure.public_key_path_private_key', private_key_paths.join(', ')) if paths_to_pub.empty?
|
109
|
+
deployment_params.merge!(adminUsername: ssh_user_name)
|
87
110
|
deployment_params.merge!(sshKeyData: File.read(paths_to_pub.first))
|
111
|
+
communicator_message = 'vagrant_azure.waiting_for_ssh'
|
112
|
+
else
|
113
|
+
env[:machine].config.vm.communicator = :winrm
|
114
|
+
machine.config.winrm.port = winrm_port
|
115
|
+
machine.config.winrm.username = admin_user_name
|
116
|
+
machine.config.winrm.password = admin_password
|
117
|
+
communicator_message = 'vagrant_azure.waiting_for_winrm'
|
118
|
+
windows_params = {
|
119
|
+
adminUsername: admin_user_name,
|
120
|
+
adminPassword: admin_password,
|
121
|
+
winRmPort: winrm_port
|
122
|
+
}
|
123
|
+
deployment_params.merge!(windows_params)
|
88
124
|
end
|
89
125
|
|
90
|
-
template_params = {
|
91
|
-
operating_system: get_image_os(image_details)
|
92
|
-
}
|
93
|
-
|
94
126
|
env[:ui].info(" -- Create or Update of Resource Group: #{resource_group_name}")
|
95
127
|
env[:metrics]['put_resource_group'] = Util::Timer.time do
|
96
128
|
put_resource_group(azure, resource_group_name, location)
|
@@ -99,11 +131,11 @@ module VagrantPlugins
|
|
99
131
|
|
100
132
|
deployment_params = build_deployment_params(template_params, deployment_params.reject{|_,v| v.nil?})
|
101
133
|
|
102
|
-
env[:ui].info('Starting deployment')
|
134
|
+
env[:ui].info(' -- Starting deployment')
|
103
135
|
env[:metrics]['deployment_time'] = Util::Timer.time do
|
104
136
|
put_deployment(azure, resource_group_name, deployment_params)
|
105
137
|
end
|
106
|
-
env[:ui].info('Finished deploying')
|
138
|
+
env[:ui].info(' -- Finished deploying')
|
107
139
|
|
108
140
|
# Immediately save the ID since it is created at this point.
|
109
141
|
env[:machine].id = serialize_machine_id(resource_group_name, vm_name, location)
|
@@ -111,8 +143,8 @@ module VagrantPlugins
|
|
111
143
|
@logger.info("Time to deploy: #{env[:metrics]['deployment_time']}")
|
112
144
|
unless env[:interrupted]
|
113
145
|
env[:metrics]['instance_ssh_time'] = Util::Timer.time do
|
114
|
-
# Wait for SSH to be ready.
|
115
|
-
env[:ui].info(I18n.t(
|
146
|
+
# Wait for SSH/WinRM to be ready.
|
147
|
+
env[:ui].info(I18n.t(communicator_message))
|
116
148
|
network_ready_retries = 0
|
117
149
|
network_ready_retries_max = 10
|
118
150
|
while true
|
@@ -122,7 +154,7 @@ module VagrantPlugins
|
|
122
154
|
rescue Exception => e
|
123
155
|
if network_ready_retries < network_ready_retries_max
|
124
156
|
network_ready_retries += 1
|
125
|
-
@logger.warn(I18n.t(
|
157
|
+
@logger.warn(I18n.t("#{communicator_message}, retrying"))
|
126
158
|
else
|
127
159
|
raise e
|
128
160
|
end
|
@@ -131,10 +163,10 @@ module VagrantPlugins
|
|
131
163
|
end
|
132
164
|
end
|
133
165
|
|
134
|
-
@logger.info("Time for SSH ready: #{env[:metrics]['instance_ssh_time']}")
|
166
|
+
@logger.info("Time for SSH/WinRM ready: #{env[:metrics]['instance_ssh_time']}")
|
135
167
|
|
136
168
|
# Ready and booted!
|
137
|
-
env[:ui].info(I18n.t('vagrant_azure.ready'))
|
169
|
+
env[:ui].info(I18n.t('vagrant_azure.ready')) unless env[:interrupted]
|
138
170
|
end
|
139
171
|
|
140
172
|
# Terminate the instance if we were interrupted
|
@@ -144,20 +176,21 @@ module VagrantPlugins
|
|
144
176
|
end
|
145
177
|
|
146
178
|
def get_image_os(image_details)
|
147
|
-
image_details.
|
179
|
+
image_details.os_disk_image.operating_system
|
148
180
|
end
|
149
181
|
|
150
182
|
def get_image_details(azure, location, publisher, offer, sku, version)
|
151
183
|
if version == 'latest'
|
152
|
-
|
153
|
-
|
184
|
+
images = azure.compute.virtual_machine_images.list(location, publisher, offer, sku)
|
185
|
+
latest = images.sort_by(&:name).last
|
186
|
+
azure.compute.virtual_machine_images.get(location, publisher, offer, sku, latest.name)
|
154
187
|
else
|
155
|
-
azure.compute.virtual_machine_images.get(location, publisher, offer, sku, version)
|
188
|
+
azure.compute.virtual_machine_images.get(location, publisher, offer, sku, version)
|
156
189
|
end
|
157
190
|
end
|
158
191
|
|
159
192
|
def put_deployment(azure, rg_name, params)
|
160
|
-
azure.resources.deployments.create_or_update(rg_name, 'vagrant', params)
|
193
|
+
azure.resources.deployments.create_or_update(rg_name, 'vagrant', params)
|
161
194
|
end
|
162
195
|
|
163
196
|
def put_resource_group(azure, name, location)
|
@@ -165,18 +198,31 @@ module VagrantPlugins
|
|
165
198
|
rg.location = location
|
166
199
|
end
|
167
200
|
|
168
|
-
azure.resources.resource_groups.create_or_update(name, params)
|
201
|
+
azure.resources.resource_groups.create_or_update(name, params)
|
169
202
|
end
|
170
203
|
|
171
204
|
# This method generates the deployment template
|
172
205
|
def render_deployment_template(options)
|
173
|
-
|
206
|
+
self_signed_cert_resource = nil
|
207
|
+
if options[:operating_system] == 'Windows' && options[:winrm_install_self_signed_cert]
|
208
|
+
setup_winrm_powershell = Vagrant::Util::TemplateRenderer.render('arm/setup-winrm.ps1', options.merge({template_root: template_root}))
|
209
|
+
encoded_setup_winrm_powershell = setup_winrm_powershell.
|
210
|
+
gsub("'", "', variables('singleQuote'), '").
|
211
|
+
gsub("\r\n", "\n").
|
212
|
+
gsub("\n", "; ")
|
213
|
+
self_signed_cert_resource = Vagrant::Util::TemplateRenderer.render('arm/selfsignedcert.json', options.merge({template_root: template_root, setup_winrm_powershell: encoded_setup_winrm_powershell}))
|
214
|
+
end
|
215
|
+
Vagrant::Util::TemplateRenderer.render('arm/deployment.json', options.merge({ template_root: template_root, self_signed_cert_resource: self_signed_cert_resource}))
|
174
216
|
end
|
175
217
|
|
176
218
|
def build_deployment_params(template_params, deployment_params)
|
177
219
|
params = ::Azure::ARM::Resources::Models::Deployment.new
|
178
220
|
params.properties = ::Azure::ARM::Resources::Models::DeploymentProperties.new
|
179
|
-
|
221
|
+
if template_params[:deployment_template].nil?
|
222
|
+
params.properties.template = JSON.parse(render_deployment_template(template_params))
|
223
|
+
else
|
224
|
+
params.properties.template = JSON.parse(template_params[:deployment_template])
|
225
|
+
end
|
180
226
|
params.properties.mode = ::Azure::ARM::Resources::Models::DeploymentMode::Incremental
|
181
227
|
params.properties.parameters = build_parameters(deployment_params)
|
182
228
|
params
|
@@ -20,7 +20,11 @@ module VagrantPlugins
|
|
20
20
|
|
21
21
|
begin
|
22
22
|
env[:ui].info(I18n.t('vagrant_azure.terminating', parsed))
|
23
|
-
env[:
|
23
|
+
env[:ui].info('Deleting resource group')
|
24
|
+
|
25
|
+
# Call the begin_xxx_async version to kick off the delete, but don't wait for the resource group to be cleaned up
|
26
|
+
env[:azure_arm_service].resources.resource_groups.begin_delete_async(parsed[:group]).value!
|
27
|
+
env[:ui].info('Resource group is deleting... Moving on.')
|
24
28
|
rescue MsRestAzure::AzureOperationError => ex
|
25
29
|
unless ex.response.status == 404
|
26
30
|
raise ex
|
data/lib/vagrant-azure/config.rb
CHANGED
@@ -93,6 +93,26 @@ module VagrantPlugins
|
|
93
93
|
# @return [String]
|
94
94
|
attr_accessor :endpoint
|
95
95
|
|
96
|
+
# (Optional - requrired for Windows) The admin username for Windows templates -- ENV['AZURE_VM_ADMIN_USERNAME']
|
97
|
+
#
|
98
|
+
# @return [String]
|
99
|
+
attr_accessor :admin_username
|
100
|
+
|
101
|
+
# (Optional - Required for Windows) The admin username for Windows templates -- ENV['AZURE_VM_ADMIN_PASSWORD']
|
102
|
+
#
|
103
|
+
# @return [String]
|
104
|
+
attr_accessor :admin_password
|
105
|
+
|
106
|
+
# (Optional) Whether to automatically install a self-signed cert and open the firewall port for winrm over https -- default true
|
107
|
+
#
|
108
|
+
# @return [Bool]
|
109
|
+
attr_accessor :winrm_install_self_signed_cert
|
110
|
+
|
111
|
+
# (Optional - Required for Windows) The admin username for Windows templates -- ENV['AZURE_VM_ADMIN_PASSWORD']
|
112
|
+
#
|
113
|
+
# @return [String]
|
114
|
+
attr_accessor :deployment_template
|
115
|
+
|
96
116
|
def initialize
|
97
117
|
@tenant_id = UNSET_VALUE
|
98
118
|
@client_id = UNSET_VALUE
|
@@ -111,6 +131,10 @@ module VagrantPlugins
|
|
111
131
|
@availability_set_name = UNSET_VALUE
|
112
132
|
@instance_ready_timeout = UNSET_VALUE
|
113
133
|
@instance_check_interval = UNSET_VALUE
|
134
|
+
@admin_username = UNSET_VALUE
|
135
|
+
@admin_password = UNSET_VALUE
|
136
|
+
@winrm_install_self_signed_cert = UNSET_VALUE
|
137
|
+
@deployment_template = UNSET_VALUE
|
114
138
|
end
|
115
139
|
|
116
140
|
def finalize!
|
@@ -123,16 +147,21 @@ module VagrantPlugins
|
|
123
147
|
@vm_name = Haikunator.haikunate(100) if @vm_name == UNSET_VALUE
|
124
148
|
@resource_group_name = Haikunator.haikunate(100) if @resource_group_name == UNSET_VALUE
|
125
149
|
@vm_password = nil if @vm_password == UNSET_VALUE
|
126
|
-
@vm_image_urn = 'canonical:ubuntuserver:16.04.0-
|
150
|
+
@vm_image_urn = 'canonical:ubuntuserver:16.04.0-LTS:latest' if @vm_image_urn == UNSET_VALUE
|
127
151
|
@location = 'westus' if @location == UNSET_VALUE
|
128
152
|
@virtual_network_name = nil if @virtual_network_name == UNSET_VALUE
|
129
153
|
@subnet_name = nil if @subnet_name == UNSET_VALUE
|
130
154
|
@tcp_endpoints = nil if @tcp_endpoints == UNSET_VALUE
|
131
|
-
@vm_size = '
|
155
|
+
@vm_size = 'Standard_DS2_v2' if @vm_size == UNSET_VALUE
|
132
156
|
@availability_set_name = nil if @availability_set_name == UNSET_VALUE
|
133
157
|
|
134
158
|
@instance_ready_timeout = 120 if @instance_ready_timeout == UNSET_VALUE
|
135
159
|
@instance_check_interval = 2 if @instance_check_interval == UNSET_VALUE
|
160
|
+
|
161
|
+
@admin_username = (ENV['AZURE_VM_ADMIN_USERNAME'] || 'vagrant') if @admin_username == UNSET_VALUE
|
162
|
+
@admin_password = (ENV['AZURE_VM_ADMIN_PASSWORD'] || '$Vagrant(0)') if @admin_password == UNSET_VALUE
|
163
|
+
@winrm_install_self_signed_cert = true if @winrm_install_self_signed_cert == UNSET_VALUE
|
164
|
+
@deployment_template = nil if @deployment_template == UNSET_VALUE
|
136
165
|
end
|
137
166
|
|
138
167
|
def validate(machine)
|
data/lib/vagrant-azure/plugin.rb
CHANGED
@@ -37,6 +37,11 @@ module VagrantPlugins
|
|
37
37
|
Provider
|
38
38
|
end
|
39
39
|
|
40
|
+
provider_capability(:azure, :winrm_info) do
|
41
|
+
require_relative 'capabilities/winrm'
|
42
|
+
VagrantPlugins::Azure::Cap::WinRM
|
43
|
+
end
|
44
|
+
|
40
45
|
def self.setup_i18n
|
41
46
|
I18n.load_path << File.expand_path(
|
42
47
|
'locales/en.yml',
|
@@ -10,6 +10,14 @@ module VagrantPlugins
|
|
10
10
|
|
11
11
|
def initialize(machine)
|
12
12
|
@machine = machine
|
13
|
+
|
14
|
+
# Load the driver
|
15
|
+
machine_id_changed
|
16
|
+
|
17
|
+
# turn off nfs functionality by default, so the machine will fall back to rsync by default
|
18
|
+
@machine.config.nfs.functional = false
|
19
|
+
@machine.config.winrm.password = @machine.provider_config.admin_password
|
20
|
+
@machine.config.winrm.username = @machine.provider_config.admin_username
|
13
21
|
end
|
14
22
|
|
15
23
|
def action(name)
|
@@ -29,6 +37,11 @@ module VagrantPlugins
|
|
29
37
|
env[:machine_ssh_info]
|
30
38
|
end
|
31
39
|
|
40
|
+
def winrm_info
|
41
|
+
env = @machine.action('read_winrm_info')
|
42
|
+
env[:machine_winrm_info]
|
43
|
+
end
|
44
|
+
|
32
45
|
def state
|
33
46
|
# Run a custom action we define called "read_state" which does what it
|
34
47
|
# says. It puts the state in the `:machine_state_id` key in the env
|
@@ -18,7 +18,7 @@ module VagrantPlugins
|
|
18
18
|
end
|
19
19
|
|
20
20
|
count += 1
|
21
|
-
vm = azure.compute.virtual_machines.get(parsed[:group], parsed[:name], 'instanceView')
|
21
|
+
vm = azure.compute.virtual_machines.get(parsed[:group], parsed[:name], 'instanceView')
|
22
22
|
if yield(vm)
|
23
23
|
task.shutdown
|
24
24
|
true
|
data/locales/en.yml
CHANGED
@@ -11,18 +11,19 @@
|
|
11
11
|
},
|
12
12
|
<% if operating_system == 'Windows' %>
|
13
13
|
"adminPassword": {
|
14
|
-
"type": "
|
14
|
+
"type": "securestring",
|
15
15
|
"metadata": {
|
16
16
|
"description": "Password for the Virtual Machine (only used on Windows)"
|
17
17
|
}
|
18
18
|
},
|
19
|
-
<%
|
19
|
+
<% else %>
|
20
20
|
"sshKeyData": {
|
21
21
|
"type": "string",
|
22
22
|
"metadata": {
|
23
23
|
"description": "SSH rsa public key file as a string."
|
24
24
|
}
|
25
25
|
},
|
26
|
+
<% end %>
|
26
27
|
"dnsLabelPrefix": {
|
27
28
|
"type": "string",
|
28
29
|
"metadata": {
|
@@ -31,7 +32,7 @@
|
|
31
32
|
},
|
32
33
|
"vmSize": {
|
33
34
|
"type": "string",
|
34
|
-
"defaultValue": "
|
35
|
+
"defaultValue": "Standard_DS2_v2",
|
35
36
|
"metadata": {
|
36
37
|
"description": "Size of the VM"
|
37
38
|
}
|
@@ -58,7 +59,7 @@
|
|
58
59
|
},
|
59
60
|
"imageSku": {
|
60
61
|
"type": "string",
|
61
|
-
"defaultValue": "16.04
|
62
|
+
"defaultValue": "16.04-LTS",
|
62
63
|
"metadata": {
|
63
64
|
"description": "Name of the image sku"
|
64
65
|
}
|
@@ -83,24 +84,33 @@
|
|
83
84
|
"metadata": {
|
84
85
|
"description": "Name of the virtual network"
|
85
86
|
}
|
87
|
+
},
|
88
|
+
"winRmPort": {
|
89
|
+
"type": "int",
|
90
|
+
"defaultValue": 5986,
|
91
|
+
"metadata": {
|
92
|
+
"description": "WinRM port"
|
93
|
+
}
|
86
94
|
}
|
87
95
|
},
|
88
96
|
"variables": {
|
89
97
|
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'vagrant')]",
|
90
98
|
"location": "[resourceGroup().location]",
|
91
|
-
"osDiskName": "
|
99
|
+
"osDiskName": "[concat(parameters('vmName'), 'OSDisk1')]",
|
92
100
|
"addressPrefix": "10.0.0.0/16",
|
93
101
|
"subnetPrefix": "10.0.0.0/24",
|
94
102
|
"vmStorageAccountContainerName": "vagrant-vhds",
|
95
103
|
"nicName": "[concat(parameters('vmName'), '-vagrantNIC')]",
|
96
104
|
"publicIPAddressName": "[concat(parameters('vmName'), '-vagrantPublicIP')]",
|
97
105
|
"publicIPAddressType": "Dynamic",
|
98
|
-
"storageAccountType": "
|
106
|
+
"storageAccountType": "Premium_LRS",
|
99
107
|
"networkSecurityGroupName": "[concat(parameters('vmName'), '-vagrantNSG')]",
|
100
108
|
"sshKeyPath": "[concat('/home/',parameters('adminUsername'),'/.ssh/authorized_keys')]",
|
101
109
|
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",
|
102
110
|
"subnetRef": "[concat(variables('vnetID'),'/subnets/',parameters('subnetName'))]",
|
103
|
-
"apiVersion": "2015-06-15"
|
111
|
+
"apiVersion": "2015-06-15",
|
112
|
+
"singleQuote": "'",
|
113
|
+
"doubleQuote": "\""
|
104
114
|
},
|
105
115
|
"resources": [
|
106
116
|
{
|
@@ -119,6 +129,36 @@
|
|
119
129
|
"location": "[variables('location')]",
|
120
130
|
"properties": {
|
121
131
|
"securityRules": [
|
132
|
+
<% if operating_system == 'Windows' %>
|
133
|
+
{
|
134
|
+
"name": "rdp_rule",
|
135
|
+
"properties": {
|
136
|
+
"description": "Enable Inbound RDP",
|
137
|
+
"protocol": "Tcp",
|
138
|
+
"sourcePortRange": "*",
|
139
|
+
"destinationPortRange": "3389",
|
140
|
+
"sourceAddressPrefix": "*",
|
141
|
+
"destinationAddressPrefix": "*",
|
142
|
+
"access": "Allow",
|
143
|
+
"priority": 123,
|
144
|
+
"direction": "Inbound"
|
145
|
+
}
|
146
|
+
},
|
147
|
+
{
|
148
|
+
"name": "winrm_rule",
|
149
|
+
"properties": {
|
150
|
+
"description": "Enable Inbound WinRM",
|
151
|
+
"protocol": "Tcp",
|
152
|
+
"sourcePortRange": "*",
|
153
|
+
"destinationPortRange": "[parameters('winRmPort')]",
|
154
|
+
"sourceAddressPrefix": "*",
|
155
|
+
"destinationAddressPrefix": "*",
|
156
|
+
"access": "Allow",
|
157
|
+
"priority": 124,
|
158
|
+
"direction": "Inbound"
|
159
|
+
}
|
160
|
+
}
|
161
|
+
<% else %>
|
122
162
|
{
|
123
163
|
"name": "ssh_rule",
|
124
164
|
"properties": {
|
@@ -133,6 +173,7 @@
|
|
133
173
|
"direction": "Inbound"
|
134
174
|
}
|
135
175
|
}
|
176
|
+
<% end %>
|
136
177
|
]
|
137
178
|
}
|
138
179
|
},
|
@@ -210,6 +251,9 @@
|
|
210
251
|
"[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
|
211
252
|
"[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
|
212
253
|
],
|
254
|
+
<% if operating_system == 'Windows' %>
|
255
|
+
<%= self_signed_cert_resource %>
|
256
|
+
<% end %>
|
213
257
|
"properties": {
|
214
258
|
"hardwareProfile": {
|
215
259
|
"vmSize": "[parameters('vmSize')]"
|
@@ -217,6 +261,9 @@
|
|
217
261
|
"osProfile": {
|
218
262
|
"computerName": "[parameters('vmName')]",
|
219
263
|
"adminUsername": "[parameters('adminUsername')]",
|
264
|
+
<% if operating_system == 'Windows' %>
|
265
|
+
"adminPassword": "[parameters('adminPassword')]"
|
266
|
+
<% else %>
|
220
267
|
"linuxConfiguration": {
|
221
268
|
"disablePasswordAuthentication": "true",
|
222
269
|
"ssh": {
|
@@ -228,6 +275,7 @@
|
|
228
275
|
]
|
229
276
|
}
|
230
277
|
}
|
278
|
+
<% end %>
|
231
279
|
},
|
232
280
|
"storageProfile": {
|
233
281
|
"imageReference": {
|
@@ -251,12 +299,6 @@
|
|
251
299
|
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
|
252
300
|
}
|
253
301
|
]
|
254
|
-
},
|
255
|
-
"diagnosticsProfile": {
|
256
|
-
"bootDiagnostics": {
|
257
|
-
"enabled": "true",
|
258
|
-
"storageUri": "[concat('http://',variables('storageAccountName'),'.blob.core.windows.net')]"
|
259
|
-
}
|
260
302
|
}
|
261
303
|
}
|
262
304
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"resources": [
|
2
|
+
{
|
3
|
+
"type": "Microsoft.Compute/virtualMachines/extensions",
|
4
|
+
"name": "[concat(parameters('vmName'),'/WinRMCustomScriptExtension')]",
|
5
|
+
"apiVersion": "[variables('apiVersion')]",
|
6
|
+
"location": "[resourceGroup().location]",
|
7
|
+
"dependsOn": [
|
8
|
+
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
|
9
|
+
],
|
10
|
+
"properties": {
|
11
|
+
"publisher": "Microsoft.Compute",
|
12
|
+
"type": "CustomScriptExtension",
|
13
|
+
"typeHandlerVersion": "1.4",
|
14
|
+
"settings": {
|
15
|
+
"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -command ', variables('doubleQuote'), '& { <%= setup_winrm_powershell %> }', variables('doubleQuote'))]"
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
],
|
@@ -0,0 +1,7 @@
|
|
1
|
+
$hostname = '<%= dns_label_prefix %>.<%= location %>.cloudapp.azure.com'
|
2
|
+
$Cert = (New-SelfSignedCertificate -CertstoreLocation Cert:/LocalMachine/My -DnsName $hostname).Thumbprint
|
3
|
+
$transport = New-Item -Path WSMan:/LocalHost/Listener -Transport HTTPS -Address * -CertificateThumbPrint $Cert -Force
|
4
|
+
cd $transport.PSPath
|
5
|
+
set-item ./HostName -value $hostname -force
|
6
|
+
set-item ./Port -value <%= winrm_port %> -force
|
7
|
+
netsh advfirewall firewall add rule name=WinRM_HTTPS dir=in action=allow protocol=TCP localport=<%= winrm_port %>
|
data/vagrant-azure.gemspec
CHANGED
@@ -8,6 +8,7 @@ require 'vagrant-azure/version'
|
|
8
8
|
Gem::Specification.new do |s|
|
9
9
|
s.name = 'vagrant-azure'
|
10
10
|
s.version = VagrantPlugins::Azure::VERSION
|
11
|
+
s.platform = Gem::Platform::RUBY
|
11
12
|
s.authors = %w(Azure)
|
12
13
|
s.description = 'Enable Vagrant to manage machines in Microsoft Azure.'
|
13
14
|
s.summary = 'Enable Vagrant to manage Windows and Linux machines in Microsoft Azure.'
|
@@ -18,15 +19,16 @@ Gem::Specification.new do |s|
|
|
18
19
|
s.bindir = 'bin'
|
19
20
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
21
|
|
21
|
-
s.add_runtime_dependency 'azure_mgmt_resources', '~>0.
|
22
|
-
s.add_runtime_dependency 'azure_mgmt_compute', '~>0.
|
23
|
-
s.add_runtime_dependency 'azure_mgmt_network', '~>0.
|
24
|
-
s.add_runtime_dependency 'azure_mgmt_storage', '~>0.
|
22
|
+
s.add_runtime_dependency 'azure_mgmt_resources', '~>0.8.0'
|
23
|
+
s.add_runtime_dependency 'azure_mgmt_compute', '~>0.8.0'
|
24
|
+
s.add_runtime_dependency 'azure_mgmt_network', '~>0.8.0'
|
25
|
+
s.add_runtime_dependency 'azure_mgmt_storage', '~>0.8.0'
|
25
26
|
s.add_runtime_dependency 'haikunator', '~>1.1'
|
27
|
+
s.add_runtime_dependency 'highline', '~>1.7'
|
26
28
|
|
27
29
|
s.add_development_dependency 'bundler', '~>1.9'
|
28
30
|
s.add_development_dependency 'rake', '~>11.1'
|
29
31
|
s.add_development_dependency 'rspec', '~>3.4'
|
30
|
-
s.add_development_dependency 'simplecov', '~>0.11
|
32
|
+
s.add_development_dependency 'simplecov', '~>0.11'
|
31
33
|
s.add_development_dependency 'coveralls', '~>0.8'
|
32
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-azure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Azure
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: azure_mgmt_resources
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.8.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.8.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: azure_mgmt_compute
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.8.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.8.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: azure_mgmt_network
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.8.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.8.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: azure_mgmt_storage
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.8.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.8.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: haikunator
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: highline
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.7'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.7'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: bundler
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,14 +142,14 @@ dependencies:
|
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.11
|
145
|
+
version: '0.11'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.11
|
152
|
+
version: '0.11'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: coveralls
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,12 +191,14 @@ files:
|
|
177
191
|
- lib/vagrant-azure/action/message_will_not_destroy.rb
|
178
192
|
- lib/vagrant-azure/action/read_ssh_info.rb
|
179
193
|
- lib/vagrant-azure/action/read_state.rb
|
194
|
+
- lib/vagrant-azure/action/read_winrm_info.rb
|
180
195
|
- lib/vagrant-azure/action/restart_vm.rb
|
181
196
|
- lib/vagrant-azure/action/run_instance.rb
|
182
197
|
- lib/vagrant-azure/action/start_instance.rb
|
183
198
|
- lib/vagrant-azure/action/stop_instance.rb
|
184
199
|
- lib/vagrant-azure/action/terminate_instance.rb
|
185
200
|
- lib/vagrant-azure/action/wait_for_state.rb
|
201
|
+
- lib/vagrant-azure/capabilities/winrm.rb
|
186
202
|
- lib/vagrant-azure/config.rb
|
187
203
|
- lib/vagrant-azure/errors.rb
|
188
204
|
- lib/vagrant-azure/plugin.rb
|
@@ -198,6 +214,8 @@ files:
|
|
198
214
|
- spec/vagrant-azure/config_spec.rb
|
199
215
|
- spec/vagrant-azure/services/azure_resource_manager_spec.rb
|
200
216
|
- templates/arm/deployment.json.erb
|
217
|
+
- templates/arm/selfsignedcert.json.erb
|
218
|
+
- templates/arm/setup-winrm.ps1.erb
|
201
219
|
- templates/provisioners/chef-solo/solo.erb
|
202
220
|
- vagrant-azure.gemspec
|
203
221
|
homepage: https://github.com/azure/vagrant-azure
|
@@ -220,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
238
|
version: 1.3.1
|
221
239
|
requirements: []
|
222
240
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.
|
241
|
+
rubygems_version: 2.6.9
|
224
242
|
signing_key:
|
225
243
|
specification_version: 4
|
226
244
|
summary: Enable Vagrant to manage Windows and Linux machines in Microsoft Azure.
|