2022年11月8日 星期二

vRealize Automation 8.6 - PART7:自動部署完成後搭配 ABX Action 在 Guest OS 執行 Scripts

Action-Based Extensibility (ABX) 提供一個輕量且彈性的運行引擎 (Run-time engine) 介面,讓我們可以編寫腳本 (腳本語法支援 nodejs、powershell 和python),並設定在指定的事件發生後自動執行腳本。本文主要說明如何利用 ABX Action 在 Windows VM 部署完成後,自動將第二顆硬碟格式化並新增為 E 磁碟

Blueprint 設計 & 調整

這個藍圖的目的是讓使用者自行輸入 E 磁碟空間大小,依據輸入磁碟的空間大小判斷是否要掛接第二顆硬碟給虛擬機。首先,在藍圖設計中新增一個型態為 integer 的 Cloud Template Inputs,本例命名為 Disk_Size

接著,拖拉 vSphere Disk 元件到藍圖中,但先不要把 Disk 與 Virtual Machine 連接。最後 YAML Code 需要在 vSphere Disk 和 vSphere Machine 的部分做調整
  • vSphere Disk 部份:
- ${input.Disk_Size} 用來接收使用者輸入的 Disk 空間大小
- ${input.Disk_Size==0? 0:1} 用來判斷是否要新增 Disk,如果輸入的空間大小 = 0,部署出來的 VM 就不會多一顆硬碟
  • vSphere Machine 部分:
- attachedDisks: '${map_to_object(resource.Cloud_vSphere_Disk_1[*].id, "source")}' 這樣子的寫法就不會直接掛接 vSphere Disk,而是有硬碟才會掛接
最後,藍圖會如下圖所示:

建立 ABX Actions

在 Cloud Assembly→Extensibility→Library→Actions,新增 Action。本例命名為 PostConfig
設定 Action Constants,將 vc 和 windows 範本的密碼加密儲存在 vRA 裡,之後編寫 Actions 腳本時可以運用。在 Cloud Assembly→Extensibility→Library→Actions,點選 Action Constants
編寫 Powershell 腳本,流程大致上是:取得部署出來的 VM→建立 Session 登入到 VC→檢查 VM GuestOS→如果是 "Windows Guest",執行 Script 將第二顆硬碟格式化並新增為 E 磁碟→關閉 Session
Powershell 語法如下:

 function handler($context, $inputs) {


  $vmName = $inputs.resourceNames[0]

  

  # get vc pwd

  $vc_pwd = $context.getSecret($inputs."vCenterPassword")

  

  Connect-ViServer -Server '172.26.93.11' -User "administrator@vsphere.local" -Password $vc_pwd -Force

  

  # get osType

  $osType = (Get-VM -Name $vmName).Guest.GuestFamily.ToString()

  

  if($osType.Equals("windowsGuest")) {

    Write-Host " $vmName is a $osType "

  

  # Create a script that can be run on the vm to initialize/format the disk

    $script =  '$disk = get-disk | ? {$_.PartitionStyle -eq "Raw"} | select -first 1;'

    $script += 'initialize-disk -inputobject $disk;'

    $script += '$p = new-partition $disk.number -UseMaximumSize -AssignDriveLetter:$false;'

    $script += '$p | Format-Volume -FileSystem NTFS -Confirm:$false;' 

    $script += '$p | Set-Partition -NewDriveLetter "E"'


  # get winsrv pwd

    $winsrv_pwd = $context.getSecret($inputs."TemplateWinsrvPassword")

  

  # Invoke the script on the vm

    Invoke-VMScript -VM $vmName -ScriptText $script -GuestUser administrator -GuestPassword $winsrv_pwd

  }

 Disconnect-ViServer -Server '172.26.93.11' -Force -Confirm:$false

}

訂閱 (Subscription)

ABX Actions 需要搭配訂閱事件才能運作,意思是當環境中發生訂閱的事件時,指派要執行哪一個 ABX Actions。
Cloud Assembly 已經有許多預設定義的事件主題
透過事件紀錄檢視部署流程會觸發哪些事件主題,並從中選取特定事件來觸發 ABX Action
在本例,設定當「Compute post provision」事件發生,執行 PostConfig Actions
最後,發起部署請求並確認部署完成後是否有成功執行 ABX Action。在 Extensibility→Activity→Action Runs 可以所有 Action Runs 紀錄
點選 Action 進去可以看到每一個 Action Runs 的詳細資訊與 log 紀錄
直接登入到自動部署的 VM,確認是否有自動掛載  E 磁碟

參考連結

沒有留言:

張貼留言