Как удалить диск из виртуальной машины в Cloudforms, используя пользовательские кнопки? - PullRequest
0 голосов
/ 04 июня 2019

В настоящее время я настраиваю пользовательскую кнопку в Cloudforms, чтобы позволить удаление диска из виртуальной машины, которая была подготовлена ​​с использованием Cloudforms (подключена к ansible)

Я некоторое время смотрел на это и после некоторого копания обнаружил следующее https://github.com/ManageIQ/manageiq-automation_engine/blob/master/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-vmware-infra_manager-vm.rb

Более конкретно:

def remove_disk(disk_name, options = {})
  sync_or_async_ems_operation(options[:sync], "remove_disk", [disk_name, options])
end

Я предположил две вещи, что это, вероятно, будет принимать имя vmdk и будет работать так же, как "add_disk" (vm.add_disk ("[# {vm.storage_name}]", размер * 1024,: sync = > правда)).

Я осведомлен, что вы можете редактировать диски, используя встроенную функциональность CLoudforms, через предоставленную кнопку конфигурации, однако из-за требований заказчика нам пришлось отредактировать файлы HAML, чтобы удалить некоторые функции. Восстановление HAML при каждом обновлении CloudForms довольно контрпродуктивно. Создание наших собственных диалоговых окон дает нам необходимые настройки.

# Get vm object
vm = $evm.root['vm']
raise "Missing $evm.root['vm'] object" unless vm

  def log(level, message)
    @method = 'Remove_Disk'
    $evm.log(level, "#{@method} - #{message}")
  end

$evm.create_notification(:audience => 'user', :level => :success, :message => "Lifecycle action 'Remove Disk' Initiated")
log(:info, "Started LCA to remove disk on vm: <#{vm}>")

# Remove disk from the VM
  disk_choice = $evm.root['dialog_availabledisks'].to_i
  if disk_choice.zero?
    disk_name = "#{vm}"
    $evm.create_notification(:audience => 'user', :level => :failure, :message => "Lifecycle action 'Remove Disk' Failed, OS Drive cannot be removed.")
    log(:error, "C: Drive cannot be deleted")
    exit MIQ_ABORT
  else
    disk_name = "#{vm}_#{disk_choice}"
  end

  log(:info, "Removing disk:<#{disk_name}> from #{vm}")


 begin
      vm.remove_disk(disk_name, :sync => true)
    rescue => e
      log(:error, "e: #{e}")
      log(:error, "e.inspect: #{e.inspect}")
      log(:error,"[#{e}]\n#{e.backtrace.join("\n")}")
      log(:error, "e.message: #{e.message}")
 end

exit MIQ_OK

Мой код проходит без ошибок, однако на самом деле ничего не делает, выбранный диск не удаляется из виртуальной машины. Совершенно уверен, что я просто упускаю что-то очевидное (или мои предположения неверны), есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...