PowerVC で既存ボリュームからのイメージ作成を Ansibleで実行

#### はじめに

PowerVC で既存のボリュームからのイメージ作成を Ansible 経由のコマンドでの実行を確認しました。

・[PowerVC Commands](https://www.ibm.com/docs/en/powervc/2.0.2?topic=commands)
・[Creating an image from existing volumes](https://www.ibm.com/docs/en/powervc/2.0.2?topic=images-creating-image-from-existing-volumes)

---

#### 環境

・PowerVC 2.0.2 (PowerVC_Server, RHEL 8.4, ppc64le on S824)

---

#### 実行スクリプト

イメージ作成とイメージの状態確認(active or not) を実行しています。

```image_create.yml
---
- name: Create a PowerVC Virtual Machine Image
  hosts: PowerVC_Server
  gather_facts: no
  vars:
    powervc_ip: <PowerVC IP address>      #<= 要編集
    tenant_id: <PowerVC Tenant ID>　　　   #<= 要編集
    target_vm_id: <取得対象のVM ID>        #<= 要編集
    volume_name: <取得対象のボリューム名>        #<= 要編集
    image_name: <作成するイメージ名>        #<= 要編集
    OS_USERNAME: <openstack cli 実行ユーザー>  #<= 要編集
    OS_PASSWORD: <パスワード>                  #<= 要編集

  tasks:
   - name: image create from existing volume
     shell: |
        exec 2>&1
        source /opt/ibm/powervc/powervcrc
        export OS_USERNAME={{ OS_USERNAME }}
        export OS_PASSWORD={{ OS_PASSWORD }}
        powervc-volume-image-import --name {{ image_name }} --volume clone-{{volume_name}} --endianness big --os-distro aix --description test0822

   - name: created image status check
     shell: |
        exec 2>&1
        source /opt/ibm/powervc/powervcrc
        export OS_USERNAME={{ OS_USERNAME }}
        export OS_PASSWORD={{ OS_PASSWORD }}
        export STATUS=`openstack image list | grep {{ image_name }} | awk '{print $6}'`
         if [[ $STATUS = active ]] ; then
            echo "target image status is Active"
            exit 0
         else 
            echo "target image status is NOT Active"
            exit 10
         fi
     register: image_status 

   - debug:   
        var: image_status.stdout_lines
```

---

#### 実行

```
$ time ansible-playbook image_create.yml

PLAY [Create a PowerVC Virtual Machine Image] ***************************************************************************************************************************************************************************

TASK [image create from existing volume] ********************************************************************************************************************************************************************************
changed: [PowerVC_Server]

TASK [created image status check] ***************************************************************************************************************************************************************************************
changed: [PowerVC_Server]

TASK [debug] ************************************************************************************************************************************************************************************************************
ok: [PowerVC_Server] => {
    "image_status.stdout_lines": [
        "target image status is Active"
    ]
}

PLAY RECAP **************************************************************************************************************************************************************************************************************
PowerVC_Server              : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ansible-playbook image_create.yml  1.42s user 0.53s system 9% cpu 20.926 total
$
```

イメージの status は Active です。

---

#### 確認

・GUI　での確認

![スクリーンショット 2022-08-22 14.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/bfc1d625-1be5-5104-7107-410ae41ce1e8.png)


---

#### 課題

・イメージ作成をPowerVC API でもできると思いますが、どちらがよいのだろうかと迷いつつ、shell モジュールでコマンドを使用しました。
・変数が多くなってきたのでそろそろ外部ファイル化が必要。
・パスワードは Ansible vault もしくは環境変数ファイルを変更するか実装検討中。


以上です。