foreman_azure_rm 1.3.1 → 2.0.0.pre1
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 +5 -5
- data/README.md +36 -8
- data/app/controllers/foreman_azure_rm/concerns/hosts_controller_extensions.rb +6 -6
- data/app/models/concerns/foreman_azure_rm/vm_extensions/managed_vm.rb +216 -0
- data/app/models/foreman_azure_rm/azure_rm.rb +132 -188
- data/app/models/foreman_azure_rm/azure_rm_compute.rb +95 -0
- data/app/views/compute_resources/form/_azurerm.html.erb +6 -7
- data/app/views/compute_resources_vms/form/azurerm/_base.html.erb +62 -67
- data/app/views/compute_resources_vms/index/_azurerm.html.erb +3 -3
- data/app/views/compute_resources_vms/show/_azurerm.html.erb +17 -5
- data/lib/foreman_azure_rm.rake +13 -0
- data/lib/foreman_azure_rm/azure_sdk_adapter.rb +141 -0
- data/lib/foreman_azure_rm/engine.rb +16 -57
- data/lib/foreman_azure_rm/version.rb +2 -2
- metadata +109 -20
- data/app/models/concerns/fog_extensions/azurerm/compute.rb +0 -249
- data/app/models/concerns/fog_extensions/azurerm/data_disk.rb +0 -24
- data/app/models/concerns/fog_extensions/azurerm/managed_disk.rb +0 -10
- data/app/models/concerns/fog_extensions/azurerm/managed_disks.rb +0 -15
- data/app/models/concerns/fog_extensions/azurerm/network_interface.rb +0 -19
- data/app/models/concerns/fog_extensions/azurerm/network_interfaces.rb +0 -16
- data/app/models/concerns/fog_extensions/azurerm/server.rb +0 -131
- data/app/models/concerns/fog_extensions/azurerm/servers.rb +0 -23
- data/app/views/compute_resources_vms/form/azurerm/_volume.html.erb +0 -22
|
@@ -2,10 +2,15 @@ module ForemanAzureRM
|
|
|
2
2
|
class Engine < ::Rails::Engine
|
|
3
3
|
engine_name 'foreman_azure_rm'
|
|
4
4
|
|
|
5
|
+
#autoloading all files inside lib dir
|
|
6
|
+
config.autoload_paths += Dir["#{config.root}/lib"]
|
|
7
|
+
config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
|
|
8
|
+
|
|
5
9
|
initializer 'foreman_azure_rm.register_plugin', :before => :finisher_hook do
|
|
6
10
|
Foreman::Plugin.register :foreman_azure_rm do
|
|
7
|
-
requires_foreman '>= 1.
|
|
11
|
+
requires_foreman '>= 1.17'
|
|
8
12
|
compute_resource ForemanAzureRM::AzureRM
|
|
13
|
+
parameter_filter ComputeResource, :azure_vm, :tenant, :app_ident, :secret_key, :sub_id
|
|
9
14
|
end
|
|
10
15
|
end
|
|
11
16
|
|
|
@@ -16,67 +21,21 @@ module ForemanAzureRM
|
|
|
16
21
|
end
|
|
17
22
|
|
|
18
23
|
config.to_prepare do
|
|
19
|
-
require '
|
|
20
|
-
|
|
21
|
-
require '
|
|
22
|
-
require
|
|
23
|
-
'../../../app/models/concerns/fog_extensions/azurerm/server',
|
|
24
|
-
__FILE__
|
|
25
|
-
)
|
|
26
|
-
Fog::Compute::AzureRM::Server.send(:prepend, FogExtensions::AzureRM::Server)
|
|
27
|
-
|
|
28
|
-
require 'fog/azurerm/models/compute/servers'
|
|
29
|
-
require File.expand_path(
|
|
30
|
-
'../../../app/models/concerns/fog_extensions/azurerm/servers',
|
|
31
|
-
__FILE__
|
|
32
|
-
)
|
|
33
|
-
Fog::Compute::AzureRM::Servers.send(:include, FogExtensions::AzureRM::Servers)
|
|
34
|
-
|
|
35
|
-
require 'fog/azurerm/models/storage/data_disk'
|
|
36
|
-
require File.expand_path(
|
|
37
|
-
'../../../app/models/concerns/fog_extensions/azurerm/data_disk',
|
|
38
|
-
__FILE__
|
|
39
|
-
)
|
|
40
|
-
Fog::Storage::AzureRM::DataDisk.send(:prepend, FogExtensions::AzureRM::DataDisk)
|
|
24
|
+
require 'azure_mgmt_resources'
|
|
25
|
+
require 'azure_mgmt_network'
|
|
26
|
+
require 'azure_mgmt_storage'
|
|
27
|
+
require 'azure_mgmt_compute'
|
|
41
28
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
'../../../app/models/concerns/fog_extensions/azurerm/compute',
|
|
45
|
-
__FILE__
|
|
46
|
-
)
|
|
47
|
-
Fog::Compute::AzureRM::Real.send(:prepend, FogExtensions::AzureRM::Compute)
|
|
29
|
+
# Use excon as default so that HTTP Proxy settings of foreman works
|
|
30
|
+
Faraday::default_adapter=:excon
|
|
48
31
|
|
|
49
32
|
::HostsController.send(:include, ForemanAzureRM::Concerns::HostsControllerExtensions)
|
|
50
33
|
|
|
51
34
|
Api::V2::ComputeResourcesController.send(:include, ForemanAzureRM::Concerns::ComputeResourcesControllerExtensions)
|
|
35
|
+
end
|
|
52
36
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
'../../../app/models/concerns/fog_extensions/azurerm/network_interface',
|
|
56
|
-
__FILE__
|
|
57
|
-
)
|
|
58
|
-
Fog::Network::AzureRM::NetworkInterface.send(:include, FogExtensions::AzureRM::NetworkInterface)
|
|
59
|
-
|
|
60
|
-
require 'fog/azurerm/models/network/network_interfaces'
|
|
61
|
-
require File.expand_path(
|
|
62
|
-
'../../../app/models/concerns/fog_extensions/azurerm/network_interfaces',
|
|
63
|
-
__FILE__
|
|
64
|
-
)
|
|
65
|
-
Fog::Network::AzureRM::NetworkInterfaces.send(:include, FogExtensions::AzureRM::NetworkInterfaces)
|
|
66
|
-
|
|
67
|
-
require 'fog/azurerm/models/compute/managed_disk'
|
|
68
|
-
require File.expand_path(
|
|
69
|
-
'../../../app/models/concerns/fog_extensions/azurerm/managed_disk',
|
|
70
|
-
__FILE__
|
|
71
|
-
)
|
|
72
|
-
Fog::Compute::AzureRM::ManagedDisk.send(:include, FogExtensions::AzureRM::ManagedDisk)
|
|
73
|
-
|
|
74
|
-
require 'fog/azurerm/models/compute/managed_disks'
|
|
75
|
-
require File.expand_path(
|
|
76
|
-
'../../../app/models/concerns/fog_extensions/azurerm/managed_disks',
|
|
77
|
-
__FILE__
|
|
78
|
-
)
|
|
79
|
-
Fog::Compute::AzureRM::ManagedDisks.send(:include, FogExtensions::AzureRM::ManagedDisks)
|
|
37
|
+
rake_tasks do
|
|
38
|
+
load "foreman_azure_rm.rake"
|
|
80
39
|
end
|
|
81
40
|
end
|
|
82
|
-
end
|
|
41
|
+
end
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module ForemanAzureRM
|
|
2
|
-
VERSION = '
|
|
3
|
-
end
|
|
2
|
+
VERSION = '2.0.0.pre1'.freeze
|
|
3
|
+
end
|
metadata
CHANGED
|
@@ -1,32 +1,126 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foreman_azure_rm
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.pre1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Aditi Puntambekar
|
|
8
|
+
- Shimon Shtein
|
|
7
9
|
- Tyler Gregory
|
|
8
10
|
autorequire:
|
|
9
11
|
bindir: bin
|
|
10
12
|
cert_chain: []
|
|
11
|
-
date:
|
|
13
|
+
date: 2019-08-21 00:00:00.000000000 Z
|
|
12
14
|
dependencies:
|
|
13
15
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
16
|
+
name: deface
|
|
15
17
|
requirement: !ruby/object:Gem::Requirement
|
|
16
18
|
requirements:
|
|
17
|
-
- -
|
|
19
|
+
- - "<"
|
|
18
20
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0
|
|
21
|
+
version: '2.0'
|
|
20
22
|
type: :runtime
|
|
21
23
|
prerelease: false
|
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
25
|
requirements:
|
|
24
|
-
- -
|
|
26
|
+
- - "<"
|
|
25
27
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0
|
|
28
|
+
version: '2.0'
|
|
29
|
+
- !ruby/object:Gem::Dependency
|
|
30
|
+
name: azure_mgmt_resources
|
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
|
32
|
+
requirements:
|
|
33
|
+
- - "~>"
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: 0.17.6
|
|
36
|
+
type: :runtime
|
|
37
|
+
prerelease: false
|
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
39
|
+
requirements:
|
|
40
|
+
- - "~>"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: 0.17.6
|
|
43
|
+
- !ruby/object:Gem::Dependency
|
|
44
|
+
name: azure_mgmt_network
|
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - "~>"
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 0.19.0
|
|
50
|
+
type: :runtime
|
|
51
|
+
prerelease: false
|
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
53
|
+
requirements:
|
|
54
|
+
- - "~>"
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: 0.19.0
|
|
57
|
+
- !ruby/object:Gem::Dependency
|
|
58
|
+
name: azure_mgmt_storage
|
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
|
60
|
+
requirements:
|
|
61
|
+
- - "~>"
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: 0.17.10
|
|
64
|
+
type: :runtime
|
|
65
|
+
prerelease: false
|
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
67
|
+
requirements:
|
|
68
|
+
- - "~>"
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: 0.17.10
|
|
71
|
+
- !ruby/object:Gem::Dependency
|
|
72
|
+
name: azure_mgmt_compute
|
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
|
74
|
+
requirements:
|
|
75
|
+
- - "~>"
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 0.18.7
|
|
78
|
+
type: :runtime
|
|
79
|
+
prerelease: false
|
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - "~>"
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: 0.18.7
|
|
85
|
+
- !ruby/object:Gem::Dependency
|
|
86
|
+
name: rubocop
|
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '0'
|
|
92
|
+
type: :development
|
|
93
|
+
prerelease: false
|
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ">="
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '0'
|
|
99
|
+
- !ruby/object:Gem::Dependency
|
|
100
|
+
name: mocha
|
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
|
102
|
+
requirements:
|
|
103
|
+
- - "~>"
|
|
104
|
+
- !ruby/object:Gem::Version
|
|
105
|
+
version: '1.2'
|
|
106
|
+
- - ">="
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: 1.2.1
|
|
109
|
+
type: :development
|
|
110
|
+
prerelease: false
|
|
111
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
112
|
+
requirements:
|
|
113
|
+
- - "~>"
|
|
114
|
+
- !ruby/object:Gem::Version
|
|
115
|
+
version: '1.2'
|
|
116
|
+
- - ">="
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: 1.2.1
|
|
27
119
|
description: This gem provides Azure Resource Manager as a compute resource for The
|
|
28
120
|
Foreman
|
|
29
121
|
email:
|
|
122
|
+
- puntambekaraditi@gmail.com
|
|
123
|
+
- shteinshim@gmail.com
|
|
30
124
|
- tdgregory@protonmail.com
|
|
31
125
|
executables: []
|
|
32
126
|
extensions: []
|
|
@@ -37,15 +131,9 @@ files:
|
|
|
37
131
|
- Rakefile
|
|
38
132
|
- app/controllers/foreman_azure_rm/concerns/compute_resources_controller_extensions.rb
|
|
39
133
|
- app/controllers/foreman_azure_rm/concerns/hosts_controller_extensions.rb
|
|
40
|
-
- app/models/concerns/
|
|
41
|
-
- app/models/concerns/fog_extensions/azurerm/data_disk.rb
|
|
42
|
-
- app/models/concerns/fog_extensions/azurerm/managed_disk.rb
|
|
43
|
-
- app/models/concerns/fog_extensions/azurerm/managed_disks.rb
|
|
44
|
-
- app/models/concerns/fog_extensions/azurerm/network_interface.rb
|
|
45
|
-
- app/models/concerns/fog_extensions/azurerm/network_interfaces.rb
|
|
46
|
-
- app/models/concerns/fog_extensions/azurerm/server.rb
|
|
47
|
-
- app/models/concerns/fog_extensions/azurerm/servers.rb
|
|
134
|
+
- app/models/concerns/foreman_azure_rm/vm_extensions/managed_vm.rb
|
|
48
135
|
- app/models/foreman_azure_rm/azure_rm.rb
|
|
136
|
+
- app/models/foreman_azure_rm/azure_rm_compute.rb
|
|
49
137
|
- app/views/api/v1/compute_resources/azurerm.json.rabl
|
|
50
138
|
- app/views/api/v2/compute_resources/available_resource_groups.rabl
|
|
51
139
|
- app/views/api/v2/compute_resources/available_sizes.rabl
|
|
@@ -56,16 +144,17 @@ files:
|
|
|
56
144
|
- app/views/compute_resources/show/_azurerm.html.erb
|
|
57
145
|
- app/views/compute_resources_vms/form/azurerm/_base.html.erb
|
|
58
146
|
- app/views/compute_resources_vms/form/azurerm/_network.html.erb
|
|
59
|
-
- app/views/compute_resources_vms/form/azurerm/_volume.html.erb
|
|
60
147
|
- app/views/compute_resources_vms/index/_azurerm.html.erb
|
|
61
148
|
- app/views/compute_resources_vms/show/_azurerm.html.erb
|
|
62
149
|
- app/views/images/form/_azurerm.html.erb
|
|
63
150
|
- config/routes.rb
|
|
151
|
+
- lib/foreman_azure_rm.rake
|
|
64
152
|
- lib/foreman_azure_rm.rb
|
|
153
|
+
- lib/foreman_azure_rm/azure_sdk_adapter.rb
|
|
65
154
|
- lib/foreman_azure_rm/engine.rb
|
|
66
155
|
- lib/foreman_azure_rm/version.rb
|
|
67
156
|
- locale/gemspec.rb
|
|
68
|
-
homepage: https://github.com/
|
|
157
|
+
homepage: https://github.com/theforeman/foreman_azure_rm
|
|
69
158
|
licenses:
|
|
70
159
|
- GPL-3.0
|
|
71
160
|
metadata: {}
|
|
@@ -80,12 +169,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
80
169
|
version: '0'
|
|
81
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
171
|
requirements:
|
|
83
|
-
- - "
|
|
172
|
+
- - ">"
|
|
84
173
|
- !ruby/object:Gem::Version
|
|
85
|
-
version:
|
|
174
|
+
version: 1.3.1
|
|
86
175
|
requirements: []
|
|
87
176
|
rubyforge_project:
|
|
88
|
-
rubygems_version: 2.
|
|
177
|
+
rubygems_version: 2.7.6
|
|
89
178
|
signing_key:
|
|
90
179
|
specification_version: 4
|
|
91
180
|
summary: Azure Resource Manager as a compute resource for The Foreman
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
module FogExtensions
|
|
2
|
-
module AzureRM
|
|
3
|
-
module Compute
|
|
4
|
-
extend ActiveSupport::Concern
|
|
5
|
-
|
|
6
|
-
def initialize(options)
|
|
7
|
-
begin
|
|
8
|
-
require 'azure_mgmt_compute'
|
|
9
|
-
require 'azure_mgmt_storage'
|
|
10
|
-
require 'azure_mgmt_network'
|
|
11
|
-
require 'azure/storage'
|
|
12
|
-
rescue LoadError => e
|
|
13
|
-
retry if require('rubygems')
|
|
14
|
-
raise e.message
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
options[:environment] = 'AzureCloud' if options[:environment].nil?
|
|
18
|
-
|
|
19
|
-
telemetry = "fog-azure-rm/#{Fog::AzureRM::VERSION}"
|
|
20
|
-
credentials = Fog::Credentials::AzureRM.get_credentials(options[:tenant_id], options[:client_id], options[:client_secret], options[:environment])
|
|
21
|
-
@compute_mgmt_client = ::Azure::ARM::Compute::ComputeManagementClient.new(credentials, resource_manager_endpoint_url(options[:environment]))
|
|
22
|
-
@compute_mgmt_client.subscription_id = options[:subscription_id]
|
|
23
|
-
@compute_mgmt_client.add_user_agent_information(telemetry)
|
|
24
|
-
@storage_mgmt_client = ::Azure::ARM::Storage::StorageManagementClient.new(credentials, resource_manager_endpoint_url(options[:environment]))
|
|
25
|
-
@storage_mgmt_client.subscription_id = options[:subscription_id]
|
|
26
|
-
@storage_mgmt_client.add_user_agent_information(telemetry)
|
|
27
|
-
# noinspection RubyArgCount
|
|
28
|
-
@storage_service = Fog::Storage::AzureRM.new(tenant_id: options[:tenant_id], client_id: options[:client_id], client_secret: options[:client_secret], subscription_id: options[:subscription_id], environment: options[:environment])
|
|
29
|
-
@network_client = ::Azure::ARM::Network::NetworkManagementClient.new(credentials, resource_manager_endpoint_url(options[:environment]))
|
|
30
|
-
@network_client.subscription_id = options[:subscription_id]
|
|
31
|
-
@network_client.add_user_agent_information(telemetry)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def list_available_sizes(location)
|
|
35
|
-
@compute_mgmt_client.virtual_machine_sizes.list(location).value()
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def list_all_vms
|
|
39
|
-
@compute_mgmt_client.virtual_machines.list_all
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def get_vm_nic(nic_rg, nic_name)
|
|
43
|
-
@network_client.network_interfaces.get(nic_rg, nic_name)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def get_public_ip(ip_rg, ip_name)
|
|
47
|
-
@network_client.public_ipaddresses.get(ip_rg, ip_name)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def define_managed_storage_profile(vm_name, vhd_path, publisher, offer, sku, version,
|
|
51
|
-
os_disk_caching, platform, os_disk_size, premium_os_disk,
|
|
52
|
-
data_disks = nil)
|
|
53
|
-
storage_profile = Azure::ARM::Compute::Models::StorageProfile.new
|
|
54
|
-
os_disk = Azure::ARM::Compute::Models::OSDisk.new
|
|
55
|
-
managed_disk_params = Azure::ARM::Compute::Models::ManagedDiskParameters.new
|
|
56
|
-
|
|
57
|
-
# Create OS disk
|
|
58
|
-
os_disk.name = "#{vm_name}-osdisk"
|
|
59
|
-
os_disk.os_type = if platform == 'Windows'
|
|
60
|
-
Azure::ARM::Compute::Models::OperatingSystemTypes::Windows
|
|
61
|
-
else
|
|
62
|
-
Azure::ARM::Compute::Models::OperatingSystemTypes::Linux
|
|
63
|
-
end
|
|
64
|
-
os_disk.create_option = Azure::ARM::Compute::Models::DiskCreateOptionTypes::FromImage
|
|
65
|
-
os_disk.caching = if os_disk_caching.present?
|
|
66
|
-
case os_disk_caching
|
|
67
|
-
when 'None'
|
|
68
|
-
Azure::ARM::Compute::Models::CachingTypes::None
|
|
69
|
-
when 'ReadOnly'
|
|
70
|
-
Azure::ARM::Compute::Models::CachingTypes::ReadOnly
|
|
71
|
-
when 'ReadWrite'
|
|
72
|
-
Azure::ARM::Compute::Models::CachingTypes::ReadWrite
|
|
73
|
-
else
|
|
74
|
-
# ARM best practices stipulate RW caching on the OS disk
|
|
75
|
-
Azure::ARM::Compute::Models::CachingTypes::ReadWrite
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
os_disk.disk_size_gb = os_disk_size
|
|
79
|
-
managed_disk_params.storage_account_type = if premium_os_disk == 'true'
|
|
80
|
-
Azure::ARM::Compute::Models::StorageAccountTypes::PremiumLRS
|
|
81
|
-
else
|
|
82
|
-
Azure::ARM::Compute::Models::StorageAccountTypes::StandardLRS
|
|
83
|
-
end
|
|
84
|
-
os_disk.managed_disk = managed_disk_params
|
|
85
|
-
storage_profile.os_disk = os_disk
|
|
86
|
-
|
|
87
|
-
# Create data disks
|
|
88
|
-
unless data_disks.nil?
|
|
89
|
-
disks = []
|
|
90
|
-
disk_count = 0
|
|
91
|
-
data_disks.each do |_, attrs|
|
|
92
|
-
managed_data_disk = Azure::ARM::Compute::Models::ManagedDiskParameters.new
|
|
93
|
-
managed_data_disk.storage_account_type = if attrs[:account_type] == 'true'
|
|
94
|
-
Azure::ARM::Compute::Models::StorageAccountTypes::PremiumLRS
|
|
95
|
-
else
|
|
96
|
-
Azure::ARM::Compute::Models::StorageAccountTypes::StandardLRS
|
|
97
|
-
end
|
|
98
|
-
disk = Azure::ARM::Compute::Models::DataDisk.new
|
|
99
|
-
disk.name = "#{vm_name}-disk#{disk_count}"
|
|
100
|
-
disk.caching = if attrs[:data_disk_caching].present?
|
|
101
|
-
case attrs[:data_disk_caching]
|
|
102
|
-
when 'None'
|
|
103
|
-
Azure::ARM::Compute::Models::CachingTypes::None
|
|
104
|
-
when 'ReadOnly'
|
|
105
|
-
Azure::ARM::Compute::Models::CachingTypes::ReadOnly
|
|
106
|
-
when 'ReadWrite'
|
|
107
|
-
Azure::ARM::Compute::Models::CachingTypes::ReadWrite
|
|
108
|
-
else
|
|
109
|
-
# ARM best practices stipulate no caching on data disks by default
|
|
110
|
-
Azure::ARM::Compute::Models::CachingTypes::None
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
disk.disk_size_gb = attrs[:disk_size_gb]
|
|
114
|
-
disk.create_option = Azure::ARM::Compute::Models::DiskCreateOption::Empty
|
|
115
|
-
disk.lun = disk_count + 1
|
|
116
|
-
disk.managed_disk = managed_data_disk
|
|
117
|
-
disk_count += 1
|
|
118
|
-
disks << disk
|
|
119
|
-
end
|
|
120
|
-
storage_profile.data_disks = disks
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
if vhd_path.nil?
|
|
124
|
-
# We are using a marketplace image
|
|
125
|
-
storage_profile.image_reference = image_reference(publisher, offer,
|
|
126
|
-
sku, version)
|
|
127
|
-
else
|
|
128
|
-
# We are using a custom managed image
|
|
129
|
-
image_ref = Azure::ARM::Compute::Models::ImageReference.new
|
|
130
|
-
image_ref.id = vhd_path
|
|
131
|
-
storage_profile.image_reference = image_ref
|
|
132
|
-
end
|
|
133
|
-
storage_profile
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def create_vm_extension(vm)
|
|
137
|
-
if vm[:script_command].present? && vm[:script_uris].present?
|
|
138
|
-
extension = Azure::ARM::Compute::Models::VirtualMachineExtension.new
|
|
139
|
-
if vm[:platform] == 'Linux'
|
|
140
|
-
extension.publisher = 'Microsoft.Azure.Extensions'
|
|
141
|
-
extension.virtual_machine_extension_type = 'CustomScript'
|
|
142
|
-
extension.type_handler_version = '2.0'
|
|
143
|
-
elsif vm[:platform] == 'Windows'
|
|
144
|
-
extension.publisher = 'Microsoft.Compute'
|
|
145
|
-
extension.virtual_machine_extension_type = 'CustomScriptExtension'
|
|
146
|
-
extension.type_handler_version = '1.7'
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
extension.auto_upgrade_minor_version = true
|
|
150
|
-
extension.location = vm['location'].gsub(/\s+/, '').downcase
|
|
151
|
-
extension.settings = {
|
|
152
|
-
'commandToExecute' => vm[:script_command],
|
|
153
|
-
'fileUris' => vm[:script_uris].split(',')
|
|
154
|
-
}
|
|
155
|
-
@compute_mgmt_client.virtual_machine_extensions.create_or_update(vm['resource_group'],
|
|
156
|
-
vm['name'],
|
|
157
|
-
'ForemanCustomScript',
|
|
158
|
-
extension)
|
|
159
|
-
end
|
|
160
|
-
if vm[:platform] == 'Windows'
|
|
161
|
-
if vm[:puppet_master].present?
|
|
162
|
-
extension = Azure::ARM::Compute::Models::VirtualMachineExtension.new
|
|
163
|
-
extension.publisher = 'PuppetLabs'
|
|
164
|
-
extension.virtual_machine_extension_type = 'PuppetEnterpriseAgent'
|
|
165
|
-
extension.type_handler_version = '3.8'
|
|
166
|
-
extension.auto_upgrade_minor_version = true
|
|
167
|
-
extension.location = vm['location'].gsub(/\s+/, '').downcase
|
|
168
|
-
extension.settings = {
|
|
169
|
-
'puppet_master_service' => vm[:puppet_master]
|
|
170
|
-
}
|
|
171
|
-
@compute_mgmt_client.virtual_machine_extensions.create_or_update(vm['resource_group'],
|
|
172
|
-
vm['name'],
|
|
173
|
-
'InstallPuppet',
|
|
174
|
-
extension)
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def create_managed_virtual_machine(vm_hash, async = false)
|
|
180
|
-
msg = "Creating Virtual Machine #{vm_hash[:name]} in Resource Group #{vm_hash[:resource_group]}."
|
|
181
|
-
Fog::Logger.debug msg
|
|
182
|
-
virtual_machine = Azure::ARM::Compute::Models::VirtualMachine.new
|
|
183
|
-
|
|
184
|
-
unless vm_hash[:availability_set_id].nil?
|
|
185
|
-
sub_resource = MsRestAzure::SubResource.new
|
|
186
|
-
sub_resource.id = vm_hash[:availability_set_id]
|
|
187
|
-
virtual_machine.availability_set = sub_resource
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
# If image UUID begins with / it is a custom managed image
|
|
191
|
-
# Otherwise it is a marketplace URN
|
|
192
|
-
unless vm_hash[:vhd_path].start_with?('/')
|
|
193
|
-
urn = vm_hash[:vhd_path].split(':')
|
|
194
|
-
vm_hash[:publisher] = urn[0]
|
|
195
|
-
vm_hash[:offer] = urn[1]
|
|
196
|
-
vm_hash[:sku] = urn[2]
|
|
197
|
-
vm_hash[:version] = urn[3]
|
|
198
|
-
vm_hash[:vhd_path] = nil
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
string_data = vm_hash[:custom_data]
|
|
202
|
-
string_data = WHITE_SPACE if string_data.nil?
|
|
203
|
-
encoded_data = Base64.strict_encode64(string_data)
|
|
204
|
-
virtual_machine.hardware_profile = define_hardware_profile(vm_hash[:vm_size])
|
|
205
|
-
virtual_machine.storage_profile = define_managed_storage_profile(vm_hash[:name],
|
|
206
|
-
vm_hash[:vhd_path],
|
|
207
|
-
vm_hash[:publisher],
|
|
208
|
-
vm_hash[:offer],
|
|
209
|
-
vm_hash[:sku],
|
|
210
|
-
vm_hash[:version],
|
|
211
|
-
vm_hash[:os_disk_caching],
|
|
212
|
-
vm_hash[:platform],
|
|
213
|
-
vm_hash[:os_disk_size],
|
|
214
|
-
vm_hash[:premium_os_disk],
|
|
215
|
-
vm_hash[:data_disks])
|
|
216
|
-
virtual_machine.os_profile = if vm_hash[:platform].casecmp(WINDOWS).zero?
|
|
217
|
-
define_windows_os_profile(vm_hash[:name],
|
|
218
|
-
vm_hash[:username],
|
|
219
|
-
vm_hash[:password],
|
|
220
|
-
vm_hash[:provision_vm_agent],
|
|
221
|
-
vm_hash[:enable_automatic_updates],
|
|
222
|
-
encoded_data)
|
|
223
|
-
else
|
|
224
|
-
define_linux_os_profile(vm_hash[:name],
|
|
225
|
-
vm_hash[:username],
|
|
226
|
-
vm_hash[:password],
|
|
227
|
-
vm_hash[:disable_password_authentication],
|
|
228
|
-
vm_hash[:ssh_key_path],
|
|
229
|
-
vm_hash[:ssh_key_data],
|
|
230
|
-
encoded_data)
|
|
231
|
-
end
|
|
232
|
-
virtual_machine.network_profile = define_network_profile(vm_hash[:network_interface_card_ids])
|
|
233
|
-
virtual_machine.location = vm_hash[:location]
|
|
234
|
-
|
|
235
|
-
begin
|
|
236
|
-
response = if async
|
|
237
|
-
@compute_mgmt_client.virtual_machines.create_or_update_async(vm_hash[:resource_group], vm_hash[:name], virtual_machine)
|
|
238
|
-
else
|
|
239
|
-
@compute_mgmt_client.virtual_machines.create_or_update(vm_hash[:resource_group], vm_hash[:name], virtual_machine)
|
|
240
|
-
end
|
|
241
|
-
rescue MsRestAzure::AzureOperationError => e
|
|
242
|
-
raise_azure_exception(e, msg)
|
|
243
|
-
end
|
|
244
|
-
Fog::Logger.debug "Virtual Machine #{vm_hash[:name]} Created Successfully." unless async
|
|
245
|
-
response
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
end
|