---
# System prepended metadata

title: 使用 CLI 部署 vCenter Server Appliance
tags: [vmware, cli, vcsa]

---

# 使用 CLI 部署 vCenter Server Appliance

###### tags: `vmware` `vcsa` `cli`

[toc]

大多數 vCenter Server Appliance(vCSA) 部署安裝都是使用 [GUI 方式](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-477E5C38-2AA8-4319-B2C6-41671570AD27.html)。使用 GUI 部署雖然輕鬆，但是要完成整個 vCSA 部署需要達成 **2 個階段**:
- **階段1 - OVA 部署**
- **階段2 - 應用裝置設定**

佈署過程也是需要根據精靈提示提供部署和設定資訊的，如果 vCSA 需要重新安裝或調整時，同樣的設定資訊，就需要**手動輸入**完成。既然如此，不如將這些**設定資訊**儲存作為**組態範本**，透過**讀取設定**進行**自動安裝**過程。

這樣一來，同樣的組態參數不會因為手殘輸入錯誤，另一方面也可作為組態備份使用。若要調整部份設定，直接修改組態檔來安裝，也可提昇建置效率。尤其是 LAB 環境需要部署多部 vCSA。

以上的需求目標正好以 **VMware 官方 CLI 安裝程式**可以達成，不用特別使用 OVFTool 部署 OVA，另外寫自動化腳本來完成設備組態。

