Class: MiqAzureVm

Inherits:
MiqVm
  • Object
show all
Defined in:
lib/MiqVm/miq_azure_vm.rb

Instance Attribute Summary

Attributes inherited from MiqVm

#diskInitErrors, #rhevm, #rhevmVm, #vim, #vimVm, #vmConfig, #vmConfigFile, #wholeDisks

Instance Method Summary collapse

Methods inherited from MiqVm

#applianceVolumeManager, #extract, #miq_extract, #rootTrees, #snapshots, #unmount, #vmDisks, #volumeManager

Constructor Details

#initialize(azure_handle, args) ⇒ MiqAzureVm

Returns a new instance of MiqAzureVm.

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/MiqVm/miq_azure_vm.rb', line 7

def initialize(azure_handle, args)
  @azure_handle   = azure_handle
  @uri            = nil
  @disk_name      = nil
  @resource_group = args[:resource_group]
  @managed_image  = args[:managed_image]

  raise ArgumentError, "MiqAzureVm: missing required arg :name" unless (@name = args[:name])

  if args[:image_uri]
    @uri = args[:image_uri]
  elsif args[:managed_image]
    @disk_name = args[:managed_image]
  elsif args[:resource_group] && args[:name]
    vm_obj = vm_svc.get(@name, @resource_group)
    os_disk = vm_obj.properties.storage_profile.os_disk
    if vm_obj.managed_disk?
      #
      # Use the Smartstate SNAPSHOT Added by the Provider
      #
      raise ArgumentError, "MiqAzureVm: missing required arg :snapshot for Managed Disk" unless (@disk_name = args[:snapshot])
    else
      #
      # Non-Managed Disk Snapshot handling
      #
      @uri = os_disk.vhd.uri
      @uri << "?snapshot=#{args[:snapshot]}" if args[:snapshot]
    end
  else
    raise ArgumentError, "MiqAzureVm: missing required args: :image_uri or :resource_group"
  end

  super(getCfg)
end

Instance Method Details

#disk_svcObject



126
127
128
# File 'lib/MiqVm/miq_azure_vm.rb', line 126

def disk_svc
  @disk_svc ||= Azure::Armrest::Storage::DiskService.new(@azure_handle)
end

#getCfgObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/MiqVm/miq_azure_vm.rb', line 42

def getCfg
  cfg_hash = {}
  cfg_hash['displayname'] = @name
  file_name               = @uri ? @uri : @disk_name

  $log.debug("MiqAzureVm#getCfg: disk = #{file_name}")

  tag = "scsi0:0"
  cfg_hash["#{tag}.present"]    = "true"
  cfg_hash["#{tag}.devicetype"] = "disk"
  cfg_hash["#{tag}.filename"]   = file_name

  cfg_hash
end

#open_disks_info(disk_tag, disk_file) ⇒ Object

def openDisks



103
104
105
106
107
108
109
110
111
112
# File 'lib/MiqVm/miq_azure_vm.rb', line 103

def open_disks_info(disk_tag, disk_file)
  disk_info                = OpenStruct.new
  disk_info.fileName       = disk_file
  disk_info.hardwareId     = disk_tag
  disk_format              = @vmConfig.getHash["#{disk_tag}.format"]
  disk_info.format         = disk_format unless disk_format.blank?
  disk_info.rawDisk        = true
  disk_info.resource_group = @resource_group
  disk_info
end

#openDisks(diskFiles) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/MiqVm/miq_azure_vm.rb', line 57

def openDisks(diskFiles)
  p_volumes = []

  $log.debug("openDisks: #{diskFiles.size} disk files supplied.")

  #
  # Build a list of the VM's physical volumes.
  #
  diskFiles.each do |dtag, df|
    $log.debug "openDisks: processing disk file (#{dtag}): #{df}"
    d_info = open_disks_info(dtag, df)

    begin
      if @uri
        d = MiqDiskCache.new(AzureBlobDisk.new(sa_svc, @uri, d_info), 100, 128)
      elsif @managed_image
        d = MiqDiskCache.new(AzureManagedDisk.new(disk_svc, @disk_name, d_info), 200, 512)
      else
        d = MiqDiskCache.new(AzureManagedDisk.new(snap_svc, @disk_name, d_info), 200, 512)
      end
    rescue => err
      $log.error("#{err}: Couldn't open disk file: #{df}")
      $log.debug err.backtrace.join("\n")
      @diskInitErrors[df] = err.to_s
      next
    end

    @wholeDisks << d
    p = d.getPartitions
    if p.empty?
      #
      # If the disk has no partitions, the whole disk can be a single volume.
      #
      p_volumes << d
    else
      #
      # If the disk is partitioned, the partitions are physical volumes,
      # but not the whild disk.
      #
      p_volumes.concat(p)
    end
  end

  p_volumes
end

#sa_svcObject



118
119
120
# File 'lib/MiqVm/miq_azure_vm.rb', line 118

def sa_svc
  @sa_svc ||= Azure::Armrest::StorageAccountService.new(@azure_handle)
end

#snap_svcObject



122
123
124
# File 'lib/MiqVm/miq_azure_vm.rb', line 122

def snap_svc
  @snap_svc ||= Azure::Armrest::Storage::SnapshotService.new(@azure_handle)
end

#vm_svcObject



114
115
116
# File 'lib/MiqVm/miq_azure_vm.rb', line 114

def vm_svc
  @vm_svc ||= Azure::Armrest::VirtualMachineService.new(@azure_handle)
end