class Chef::Provider::AzureDataDisk

Public Instance Methods

attach_data_disk(vm) click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 160
def attach_data_disk(vm)
  if vm
    data_disk = data_disk_setup_for(vm)
    vm.storage_profile.data_disks.push(data_disk)
    action_handler.report_progress "Updating VM #{new_resource.vm} with data disk #{new_resource.name}..."
    result = compute_management_client.virtual_machines.create_or_update(new_resource.resource_group, new_resource.vm, vm)
    Chef::Log.debug("result: #{result.inspect}")
  else
    raise "VM not available."
  end
end
create_disk() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 64
def create_disk
  action_handler.report_progress "Creating new data disk #{new_resource.name}..."
  disk_params = Azure::ARM::Compute::Models::Disk.new.tap do |disk|
    disk.account_type = new_resource.storage_account_type
    disk.disk_size_gb = new_resource.size
    disk.tags = new_resource.tags if new_resource.tags
    disk.location = new_resource.location
    disk.creation_data = Azure::ARM::Compute::Models::CreationData.new.tap do |creationData|
      creationData.create_option = 'empty'
    end
  end
  compute_management_client.disks.create_or_update(new_resource.resource_group, new_resource.name, disk_params)
end
data_disk_attached_to?(vm) click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 114
def data_disk_attached_to?(vm)
  if data_disk_owner_id_silent
    if data_disk_owner_id == vm.id
      return true
    else
      raise "Disk #{new_resource.name} is attached to some other VM."
    end
  end
  false
end
data_disk_exist?() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 84
def data_disk_exist?
  try_azure_operation('getting data disk', true) do
    compute_management_client.disks.get(new_resource.resource_group, new_resource.name)
  end
end
data_disk_id() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 90
def data_disk_id
  try_azure_operation('getting data disk') do
    compute_management_client.disks.get(new_resource.resource_group, new_resource.name).id
  end
end
data_disk_owner_id() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 102
def data_disk_owner_id
  try_azure_operation('getting data disk') do
    compute_management_client.disks.get(new_resource.resource_group, new_resource.name).managed_by
  end
end
data_disk_owner_id_silent() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 108
def data_disk_owner_id_silent
  try_azure_operation('getting data disk', true) do
    compute_management_client.disks.get(new_resource.resource_group, new_resource.name).managed_by
  end
end
data_disk_setup_for(vm) click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 125
def data_disk_setup_for(vm)
  data_disk = Azure::ARM::Compute::Models::DataDisk.new.tap do |dd_disk|
    dd_disk.name = new_resource.name
    dd_disk.disk_size_gb = new_resource.size if !data_disk_exist? || new_resource.size > data_disk_size
    Chef::Log.warn("Disk size reduction is not supported") if data_disk_exist? && new_resource.size < data_disk_size
    dd_disk.lun = disk_lun(vm)
    dd_disk.caching = new_resource.caching
    dd_disk.create_option = data_disk_exist? ? 'attach' : 'empty'
    managedDiskInfo = Azure::ARM::Compute::Models::ManagedDiskParameters.new.tap do |managedDisk|
      if data_disk_exist?
        action_handler.report_progress "Data disk with name #{new_resource.name} was found. Using this..."
        managedDisk.id = data_disk_id
      else
        managedDisk.storage_account_type = new_resource.storage_account_type
      end
    end
    dd_disk.managed_disk = managedDiskInfo
  end
end
data_disk_size() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 96
def data_disk_size
  try_azure_operation('getting data disk') do
    compute_management_client.disks.get(new_resource.resource_group, new_resource.name).disk_size_gb
  end
end
destroy_data_disk() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 172
def destroy_data_disk
  action_handler.report_progress "Deleting data disk #{new_resource.name}."
  compute_management_client.disks.delete(new_resource.resource_group, new_resource.name)
end
detach_data_disk(vm) click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 145
def detach_data_disk(vm)
  if vm
    vm.storage_profile.data_disks.each do |ddisk|
      if ddisk.name == new_resource.name
        action_handler.report_progress "Removing data disk #{new_resource.name} from VM #{new_resource.vm}."
        (vm.storage_profile.data_disks).delete(ddisk)
        result = compute_management_client.virtual_machines.create_or_update(new_resource.resource_group, new_resource.vm, vm)
        Chef::Log.debug("result: #{result.inspect}")
      end
    end
  else
    raise "VM not available."
  end
end
disk_lun(vm) click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 177
def disk_lun(vm)
  if new_resource.lun
    new_resource.lun
  elsif (vm.storage_profile.data_disks.last).nil?
    2
  else
    vm.storage_profile.data_disks.last.lun + 1
  end
end
get_vm_silent() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 78
def get_vm_silent
  try_azure_operation('getting vm', true) do
    compute_management_client.virtual_machines.get(new_resource.resource_group, new_resource.vm) if new_resource.vm
  end
end
whyrun_supported?() click to toggle source
# File lib/chef/provider/azure_data_disk.rb, line 8
def whyrun_supported?
  true
end