:::info
取得進一步 vCSA 部署資訊，請參考 [[**部署 vCSA 必要條件**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-8F62E118-4805-4B0A-904C-C561C1A692E7.html)。 
:::

# CLI 佈署方式
**CLI 部署**方式包括 2 個部份：
- **佈署設定的 JSON 檔**: 部署 vCSA 所需的組態資訊。
- **執行 CLI 命令**: 提供自動部署及設定 vCSA 裝置的命令。

CLI 部署會**自動**依序執行 **階段1 - OVA 部署** 和 **階段2 - 應用裝置設定** ，與使用者**不需要進行互動**。

# 準備工作
## 作業系統需求
目前 VMware vCSA 安裝程式可以支援 **Windows** / **Mac** / **Linux**，選擇自己常用的作業系統即可，這裡我就選擇使用 **Linux(Fedora)** 囉。

相關支援系統需求可參考[[**連結**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-BA4FA18C-1049-42AA-A5CD-DE863565251B.html)。

## 下載安裝 ISO
使用有效帳戶登入 [**Customer Connect**](https://my.vmware.com/web/vmware/)，下載 vCSA 安裝程式 ISO 檔案。
> 7.0U3K 安裝 ISO　檔案: **`VMware-VCSA-all-7.0.3-21290409.iso`**

![](https://i.imgur.com/9K9mD6J.png)

下載完畢使用網頁提供 MD5SUM/SHA256SUM 工具驗證檔案完整性。<font color=red><< **務必確認**</font>

![](https://i.imgur.com/aWaEGfV.png)

## 掛載安裝程式
目前 GNOME Files 可以直接選取 ISO 檔後使用 Disk IMage Mounter 直接掛載使用。

<img width=540 src='https://i.imgur.com/9wTWCAs.png'><br>

也可使用以下命令掛載。

```bash
$ sudo mkdir -p /mnt/vcsa
$ sudo mount -o loop VMware-VCSA-all-7.0.3-21290409.iso /mnt/vcsa
```

### 讀我檔案
確認掛載正確後，在其根目錄中開啟讀我檔案(README)，目前有中文版本(readme-zh-TW.txt)。

<img width=480 src='https://i.imgur.com/QAYJcwW.png'><br><br>

檢閱其中 **vCSA ISO 檔案和目錄**的相關資訊。
| 目錄 | 說明 |
| --- | --- |
| **/vcsa** | **vCenter Server Appliance 資料檔案** |
| /vcsa-ui-installer | vCenter Server Appliance GUI 安裝程式 |
| **/vcsa-cli-installer** | **vCenter Server Appliance CLI 安裝程式** |
| /migration-assistant | vCenter Server Migration Assistant |

### 檔案架構
- 系統平台類型分別在目錄中以 **win32** / **mac** / **lin64** 資料夾作為區別。
- **vcsa** 目錄，主要包含 **vCSA OVA 檔案** 和 **OVFTool 工具**。

```bash
vcsa
├── ovftool
│   ├── lin64
│   ├── mac
│   └── win32
├── version.txt
└── VMware-vCenter-Server-Appliance-7.0.3.01300-21290409_OVF10.ova
```

- **vcsa-cli-installer** 目錄
  - 依據支援的作業平台提供 CLI 安裝程式。 
  - CLI 安裝程式檔案名稱為 **`vcsa-deploy`**。
    - Linux, 64-bit: `lin64/vcsa-deploy`
    - Mac OS X: `mac/vcsa-deploy`
    - Windows: `win32/vcsa-deploy.exe`
  - 部署(Install) 使用的 **JSON 組態檔範本** 存放於 **templates/install** 目錄。

```bash
vcsa-cli-installer
├── lin64
│   └── vcsa-deploy
├── mac
├── README.txt
├── templates
│   ├── install
│   │   ├── embedded_vCSA_on_ESXi.json
│   │   ├── embedded_vCSA_on_VC.json
│   │   ├── embedded_vCSA_replication_on_ESXi.json
│   │   ├── embedded_vCSA_replication_on_VC.json
│   │   └── vCSA_with_cluster_on_ESXi.json
│   ├── migrate
│   └── upgrade
├── template_schemas
│   ├── install
│   ├── migration
│   └── upgrade
└── win32
```

## JSON 組態範本
### 範本類型
在 **vcsa-cli-installer/templates/install** 目錄中，存放不同部署 vCSA 類型的 JSON 組態範本檔案。vCSA CLI 部署執行程式將透過 JSON 組態檔取得配置及部署參數。組態範本僅包含常用預設參數，可透過以下命令查看完整範本選項或參考 [[部署組態參數]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-457EAE1F-B08A-4E64-8506-8A3FA84A0446.html#GUID-457EAE1F-B08A-4E64-8506-8A3FA84A0446)。

```bash
$ lin64/vcsa-deploy install --template-help
```

其中 JSON 組態範本檔名稱規則:
- **`embedded_VCSA_on_*.json`**: 部署 Platform Services Controller (PSC) 和 VCSA 的整合系統。
  > 目前 vCSA 都是屬於此種類型。 
- **`VCSA_on_*.json`**: 僅部署 vCSA。
- **`*_on_ESXi.json`**: 部署 vCSA 至指定的 ESXi 主機上。
- **`*_on_VC.json`**: 部署 vCSA 至 vCenter 管理的 ESXi 主機上。

### 部署範本
包含在 vCenter Server 安裝程式中的**部署 JSON 範本**
| 範本 | 說明 |
| --- | --- |
| **embedded_vCSA_on_ESXi.json** | 包含在 ESXi 主機上部署 vCenter Server Appliance 所需的最低組態參數。 |
| **vCSA_with_cluster_on_ESXi.json** | 包含在 ESXi 主機上部署 vCenter Server Appliance 以及單一節點 vSAN 和 vLCM 管理叢集所需的最低組態參數。 |
| **embedded_vCSA_on_VC.json** | 包含在 vCenter Server 執行個體上部署 vCenter Server Appliance 所需的最低組態參數。 |
| **embedded_vCSA_replication_on_ESXi.json** | 包含在 ESXi 主機上部署 vCenter Server Appliance 做為另一個內嵌式 vCenter Server 之複寫合作夥伴所需的最低組態參數。 |
| **embedded_vCSA_replication_on_VC.json** | 包含在 vCenter Server 執行個體上將 vCenter Server Appliance 複寫合作夥伴部署至另一個 vCenter Server Appliance 所需的最低組態參數。 |

:::warning
**執行 vCSA CLI 安裝程式前，必須針對部署類型準備帶有組態參數值的 JSON 檔**。
:::

### 編輯 JSON 組態檔
為確保 JSON 組態檔的語法正確，請使用支援 JSON 語法編輯器進行 JSON 組態檔內容編修。
:::warning
**注意**
- JSON 組態檔內容語法必須正確，否則部署過程會失敗。
- JSON 組態檔存放路徑名稱僅能包含 ASCII 字元。
- 組態參數可根據部署需求增減所需參數值。
- 若設定值包含反斜線（\）或引號（"）字元，必須在字元前加上反斜線（\）可逸出字元。
- 布林值（Boolean）僅包含小寫字元。例: **`"ssh_enable":false`**
- 以 UTF-8 格式儲存檔案。
:::

#### embedded_vCSA_on_ESXi.json 組態範本
![](https://i.imgur.com/nw9ynYn.png)

- **`__version`**: 標示搭配部署 vCenter 的組態檔版本。
- **`__comments`**: 組態檔參數備註說明。
- **`new_vcsa`**: 描述所部署的 vCSA 相關組態。
  - **`esxi`**: 在 ESXi 主機直接部署 vCSA 使用。
    - 此範例為不具 vSAN 和 vLCM 管理叢集的部署。  
  - **`appliance`**: 描述 vCSA 應用裝置的組態參數。
    - **`deployment_option`**: 指定 vCSA 應用裝置的部署規模。將會根據選擇部署規模配置對應應用裝置的運算資源。
    - **`name`**: 描述 vCSA 應用裝置的**虛擬機器名稱**。
  - **`network`**: 描述 vCSA 應用裝置網路設定的組態參數。
    - **`ip_family`**: 提供 `ipv4` 和 `ipv6`。
    - **`mode`**: IP 指派方式，提供 `static` 和 `dhcp`。
    - **`dns_servers`**: 描述一個或多個 DNS 伺服器的 IP 位址。該選項在 **`mode=static`** 時可用。
      - 設定多個 DNS 伺服器可採用以下格式
        - ["192.168.1.1", "192.168.1.2"] (**建議**)
        - "192.168.1.1, 192.168.1.2"
    - **`system_name`**: 主要 vCSA 應用裝置的網路身份識別。可以是 **IP** 或 **FQDN(建議)**。
      - <font color=red>部署後無法變更此參數值</font>。 
  - **`os`**: 描述 vCSA 應用裝置作業系統的組態參數。
    - **`password`**: vCSA 應用裝置作業系統的 **`root`** 使用者密碼。
    - **`ntp_servers`**: 一個或多個 NTP 伺服器的主機名稱或 IP 位址。
      - 設定多個 NTP 伺服器格式，與上述設定多個 DNS 伺服器相同。
    - **`ssh_enable`**: 設定 `true`，以便使用 SSH 連線登入應用裝置。 
  - **`sso`**: 描述 vCSA 應用裝置 vCenter Single Sign-On 設定的組態參數。
    - **`password`**: vCenter Single Sign-On 管理員使用者 **`administrator@domain_name`** 的密碼。
    - **`domain_name`**: vCenter Single Sign-On 網域名稱。預設為 `vsphere.local`。
- **`ceip`**: 描述加入 VMware 客戶經驗改進計畫的組態參數。
  - **`ceip_enabled`**: 設定是否要入客戶經驗改進計畫。

以下是根據組態範本編寫出的 JSON 組態檔。
```json=
{
      "__version": "2.13.0",
      "__comments": "Deploy a vCenter Server Appliance on an ESXi host.",
      "new_vcsa": {
          "esxi": {
              "hostname": "192.168.1.1",
              "username": "root",
              "password": "VMware1!",
              "deployment_network": "VM Network",
              "datastore": "shared_datastore"
          },
          "appliance": {
              "thin_disk_mode": true,
              "deployment_option": "small",
              "name": "vcsa7"
          },
          "network": {
              "ip_family": "ipv4",
              "mode": "static",
              "ip": "192.168.1.100",
              "dns_servers": ["192.168.1.10"],
              "prefix": "24",
              "gateway": "192.168.1.254",
              "system_name": "vcsa7.khdc.lab"
          },
          "os": {
              "password": "VMware1!",
              "ntp_servers": ["216.239.35.0,216.239.35.4"],
              "ssh_enable": true
          },
          "sso": {
              "password": "VMware1!",
              "domain_name": "vsphere.sso",
              "first_instance": true
          }
      },
      "ceip": {
          "description": {},
          "settings": {
              "ceip_enabled": true
          }
      }
}
```

:::info
詳細參數說明，請參考原廠文件 [[**部署組態參數**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-457EAE1F-B08A-4E64-8506-8A3FA84A0446.html)。
:::

### 組態產生器
既然大多數 vCSA 的配置環境都差不多，每次都要編輯 JSON 檔又要擔心語法格式問題，還不如將這些**參數值**放在**設定文件檔**，之後編修參數只要修改這裡的參數**值**就好，寫個簡單的程式透過變數替換成修改的參數值。

#### vcsa.conf
```bash=
## create json for vcsa 7 installation
esxi_hostname="192.168.1.1"
esxi_username="root"
esxi_password="VMware1!"
esxi_deployment_network="VM Network"
esxi_datastore="shared_datastore"
esxi_port=""
appliance_thin_disk_mode="true"
## tiny, tiny-lstorage, tiny-xlstorage
## small, small-lstorage, small-xlstorage
## medium, medium-lstorage, medium-xlstorage
## large, large-lstorage, large-xlstorage
## xlarage, xlarge-lstorage, xlarge-xlstorage
appliance_deployment_option="tiny"
appliance_name="vcsa7"
network_ip_family="ipv4"
network_mode="static"
network_ip="192.168.1.100"
network_dns_servers="192.168.1.10"
network_prefix="24"
network_gateway="192.168.1.254"
network_system_name="vcsa7.khdc.lab"
os_password="VMware1!"
os_ntp_servers="192.168.1.10"
os_ssh_enable="true"
os_time_tools_sync="true"
sso_password="VMware1!"
sso_domain_name="vsphere.sso"
sso_site_name="KHLAB"
sso_first_instance="ture"
ceip_ceip_enabled="true"
```

組態產生器的程式其實很簡單！

主要先確認 JSON 語法格式沒有問題，再把參數值用變數替換。接著透過讀入設定文件檔 **`vcsa.conf`**，取得相關變數的參數值帶入，將轉換結果儲存成 JSON 組態檔 **`vcsa.json`** 就大功告成了！

#### configMaker.sh
```bash=
#!/bin/bash

wrjsonconf7_esxi () {
cat << EOF > ${vcsaJsonFile}
{
      "__version": "2.13.0",
      "__comments": "Deploy a vCenter Server Appliance on an ESXi host.",
      "new_vcsa": {
          "esxi": {
              "hostname": "${esxi_hostname}",
              "username": "${esxi_username}",
              "password": "${esxi_password}",
              "deployment_network": "${esxi_deployment_network}",
              "datastore": "${esxi_datastore}"
          },
          "appliance": {
              "thin_disk_mode": ${appliance_thin_disk_mode},
              "deployment_option": "${appliance_deployment_option}",
              "name": "${appliance_name}"
          },
          "network": {
              "ip_family": "${network_ip_family}",
              "mode": "${network_mode}",
              "system_name": "${network_system_name}",
              "ip": "${network_ip}",
              "prefix": "${network_prefix}",
              "gateway": "${network_gateway}",
              "dns_servers": "${network_dns_servers}"
          },
          "os": {
              "password": "${os_password}",
              "ntp_servers": "${os_ntp_servers}",
              "ssh_enable": ${os_ssh_enable}
          },
          "sso": {
              "password": "${sso_password}",
              "domain_name": "${sso_domain_name}",
              "first_instance": ${sso_first_instance}
          }
      },
      "ceip": {
          "description": {},
          "settings": {
              "ceip_enabled": ${ceip_ceip_enabled}
          }
      }
}
EOF
}

if [[ $# -eq 1 ]]; then
    configFile=$1
    source ${configFile}
    vcsaJsonFile="$(basename ${configFile} .conf).json"

    wrjsonconf7_esxi

    echo -e ">> 產生vcsa7 JSON組態檔: ${vcsaJsonFile}\n"
    cat ${vcsaJsonFile}
    echo ""
else
    echo -e " <!> 請提供vCenter 7.0組態檔 <!>\n"
    exit
fi
```

**執行結果**

<img width=480 src='https://i.imgur.com/eFX6Vat.png'><br>

這樣就會產生跟先前手動編輯的 JSON 組態檔內容一樣的檔案。之後若是有需要在不同環境部署 vCSA，也只要先修改 conf 設定檔，不用擔心手動編修 JSON 產生語法格式問題。

:::warning
若是要部署不同版本 vCSA 應用裝置，JSON 組態檔或許有些許不同，請根據安裝 ISO 提供的組態檔範本，再次編修 **`configMaker.sh`** 中的組態轉換函式 `wrjsonconf7_esxi ()`。
:::

# 進行部署
完成部署的 JSON 組態檔後，接著要透過 **`vcsa-deploy`** 的 CLI 部署命令來完成 vCSA 應用裝置的自動部署及設定。
## vcsa-deploy 部署命令
### 取得命令幫助

```bash
vcsa-deploy -h|--help
```

![](https://i.imgur.com/tBYqRj3.png)

:::info
vcsa-deploy 執行完成後，命令**結束代碼(exit code)** 說明。  
0: 已成功執行命令  
1: 執行階段錯誤  
2: 驗證錯誤  
3: 範本錯誤
:::

### 取得支援部署規模
```bash
vcsa-deploy --supported-deployment-sizes
```

![](https://i.imgur.com/wSfNLGV.png)

### 取得安裝部署幫助
```bash
vcsa-deploy install --help
```

![](https://i.imgur.com/W3rYBa8.png)


### 取得 JSON 組態檔參數說明
```bash
vcsa-deploy install --template-help
```

![](https://i.imgur.com/0FgtNSN.png)

#### 選用參數(Optional Arguments)
使用 `optional_arguments` 來輸入選用的參數，並以空格作為區隔，以便部署命令執行選用參數。  
例: 設定安裝程式的記錄檔和其他輸出檔案的存放位置。

```bash!
vcsa-deploy install --accept-eula --acknowledge-ceip \
--log-dir=path_to_the_location path_to_the_json_file
```

- **`--accepr-eula`**: 同意使用者授權。  
- **`--acknowledge-ceip`**: 當 JSON 組態檔配置 `ceip.enabled=true` 時需要。  
- **`--skip-ovftool-verification`**: 對 JSON 組態檔的組態參數執行驗證，並進行部署。但不對 OVF 工具參數執行驗證。  
- **`--no-esx-ssl-verify`**: 略過 ESXi 連線的 SSL 驗證。 
- **`--no-ssl-certificate-verification`**: 略過所有伺服器連線的安全性憑證驗證。  
- **`--verify-template-only`**: 對 JSON 組態檔的參數執行範本驗證，並不進行部署。 
- **`--precheck-only`**: 僅執行範本驗證與 OVF 工具參數驗證，並不進行部署。 

:::info
詳細 CLI 部署命令的用法，請參考原廠文件 [[**CLI 部署命令語法**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-15F4F48B-44D9-4E3C-B9CF-5FFC71515F71.html)。
:::

## 部署程序
### 再次確認
- [X] 根據部署環境需求完成 **JSON 組態檔**。
- [X] 確認**安裝 ISO 檔掛載**正常。
- [X] 並務必確認部署環境中能正常提供 **DNS 和 NTP 服務**。

:::danger
**注意**
- 執行 `vcsa-deploy` CLI 部署命令的作業系統設備，也務必要確認能正確解析 vCSA 應用裝置及部署環境的 FQDN。
- 虛擬環境部署的成功要素：**DNS 和 NTP 服務**。
:::

### 執行任務
1. 切換至作業系統的 **`vcsa-cli-installer`** 子目錄。
2. （選擇性）先不部署應用裝置，只是執行部署前的檢查，以確認部署範本正確性。
   - 針對 JSON 組態檔進行基本檢驗。
   ```bash
   vcsa-deploy install --accept-eula --verify-template-only --log-dir <log_dir> <path_to_the_json_file>
   ```
   - 對於部署進行更深入的驗證，包含檢查用於 vCSA 配置的 IP 和名稱、SSO 域名和 DNS 服務。
     - 包含 JSON 組態檔進行基本驗證。
     - 確認 DNS 配置正確，且能正確解析應用裝置的 FQDN。
   ```bash
   vcsa-deploy install --accept-eula --no-ssl-certificate-verification --precheck-only --log-dir <log_dir> <path_to_the_json_file>
   ```

   若有發生錯誤，請根據顯示訊息進行組態參數及部署環境調整。以下訊息似乎是部署目標的 ESXi 主機所給定的組態參數有問題！

   ![](https://i.imgur.com/xf7Hq2G.png)

   相關的訊息紀錄都會儲存至指定目錄。

   <img width=360 src='https://i.imgur.com/5SaJw0v.png'><br>

3. 執行部署命令。  
如果上述驗證都沒有發生問題，相信一切應該都可以順利進行，就可以啟動部署發射！:coffee:
   - 完整的部署命令執行時，也會包含先前 JSON 組態檔的基本驗證和部署驗證。
   - 只要先前驗證沒有問題，部署階段就會按照給予的組態參數自動化完成。
   ```bash!
   $ bash ./vcsa-deploy install --accept-eula --acknowledge-ceip --no-ssl-certificate-verification --log-dir <log_dir> <path_to_the_json_file>
   ```
  
表示 vCSA 部署程式已經開始第一階段的應用裝置部署。

![](https://i.imgur.com/XrhJaZA.png)

完成第一階段應用裝置安裝，接著會開始進行第二階段的 vCSA 設定及相關套件安裝，請耐心等候。
> VCSA Deployment is still runing

![](https://i.imgur.com/LWrDW6m.png)

當出現 vCSA 登入資訊時，表示部署程式即將告一段落！

![](https://i.imgur.com/jkPUqvI.png)

恭喜，再次完成 vCSA 部署作業。到此為止，已經可以開始使用瀏覽器連線 vCSA 進行後續環境管理。

### 監控及除錯
若在部署時需要即時監控部署狀態，或遇到問題需要故障排除，可在指定的日誌目錄下透過檢視以下幾個紀錄檔達成。
- vcsa-cli-installer.log: 提供部署程式命令執行紀錄資訊。
- workflow.log: 提供部署整體工作流程紀錄資訊。
- taskflow.log: 提供部署時任務執行內容紀錄資訊。
- ovftool.log: 提供 OVF 工具執行內容紀錄資訊。
  - ovftool_config.cfg: 部署時 OVF 工具產生的配置暫存檔。

研究 **`vcsa-cli-installer.log`** 日誌檔，也是可以學習到 OVF 工具命令及參數的使用方式！

![](https://i.imgur.com/8k6MQGs.png)


# 結論
從以上的測試，應可發現 **vCSA CLI 安裝程序是部署 vCenter 應用裝置的一大利器**。只要有了一份撰寫成功的的 JSON 組態檔，管理者就可以使用命令 **`vcsa-deploy`** 輕鬆地部署 vCenter 應用裝置，而且所使用的 JSON 組態檔也可作為該部署設定的配置備份歸檔。

雖然 vCenter 在生產應用環境下，系統管理者大多不太需要時常變動及部署。但若是技術專家或是測試環境建置，或許使用此方式可以帶來一點**省時和省心**的優點，即便是目前最新版本 vSphere 8，套用現在的 JSON 組態檔也是可以輕鬆達成任務的。

其實以整體部署流程思考，也只要撰寫自動掛載 ISO 安裝檔並自動套用 JSON 組態檔的腳本程式，也就能自動部署一台或多台 vCSA 應用裝置了！

# 參考
[vCenter Server Appliance 的 CLI 部署](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-C17AFF44-22DE-41F4-B85D-19B7A995E144.html)

[](https://stephanmctighe.com/2021/01/27/deploying-vcenter-7-0-via-the-cli/)
[](https://www.vgemba.net/vmware/VCSA-CLI-Install/)
[](https://vmwaretv.vmware.com/embed/secure/iframe/entryId/1_dmbvxgkj/uiConfId/50138843/)

