vm.gowatana.jp

NEOにほんごVMware(仮)

VCF の VI Workload Domain 作成用 JSON を REST API で確認してみる。

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 には、事前確認用のメソッドがあります。

 

そこで、このメソッドで 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 ファイルのパス

gist.github.com

 

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 で確認してみる工夫でした。