VMware Cloud Foundation(VCF)で、SDDC Manager の Web UI が対応していない構成の VI Workload Domain を作成する場合には、REST API(つまり PowerVCF など)を利用する必要があります。そこで今回は、Ansible の uri モジュールを利用して、JSON ファイルの確認をしてみます。
今回の内容です。
今回の環境
Ansible は、Photon OS 5.0 で実行します。
$ cat /etc/photon-release VMware Photon OS 5.0 PHOTON_BUILD_NUMBER=dde71ec57
root ユーザーで、Ansible をインストールしておきます。
# tdnf install ansible -y
Ansible Playbook(YAML)の用意
VI Workload Domain の作成でパラメータを指定する DomainCreationSpec には、事前確認用のメソッドがあります。
- POST /v1/domains/validations
https://developer.broadcom.com/xapis/vmware-cloud-foundation-api/latest/v1/domains/validations/post/
そこで、このメソッドで JSON の内容を確認する Ansible Playbook を用意してみました。11行目(L11)で指定した JSON ファイルをチェックします。
おまけ機能として、L10 に URL を指定しておくと、そのファイルを L11 のファイル名でダウンロードします。(私のデモ用 JSON が Gist においてあるため)
validate_vcf-vi_DomainCreationSpec.yml
- L5~L7:SDDC Manager の接続情報
- L10:JSON ファイルを Web サーバーに配置してある場合の URL(物置的に)
- この URL から、L11 で指定したファイル名でローカルにダウンロードする。
- 不要ならコメントアウトしておく。
- L11:チェックする JSON ファイルのパス
JSON ファイルのチェック
ansible-playbook で、Playbook の YAML ファイルを実行します。
$ ansible-playbook validate_vcf-vi_DomainCreationSpec.yml
JSON に問題ない場合は、下記のように結果が表示されます。
TASK [Output the validation results FULL] ****************************************************************************** ok: [localhost] => { "msg": { "description": "Validating Domain Creation Spec", "executionStatus": "COMPLETED", "id": "73cbd5a9-536d-41b9-bac0-33f0ee2bb3c3", "resultStatus": "SUCCEEDED", "validationChecks": [ { "description": "DomainCreationSpecValidation", "resultStatus": "SUCCEEDED" } ] } } TASK [Output the validation results - resultStatus] ******************************************************************** ok: [localhost] => { "msg": "SUCCEEDED" }
実際に実行すると、下記のような感じになります。
JSON ファイル確認でのエラー例
いくつか、エラーの例を紹介しておきます。
VI Workload Domain を削除したあと、デコミッション → 再インストールをしていない ESXi ホストを指定している。
TASK [Output the validation results FULL] ****************************************************************************** ok: [localhost] => { "msg": { "description": "Validating Domain Creation Spec", "executionStatus": "COMPLETED", "id": "5d1cbb4d-2dc1-458b-a68c-7b24398a87e4", "resultStatus": "FAILED", "validationChecks": [ { "errorResponse": { "arguments": [ "vcf-w01-esxi-01.c.go-lab.jp" ], "errorCode": "DIRTY_HOST", "message": "Host vcf-w01-esxi-01.c.go-lab.jp is dirty" }, "resultStatus": "FAILED", "severity": "ERROR" }, { "errorResponse": { "arguments": [ "vcf-w01-esxi-02.c.go-lab.jp" ], "errorCode": "DIRTY_HOST", "message": "Host vcf-w01-esxi-02.c.go-lab.jp is dirty" }, "resultStatus": "FAILED", "severity": "ERROR" }, { "errorResponse": { "arguments": [ "vcf-w01-esxi-03.c.go-lab.jp" ], "errorCode": "DIRTY_HOST", "message": "Host vcf-w01-esxi-03.c.go-lab.jp is dirty" }, "resultStatus": "FAILED", "severity": "ERROR" } ] } }
JSON の hostSpecs id の ESXi が、SDDC Manager に登録されていない。
TASK [Output the validation results FULL] ****************************************************************************** ok: [localhost] => { "msg": { "arguments": [], "causes": [ { "type": "java.util.NoSuchElementException" } ], "errorCode": "ESXIS_NOT_FOUND", "message": "ESXi Host(s) Not Found.", "referenceToken": "9UPSET", "remediationMessage": "Verify that the commonsvcs service is running in the SDDC Manager appliance and that the SDDC Manager inventory API is accessible and running. Then, try again the operation." } }
JSON で指定している ESXi ホストの id が重複している。
TASK [Output the validation results FULL] ****************************************************************************** ok: [localhost] => { "msg": { "description": "Validating Domain Creation Spec", "executionStatus": "COMPLETED", "id": "4e185496-a9b5-4d00-86e4-d91fefbc3176", "resultStatus": "FAILED", "validationChecks": [ { "errorResponse": { "arguments": [ "[083aa712-706b-407e-98af-d1291a88c2d3]" ], "errorCode": "DUPLICATE_HOSTS_FOUND", "message": "More than one host provided with Id(s) [083aa712-706b-407e-98af-d1291a88c2d3]" }, "resultStatus": "FAILED", "severity": "ERROR" } ] } }
何かがおかしい。(たとえば JSON の構造が間違っていて、カンマが足りない/多い など)
TASK [Output the validation results FULL] ****************************************************************************** ok: [localhost] => { "msg": { "arguments": [], "errorCode": "VCF_RUNTIME_ERROR", "message": "Something went wrong. Please retry or contact the service provider and provide the reference token.", "referenceToken": "KF96GT" } }
以上、VCF の DomainCreationSpec を REST API で確認してみる工夫でした。