vagrant-azure 1.0.1
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 +7 -0
- data/.gitignore +12 -0
- data/Gemfile +19 -0
- data/LICENSE +4 -0
- data/README.md +9 -0
- data/Rakefile +14 -0
- data/lib/vagrant-azure.rb +24 -0
- data/lib/vagrant-azure/action.rb +249 -0
- data/lib/vagrant-azure/action/connect_azure.rb +41 -0
- data/lib/vagrant-azure/action/provision.rb +40 -0
- data/lib/vagrant-azure/action/rdp.rb +62 -0
- data/lib/vagrant-azure/action/read_ssh_info.rb +51 -0
- data/lib/vagrant-azure/action/read_state.rb +46 -0
- data/lib/vagrant-azure/action/restart_vm.rb +27 -0
- data/lib/vagrant-azure/action/run_instance.rb +111 -0
- data/lib/vagrant-azure/action/start_instance.rb +35 -0
- data/lib/vagrant-azure/action/stop_instance.rb +38 -0
- data/lib/vagrant-azure/action/terminate_instance.rb +34 -0
- data/lib/vagrant-azure/action/wait_for_state.rb +49 -0
- data/lib/vagrant-azure/command/rdp/command.rb +21 -0
- data/lib/vagrant-azure/config.rb +147 -0
- data/lib/vagrant-azure/driver.rb +79 -0
- data/lib/vagrant-azure/plugin.rb +87 -0
- data/lib/vagrant-azure/provider.rb +70 -0
- data/lib/vagrant-azure/provisioner/puppet.rb +109 -0
- data/lib/vagrant-azure/scripts/check_winrm.ps1 +41 -0
- data/lib/vagrant-azure/scripts/export_vm.ps1 +31 -0
- data/lib/vagrant-azure/scripts/file_sync.ps1 +145 -0
- data/lib/vagrant-azure/scripts/host_info.ps1 +25 -0
- data/lib/vagrant-azure/scripts/hyperv_manager.ps1 +36 -0
- data/lib/vagrant-azure/scripts/run_in_remote.ps1 +32 -0
- data/lib/vagrant-azure/scripts/upload_file.ps1 +95 -0
- data/lib/vagrant-azure/scripts/utils/create_session.ps1 +34 -0
- data/lib/vagrant-azure/scripts/utils/write_messages.ps1 +18 -0
- data/lib/vagrant-azure/version.rb +10 -0
- data/locales/en.yml +14 -0
- data/vagrant-azure.gemspec +58 -0
- metadata +167 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module WinAzure
|
9
|
+
module Action
|
10
|
+
class ReadSSHInfo
|
11
|
+
def initialize(app, env, port = 22)
|
12
|
+
@app = app
|
13
|
+
@port = port
|
14
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::read_ssh_info')
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
env[:ui].info "Looking for #{@port}"
|
19
|
+
|
20
|
+
env[:machine_ssh_info] = read_ssh_info(
|
21
|
+
env[:azure_vm_service],
|
22
|
+
env[:machine]
|
23
|
+
)
|
24
|
+
|
25
|
+
@app.call(env)
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_ssh_info(azure, machine)
|
29
|
+
return nil if machine.id.nil?
|
30
|
+
machine.id =~ /@/
|
31
|
+
vm = azure.get_virtual_machine($`, $')
|
32
|
+
|
33
|
+
if vm.nil? || !vm.instance_of?(Azure::VirtualMachineManagement::VirtualMachine)
|
34
|
+
# Machine cannot be found
|
35
|
+
@logger.info 'Machine not found. Assuming it was destroyed'
|
36
|
+
machine.id = nil
|
37
|
+
return nil
|
38
|
+
end
|
39
|
+
|
40
|
+
vm.tcp_endpoints.each do |endpoint|
|
41
|
+
if endpoint[:local_port] == "#{@port}"
|
42
|
+
return { :host => "#{vm.cloud_service_name}.cloudapp.net", :port => endpoint[:public_port] }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
return nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module WinAzure
|
9
|
+
module Action
|
10
|
+
class ReadState
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::read_state')
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
env[:machine_state_id] = read_state(env)
|
18
|
+
|
19
|
+
@app.call(env)
|
20
|
+
end
|
21
|
+
|
22
|
+
def read_state(env)
|
23
|
+
env[:machine].id = "#{env[:machine].provider_config.vm_name}@#{env[:machine].provider_config.cloud_service_name}" unless env[:machine].id
|
24
|
+
|
25
|
+
env[:machine].id =~ /@/
|
26
|
+
|
27
|
+
env[:ui].info "Attempting to read state for #{$`} in #{$'}"
|
28
|
+
|
29
|
+
vm = env[:azure_vm_service].get_virtual_machine($`, $')
|
30
|
+
|
31
|
+
if vm.nil? || \
|
32
|
+
!vm.instance_of?(Azure::VirtualMachineManagement::VirtualMachine) || \
|
33
|
+
[ :DeletingVM ].include?(vm.status.to_sym)
|
34
|
+
# Machine can't be found
|
35
|
+
@logger.info 'Machine cannot be found'
|
36
|
+
env[:machine].id = nil
|
37
|
+
return :NotCreated
|
38
|
+
end
|
39
|
+
|
40
|
+
env[:ui].info "VM Status: #{vm.status.to_sym}"
|
41
|
+
return vm.status.to_sym
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module WinAzure
|
9
|
+
module Action
|
10
|
+
class RestartVM
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::restart_vm')
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
env[:machine].id =~ /@/
|
18
|
+
|
19
|
+
env[:ui].info "Restarting #{$`} in #{$'}"
|
20
|
+
env[:azure_vm_service].restart_virtual_machine($`, $')
|
21
|
+
|
22
|
+
@app.call(env)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
#---------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
require 'json'
|
7
|
+
require 'azure'
|
8
|
+
|
9
|
+
require 'vagrant/util/retryable'
|
10
|
+
|
11
|
+
module VagrantPlugins
|
12
|
+
module WinAzure
|
13
|
+
module Action
|
14
|
+
class RunInstance
|
15
|
+
include Vagrant::Util::Retryable
|
16
|
+
|
17
|
+
def initialize(app, env)
|
18
|
+
@app = app
|
19
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::run_instance')
|
20
|
+
end
|
21
|
+
|
22
|
+
def call(env)
|
23
|
+
config = env[:machine].provider_config
|
24
|
+
|
25
|
+
# Add the mandatory parameters and options
|
26
|
+
params = {
|
27
|
+
vm_name: config.vm_name,
|
28
|
+
vm_user: config.vm_user,
|
29
|
+
image: config.vm_image
|
30
|
+
}
|
31
|
+
|
32
|
+
options = {
|
33
|
+
cloud_service_name: config.cloud_service_name
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
# Add the optional parameters and options if not nil
|
38
|
+
params[:password] = config.vm_password unless config.vm_password.nil?
|
39
|
+
params[:location] = config.vm_location unless config.vm_location.nil?
|
40
|
+
params[:affinity_group] = config.vm_affinity_group unless \
|
41
|
+
config.vm_affinity_group.nil?
|
42
|
+
|
43
|
+
options[:storage_account_name] = config.storage_acct_name unless \
|
44
|
+
config.storage_acct_name.nil?
|
45
|
+
options[:deployment_name] = config.deployment_name unless \
|
46
|
+
config.deployment_name.nil?
|
47
|
+
options[:tcp_endpoints] = config.tcp_endpoints unless \
|
48
|
+
config.tcp_endpoints.nil?
|
49
|
+
options[:private_key_file] = config.ssh_private_key_file unless \
|
50
|
+
config.ssh_private_key_file.nil?
|
51
|
+
options[:certificate_file] = config.ssh_certificate_file unless \
|
52
|
+
config.ssh_certificate_file.nil?
|
53
|
+
options[:ssh_port] = config.ssh_port unless \
|
54
|
+
config.ssh_port.nil?
|
55
|
+
options[:vm_size] = config.vm_size unless \
|
56
|
+
config.vm_size.nil?
|
57
|
+
options[:winrm_transport] = config.winrm_transport unless \
|
58
|
+
config.winrm_transport.nil?
|
59
|
+
options[:winrm_http_port] = config.winrm_http_port unless \
|
60
|
+
config.winrm_http_port.nil?
|
61
|
+
options[:winrm_https_port] = config.winrm_https_port unless \
|
62
|
+
config.winrm_https_port.nil?
|
63
|
+
options[:availability_set_name] = config.availability_set_name unless \
|
64
|
+
config.availability_set_name.nil?
|
65
|
+
|
66
|
+
add_role = false
|
67
|
+
|
68
|
+
env[:ui].info(params.inspect)
|
69
|
+
env[:ui].info(options.inspect)
|
70
|
+
|
71
|
+
# Check if the cloud service exists and if yes, does it contain
|
72
|
+
# a deployment.
|
73
|
+
if config.cloud_service_name && !config.cloud_service_name.empty?
|
74
|
+
begin
|
75
|
+
cloud_service = ManagementHttpRequest.new(
|
76
|
+
:get,
|
77
|
+
"/services/hostedservices/#{config.cloud_service_name}?embed-detail=true"
|
78
|
+
).call
|
79
|
+
|
80
|
+
deployments = cloud_service.css 'HostedService Deployments Deployment'
|
81
|
+
|
82
|
+
# Lets see if any deployments exist. Set add_role = true if yes.
|
83
|
+
# We're not worried about deployment slots, because the SDK has
|
84
|
+
# hard coded 'Production' as deployment slot and you can have only
|
85
|
+
# one deployment per deployment slot.
|
86
|
+
add_role = deployments.length == 1
|
87
|
+
rescue Exception => e
|
88
|
+
add_role = false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
env[:ui].info("Add Role? - #{add_role}")
|
92
|
+
|
93
|
+
server = env[:azure_vm_service].create_virtual_machine(
|
94
|
+
params, options, add_role
|
95
|
+
)
|
96
|
+
|
97
|
+
# TODO: Exception/Error Handling
|
98
|
+
|
99
|
+
if server.instance_of? String
|
100
|
+
env[:ui].info "Server not created. Error is: #{server}"
|
101
|
+
raise "#{server}"
|
102
|
+
end
|
103
|
+
|
104
|
+
env[:machine].id = "#{server.vm_name}@#{server.cloud_service_name}"
|
105
|
+
|
106
|
+
@app.call(env)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
# require 'vagrant/util/retryable'
|
8
|
+
|
9
|
+
# Barebones basic implemenation. This a work in progress in very early stages
|
10
|
+
module VagrantPlugins
|
11
|
+
module WinAzure
|
12
|
+
module Action
|
13
|
+
# This starts a stopped instance
|
14
|
+
class StartInstance
|
15
|
+
# include Vagrant:Util::Retryable
|
16
|
+
|
17
|
+
def initialize(app, env)
|
18
|
+
@app = app
|
19
|
+
@logger = Log4r::Logger.new('vagrant_azure:action::start_instance')
|
20
|
+
end
|
21
|
+
|
22
|
+
def call(env)
|
23
|
+
env[:machine].id = "#{env[:machine].provider_config.vm_name}@#{env[:machine].provider_config.cloud_service_name}" unless env[:machine].id
|
24
|
+
env[:machine].id =~ /@/
|
25
|
+
|
26
|
+
env[:ui].info "Attempting to start '#{$`}' in '#{$'}'"
|
27
|
+
|
28
|
+
env[:azure_vm_service].start_virtual_machine($`, $')
|
29
|
+
|
30
|
+
@app.call(env)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
# Barebones basic implemenation. This a work in progress in very early stages
|
8
|
+
module VagrantPlugins
|
9
|
+
module WinAzure
|
10
|
+
module Action
|
11
|
+
class StopInstance
|
12
|
+
def initialize(app, env)
|
13
|
+
@app = app
|
14
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::stop_instance')
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
if env[:machine].state.id == :StoppedDeallocated
|
19
|
+
env[:ui].info(
|
20
|
+
I18n.t('vagrant_azure.already_status', :status => 'stopped.')
|
21
|
+
)
|
22
|
+
else
|
23
|
+
env[:machine].id =~ /@/
|
24
|
+
env[:ui].info(
|
25
|
+
I18n.t(
|
26
|
+
'vagrant_azure.stopping',
|
27
|
+
:vm_name => $`,
|
28
|
+
:cloud_service_name => $'
|
29
|
+
)
|
30
|
+
)
|
31
|
+
env[:azure_vm_service].shutdown_virtual_machine($`, $')
|
32
|
+
end
|
33
|
+
@app.call(env)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module WinAzure
|
9
|
+
module Action
|
10
|
+
class TerminateInstance
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@logger = Log4r::Logger.new('vagrant_azure::action::terminate_instance')
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
env[:machine].id =~ /@/
|
18
|
+
|
19
|
+
vm = env[:azure_vm_service].get_virtual_machine($`, $')
|
20
|
+
|
21
|
+
if vm.nil?
|
22
|
+
# machine not found. assuming it was not created or destroyed
|
23
|
+
env[:ui].info (I18n.t('vagrant_azure.not_created'))
|
24
|
+
else
|
25
|
+
env[:azure_vm_service].delete_virtual_machine($`, $')
|
26
|
+
env[:machine].id = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
@app.call(env)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'log4r'
|
6
|
+
require 'timeout'
|
7
|
+
|
8
|
+
module VagrantPlugins
|
9
|
+
module WinAzure
|
10
|
+
module Action
|
11
|
+
class WaitForState
|
12
|
+
def initialize(app, env, state)
|
13
|
+
@app = app
|
14
|
+
@state = state
|
15
|
+
@logger = Log4r::Logger.new("vagrant_azure::action::wait_for_state")
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
env[:result] = true
|
20
|
+
|
21
|
+
if env[:machine].state.id == @state
|
22
|
+
@logger.info(
|
23
|
+
I18n.t('vagrant_azure.already_status', :status => @state)
|
24
|
+
)
|
25
|
+
else
|
26
|
+
timeout = env[:machine].provider_config.state_read_timeout
|
27
|
+
|
28
|
+
env[:ui].info "Waiting for machine to reach state #{@state}"
|
29
|
+
@logger.info("Waiting for machine to reach state #{@state}")
|
30
|
+
|
31
|
+
begin
|
32
|
+
Timeout.timeout(timeout) do
|
33
|
+
until env[:machine].state.id == @state
|
34
|
+
sleep 30
|
35
|
+
end
|
36
|
+
end
|
37
|
+
env[:ui].success "Machine reached state #{@state}"
|
38
|
+
rescue Timeout::Error
|
39
|
+
env[:ui].error "Machine failed to reached state '#{@state}' in '#{timeout}' seconds."
|
40
|
+
env[:result] = false # couldn't reach state in time
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
@app.call(env)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
module VagrantPlugins
|
6
|
+
module WinAzure
|
7
|
+
class Command < Vagrant.plugin('2', :command)
|
8
|
+
def self.synopsis
|
9
|
+
'Opens an RDP session for a vagrant machine'
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
with_target_vms do |vm|
|
14
|
+
vm.action(:rdp)
|
15
|
+
end
|
16
|
+
|
17
|
+
0
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
#--------------------------------------------------------------------------
|
2
|
+
# Copyright (c) Microsoft Open Technologies, Inc.
|
3
|
+
# All Rights Reserved. Licensed under the Apache 2.0 License.
|
4
|
+
#--------------------------------------------------------------------------
|
5
|
+
require 'vagrant'
|
6
|
+
require 'azure'
|
7
|
+
|
8
|
+
module VagrantPlugins
|
9
|
+
module WinAzure
|
10
|
+
class Config < Vagrant.plugin('2', :config)
|
11
|
+
attr_accessor :mgmt_certificate
|
12
|
+
attr_accessor :mgmt_endpoint
|
13
|
+
attr_accessor :subscription_id
|
14
|
+
attr_accessor :storage_acct_name
|
15
|
+
attr_accessor :storage_access_key
|
16
|
+
|
17
|
+
attr_accessor :vm_name
|
18
|
+
attr_accessor :vm_user
|
19
|
+
attr_accessor :vm_password
|
20
|
+
attr_accessor :vm_image
|
21
|
+
attr_accessor :vm_location
|
22
|
+
attr_accessor :vm_affinity_group
|
23
|
+
|
24
|
+
attr_accessor :cloud_service_name
|
25
|
+
attr_accessor :deployment_name
|
26
|
+
attr_accessor :tcp_endpoints
|
27
|
+
attr_accessor :ssh_private_key_file
|
28
|
+
attr_accessor :ssh_certificate_file
|
29
|
+
attr_accessor :ssh_port
|
30
|
+
attr_accessor :vm_size
|
31
|
+
attr_accessor :winrm_transport
|
32
|
+
attr_accessor :winrm_http_port
|
33
|
+
attr_accessor :winrm_https_port
|
34
|
+
attr_accessor :availability_set_name
|
35
|
+
|
36
|
+
attr_accessor :state_read_timeout
|
37
|
+
|
38
|
+
def initialize
|
39
|
+
@storage_acct_name = UNSET_VALUE
|
40
|
+
@storage_access_key = UNSET_VALUE
|
41
|
+
@mgmt_certificate = UNSET_VALUE
|
42
|
+
@mgmt_endpoint = UNSET_VALUE
|
43
|
+
@subscription_id = UNSET_VALUE
|
44
|
+
|
45
|
+
@vm_name = UNSET_VALUE
|
46
|
+
@vm_user = UNSET_VALUE
|
47
|
+
@vm_password = UNSET_VALUE
|
48
|
+
@vm_image = UNSET_VALUE
|
49
|
+
@vm_location = UNSET_VALUE
|
50
|
+
@vm_affinity_group = UNSET_VALUE
|
51
|
+
|
52
|
+
@cloud_service_name = UNSET_VALUE
|
53
|
+
@deployment_name = UNSET_VALUE
|
54
|
+
@tcp_endpoints = UNSET_VALUE
|
55
|
+
@ssh_private_key_file = UNSET_VALUE
|
56
|
+
@ssh_certificate_file = UNSET_VALUE
|
57
|
+
@ssh_port = UNSET_VALUE
|
58
|
+
@vm_size = UNSET_VALUE
|
59
|
+
@winrm_transport = UNSET_VALUE
|
60
|
+
@winrm_http_port = UNSET_VALUE
|
61
|
+
@winrm_https_port = UNSET_VALUE
|
62
|
+
@availability_set_name = UNSET_VALUE
|
63
|
+
@state_read_timeout = UNSET_VALUE
|
64
|
+
end
|
65
|
+
|
66
|
+
def finalize!
|
67
|
+
@storage_acct_name = ENV["AZURE_STORAGE_ACCOUNT"] if \
|
68
|
+
@storage_acct_name == UNSET_VALUE
|
69
|
+
@storage_access_key = ENV["AZURE_STORAGE_ACCESS_KEY"] if \
|
70
|
+
@storage_access_key == UNSET_VALUE
|
71
|
+
@mgmt_certificate = ENV["AZURE_MANAGEMENT_CERTIFICATE"] if \
|
72
|
+
@mgmt_certificate == UNSET_VALUE
|
73
|
+
@mgmt_endpoint = ENV["AZURE_MANAGEMENT_ENDPOINT"] if \
|
74
|
+
@mgmt_endpoint == UNSET_VALUE
|
75
|
+
@subscription_id = ENV["AZURE_SUBSCRIPTION_ID"] if \
|
76
|
+
@subscription_id == UNSET_VALUE
|
77
|
+
|
78
|
+
@vm_name = nil if @vm_name == UNSET_VALUE
|
79
|
+
@vm_user = 'vagrant' if @vm_user == UNSET_VALUE
|
80
|
+
@vm_password = nil if @vm_password == UNSET_VALUE
|
81
|
+
@vm_image = nil if @vm_image == UNSET_VALUE
|
82
|
+
@vm_location = nil if @vm_location == UNSET_VALUE
|
83
|
+
@vm_affinity_group = nil if @vm_affinity_group == UNSET_VALUE
|
84
|
+
|
85
|
+
@cloud_service_name = nil if @cloud_service_name == UNSET_VALUE
|
86
|
+
@deployment_name = nil if @deployment_name == UNSET_VALUE
|
87
|
+
@tcp_endpoints = nil if @tcp_endpoints == UNSET_VALUE
|
88
|
+
@ssh_private_key_file = nil if @ssh_private_key_file == UNSET_VALUE
|
89
|
+
@ssh_certificate_file = nil if @ssh_certificate_file == UNSET_VALUE
|
90
|
+
@ssh_port = nil if @ssh_port == UNSET_VALUE
|
91
|
+
@vm_size = nil if @vm_size == UNSET_VALUE
|
92
|
+
@winrm_transport = nil if @winrm_transport == UNSET_VALUE
|
93
|
+
@winrm_http_port = nil if @winrm_http_port == UNSET_VALUE
|
94
|
+
@winrm_https_port = nil if @winrm_https_port == UNSET_VALUE
|
95
|
+
@availability_set_name = nil if @availability_set_name == UNSET_VALUE
|
96
|
+
|
97
|
+
@state_read_timeout = 360 if @state_read_timeout == UNSET_VALUE
|
98
|
+
|
99
|
+
# This done due to a bug in Ruby SDK - it doesn't generate a storage
|
100
|
+
# account name if add_role = true
|
101
|
+
if @storage_acct_name.nil? || @storage_acct_name.empty?
|
102
|
+
@storage_acct_name = Azure::Core::Utility.random_string(
|
103
|
+
"#{@vm_name}storage"
|
104
|
+
).gsub(/[^0-9a-z ]/i, '').downcase[0..23]
|
105
|
+
end
|
106
|
+
|
107
|
+
if @cloud_service_name.nil? || @cloud_service_name.empty?
|
108
|
+
@cloud_service_name = Azure::Core::Utility.random_string(
|
109
|
+
"#{@vm_name}-service-"
|
110
|
+
)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def merge(other)
|
115
|
+
super.tap do |result|
|
116
|
+
result.mgmt_certificate = other.mgmt_certificate || \
|
117
|
+
self.mgmt_certificate
|
118
|
+
result.mgmt_endpoint = other.mgmt_endpoint || \
|
119
|
+
self.mgmt_endpoint
|
120
|
+
result.subscription_id = other.subscription_id || \
|
121
|
+
self.subscription_id
|
122
|
+
result.storage_account_name = other.storage_acct_name || \
|
123
|
+
self.storage_acct_name
|
124
|
+
result.storage_access_key = other.storage_access_key || \
|
125
|
+
self.storage_access_key
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def validate(machine)
|
130
|
+
errors = _detected_errors
|
131
|
+
|
132
|
+
# Azure connection properties related validation.
|
133
|
+
errors << "vagrant_azure.subscription_id.required" if \
|
134
|
+
@subscription_id.nil?
|
135
|
+
errors << "vagrant_azure.mgmt_certificate.required" if \
|
136
|
+
@mgmt_certificate.nil?
|
137
|
+
errors << "vagrant_azure.mgmt_endpoint.required" if \
|
138
|
+
@mgmt_endpoint.nil?
|
139
|
+
|
140
|
+
# Azure Virtual Machine related validation
|
141
|
+
errors << "vagrant_azure.vm_name.required" if @vm_name.nil?
|
142
|
+
|
143
|
+
{ "Windows Azure Provider" => errors }
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|