1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ansible でオンプレミス IBM Power に複数台の仮想マシンをPowerVC 経由でデプロイするコード・サンプル

Last updated at Posted at 2025-02-23

はじめに

PowerVC経由での複数台の仮想マシン・デプロイを行う Ansible コードおよび実行例をご紹介します。

以前の記事の発展形です。

PowerVC については以下をご参考ください


オンプレミス環境

ハードウェア:IBM Power S1014
Storage: FS5015
SAN switch(IBM_8969_F24) : Fabric OS: v9.0.1c
HMC(7063-CR2): V10R3.1050.0
VIOS: 3.1
PowerVC 2.3.0 (IBM Power上のLPAR, OS: RHEL 9.4 ppc64le)
Ansible PowerVC同梱のAnsibleを使用) 2.9.27


Ansible実装方針

・ロールベース設計を採用し、powervc_authとdeploy_vmの2つのロールで構成しています。

・Jinja2テンプレートエンジンを活用して、NIC構成(ネットワークの数)の差異を複数のテンプレートを準備して選択しています。


使用する Ansible コード

PowerVC API と Ansibleの書き方を勉強しながら当方で作成したコードです。
必要でしたら自己責任の上でご自由に使用ください。

<Ansible Home Directory>
.
|-- ansible.cfg     #<= Ansible構成ファイル
|
|-- inventory         #<= インベントリー
|   `-- powervc.yml
|
|-- group_vars       #<= 変数ディレクトリ
|   |
|   |-- all
|   |   `-- default_vars.yml   #<= 全ての実行で読み込まれる変数
|   |
|   |-- deploy_vm.yml       #<= 仮想マシン・デプロイ用の変数    
|   `-- powervc_auth.yml     #<= PowerVC認証用の変数
|
|-- powervc_auth.yml        #<= PowerVC認証ロール呼び出し playbook
|
|-- deploy_vm.yml                #<= 仮想マシン・デプロイ・ロール呼び出し playbook
|
`-- roles
    |-- powervc_auth             #<= PowerVC認証ロール
    |   |-- tasks
    |   |   `-- main.yml      #<= main処理
    |   |            
    |    `-- templates
    |        `-- body_auth_token.json.j2  #<= PowerVC認証のテンプレート
    |   
    `-- deploy_vm          #<= 仮想マシン・デプロイロール
        |-- tasks
        |   |-- main.yml          #<= main処理、ループ実行、子playbook呼び出し
        |   `-- deploy_vms.yml    #<= 仮想マシン・デプロイロール実行
        |       
        `-- templates
            |-- body_deploy_vm1.json.j2   #<=  NIC1つのデプロイ用テンプレート
            |-- body_deploy_vm2.json.j2   #<=  NIC2つのデプロイ用テンプレート
            |-- body_deploy_vm3.json.j2   #<=  NIC3つのデプロイ用テンプレート
            `-- body_deploy_vm4.json.j2   #<=  NIC4つのデプロイ用テンプレート

ディレクトリは以下の記事の構成を採用しています。



ansible 構成ファイル

インベントリー・ディレクトリの指定やログ表示を指定しています。

ansible.cfg
ansible.cfg
[defaults]
inventory = ./inventory/
deprecation_warnings=False
host_key_checking = False
verbosity = 1
#stdout_callback = debug
callback_whitelist = profile_tasks
interpreter_python='/bin/env LANG=C python3'
# skip のログを非表示にする
display_skipped_hosts = no
# ok のログを非表示にする
#display_ok_hosts = no

[privilege_escalation]
become = True
become_method = sudo
become_user = root
becom_ask_pass = False

[ssh_connection]
ssh_args ='-o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

インベントリー・ファイル

インベントリーの設定。"powervc" として、PowerVCサーバーを設定しています。

./inventory/powervc.yml
inventory/powervc.yml
[powervc]
powervc230-test ansible_user=root

↑は /etc/hosts で名前解決できている前提です。


変数ファイル

・デフォルトで読み込まれる変数

./group_vars/all/default_vars.yml
group_vars/all/default_vars.yml

## default variables

ANSIBLE_HOME: /work/ansible/
TENANT_ID: "xxxxxxxxxxxxxxxxxxx"
SSH_KEY_PRI: /root/.ssh/id_rsa


・PowerVC 認証用変数

変数ファイルに直接パスワードを入力していますが、実際は Ansible vault で暗号化しています。(今回は暗号化方法は記載省略)

./group_vars/powervc_auth.yml
---
POWERVC_IP: xxx.xx.xxx.xx
POWERVC_USER: root
POWERVC_PASSWORD: xxxxxxxx

・仮想マシン・デプロイ用の変数 (2台分を指定)

./group_vars/deploy_vm.yml
group_vars/deploy_vm.yml
deploy_list:
  - SERVER_INDEX: 1
    VM_NAME: "testvm0222_u1"    #<= 仮想マシン名
    TARGET_HOST: "910541B_7xxxx1"    #<= デプロイ・ターゲットの筐体
    IMAGE_ID: "xxxx-322d-xxxx-xxxx-38xxxxxxxe6"        #<= イメージ ID
    IMAGE_DISK_SIZE: 100      #<= イメージディスク・サイズ
    FLAVOR_ID: "xxxxxxx-6081-xxxx-xxxxx-988xxxxxxba"       #<= 計算テンプレート ID
    STORAGE_TEMPLATE_ID: "xxxxxxx-xxxxx-457a-9e11-9exxxxxa7af"   #<= ストレージ・テンプレート ID
    SCG_ID: "c0xxxx25-xxxx-4463-xxxx-9xxxxx63bae9"  #<= ストレージ・接続グループ ID
    DEDICATED_PROC: "false"      #<= Proc を占有モードにするかどうか
    POWER_COMPATIBILITY: "POWER10"   #<= Powerモード
    ABAILABILITY_PRIORITY: 127     #<= Availability priority
    SRR_CAPABILITY: "true"           #<= Simplified Remote Restart
    DISABLE_MIGRATION: 0          #<= LPARの筐体移動を許可するかどうか
    SSH_KEY_NAME: "pvc_sshkey"     #<= 仮想マシンに設定する ssh 鍵名
    NETWORK_ID_1: "ccxxxx9-3b80-xxx-bcf6-eaxda5"xxx    #<= ネットワーク ID
    NETWORK_IP_ADDRESS_1: "172.16.110.92"
    NETWORK_ID_2:
    NETWORK_IP_ADDRESS_2:
    NETWORK_ID_3:
    NETWORK_IP_ADDRESS_3:
    NETWORK_ID_4:
    NETWORK_IP_ADDRESS_4:
  - SERVER_INDEX: 2
    VM_NAME: "testvm0222_u2"
    TARGET_HOST: "910541B_7xxxx1"
    IMAGE_ID: "xxxx-322d-xxxx-xxxx-38xxxxxxxe6"
    IMAGE_DISK_SIZE: 100
    FLAVOR_ID: "xxxxxxx-6081-xxxx-xxxxx-988xxxxxxba"
    STORAGE_TEMPLATE_ID: "xxxxxxx-xxxxx-457a-9e11-9exxxxxa7af"
    SCG_ID: "c0xxxx25-xxxx-4463-xxxx-9xxxxx63bae9"
    DEDICATED_PROC: "false"
    POWER_COMPATIBILITY: "POWER10"
    ABAILABILITY_PRIORITY: 127
    SRR_CAPABILITY: "true"
    DISABLE_MIGRATION: 0
    SSH_KEY_NAME: "pvc_sshkey"
    NETWORK_ID_1: "ccxxxx9-3b80-xxx-bcf6-eaxda5"xxx
    NETWORK_IP_ADDRESS_1: "172.16.110.93"
    NETWORK_ID_2: "ccxxxx9-3b80-xxx-bcf6-eaxda5"xxx
    NETWORK_IP_ADDRESS_2: "172.16.110.94"
    NETWORK_ID_3:
    NETWORK_IP_ADDRESS_3:
    NETWORK_ID_4:
    NETWORK_IP_ADDRESS_4:

実行するplaybook (呼び出し元)

Ansible home directory 直下に配置した、ロールを呼び出しする playbookの設定です。

・PowerVC認証ロールを呼び出す playbook

powervc_auth.yml
powervc_auth.yml
---
- name:  powervc_auth
  hosts: "{{ target_hosts | default(dummy) }}"
  gather_facts: yes

  roles:
    - role: powervc_auth
      tags:
        -  powervc_auth_tag


・PowerVCによる仮想マシン・デプロイを実行する playbook

deploy_vm.yml
deploy_vm.yml
---
- name:  create_vms
  hosts: "{{ target_hosts | default(dummy) }}"
  gather_facts: no

  roles:
   - role: powervc_auth
     tags:
       -  powervc_auth_tag

   - role: deploy_vm
     tags:
       -  deploy_vm_tag

role1. PowerVC 認証

PowerVC 認証で token を発行の API を実行する playbookです。

main.yml はロールのメイン処理です。

./roles/powervc_auth/tasks/main.yml
roles/powervc_auth/tasks/main.yml
---

# PowerVC authentication
- name: Get auth token
  ansible.builtin.uri:
    url: "https://{{ POWERVC_IP }}:5000/v3/auth/tokens"
    method: POST
    headers:
      Accept: application/json
    body: "{{ lookup('template', 'body_auth_token.json.j2') }}"
    body_format: json
    return_content: yes
    status_code: 201
    validate_certs: false
  register: auth_token

# set OS_TOKEN
- name: Set Variable OS_TOKEN
  set_fact:
    OS_TOKEN: "{{ auth_token['x_subject_token'] }}"

- name: show os_token
  ansible.builtin.debug:
    var: OS_TOKEN

main.yml に呼び出されるテンプレート・ファイル。ユーザー、パスワードを変数にしています。

./roles/powervc_auth/templates/body_auth_token.json.j2
roles/powervc_auth/templates/body_auth_token.json.j2
{
	"auth": {
		"scope": {
			"project": {
				"domain": {
					"name": "Default"
				},
				"name": "ibm-default"
			}
		},
		"identity": {
			"password": {
				"user": {
					"domain": {
						"name": "Default"
					},
					"password": "{{ POWERVC_PASSWORD }}",
					"name": "{{ POWERVC_USER }}"
				}
			},
			"methods": [
				"password"
			]
		}
	}
}

role2. PowerVC 仮想マシン・デプロイ

PowerVC 仮想マシン・デプロイの API を実行する playbookです。

API のオプションはPowerVCマニュアル、OpenStack マニュアルを参照します。


main.yml はロールのメイン処理です。変数によるループを実行し、変数ファイルに複数台分記載がある形式に対応しています。

./roles/deploy_vm/tasks/main.yml
roles/deploy_vm/tasks/main.yml

---
# create vms
- include_tasks: deploy_vms.yml
  loop: "{{ deploy_list }}"
  loop_control:
    loop_var: server

# 300 sleep  ( for cloud-init)
- name: "A little Pause after Deployment 300 seconds"
  pause:
     seconds: 300

main.yml に呼び出される仮想マシン・デプロイ処理です。main.ymlでループの記載を見えやすくするために、別のplaybookとしています。

./roles/deploy_vm/tasks/deploy_vms.yml
roles/deploy_vm/tasks/deploy_vms.yml
---

# set TEMPLATE_DIR variable
- name: Set fact dir name
  set_fact:
     TEMPLATE_DIR: "{{ ANSIBLE_HOME }}roles/deploy_vm/templates"

# set deploy template
- name: Select deploy template 4
  shell: |
         cp -p {{ TEMPLATE_DIR }}/body_deploy_vm4.json.j2 {{ TEMPLATE_DIR }}/body_deploy_vm.json.j2
         echo "Set 4 networks template."
  when: server.NETWORK_ID_4 is not none and server.NETWORK_ID_5 is none

- name: Select deploy template 3
  shell: |
         cp -p {{ TEMPLATE_DIR }}/body_deploy_vm3.json.j2 {{ TEMPLATE_DIR }}/body_deploy_vm.json.j2
         echo "Set 3 networks template."
  when: server.NETWORK_ID_3 is not none and server.NETWORK_ID_4 is none

- name: Select deploy template 2
  shell: |
         cp -p {{ TEMPLATE_DIR }}/body_deploy_vm2.json.j2 {{ TEMPLATE_DIR }}/body_deploy_vm.json.j2
         echo "Set 2 networks template."
  when: server.NETWORK_ID_2 is not none and server.NETWORK_ID_3 is none

- name: Select deploy template 1
  shell: |
         cp -p {{ TEMPLATE_DIR }}/body_deploy_vm1.json.j2 {{ TEMPLATE_DIR }}/body_deploy_vm.json.j2
         echo "Set 1 network template."
  when: server.NETWORK_ID_1 is not none and server.NETWORK_ID_2 is none

# VM create
- name: Send Request for Server Deployment
  ansible.builtin.uri:
    url: 'https://{{ POWERVC_IP }}:8774/v2.1/{{ TENANT_ID }}/servers'
    method: POST
    headers:
       X-Auth-Token: "{{ OS_TOKEN }}"
       Accept: application/json
    body_format: json
    body: "{{ lookup('template', 'body_deploy_vm.json.j2' ) }}"
    return_content: yes
    status_code: 202
    validate_certs: no
    timeout: 300

# create inventory
- name: create static inventory
  shell: |
    mkdir -p "{{ ANSIBLE_HOME }}inventory/deployed_vm/"
    echo "[ {{ server.VM_NAME }} ]" > {{ ANSIBLE_HOME }}inventory/deployed_vm/inventory_{{ server.VM_NAME }}.yml
    echo "{{ server.NETWORK_IP_ADDRESS_1 }} ansible_user=root ansible_ssh_private_key_file={{ SSH_KEY_PRI }} ansible_python_interpreter=/usr/bin/python3"  >> {{ ANSIBLE_HOME }}inventory/deployed_vm/inventory_{{ server.VM_NAME }}.yml
    cat "{{ ANSIBLE_HOME }}/inventory/deployed_vm/inventory_{{ server.VM_NAME }}.yml"
  register: shell_output

# check inventory
- debug:
    var: shell_output.stdout_lines


# sleep 60 seconds
- name: "A little Pause while Deployment 60 seconds"
  pause:
    seconds: 60

NIC の数の違いでAPI処理に呼び出すテンプレート・ファイルを分けています。

body_deploy_vm1.json.j2 はNICが1つの場合のテンプレートです。

./roles/deploy_vm/templates/body_deploy_vm1.json.j2
roles/deploy_vm/templates/body_deploy_vm1.json.j2
{
   "server": {
      "name": "{{ server.VM_NAME }}",
      "max_count": 1,
      "imageRef": "{{ server.IMAGE_ID }}",
      "block_device_mapping_v2": [
         {
            "boot_index": "0",
            "uuid": "{{ server.STORAGE_TEMPLATE_ID }}",
            "source_type": "image",
            "destination_type": "volume"
         }
      ],
      "config_drive": true,
      "key_name": "{{ server.SSH_KEY_NAME }}",
      "flavorRef": "{{ server.FLAVOR_ID }}",
      "networks": [
         {
            "uuid": "{{ server.NETWORK_ID_1 }}",
            "fixed_ip": "{{ server.NETWORK_IP_ADDRESS_1 }}"
         }
      ]
   },
    "OS-SCH-HNT:scheduler_hints": {
        "same_host": "{{ server.TARGET_HOST }}"
    }
}

body_deploy_vm2.json.j2 はNICが2つの場合のテンプレートです。

./roles/deploy_vm/templates/body_deploy_vm2.json.j2
roles/deploy_vm/templates/body_deploy_vm2.json.j2
{
   "server": {
      "name": "{{ server.VM_NAME }}",
      "max_count": 1,
      "imageRef": "{{ server.IMAGE_ID }}",
      "block_device_mapping_v2": [
         {
            "boot_index": "0",
            "uuid": "{{ server.STORAGE_TEMPLATE_ID }}",
            "source_type": "image",
            "destination_type": "volume"
         }
      ],
      "config_drive": true,
      "key_name": "{{ server.SSH_KEY_NAME }}",
      "flavorRef": "{{ server.FLAVOR_ID }}",
      "networks": [
      {% for network_num in range(1, 3) %}
      {
        "uuid": "{{ server['NETWORK_ID_' ~ network_num] }}",
        "fixed_ip": "{{ server['NETWORK_IP_ADDRESS_' ~ network_num] }}"
      }
      {% if not loop.last %}
      ,
      {% endif %}
      {% endfor %}
      ]
   },
    "OS-SCH-HNT:scheduler_hints": {
        "same_host": "{{ server.TARGET_HOST }}"
    }
}

body_deploy_vm3.json.j2 はNICが3つの場合のテンプレートです。

./roles/deploy_vm/templates/body_deploy_vm3.json.j2
/roles/deploy_vm/templates/body_deploy_vm3.json.j2
{
   "server": {
      "name": "{{ server.VM_NAME }}",
      "max_count": 1,
      "imageRef": "{{ server.IMAGE_ID }}",
      "block_device_mapping_v2": [
         {
            "boot_index": "0",
            "uuid": "{{ server.STORAGE_TEMPLATE_ID }}",
            "source_type": "image",
            "destination_type": "volume"
         }
      ],
      "config_drive": true,
      "key_name": "{{ server.SSH_KEY_NAME }}",
      "flavorRef": "{{ server.FLAVOR_ID }}",
      "networks": [
      {% for network_num in range(1, 4) %}
      {
        "uuid": "{{ server['NETWORK_ID_' ~ network_num] }}",
        "fixed_ip": "{{ server['NETWORK_IP_ADDRESS_' ~ network_num] }}"
      }
      {% if not loop.last %}
      ,
      {% endif %}
      {% endfor %}
      ]
   },
    "OS-SCH-HNT:scheduler_hints": {
        "same_host": "{{ server.TARGET_HOST }}"
    }
}

body_deploy_vm4.json.j2 はNICが4つの場合のテンプレートです。

./roles/deploy_vm/templates/body_deploy_vm4.json.j2
roles/deploy_vm/templates/body_deploy_vm4.json.j2
{
   "server": {
      "name": "{{ server.VM_NAME }}",
      "max_count": 1,
      "imageRef": "{{ server.IMAGE_ID }}",
      "block_device_mapping_v2": [
         {
            "boot_index": "0",
            "uuid": "{{ server.STORAGE_TEMPLATE_ID }}",
            "source_type": "image",
            "destination_type": "volume"
         }
      ],
      "config_drive": true,
      "key_name": "{{ server.SSH_KEY_NAME }}",
      "flavorRef": "{{ server.FLAVOR_ID }}",
      "networks": [
      {% for network_num in range(1, 5) %}
      {
        "uuid": "{{ server['NETWORK_ID_' ~ network_num] }}",
        "fixed_ip": "{{ server['NETWORK_IP_ADDRESS_' ~ network_num] }}"
      }
      {% if not loop.last %}
      ,
      {% endif %}
      {% endfor %}
      ]
   },
    "OS-SCH-HNT:scheduler_hints": {
        "same_host": "{{ server.TARGET_HOST }}"
    }
}

PowerVC で仮想マシン2台を作成する Ansible playbook を実行

実行するansible-playbookコマンドでは変数ファイルを2つ指定し、ターゲット・ホストを指定しています。

# ansible-playbook deploy_vm.yml -e "@./group_vars/powervc_auth.yml" -e "@./group_vars/deploy_vm.yml" -e "target_hosts=powervc"

実行ログ
# ansible-playbook deploy_vm.yml -e "@./group_vars/powervc_auth.yml" -e "@./group_vars/deploy_vm.yml" -e "target_hosts=powervc"
Using /work/ansible/ansible.cfg as config file

PLAY [create_vms] ************************************************************************************************************************************************************************
Friday 21 February 2025  17:03:42 +0900 (0:00:00.042)       0:00:00.042 *******

TASK [powervc_auth : Get auth token] *****************************************************************************************************************************************************
ok: [powervc230-test] => {"changed": false, "connection": "Upgrade, close", "content": "{\"token\": {\"methods\": [\"password\"], \"user\": {\"domain\": {\"id\": \"default\", \"name\": \"Default\"}, \"id\": \"37d1714693f64fbba9140d4260ba8204\", \"name\": \"root\", \"password_expires_at\": null}, \"audit_ids\": [\"yaYQFfG1Qqek5DdGvJvdhg\"], \"expires_at\": \"2025-02-21T14:03:43.000000Z\", \"issued_at\": \"2025-02-21T08:03:43.000000Z\", \"project\": {\"domain\": {\"id\": \"default\", \"name\": \"Default\"}, \"id\": \"xxxxxxxxxxxxxxxxxxx\", \"name\": \"ibm-default\"}, \"is_domain\": false, \"roles\": [{\"id\": \"b2b7c61e372b4d4ab73c9acf8dce2aa1\", \"name\": \"admin\"}], \"is_admin_project\": true, \"catalog\": [{\"endpoints\": [{\"id\": \"3a05762da2574d23a066977d8e936851\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9292\", \"region\": \"RegionOne\"}, {\"id\": \"6a42c71d00a04b1f996dc35c49178a95\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9292\", \"region\": \"RegionOne\"}, {\"id\": \"77f3fcef0c0e4830b06d4770f6698816\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9292\", \"region\": \"RegionOne\"}], \"id\": \"00a63e1288a741679d7ff875e541d727\", \"type\": \"image\", \"name\": \"glance\"}, {\"endpoints\": [{\"id\": \"06b6d480bfae4d0f9bc633b66098dee8\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:5000\", \"region\": \"RegionOne\"}, {\"id\": \"baa0d7b6337a45428c428d13ae3eb3c6\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:5000\", \"region\": \"RegionOne\"}, {\"id\": \"ca2e00f31e7b4d5095cf48817571f4cf\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:5000\", \"region\": \"RegionOne\"}], \"id\": \"0ea36c3b4dd344af9aaa1bd7acf1d9cd\", \"type\": \"identity\", \"name\": \"keystone\"}, {\"endpoints\": [{\"id\": \"01df412587ef40ed88c2d035c49322fc\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8080/v1/AUTH_xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"76e5c658e8b74f12a1858e551a2444d7\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8080/v1/AUTH_xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"8e6afdf092874f63aaa3b77d48042010\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8080/v1/AUTH_xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}], \"id\": \"136d2b1de47b443e860aee255d11c2d5\", \"type\": \"object-store\", \"name\": \"swift\"}, {\"endpoints\": [{\"id\": \"bb47c98b4b6a41fb96650782e9e01c3b\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"e3349775f68f407eb0aa584e6e396841\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"fee797dedbdd40b0afd82bf4324811e8\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}], \"id\": \"20460f810c024ca9bab58aed32f8ad4e\", \"type\": \"volumev3\", \"name\": \"cinderv3\"}, {\"endpoints\": [{\"id\": \"37cc0debe91443d9b2272522f62af0c9\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"3d66143f77be41e0aeab84a1afff3ba3\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"caa36ea0d46d4caa9b097305aa25b9da\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}], \"id\": \"3626f36e2c574d448dc19086a7b9c727\", \"type\": \"compute\", \"name\": \"nova\"}, {\"endpoints\": [{\"id\": \"41a7e3805ea94d43b64869be9dd928e0\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v2/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"be96ae88f1434d6495c7819960f5b1ae\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v2/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"e31f2e5a3e744496be8193cfbddc7ec4\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v2/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}], \"id\": \"4a6eac84b4114b0fbe2f5968774c0407\", \"type\": \"volumev2\", \"name\": \"cinderv2\"}, {\"endpoints\": [{\"id\": \"77d695e3e5c7484a9ff0ec4c57b7d191\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8778\", \"region\": \"RegionOne\"}, {\"id\": \"924c819cb0e14fa28cc2eeaf97af6148\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8778\", \"region\": \"RegionOne\"}, {\"id\": \"b14a08e8dae4414b82f35c6a27730772\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8778\", \"region\": \"RegionOne\"}], \"id\": \"54e06949a8534c63a6b893c4f4df03bd\", \"type\": \"event\", \"name\": \"panko\"}, {\"endpoints\": [{\"id\": \"5db53c154f134243ac08ac96f8cf699b\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8780\", \"region\": \"RegionOne\"}, {\"id\": \"acf2bb58076f44a0aedb274bbf4ab8de\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8780\", \"region\": \"RegionOne\"}, {\"id\": \"cc55c6eed15144b1a476e334b5d0a5e4\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8780\", \"region\": \"RegionOne\"}], \"id\": \"633c55b0710c425195b50d85f3d1d23f\", \"type\": \"placement\", \"name\": \"placement\"}, {\"endpoints\": [{\"id\": \"09048171a002491b8df7c0fce57ab20b\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9696\", \"region\": \"RegionOne\"}, {\"id\": \"42a176e1e88a4603b610ebc6b944ec41\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9696\", \"region\": \"RegionOne\"}, {\"id\": \"c79b10980bbc47ba99a97776028e2404\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9696\", \"region\": \"RegionOne\"}], \"id\": \"651cc81d5cf848e38870db539a8d809b\", \"type\": \"network\", \"name\": \"neutron\"}, {\"endpoints\": [{\"id\": \"02b163ee95624a8c9d84377e8b398af7\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8428\", \"region\": \"RegionOne\"}, {\"id\": \"17be952442af4905b93dd62ebedbdad9\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8428\", \"region\": \"RegionOne\"}, {\"id\": \"6b9d467c4f494ae082ffd8457eabdfff\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8428\", \"region\": \"RegionOne\"}], \"id\": \"7941e7a619d24343b5a86b4842bef4b2\", \"type\": \"ttv\", \"name\": \"ttv-validation\"}, {\"endpoints\": [{\"id\": \"1096caa871904126b8fdcdbbf97ba69d\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"733793f5a86a43bf94a3aea991a3c10e\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}, {\"id\": \"8d1639e697a64cbcad90bb0a741a7576\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx\", \"region\": \"RegionOne\"}], \"id\": \"8da7682c2fb3438b9b1a374116002934\", \"type\": \"volume\", \"name\": \"cinder\"}, {\"endpoints\": [{\"id\": \"795fc8b4ebae488ba38969586da71e90\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8998\", \"region\": \"RegionOne\"}, {\"id\": \"89898094b2c349e6aa335b7fe058f158\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8998\", \"region\": \"RegionOne\"}, {\"id\": \"94e5c6c5a2004b19820400b63056ea01\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8998\", \"region\": \"RegionOne\"}], \"id\": \"907f88fd61c7463d8c2a6eaaee19565d\", \"type\": \"self-service\", \"name\": \"clerk\"}, {\"endpoints\": [{\"id\": \"250af0905fc8484e9b2fefb8b756c687\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9450\", \"region\": \"RegionOne\"}, {\"id\": \"7c4f50c00f9b48e1a68a7316ab567733\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9450\", \"region\": \"RegionOne\"}, {\"id\": \"a96e8ab14c134f28a21f69abe9c8f56c\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:9450\", \"region\": \"RegionOne\"}], \"id\": \"9a75cd1b58ca4a3481579697faac3018\", \"type\": \"resource-reservation\", \"name\": \"blazar\"}, {\"endpoints\": [{\"id\": \"8b3d968374a94bb8a85b134c08492030\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8041\", \"region\": \"RegionOne\"}, {\"id\": \"f03099c6838943f7b27118e173203197\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8041\", \"region\": \"RegionOne\"}, {\"id\": \"f3c46b370cf546d280f8e870d3241170\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:8041\", \"region\": \"RegionOne\"}], \"id\": \"a7e67dd6103447b980bf9321f6a3c688\", \"type\": \"metric\", \"name\": \"gnocchi\"}, {\"endpoints\": [{\"id\": \"526528205b384945a2d6214ea50fcfde\", \"interface\": \"admin\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:5470\", \"region\": \"RegionOne\"}, {\"id\": \"8f293db224f446ada2504b56398bd7a2\", \"interface\": \"internal\", \"region_id\": \"RegionOne\", \"url\": \"http://localhost:5470\", \"region\": \"RegionOne\"}, {\"id\": \"dc63616fe04c45539656f07922513136\", \"interface\": \"public\", \"region_id\": \"RegionOne\", \"url\": \"https://<PowerVC_VIP>:5470\", \"region\": \"RegionOne\"}], \"id\": \"d2c31e099aae42cfa37fe2f75f2148cb\", \"type\": \"notification\", \"name\": \"bumblebee\"}]}}", "content_length": "9504", "content_type": "application/json", "cookies": {}, "cookies_string": "", "date": "Fri, 21 Feb 2025 08:03:43 GMT", "elapsed": 0, "json": {"token": {"audit_ids": ["yaYQFfG1Qqek5DdGvJvdhg"], "catalog": [{"endpoints": [{"id": "3a05762da2574d23a066977d8e936851", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9292"}, {"id": "6a42c71d00a04b1f996dc35c49178a95", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9292"}, {"id": "77f3fcef0c0e4830b06d4770f6698816", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9292"}], "id": "00a63e1288a741679d7ff875e541d727", "name": "glance", "type": "image"}, {"endpoints": [{"id": "06b6d480bfae4d0f9bc633b66098dee8", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:5000"}, {"id": "baa0d7b6337a45428c428d13ae3eb3c6", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:5000"}, {"id": "ca2e00f31e7b4d5095cf48817571f4cf", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:5000"}], "id": "0ea36c3b4dd344af9aaa1bd7acf1d9cd", "name": "keystone", "type": "identity"}, {"endpoints": [{"id": "01df412587ef40ed88c2d035c49322fc", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8080/v1/AUTH_xxxxxxxxxxxxxxxxxxx"}, {"id": "76e5c658e8b74f12a1858e551a2444d7", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8080/v1/AUTH_xxxxxxxxxxxxxxxxxxx"}, {"id": "8e6afdf092874f63aaa3b77d48042010", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8080/v1/AUTH_xxxxxxxxxxxxxxxxxxx"}], "id": "136d2b1de47b443e860aee255d11c2d5", "name": "swift", "type": "object-store"}, {"endpoints": [{"id": "bb47c98b4b6a41fb96650782e9e01c3b", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx"}, {"id": "e3349775f68f407eb0aa584e6e396841", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx"}, {"id": "fee797dedbdd40b0afd82bf4324811e8", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx"}], "id": "20460f810c024ca9bab58aed32f8ad4e", "name": "cinderv3", "type": "volumev3"}, {"endpoints": [{"id": "37cc0debe91443d9b2272522f62af0c9", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx"}, {"id": "3d66143f77be41e0aeab84a1afff3ba3", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx"}, {"id": "caa36ea0d46d4caa9b097305aa25b9da", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx"}], "id": "3626f36e2c574d448dc19086a7b9c727", "name": "nova", "type": "compute"}, {"endpoints": [{"id": "41a7e3805ea94d43b64869be9dd928e0", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v2/xxxxxxxxxxxxxxxxxxx"}, {"id": "be96ae88f1434d6495c7819960f5b1ae", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v2/xxxxxxxxxxxxxxxxxxx"}, {"id": "e31f2e5a3e744496be8193cfbddc7ec4", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v2/xxxxxxxxxxxxxxxxxxx"}], "id": "4a6eac84b4114b0fbe2f5968774c0407", "name": "cinderv2", "type": "volumev2"}, {"endpoints": [{"id": "77d695e3e5c7484a9ff0ec4c57b7d191", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8778"}, {"id": "924c819cb0e14fa28cc2eeaf97af6148", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8778"}, {"id": "b14a08e8dae4414b82f35c6a27730772", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8778"}], "id": "54e06949a8534c63a6b893c4f4df03bd", "name": "panko", "type": "event"}, {"endpoints": [{"id": "5db53c154f134243ac08ac96f8cf699b", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8780"}, {"id": "acf2bb58076f44a0aedb274bbf4ab8de", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8780"}, {"id": "cc55c6eed15144b1a476e334b5d0a5e4", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8780"}], "id": "633c55b0710c425195b50d85f3d1d23f", "name": "placement", "type": "placement"}, {"endpoints": [{"id": "09048171a002491b8df7c0fce57ab20b", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9696"}, {"id": "42a176e1e88a4603b610ebc6b944ec41", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9696"}, {"id": "c79b10980bbc47ba99a97776028e2404", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9696"}], "id": "651cc81d5cf848e38870db539a8d809b", "name": "neutron", "type": "network"}, {"endpoints": [{"id": "02b163ee95624a8c9d84377e8b398af7", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8428"}, {"id": "17be952442af4905b93dd62ebedbdad9", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8428"}, {"id": "6b9d467c4f494ae082ffd8457eabdfff", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8428"}], "id": "7941e7a619d24343b5a86b4842bef4b2", "name": "ttv-validation", "type": "ttv"}, {"endpoints": [{"id": "1096caa871904126b8fdcdbbf97ba69d", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx"}, {"id": "733793f5a86a43bf94a3aea991a3c10e", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx"}, {"id": "8d1639e697a64cbcad90bb0a741a7576", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9000/v3/xxxxxxxxxxxxxxxxxxx"}], "id": "8da7682c2fb3438b9b1a374116002934", "name": "cinder", "type": "volume"}, {"endpoints": [{"id": "795fc8b4ebae488ba38969586da71e90", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8998"}, {"id": "89898094b2c349e6aa335b7fe058f158", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8998"}, {"id": "94e5c6c5a2004b19820400b63056ea01", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8998"}], "id": "907f88fd61c7463d8c2a6eaaee19565d", "name": "clerk", "type": "self-service"}, {"endpoints": [{"id": "250af0905fc8484e9b2fefb8b756c687", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9450"}, {"id": "7c4f50c00f9b48e1a68a7316ab567733", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9450"}, {"id": "a96e8ab14c134f28a21f69abe9c8f56c", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:9450"}], "id": "9a75cd1b58ca4a3481579697faac3018", "name": "blazar", "type": "resource-reservation"}, {"endpoints": [{"id": "8b3d968374a94bb8a85b134c08492030", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8041"}, {"id": "f03099c6838943f7b27118e173203197", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8041"}, {"id": "f3c46b370cf546d280f8e870d3241170", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:8041"}], "id": "a7e67dd6103447b980bf9321f6a3c688", "name": "gnocchi", "type": "metric"}, {"endpoints": [{"id": "526528205b384945a2d6214ea50fcfde", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:5470"}, {"id": "8f293db224f446ada2504b56398bd7a2", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "url": "http://localhost:5470"}, {"id": "dc63616fe04c45539656f07922513136", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "url": "https://<PowerVC_VIP>:5470"}], "id": "d2c31e099aae42cfa37fe2f75f2148cb", "name": "bumblebee", "type": "notification"}], "expires_at": "2025-02-21T14:03:43.000000Z", "is_admin_project": true, "is_domain": false, "issued_at": "2025-02-21T08:03:43.000000Z", "methods": ["password"], "project": {"domain": {"id": "default", "name": "Default"}, "id": "xxxxxxxxxxxxxxxxxxx", "name": "ibm-default"}, "roles": [{"id": "b2b7c61e372b4d4ab73c9acf8dce2aa1", "name": "admin"}], "user": {"domain": {"id": "default", "name": "Default"}, "id": "37d1714693f64fbba9140d4260ba8204", "name": "root", "password_expires_at": null}}}, "msg": "OK (9504 bytes)", "redirected": false, "server": "Apache", "status": 201, "upgrade": "h2", "url": "https://<PowerVC_VIP>:5000/v3/auth/tokens", "vary": "X-Auth-Token,User-Agent", "x_openstack_request_id": "req-7b215651-6fd6-41e8-8ac7-cedb8742f991", "x_subject_token": "gAAAAABnuDNfWms_g0osbyjdJIAMoEubkUue3dO1tzO6kWh83ZHyPJpYw13MbC5xemfGVLEAPOsnjTPqtmh48zvLs00PTaWsOLQmUaQ099KBSS13ph2aibNYWcXmzleiFw7VZpbmXsEGoyEUf_NXHpUJGmfq3_trgkWEN_PEPFsi6goVUq5bRXE"}
Friday 21 February 2025  17:03:43 +0900 (0:00:01.204)       0:00:01.247 *******

TASK [powervc_auth : Set Variable OS_TOKEN] **********************************************************************************************************************************************
ok: [powervc230-test] => {"ansible_facts": {"OS_TOKEN": "gAAAAABnuDNfWms_g0osbyjdJIAMoEubkUue3dO1tzO6kWh83ZHyPJpYw13MbC5xemfGVLEAPOsnjTPqtmh48zvLs00PTaWsOLQmUaQ099KBSS13ph2aibNYWcXmzleiFw7VZpbmXsEGoyEUf_NXHpUJGmfq3_trgkWEN_PEPFsi6goVUq5bRXE"}, "changed": false}
Friday 21 February 2025  17:03:43 +0900 (0:00:00.010)       0:00:01.257 *******

TASK [powervc_auth : show os_token] ******************************************************************************************************************************************************
ok: [powervc230-test] => {
    "OS_TOKEN": "gAAAAABnuDNfWms_g0osbyjdJIAMoEubkUue3dO1tzO6kWh83ZHyPJpYw13MbC5xemfGVLEAPOsnjTPqtmh48zvLs00PTaWsOLQmUaQ099KBSS13ph2aibNYWcXmzleiFw7VZpbmXsEGoyEUf_NXHpUJGmfq3_trgkWEN_PEPFsi6goVUq5bRXE"
}
Friday 21 February 2025  17:03:43 +0900 (0:00:00.010)       0:00:01.267 *******
included: /work/ansible/roles/deploy_vm/tasks/deploy_vms.yml for powervc230-test
included: /work/ansible/roles/deploy_vm/tasks/deploy_vms.yml for powervc230-test
Friday 21 February 2025  17:03:43 +0900 (0:00:00.023)       0:00:01.291 *******

TASK [deploy_vm : Set fact dir name] *****************************************************************************************************************************************************
ok: [powervc230-test] => {"ansible_facts": {"TEMPLATE_DIR": "/work/ansible/roles/deploy_vm/templates"}, "changed": false}
Friday 21 February 2025  17:03:43 +0900 (0:00:00.010)       0:00:01.301 *******
Friday 21 February 2025  17:03:43 +0900 (0:00:00.008)       0:00:01.310 *******
Friday 21 February 2025  17:03:43 +0900 (0:00:00.010)       0:00:01.320 *******
Friday 21 February 2025  17:03:43 +0900 (0:00:00.008)       0:00:01.329 *******

TASK [deploy_vm : Select deploy template 1] **********************************************************************************************************************************************
changed: [powervc230-test] => {"changed": true, "cmd": "cp -p /work/ansible/roles/deploy_vm/templates/body_deploy_vm1.json.j2 /work/ansible/roles/deploy_vm/templates/body_deploy_vm.json.j2\necho \"Set 1 network template.\"\n", "delta": "0:00:00.002522", "end": "2025-02-21 17:03:43.922104", "rc": 0, "start": "2025-02-21 17:03:43.919582", "stderr": "", "stderr_lines": [], "stdout": "Set 1 network template.", "stdout_lines": ["Set 1 network template."]}
Friday 21 February 2025  17:03:43 +0900 (0:00:00.381)       0:00:01.710 *******

TASK [deploy_vm : Send Request for Server Deployment] ************************************************************************************************************************************
ok: [powervc230-test] => {"changed": false, "connection": "close", "content": "{\"server\": {\"id\": \"3c1bea07-0d8f-4d12-8662-4266c679eb33\", \"links\": [{\"rel\": \"self\", \"href\": \"https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers/3c1bea07-0d8f-4d12-8662-4266c679eb33\"}, {\"rel\": \"bookmark\", \"href\": \"https://<PowerVC_VIP>:8774/xxxxxxxxxxxxxxxxxxx/servers/3c1bea07-0d8f-4d12-8662-4266c679eb33\"}], \"OS-DCF:diskConfig\": \"MANUAL\", \"security_groups\": [{\"name\": \"default\"}]}}", "content_length": "417", "content_type": "application/json", "cookies": {}, "cookies_string": "", "date": "Fri, 21 Feb 2025 08:03:44 GMT", "elapsed": 0, "json": {"server": {"OS-DCF:diskConfig": "MANUAL", "id": "3c1bea07-0d8f-4d12-8662-4266c679eb33", "links": [{"href": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers/3c1bea07-0d8f-4d12-8662-4266c679eb33", "rel": "self"}, {"href": "https://<PowerVC_VIP>:8774/xxxxxxxxxxxxxxxxxxx/servers/3c1bea07-0d8f-4d12-8662-4266c679eb33", "rel": "bookmark"}], "security_groups": [{"name": "default"}]}}, "location": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers/3c1bea07-0d8f-4d12-8662-4266c679eb33", "msg": "OK (417 bytes)", "openstack_api_version": "compute 2.1", "redirected": false, "server": "Apache", "status": 202, "url": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers", "vary": "OpenStack-API-Version,User-Agent,X-OpenStack-Nova-API-Version", "x_compute_request_id": "req-a9414f2d-2f56-4541-8bc1-7c23fecf9678", "x_openstack_nova_api_version": "2.1", "x_openstack_request_id": "req-a9414f2d-2f56-4541-8bc1-7c23fecf9678"}
Friday 21 February 2025  17:03:44 +0900 (0:00:00.805)       0:00:02.516 *******

TASK [deploy_vm : create static inventory] ***********************************************************************************************************************************************
[WARNING]: Consider using the file module with state=directory rather than running 'mkdir'.  If you need to use command because file is insufficient you can add 'warn: false' to this
command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [powervc230-test] => {"changed": true, "cmd": "mkdir -p \"/work/ansible/inventory/deployed_vm/\"\necho \"[ testvm0221_u1 ]\" > /work/ansible/inventory/deployed_vm/inventory_testvm0221_u1.yml\necho \"172.16.110.92 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3\"  >> /work/ansible/inventory/deployed_vm/inventory_testvm0221_u1.yml\ncat \"/work/ansible//inventory/deployed_vm/inventory_testvm0221_u1.yml\"\n", "delta": "0:00:00.003257", "end": "2025-02-21 17:03:45.087977", "rc": 0, "start": "2025-02-21 17:03:45.084720", "stderr": "", "stderr_lines": [], "stdout": "[ testvm0221_u1 ]\n172.16.110.92 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3", "stdout_lines": ["[ testvm0221_u1 ]", "172.16.110.92 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3"]}
Friday 21 February 2025  17:03:45 +0900 (0:00:00.369)       0:00:02.885 *******

TASK [deploy_vm : debug] *****************************************************************************************************************************************************************
ok: [powervc230-test] => {
    "shell_output.stdout_lines": [
        "[ testvm0221_u1 ]",
        "172.16.110.92 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3"
    ]
}
Friday 21 February 2025  17:03:45 +0900 (0:00:00.013)       0:00:02.899 *******
Pausing for 60 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)

TASK [deploy_vm : A little Pause while Deployment 60 seconds] ****************************************************************************************************************************
ok: [powervc230-test] => {"changed": false, "delta": 60, "echo": true, "rc": 0, "start": "2025-02-21 17:03:45.154941", "stderr": "", "stdout": "Paused for 60.0 seconds", "stop": "2025-02-21 17:04:45.155299", "user_input": ""}
Friday 21 February 2025  17:04:45 +0900 (0:01:00.010)       0:01:02.910 *******

TASK [deploy_vm : Set fact dir name] *****************************************************************************************************************************************************
ok: [powervc230-test] => {"ansible_facts": {"TEMPLATE_DIR": "/work/ansible/roles/deploy_vm/templates"}, "changed": false}
Friday 21 February 2025  17:04:45 +0900 (0:00:00.009)       0:01:02.920 *******
Friday 21 February 2025  17:04:45 +0900 (0:00:00.009)       0:01:02.930 *******
Friday 21 February 2025  17:04:45 +0900 (0:00:00.009)       0:01:02.939 *******

TASK [deploy_vm : Select deploy template 2] **********************************************************************************************************************************************
changed: [powervc230-test] => {"changed": true, "cmd": "cp -p /work/ansible/roles/deploy_vm/templates/body_deploy_vm2.json.j2 /work/ansible/roles/deploy_vm/templates/body_deploy_vm.json.j2\necho \"Set 2 networks template.\"\n", "delta": "0:00:00.002664", "end": "2025-02-21 17:04:45.671345", "rc": 0, "start": "2025-02-21 17:04:45.668681", "stderr": "", "stderr_lines": [], "stdout": "Set 2 networks template.", "stdout_lines": ["Set 2 networks template."]}
Friday 21 February 2025  17:04:45 +0900 (0:00:00.520)       0:01:03.459 *******
Friday 21 February 2025  17:04:45 +0900 (0:00:00.009)       0:01:03.469 *******

TASK [deploy_vm : Send Request for Server Deployment] ************************************************************************************************************************************
ok: [powervc230-test] => {"changed": false, "connection": "close", "content": "{\"server\": {\"id\": \"5aa8a5bd-a5cb-4f16-9759-07c803736dd4\", \"links\": [{\"rel\": \"self\", \"href\": \"https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers/5aa8a5bd-a5cb-4f16-9759-07c803736dd4\"}, {\"rel\": \"bookmark\", \"href\": \"https://<PowerVC_VIP>:8774/xxxxxxxxxxxxxxxxxxx/servers/5aa8a5bd-a5cb-4f16-9759-07c803736dd4\"}], \"OS-DCF:diskConfig\": \"MANUAL\", \"security_groups\": [{\"name\": \"default\"}]}}", "content_length": "417", "content_type": "application/json", "cookies": {}, "cookies_string": "", "date": "Fri, 21 Feb 2025 08:04:46 GMT", "elapsed": 0, "json": {"server": {"OS-DCF:diskConfig": "MANUAL", "id": "5aa8a5bd-a5cb-4f16-9759-07c803736dd4", "links": [{"href": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers/5aa8a5bd-a5cb-4f16-9759-07c803736dd4", "rel": "self"}, {"href": "https://<PowerVC_VIP>:8774/xxxxxxxxxxxxxxxxxxx/servers/5aa8a5bd-a5cb-4f16-9759-07c803736dd4", "rel": "bookmark"}], "security_groups": [{"name": "default"}]}}, "location": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers/5aa8a5bd-a5cb-4f16-9759-07c803736dd4", "msg": "OK (417 bytes)", "openstack_api_version": "compute 2.1", "redirected": false, "server": "Apache", "status": 202, "url": "https://<PowerVC_VIP>:8774/v2.1/xxxxxxxxxxxxxxxxxxx/servers", "vary": "OpenStack-API-Version,User-Agent,X-OpenStack-Nova-API-Version", "x_compute_request_id": "req-4cef2bd9-7f0e-45e0-802b-aedb5bbba069", "x_openstack_nova_api_version": "2.1", "x_openstack_request_id": "req-4cef2bd9-7f0e-45e0-802b-aedb5bbba069"}
Friday 21 February 2025  17:04:46 +0900 (0:00:00.813)       0:01:04.282 *******

TASK [deploy_vm : create static inventory] ***********************************************************************************************************************************************
changed: [powervc230-test] => {"changed": true, "cmd": "mkdir -p \"/work/ansible/inventory/deployed_vm/\"\necho \"[ testvm0221_u2 ]\" > /work/ansible/inventory/deployed_vm/inventory_testvm0221_u2.yml\necho \"172.16.110.93 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3\"  >> /work/ansible/inventory/deployed_vm/inventory_testvm0221_u2.yml\ncat \"/work/ansible//inventory/deployed_vm/inventory_testvm0221_u2.yml\"\n", "delta": "0:00:00.002840", "end": "2025-02-21 17:04:46.860705", "rc": 0, "start": "2025-02-21 17:04:46.857865", "stderr": "", "stderr_lines": [], "stdout": "[ testvm0221_u2 ]\n172.16.110.93 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3", "stdout_lines": ["[ testvm0221_u2 ]", "172.16.110.93 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3"]}
Friday 21 February 2025  17:04:46 +0900 (0:00:00.374)       0:01:04.656 *******

TASK [deploy_vm : debug] *****************************************************************************************************************************************************************
ok: [powervc230-test] => {
    "shell_output.stdout_lines": [
        "[ testvm0221_u2 ]",
        "172.16.110.93 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3"
    ]
}
Friday 21 February 2025  17:04:46 +0900 (0:00:00.012)       0:01:04.669 *******
Pausing for 60 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)

TASK [deploy_vm : A little Pause while Deployment 60 seconds] ****************************************************************************************************************************
ok: [powervc230-test] => {"changed": false, "delta": 60, "echo": true, "rc": 0, "start": "2025-02-21 17:04:46.924504", "stderr": "", "stdout": "Paused for 60.0 seconds", "stop": "2025-02-21 17:05:46.924813", "user_input": ""}
Friday 21 February 2025  17:05:46 +0900 (0:01:00.009)       0:02:04.678 *******
Pausing for 300 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)

TASK [deploy_vm : A little Pause after Deployment 300 seconds] ***************************************************************************************************************************
ok: [powervc230-test] => {"changed": false, "delta": 300, "echo": true, "rc": 0, "start": "2025-02-21 17:05:46.934071", "stderr": "", "stdout": "Paused for 300.0 seconds", "stop": "2025-02-21 17:10:46.934578", "user_input": ""}

PLAY RECAP *******************************************************************************************************************************************************************************
powervc230-test            : ok=18   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0

Friday 21 February 2025  17:10:46 +0900 (0:05:00.010)       0:07:04.689 *******
===============================================================================
deploy_vm : A little Pause after Deployment 300 seconds ------------------------------------------------------------------------------------------------------------------------- 300.01s
deploy_vm : A little Pause while Deployment 60 seconds --------------------------------------------------------------------------------------------------------------------------- 60.01s
deploy_vm : A little Pause while Deployment 60 seconds --------------------------------------------------------------------------------------------------------------------------- 60.01s
powervc_auth : Get auth token ----------------------------------------------------------------------------------------------------------------------------------------------------- 1.20s
deploy_vm : Send Request for Server Deployment ------------------------------------------------------------------------------------------------------------------------------------ 0.81s
deploy_vm : Send Request for Server Deployment ------------------------------------------------------------------------------------------------------------------------------------ 0.81s
deploy_vm : Select deploy template 2 ---------------------------------------------------------------------------------------------------------------------------------------------- 0.52s
deploy_vm : Select deploy template 1 ---------------------------------------------------------------------------------------------------------------------------------------------- 0.38s
deploy_vm : create static inventory ----------------------------------------------------------------------------------------------------------------------------------------------- 0.37s
deploy_vm : create static inventory ----------------------------------------------------------------------------------------------------------------------------------------------- 0.37s
deploy_vm : include_tasks --------------------------------------------------------------------------------------------------------------------------------------------------------- 0.02s
deploy_vm : debug ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
deploy_vm : debug ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
deploy_vm : Set fact dir name ----------------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
powervc_auth : Set Variable OS_TOKEN ---------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
powervc_auth : show os_token ------------------------------------------------------------------------------------------------------------------------------------------------------ 0.01s
deploy_vm : Select deploy template 3 ---------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
deploy_vm : Select deploy template 4 ---------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
deploy_vm : Set fact dir name ----------------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
deploy_vm : Select deploy template 1 ---------------------------------------------------------------------------------------------------------------------------------------------- 0.01s
#

  • PowerVC GUI で仮想マシンが2台作成されていることを確認できました。IPアドレスも指定通りに付与されていることが確認できます。

図1.png


おわりに

上記のコードは PowerVC バージョン 2.1, 2.2 でも稼働します。
OpenStack plugin などは使用せず、ansible.builtin.uriでのAPI の詳細を直接指定する方式なので、バージョン変更による影響は受けにくい汎用的なコードとなっていると思います

以上です。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?