【问题标题】:How to remove disk from VM in Cloudforms, using custom Button?如何使用自定义按钮从 Cloudforms 中的 VM 中删除磁盘?
【发布时间】:2019-10-20 03:23:28
【问题描述】:

目前,我正在 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}]", size * 1024, :sync = > 真的))。

我知道您可以通过提供的配置按钮使用 CLoudforms 的内置功能编辑磁盘,但是,由于客户要求,我们需要编辑 HAML 文件以删除某些功能。在 CloudForms 的每次更新中重做 HAML 会适得其反。创建我们自己的自定义对话框为我们提供了我们需要的自定义。

# 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

我的代码运行没有任何错误,但是实际上并没有做任何事情,所选磁盘没有从 VM 中删除。很确定我只是遗漏了一些明显的东西(或者我的假设不正确),有什么想法吗?

【问题讨论】:

    标签: ruby manageiq


    【解决方案1】:

    您好,我已使用您的代码成功从 Cloudforms 中的 VM 中删除磁盘

    但是我改变了一件小事

    您使用 disk_name = "#{vm}_#{disk_choice}" 作为磁盘名称来删除磁盘。但这不是那样的。

    您必须在 disk_name 中提及该磁盘的 Datastore,然后它才能正常工作

    你可以试试下面的代码

    disk_name = "[your_datastore_name] #{vm}/#{vm}_#{disk_choice}.vmdk"
    

    这对我来说很好..!!

    您可以考虑的另一件事,即删除支持

    Delete Backing => OFF [默认] 它只会从 VM 中分离您的磁盘,但不会完全删除

    所以你必须打开你的删除备份,以便它可以从存储域中完全删除磁盘

    删除支持 => 开启

    你可以探索here

    谢谢你..!!

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 2020-02-16
      • 2017-01-07
      • 1970-01-01
      • 2012-06-19
      • 2014-10-27
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      相关资源
      最近更新 更多