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.
@@ -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.14'
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 'fog/azurerm'
20
-
21
- require 'fog/azurerm/models/compute/server'
22
- require File.expand_path(
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
- require 'fog/azurerm/compute'
43
- require File.expand_path(
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
- require 'fog/azurerm/models/network/network_interface'
54
- require File.expand_path(
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 = '1.3.1'.freeze
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: 1.3.1
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: 2017-07-24 00:00:00.000000000 Z
13
+ date: 2019-08-21 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
- name: fog-azure-rm-downgraded
16
+ name: deface
15
17
  requirement: !ruby/object:Gem::Requirement
16
18
  requirements:
17
- - - '='
19
+ - - "<"
18
20
  - !ruby/object:Gem::Version
19
- version: 0.3.1
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.3.1
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/fog_extensions/azurerm/compute.rb
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/01100010011001010110010101110000/foreman_azure_rm
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: '0'
174
+ version: 1.3.1
86
175
  requirements: []
87
176
  rubyforge_project:
88
- rubygems_version: 2.4.5.1
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