chef-provisioning-azure 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -0
- data/LICENSE +201 -201
- data/README.md +108 -108
- data/Rakefile +15 -6
- data/chef-provisioning-azure.gemspec +33 -0
- data/lib/chef/provider/azure_cloud_service.rb +21 -21
- data/lib/chef/provider/azure_sql_server.rb +36 -36
- data/lib/chef/provider/azure_storage_account.rb +21 -21
- data/lib/chef/provisioning/azure_driver.rb +3 -3
- data/lib/chef/provisioning/azure_driver/azure_provider.rb +33 -33
- data/lib/chef/provisioning/azure_driver/azure_resource.rb +51 -51
- data/lib/chef/provisioning/azure_driver/bootstrap_options.rb +25 -25
- data/lib/chef/provisioning/azure_driver/constants.rb +34 -34
- data/lib/chef/provisioning/azure_driver/driver.rb +360 -360
- data/lib/chef/provisioning/azure_driver/machine_options.rb +62 -62
- data/lib/chef/provisioning/azure_driver/resources.rb +7 -7
- data/lib/chef/provisioning/azure_driver/subscriptions.rb +222 -222
- data/lib/chef/provisioning/azure_driver/version.rb +8 -8
- data/lib/chef/provisioning/driver_init/azure.rb +3 -3
- data/lib/chef/resource/azure_cloud_service.rb +13 -13
- data/lib/chef/resource/azure_sql_server.rb +13 -13
- data/lib/chef/resource/azure_storage_account.rb +13 -13
- metadata +19 -3
data/Rakefile
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
4
|
-
task :spec do
|
5
|
-
require File.expand_path(
|
6
|
-
end
|
1
|
+
require "bundler"
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
task :spec do
|
5
|
+
require File.expand_path("spec/run")
|
6
|
+
end
|
7
|
+
|
8
|
+
require "github_changelog_generator/task"
|
9
|
+
|
10
|
+
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
11
|
+
config.future_release = Chef::Provisioning::AzureDriver::VERSION
|
12
|
+
config.enhancement_labels = "enhancement,Enhancement,New Feature".split(",")
|
13
|
+
config.bug_labels = "bug,Bug,Improvement,Upstream Bug".split(",")
|
14
|
+
config.exclude_labels = "duplicate,question,invalid,wontfix,no_changelog,Exclude From Changelog".split(",")
|
15
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/lib')
|
2
|
+
require 'chef/provisioning/azure_driver/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'chef-provisioning-azure'
|
6
|
+
s.version = Chef::Provisioning::AzureDriver::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.extra_rdoc_files = %w(README.md LICENSE)
|
9
|
+
s.summary = 'Provisioner for creating Microsoft Azure resources using ' \
|
10
|
+
'Chef Provisioning.'
|
11
|
+
s.description = 'This is a driver that works with chef-provisioning that ' \
|
12
|
+
'allows Chef Provisioning to manage objects in Microsoft Azure.'
|
13
|
+
s.author = 'John Ewart'
|
14
|
+
s.email = 'jewart@getchef.com'
|
15
|
+
s.homepage = 'https://github.com/chef/chef-provisioning-azure'
|
16
|
+
s.license = 'Apache-2.0'
|
17
|
+
|
18
|
+
s.add_dependency 'chef-provisioning', '~> 1.0'
|
19
|
+
s.add_dependency 'stuartpreston-azure-sdk-for-ruby', '~> 0.7'
|
20
|
+
|
21
|
+
s.add_development_dependency 'chef', '>= 12.0'
|
22
|
+
s.add_development_dependency 'rspec'
|
23
|
+
s.add_development_dependency 'rake'
|
24
|
+
s.add_development_dependency 'yard'
|
25
|
+
s.add_development_dependency 'github_changelog_generator'
|
26
|
+
|
27
|
+
s.bindir = 'bin'
|
28
|
+
s.executables = %w( )
|
29
|
+
|
30
|
+
s.require_path = 'lib'
|
31
|
+
s.files = %w(Gemfile Rakefile LICENSE README.md) + Dir.glob('*.gemspec')
|
32
|
+
s.files += Dir.glob('{distro,lib,tasks,spec}/**/*', File::FNM_DOTMATCH).reject { |f| File.directory?(f) }
|
33
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
|
-
require 'chef/provisioning/azure_driver/azure_provider'
|
2
|
-
|
3
|
-
class Chef
|
4
|
-
class Provider
|
5
|
-
class AzureCloudService < Chef::Provisioning::AzureDriver::AzureProvider
|
6
|
-
action :create do
|
7
|
-
Chef::Log.info("Creating AzureCloudService: #{new_resource.name}")
|
8
|
-
csms = Azure::CloudServiceManagementService.new
|
9
|
-
csms.create_cloud_service(new_resource.name, new_resource.options)
|
10
|
-
properties = csms.get_cloud_service_properties(new_resource.name)
|
11
|
-
Chef::Log.debug("Properties of #{new_resource.name}: #{properties.inspect}")
|
12
|
-
end
|
13
|
-
|
14
|
-
action :destroy do
|
15
|
-
Chef::Log.info("Destroying AzureCloudService: #{new_resource.name}")
|
16
|
-
csms = Azure::CloudServiceManagementService.new
|
17
|
-
csms.delete_cloud_service(new_resource.name)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
1
|
+
require 'chef/provisioning/azure_driver/azure_provider'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Provider
|
5
|
+
class AzureCloudService < Chef::Provisioning::AzureDriver::AzureProvider
|
6
|
+
action :create do
|
7
|
+
Chef::Log.info("Creating AzureCloudService: #{new_resource.name}")
|
8
|
+
csms = Azure::CloudServiceManagementService.new
|
9
|
+
csms.create_cloud_service(new_resource.name, new_resource.options)
|
10
|
+
properties = csms.get_cloud_service_properties(new_resource.name)
|
11
|
+
Chef::Log.debug("Properties of #{new_resource.name}: #{properties.inspect}")
|
12
|
+
end
|
13
|
+
|
14
|
+
action :destroy do
|
15
|
+
Chef::Log.info("Destroying AzureCloudService: #{new_resource.name}")
|
16
|
+
csms = Azure::CloudServiceManagementService.new
|
17
|
+
csms.delete_cloud_service(new_resource.name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,36 +1,36 @@
|
|
1
|
-
require 'chef/provisioning/azure_driver/azure_provider'
|
2
|
-
|
3
|
-
class Chef
|
4
|
-
class Provider
|
5
|
-
class AzureSqlServer < Chef::Provisioning::AzureDriver::AzureProvider
|
6
|
-
action :create do
|
7
|
-
restore = Azure.config.management_endpoint
|
8
|
-
Azure.config.management_endpoint = azure_sql_management_endpoint
|
9
|
-
Chef::Log.info("Creating AzureSqlServer: #{new_resource.name}")
|
10
|
-
csql = Azure::SqlDatabaseManagementService.new
|
11
|
-
Chef::Log.info("#{new_resource.options.inspect}")
|
12
|
-
properties = csql.create_server("#{new_resource.options[:login]}", \
|
13
|
-
"#{new_resource.options[:password]}", \
|
14
|
-
"#{new_resource.options[:location]}")
|
15
|
-
server = properties.name
|
16
|
-
|
17
|
-
new_resource.options[:firewall_rules].each do | rule |
|
18
|
-
rule_name = URI::encode(rule[:name])
|
19
|
-
range = {
|
20
|
-
:start_ip_address => rule[:start_ip_address],
|
21
|
-
:end_ip_address => rule[:end_ip_address]
|
22
|
-
}
|
23
|
-
csql.set_sql_server_firewall_rule(server, rule_name, range)
|
24
|
-
end
|
25
|
-
|
26
|
-
Chef::Log.info("Properties of #{new_resource.name}: #{properties.inspect}")
|
27
|
-
Azure.config.management_endpoint = restore
|
28
|
-
end
|
29
|
-
|
30
|
-
action :destroy do
|
31
|
-
# not supported
|
32
|
-
fail "Destroy not yet implemented on Azure SQL Server using ASM."
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
1
|
+
require 'chef/provisioning/azure_driver/azure_provider'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Provider
|
5
|
+
class AzureSqlServer < Chef::Provisioning::AzureDriver::AzureProvider
|
6
|
+
action :create do
|
7
|
+
restore = Azure.config.management_endpoint
|
8
|
+
Azure.config.management_endpoint = azure_sql_management_endpoint
|
9
|
+
Chef::Log.info("Creating AzureSqlServer: #{new_resource.name}")
|
10
|
+
csql = Azure::SqlDatabaseManagementService.new
|
11
|
+
Chef::Log.info("#{new_resource.options.inspect}")
|
12
|
+
properties = csql.create_server("#{new_resource.options[:login]}", \
|
13
|
+
"#{new_resource.options[:password]}", \
|
14
|
+
"#{new_resource.options[:location]}")
|
15
|
+
server = properties.name
|
16
|
+
|
17
|
+
new_resource.options[:firewall_rules].each do | rule |
|
18
|
+
rule_name = URI::encode(rule[:name])
|
19
|
+
range = {
|
20
|
+
:start_ip_address => rule[:start_ip_address],
|
21
|
+
:end_ip_address => rule[:end_ip_address]
|
22
|
+
}
|
23
|
+
csql.set_sql_server_firewall_rule(server, rule_name, range)
|
24
|
+
end
|
25
|
+
|
26
|
+
Chef::Log.info("Properties of #{new_resource.name}: #{properties.inspect}")
|
27
|
+
Azure.config.management_endpoint = restore
|
28
|
+
end
|
29
|
+
|
30
|
+
action :destroy do
|
31
|
+
# not supported
|
32
|
+
fail "Destroy not yet implemented on Azure SQL Server using ASM."
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
|
-
require 'chef/provisioning/azure_driver/azure_provider'
|
2
|
-
|
3
|
-
class Chef
|
4
|
-
class Provider
|
5
|
-
class AzureStorageAccount < Chef::Provisioning::AzureDriver::AzureProvider
|
6
|
-
action :create do
|
7
|
-
Chef::Log.info("Creating AzureStorageAccount: #{new_resource.name}")
|
8
|
-
sms = Azure::StorageManagementService.new
|
9
|
-
sms.create_storage_account(new_resource.name, new_resource.options)
|
10
|
-
properties = sms.get_storage_account_properties(new_resource.name)
|
11
|
-
Chef::Log.debug("Properties of #{new_resource.name}: #{properties.inspect}")
|
12
|
-
end
|
13
|
-
|
14
|
-
action :destroy do
|
15
|
-
Chef::Log.info("Destroying AzureStorageAccount: #{new_resource.name}")
|
16
|
-
sms = Azure::StorageManagementService.new
|
17
|
-
sms.delete_storage_account(new_resource.name)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
1
|
+
require 'chef/provisioning/azure_driver/azure_provider'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Provider
|
5
|
+
class AzureStorageAccount < Chef::Provisioning::AzureDriver::AzureProvider
|
6
|
+
action :create do
|
7
|
+
Chef::Log.info("Creating AzureStorageAccount: #{new_resource.name}")
|
8
|
+
sms = Azure::StorageManagementService.new
|
9
|
+
sms.create_storage_account(new_resource.name, new_resource.options)
|
10
|
+
properties = sms.get_storage_account_properties(new_resource.name)
|
11
|
+
Chef::Log.debug("Properties of #{new_resource.name}: #{properties.inspect}")
|
12
|
+
end
|
13
|
+
|
14
|
+
action :destroy do
|
15
|
+
Chef::Log.info("Destroying AzureStorageAccount: #{new_resource.name}")
|
16
|
+
sms = Azure::StorageManagementService.new
|
17
|
+
sms.delete_storage_account(new_resource.name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
require 'chef/provisioning'
|
2
|
-
require 'chef/provisioning/azure_driver/driver'
|
3
|
-
require 'chef/provisioning/azure_driver/resources'
|
1
|
+
require 'chef/provisioning'
|
2
|
+
require 'chef/provisioning/azure_driver/driver'
|
3
|
+
require 'chef/provisioning/azure_driver/resources'
|
@@ -1,33 +1,33 @@
|
|
1
|
-
require 'chef/provider/lwrp_base'
|
2
|
-
require 'chef/provisioning/azure_driver/azure_resource'
|
3
|
-
require 'chef/provisioning/chef_provider_action_handler'
|
4
|
-
require 'azure'
|
5
|
-
|
6
|
-
class Chef
|
7
|
-
module Provisioning
|
8
|
-
module AzureDriver
|
9
|
-
class AzureProvider < Chef::Provider::LWRPBase
|
10
|
-
use_inline_resources
|
11
|
-
|
12
|
-
AzureResource = Chef::Provisioning::AzureDriver::AzureResource
|
13
|
-
|
14
|
-
def azure_sql_management_endpoint
|
15
|
-
'https://management.database.windows.net:8443'
|
16
|
-
end
|
17
|
-
|
18
|
-
def action_handler
|
19
|
-
@action_handler ||= Chef::Provisioning::ChefProviderActionHandler.new(self)
|
20
|
-
end
|
21
|
-
|
22
|
-
# All these need to implement whyrun
|
23
|
-
def whyrun_supported?
|
24
|
-
true
|
25
|
-
end
|
26
|
-
|
27
|
-
def driver
|
28
|
-
new_resource.driver
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
1
|
+
require 'chef/provider/lwrp_base'
|
2
|
+
require 'chef/provisioning/azure_driver/azure_resource'
|
3
|
+
require 'chef/provisioning/chef_provider_action_handler'
|
4
|
+
require 'azure'
|
5
|
+
|
6
|
+
class Chef
|
7
|
+
module Provisioning
|
8
|
+
module AzureDriver
|
9
|
+
class AzureProvider < Chef::Provider::LWRPBase
|
10
|
+
use_inline_resources
|
11
|
+
|
12
|
+
AzureResource = Chef::Provisioning::AzureDriver::AzureResource
|
13
|
+
|
14
|
+
def azure_sql_management_endpoint
|
15
|
+
'https://management.database.windows.net:8443'
|
16
|
+
end
|
17
|
+
|
18
|
+
def action_handler
|
19
|
+
@action_handler ||= Chef::Provisioning::ChefProviderActionHandler.new(self)
|
20
|
+
end
|
21
|
+
|
22
|
+
# All these need to implement whyrun
|
23
|
+
def whyrun_supported?
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
def driver
|
28
|
+
new_resource.driver
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,51 +1,51 @@
|
|
1
|
-
require 'chef/resource/lwrp_base'
|
2
|
-
require 'chef/provisioning/azure_driver/subscriptions'
|
3
|
-
|
4
|
-
class Chef
|
5
|
-
module Provisioning
|
6
|
-
module AzureDriver
|
7
|
-
class AzureResource < Chef::Resource::LWRPBase
|
8
|
-
def initialize(*args)
|
9
|
-
super
|
10
|
-
if run_context
|
11
|
-
@chef_environment = run_context.cheffish.current_environment
|
12
|
-
@chef_server = run_context.cheffish.current_chef_server
|
13
|
-
@driver = run_context.chef_provisioning.current_driver
|
14
|
-
end
|
15
|
-
|
16
|
-
config = run_context.chef_provisioning.config
|
17
|
-
scheme, account_id = driver.split(':', 2)
|
18
|
-
|
19
|
-
if account_id.nil? || account_id.empty?
|
20
|
-
subscription = Subscriptions.default_subscription(config)
|
21
|
-
config = Cheffish::MergedConfig.new({ azure_subscriptions: subscription }, config)
|
22
|
-
if !subscription
|
23
|
-
raise "Driver #{driver} did not specify a subscription ID, and no default subscription was found. Have you downloaded the Azure CLI and used `azure account download` and `azure account import` to set up Azure? Alternately, you can set azure_subscriptions to [ { subscription_id: '...', management_credentials: ... }] in your Chef configuration."
|
24
|
-
end
|
25
|
-
else
|
26
|
-
subscription_id = account_id || subscription[:subscription_id]
|
27
|
-
subscription = Subscriptions.get_subscription(config, subscription_id)
|
28
|
-
end
|
29
|
-
|
30
|
-
if !subscription
|
31
|
-
raise "Driver #{driver} has a subscription ID (#{subscription_id}), but the system has no credentials configured for it! If you have access to this subscription, you can use `azure account download` and `azure account import` in the Azure CLI to get the credentials, or set azure_subscriptions to [ { subscription_id: '...', management_credentials: ... }] in your Chef configuration."
|
32
|
-
else
|
33
|
-
Chef::Log.debug("Using subscription: #{subscription.inspect}")
|
34
|
-
end
|
35
|
-
|
36
|
-
Azure.configure do |azure|
|
37
|
-
azure.management_certificate = subscription[:management_certificate]
|
38
|
-
azure.subscription_id = subscription[:subscription_id]
|
39
|
-
azure.management_endpoint = subscription[:management_endpoint]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
attribute :driver
|
44
|
-
attribute :chef_server, kind_of: Hash
|
45
|
-
attribute :managed_entry_store, kind_of: Chef::Provisioning::ManagedEntryStore,
|
46
|
-
lazy_default: proc { Chef::Provisioning::ChefManagedEntryStore.new(chef_server) }
|
47
|
-
attribute :subscription
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
1
|
+
require 'chef/resource/lwrp_base'
|
2
|
+
require 'chef/provisioning/azure_driver/subscriptions'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
module Provisioning
|
6
|
+
module AzureDriver
|
7
|
+
class AzureResource < Chef::Resource::LWRPBase
|
8
|
+
def initialize(*args)
|
9
|
+
super
|
10
|
+
if run_context
|
11
|
+
@chef_environment = run_context.cheffish.current_environment
|
12
|
+
@chef_server = run_context.cheffish.current_chef_server
|
13
|
+
@driver = run_context.chef_provisioning.current_driver
|
14
|
+
end
|
15
|
+
|
16
|
+
config = run_context.chef_provisioning.config
|
17
|
+
scheme, account_id = driver.split(':', 2)
|
18
|
+
|
19
|
+
if account_id.nil? || account_id.empty?
|
20
|
+
subscription = Subscriptions.default_subscription(config)
|
21
|
+
config = Cheffish::MergedConfig.new({ azure_subscriptions: subscription }, config)
|
22
|
+
if !subscription
|
23
|
+
raise "Driver #{driver} did not specify a subscription ID, and no default subscription was found. Have you downloaded the Azure CLI and used `azure account download` and `azure account import` to set up Azure? Alternately, you can set azure_subscriptions to [ { subscription_id: '...', management_credentials: ... }] in your Chef configuration."
|
24
|
+
end
|
25
|
+
else
|
26
|
+
subscription_id = account_id || subscription[:subscription_id]
|
27
|
+
subscription = Subscriptions.get_subscription(config, subscription_id)
|
28
|
+
end
|
29
|
+
|
30
|
+
if !subscription
|
31
|
+
raise "Driver #{driver} has a subscription ID (#{subscription_id}), but the system has no credentials configured for it! If you have access to this subscription, you can use `azure account download` and `azure account import` in the Azure CLI to get the credentials, or set azure_subscriptions to [ { subscription_id: '...', management_credentials: ... }] in your Chef configuration."
|
32
|
+
else
|
33
|
+
Chef::Log.debug("Using subscription: #{subscription.inspect}")
|
34
|
+
end
|
35
|
+
|
36
|
+
Azure.configure do |azure|
|
37
|
+
azure.management_certificate = subscription[:management_certificate]
|
38
|
+
azure.subscription_id = subscription[:subscription_id]
|
39
|
+
azure.management_endpoint = subscription[:management_endpoint]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
attribute :driver
|
44
|
+
attribute :chef_server, kind_of: Hash
|
45
|
+
attribute :managed_entry_store, kind_of: Chef::Provisioning::ManagedEntryStore,
|
46
|
+
lazy_default: proc { Chef::Provisioning::ChefManagedEntryStore.new(chef_server) }
|
47
|
+
attribute :subscription
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -1,25 +1,25 @@
|
|
1
|
-
class Chef
|
2
|
-
module Provisioning
|
3
|
-
module AzureDriver
|
4
|
-
# Represents available options when bootstrapping a host on Azure
|
5
|
-
# These are used to tell Azure some initial pieces of information
|
6
|
-
# for building a new VM.
|
7
|
-
class BootstrapOptions < Chef::Provisioning::BootstrapOptions
|
8
|
-
# @return [String] The name of the VM
|
9
|
-
attr_accessor :vm_name
|
10
|
-
|
11
|
-
# @return [String] The VM user
|
12
|
-
attr_accessor :vm_user
|
13
|
-
|
14
|
-
# @return [String] The identifier for the VM image to use
|
15
|
-
attr_accessor :image
|
16
|
-
|
17
|
-
# @return [String] the password to use
|
18
|
-
attr_accessor :password
|
19
|
-
|
20
|
-
# @return [String] The Azure location to store this in
|
21
|
-
attr_accessor :location
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
1
|
+
class Chef
|
2
|
+
module Provisioning
|
3
|
+
module AzureDriver
|
4
|
+
# Represents available options when bootstrapping a host on Azure
|
5
|
+
# These are used to tell Azure some initial pieces of information
|
6
|
+
# for building a new VM.
|
7
|
+
class BootstrapOptions < Chef::Provisioning::BootstrapOptions
|
8
|
+
# @return [String] The name of the VM
|
9
|
+
attr_accessor :vm_name
|
10
|
+
|
11
|
+
# @return [String] The VM user
|
12
|
+
attr_accessor :vm_user
|
13
|
+
|
14
|
+
# @return [String] The identifier for the VM image to use
|
15
|
+
attr_accessor :image
|
16
|
+
|
17
|
+
# @return [String] the password to use
|
18
|
+
attr_accessor :password
|
19
|
+
|
20
|
+
# @return [String] The Azure location to store this in
|
21
|
+
attr_accessor :location
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|