cheese-chef-provisioning-azurerm 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a42dcbfec41ef166c44fda1953c68b13cd2ba05
|
4
|
+
data.tar.gz: 7394b5f6a7df6532a772040b026852ae7b1a30fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51c90e3f4f5c0de61fc4969035908d23cfb3fb9a29f8dc27b3b01535b2dc710a77a32c9bc185005afa39af01df652e07a7ad0539d165bf57ebd191d89b3171cd
|
7
|
+
data.tar.gz: 9463071f66eba7fd6eca9cf1237bc0223cf3d0af94013be9886d9d91e1c30a5b759ff09f9855e17e43f33640868736f05cd62d219ba19e40ddcf6811fec1dae4
|
@@ -0,0 +1,188 @@
|
|
1
|
+
require 'chef/provisioning/azurerm/azure_provider'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Provider
|
5
|
+
class AzureDataDisk < Chef::Provisioning::AzureRM::AzureProvider
|
6
|
+
provides :azure_data_disk
|
7
|
+
|
8
|
+
def whyrun_supported?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
action :create do
|
13
|
+
vm = get_vm_silent
|
14
|
+
if vm && !data_disk_attached_to?(vm)
|
15
|
+
attach_data_disk(vm)
|
16
|
+
else
|
17
|
+
create_disk unless data_disk_exist?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
action :destroy do
|
22
|
+
vm = get_vm_silent
|
23
|
+
if data_disk_exist?
|
24
|
+
action_handler.report_progress "Data disk #{new_resource.name} was found."
|
25
|
+
if data_disk_owner_id
|
26
|
+
if vm && vm.id == data_disk_owner_id
|
27
|
+
action_handler.report_progress "Data disk #{new_resource.name} is attached to #{new_resource.vm} VM."
|
28
|
+
detach_data_disk(vm)
|
29
|
+
else
|
30
|
+
raise "Data disk #{new_resource.name} is attached to a VM. Please provide correct VM information to destroy the disk."
|
31
|
+
end
|
32
|
+
end
|
33
|
+
result = destroy_data_disk
|
34
|
+
Chef::Log.debug("result: #{result.inspect}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
action :detach do
|
39
|
+
vm = get_vm_silent
|
40
|
+
if vm
|
41
|
+
if data_disk_exist? && data_disk_attached_to?(vm)
|
42
|
+
detach_data_disk(vm)
|
43
|
+
elsif !data_disk_exist?
|
44
|
+
raise "Data disk #{new_resource.name} not found."
|
45
|
+
end
|
46
|
+
else
|
47
|
+
raise "VM not available."
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
action :attach do
|
52
|
+
vm = get_vm_silent
|
53
|
+
if vm
|
54
|
+
if data_disk_exist? && !data_disk_attached_to?(vm)
|
55
|
+
attach_data_disk(vm)
|
56
|
+
elsif !data_disk_exist?
|
57
|
+
raise "Data disk #{new_resource.name} not found."
|
58
|
+
end
|
59
|
+
else
|
60
|
+
raise "VM not available."
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_disk
|
65
|
+
action_handler.report_progress "Creating new data disk #{new_resource.name}..."
|
66
|
+
disk_params = Azure::ARM::Compute::Models::Disk.new.tap do |disk|
|
67
|
+
disk.account_type = new_resource.storage_account_type
|
68
|
+
disk.disk_size_gb = new_resource.size
|
69
|
+
disk.tags = new_resource.tags if new_resource.tags
|
70
|
+
disk.location = new_resource.location
|
71
|
+
disk.creation_data = Azure::ARM::Compute::Models::CreationData.new.tap do |creationData|
|
72
|
+
creationData.create_option = 'empty'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
compute_management_client.disks.create_or_update(new_resource.resource_group, new_resource.name, disk_params)
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_vm_silent
|
79
|
+
try_azure_operation('getting vm', true) do
|
80
|
+
compute_management_client.virtual_machines.get(new_resource.resource_group, new_resource.vm) if new_resource.vm
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def data_disk_exist?
|
85
|
+
try_azure_operation('getting data disk', true) do
|
86
|
+
compute_management_client.disks.get(new_resource.resource_group, new_resource.name)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def data_disk_id
|
91
|
+
try_azure_operation('getting data disk') do
|
92
|
+
compute_management_client.disks.get(new_resource.resource_group, new_resource.name).id
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def data_disk_size
|
97
|
+
try_azure_operation('getting data disk') do
|
98
|
+
compute_management_client.disks.get(new_resource.resource_group, new_resource.name).disk_size_gb
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def data_disk_owner_id
|
103
|
+
try_azure_operation('getting data disk') do
|
104
|
+
compute_management_client.disks.get(new_resource.resource_group, new_resource.name).owner_id
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def data_disk_owner_id_silent
|
109
|
+
try_azure_operation('getting data disk', true) do
|
110
|
+
compute_management_client.disks.get(new_resource.resource_group, new_resource.name).owner_id
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def data_disk_attached_to?(vm)
|
115
|
+
if data_disk_owner_id_silent
|
116
|
+
if data_disk_owner_id == vm.id
|
117
|
+
return true
|
118
|
+
else
|
119
|
+
raise "Disk #{new_resource.name} is attached to some other VM."
|
120
|
+
end
|
121
|
+
end
|
122
|
+
false
|
123
|
+
end
|
124
|
+
|
125
|
+
def data_disk_setup_for(vm)
|
126
|
+
data_disk = Azure::ARM::Compute::Models::DataDisk.new.tap do |dd_disk|
|
127
|
+
dd_disk.name = new_resource.name
|
128
|
+
dd_disk.disk_size_gb = new_resource.size if !data_disk_exist? || new_resource.size > data_disk_size
|
129
|
+
Chef::Log.warn("Disk size reduction is not supported") if data_disk_exist? && new_resource.size < data_disk_size
|
130
|
+
dd_disk.lun = disk_lun(vm)
|
131
|
+
dd_disk.caching = new_resource.caching
|
132
|
+
dd_disk.create_option = data_disk_exist? ? 'attach' : 'empty'
|
133
|
+
managedDiskInfo = Azure::ARM::Compute::Models::ManagedDiskParameters.new.tap do |managedDisk|
|
134
|
+
if data_disk_exist?
|
135
|
+
action_handler.report_progress "Data disk with name #{new_resource.name} was found. Using this..."
|
136
|
+
managedDisk.id = data_disk_id
|
137
|
+
else
|
138
|
+
managedDisk.storage_account_type = new_resource.storage_account_type
|
139
|
+
end
|
140
|
+
end
|
141
|
+
dd_disk.managed_disk = managedDiskInfo
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def detach_data_disk(vm)
|
146
|
+
if vm
|
147
|
+
vm.storage_profile.data_disks.each do |ddisk|
|
148
|
+
if ddisk.name == new_resource.name
|
149
|
+
action_handler.report_progress "Removing data disk #{new_resource.name} from VM #{new_resource.vm}."
|
150
|
+
(vm.storage_profile.data_disks).delete(ddisk)
|
151
|
+
result = compute_management_client.virtual_machines.create_or_update(new_resource.resource_group, new_resource.vm, vm)
|
152
|
+
Chef::Log.debug("result: #{result.inspect}")
|
153
|
+
end
|
154
|
+
end
|
155
|
+
else
|
156
|
+
raise "VM not available."
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def attach_data_disk(vm)
|
161
|
+
if vm
|
162
|
+
data_disk = data_disk_setup_for(vm)
|
163
|
+
vm.storage_profile.data_disks.push(data_disk)
|
164
|
+
action_handler.report_progress "Updating VM #{new_resource.vm} with data disk #{new_resource.name}..."
|
165
|
+
result = compute_management_client.virtual_machines.create_or_update(new_resource.resource_group, new_resource.vm, vm)
|
166
|
+
Chef::Log.debug("result: #{result.inspect}")
|
167
|
+
else
|
168
|
+
raise "VM not available."
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def destroy_data_disk
|
173
|
+
action_handler.report_progress "Deleting data disk #{new_resource.name}."
|
174
|
+
compute_management_client.disks.delete(new_resource.resource_group, new_resource.name)
|
175
|
+
end
|
176
|
+
|
177
|
+
def disk_lun(vm)
|
178
|
+
if new_resource.lun
|
179
|
+
new_resource.lun
|
180
|
+
elsif (vm.storage_profile.data_disks.last).nil?
|
181
|
+
2
|
182
|
+
else
|
183
|
+
vm.storage_profile.data_disks.last.lun + 1
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
@@ -10,7 +10,7 @@ require 'azure_mgmt_network'
|
|
10
10
|
Chef::Log.info("chef-provisioning-azurerm #{Chef::Provisioning::AzureRM::VERSION}")
|
11
11
|
Chef::Log.info("chef-provisioning #{Chef::Provisioning::VERSION}")
|
12
12
|
|
13
|
-
resources = %w(resource_group resource_template storage_account virtual_network network_interface public_ip_address)
|
13
|
+
resources = %w(resource_group resource_template storage_account virtual_network network_interface public_ip_address data_disk)
|
14
14
|
resources.each do |r|
|
15
15
|
require "chef/resource/azure_#{r}"
|
16
16
|
require "chef/provider/azure_#{r}"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'chef/provisioning/azurerm/azure_resource'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Resource
|
5
|
+
class AzureDataDisk < Chef::Provisioning::AzureRM::AzureResource
|
6
|
+
resource_name :azure_data_disk
|
7
|
+
actions :create, :destroy, :detach, :attach, :nothing
|
8
|
+
default_action :create
|
9
|
+
attribute :name, kind_of: String, name_attribute: true, regex: /^[\w\-\(\)\.]{0,80}$+(?<!\.)$/i
|
10
|
+
attribute :size, kind_of: Integer, default: 10
|
11
|
+
attribute :storage_account_type, String, default: 'Standard_LRS'
|
12
|
+
attribute :caching, String, default: 'none'
|
13
|
+
attribute :location, String
|
14
|
+
attribute :lun, Integer
|
15
|
+
attribute :vm, String
|
16
|
+
attribute :tags, kind_of: Hash
|
17
|
+
attribute :resource_group, String, required: true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cheese-chef-provisioning-azurerm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Preston
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-04-
|
12
|
+
date: 2017-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- CHANGELOG.md
|
157
157
|
- LICENSE.txt
|
158
158
|
- README.md
|
159
|
+
- lib/chef/provider/azure_data_disk.rb
|
159
160
|
- lib/chef/provider/azure_network_interface.rb
|
160
161
|
- lib/chef/provider/azure_public_ip_address.rb
|
161
162
|
- lib/chef/provider/azure_resource_group.rb
|
@@ -170,6 +171,7 @@ files:
|
|
170
171
|
- lib/chef/provisioning/azurerm/driver.rb
|
171
172
|
- lib/chef/provisioning/azurerm/version.rb
|
172
173
|
- lib/chef/provisioning/driver_init/azurerm.rb
|
174
|
+
- lib/chef/resource/azure_data_disk.rb
|
173
175
|
- lib/chef/resource/azure_network_interface.rb
|
174
176
|
- lib/chef/resource/azure_public_ip_address.rb
|
175
177
|
- lib/chef/resource/azure_resource_group.rb
|