以前の記事、"Ansible を使用した PowerVC の自動化" の試行 の続きで VM作成と削除を実行した記録です。
Tutorial: Ansible を使用した PowerVC の自動化 を参照しています。
なお、この方法では Ansible の OpenStack モジュールを使用しているので、VM作成に Terraform を使用していません。
環境
Ansible Server: Local Mac PC (ansible version 2.9.9)
python: 3.7.3
target: PowerVC_Server -> 前の記事で導入した PowerVC 2.0 サーバー(RHEL 8.3)
準備
①ssh鍵交換
- Local Mac PC で ssh-keygen コマンド で ssh key を作成
- PowerVC_Server に public key を転送
- PowerVC_Server の /root/.ssh/authorized_keys を作成し、2) で転送した pubic key を追記
②ssh の configファイルの設定
Local Mac の /.ssh/config に以下の設定する
Host PowerVC_Server
HostName xx.xx.xx.xx
User root
IdentityFile ~/.ssh/id_rsa #<= ①で作成した secret keyを指定
これでパスワード入力なしで Local Mac PC と PowerVC_Server が ssh 接続できるようになります。
③サンプル・モジュールをダウンロードする
https://github.com/ppc64le/devops-automation/tree/master/ansible/powervc
ダウンロードしたモジュールを移動し、配置した場所を ansible 実行ディレクトリとしています。
④inventory の設定
invenrory ファイルを以下のように設定します。
[test]
PowerVC_Server ansible_python_interpreter=/usr/bin/python3
⑤ansible.cfg の設定
[defaults]
inventory = ./inventory
interpreter_python=/usr/bin/python
remote_user = root
[inventory]
interpreter_python=/usr/bin/python
⑥ PowerVC_Server から /opt/ibm/powervc/powervcrc と/etc/pki/tls/certs/powervc.crt をAnsible 実行サーバーである Local Mac PC に取得し、実行ディレクトリに配置します。
powervcrc 内の powervc.crt の指定を配置場所に変更します。
$ cat powervcrc
# Copy this file to your user's home directory and edit as necessary.
# In particular, you may wish to set these values:
# - OS_USERNAME : Your PowerVC user name
# - OS_PASSWORD : Your PowerVC password. If not set, openstack CLIs
# will prompt for the password as needed.
# - OS_PROJECT_NAME : If you have multiple projects, specify which project
# you want to access; else you can leave this as
# ibm-default.
#
# NOTE: You should not add your password to this file until/unless its file
# permissions prevent other users from reading it. This is one reason to copy
# the file to your home directory and edit it there. Or you may wish to not
# add your password at all and have the CLI prompt you, as noted above.
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_URL=https://xx.xx.xx.xx:5000/v3/
export OS_CACERT=./powervc.crt #<= 配置場所に記載変更
export OS_REGION_NAME=RegionOne
export OS_PROJECT_DOMAIN_NAME=Default
export OS_PROJECT_NAME=ibm-default
export OS_TENANT_NAME=$OS_PROJECT_NAME
export OS_USER_DOMAIN_NAME=Default
#export OS_USERNAME=
#export OS_PASSWORD=
export OS_COMPUTE_API_VERSION=2.46
export OS_NETWORK_API_VERSION=2.0
export OS_IMAGE_API_VERSION=2
export OS_VOLUME_API_VERSION=3
稼働検証
実行ディレクトリに配置しているファイルのご参考
$ ls -l
-rw-r--r-- 1 user staff 205 Dec 17 15:03 ansible.cfg
-rw-r--r-- 1 user staff 1154 Sep 18 23:22 create_vm.yml
-rw-r--r-- 1 user staff 469 Sep 16 17:27 imagelist.yml
-rw-r--r-- 1 user staff 58 Dec 17 16:09 inventory
-rw-r--r-- 1 user staff 451 Sep 18 23:22 list_flavors.yml
-rw-r--r-- 1 user staff 468 Sep 18 23:22 list_images.yml
-rw-r--r-- 1 user staff 246 Sep 18 23:21 list_network.yml
-rw-r--r-- 1 user staff 60 Sep 16 16:14 openstack.yml
-rw-r--r-- 1 user staff 1192 Dec 12 09:52 powervc.crt
-r--r--r-- 1 user staff 1267 Dec 17 14:55 powervcrc
-rw-r--r-- 1 user staff 135 Sep 27 21:44 service.yml
① 環境変数の設定
$ source powervcrc
$ export OS_USERNAME=root
$ export OS_PASSWORD="PowerVC_Serverの PowerVC 実行ユーザー password"
② 疎通確認
ping モジュールを実行します。
$ ansible test -m ping
PowerVC_Server | SUCCESS => {
"changed": false,
"ping": "pong"
}
(個人の好みです。わたしはこの ping - pong が見たくて実行しています...)
③ モジュール確認
サンプル・ファイル create_vm.yml を実行します。
create_vm.yml の内容参考です。
image_id、flavor_id、network名は事前取得、記入が必要です。
(list_images.yml、list_flavors.yml、list_network.yml を実行して確認、または GUIで確認。)
---
- name: Create a PowerVC Virtual Machine
hosts: localhost
vars:
image_id: "<image id を入力>"
flavor_id:" "<flavor id を入力>"
network_name: "<network名を入力>"
tasks:
- name: Create an SSH Key Pair
os_keypair:
state: present
name: ansible-ssh-key
public_key_file: "{{ ansible_env.HOME }}/.ssh/id_rsa.pub"
- name: Create a new VM instance
os_server:
state: present
name: deploytest # <= 修正
image: "{{ image_id }}"
flavor: "{{ flavor_id }}"
key_name: ansible-ssh-key
nics:
- net-name: "{{ network_name }}"
meta:
hostname: deploytest # <= 修正
group: ansible-vms
register: vm
- name: Print VM's public IP address
debug:
var: vm.openstack.public_v4
# - name: Waits for SSH port 22 to open
# wait_for:
# host: "{{ vm.openstack.public_v4 }}"
# port: 22#
# - name: Add VM host key to known hosts
# shell: "ssh-keyscan -H {{ vm.openstack.public_v4 }} >> ~/.ssh/known_hosts"
Local PC とデプロイ先のVM はネットワークがつながっていないので、ssh 確認の箇所とknown_hosts への書き込みはコメントアウトしています。(当実行環境の特有の問題です。)
実行
create_vm.yml を実行します。
$ ansible-playbook create_vm.yml
PLAY [Create a PowerVC Virtual Machine] ******************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [localhost]
TASK [Create an SSH Key Pair] ****************************************************************************************************
ok: [localhost]
TASK [Create a new VM instance] **************************************************************************************************
changed: [localhost]
TASK [Print VM's public IP address] **********************************************************************************************
ok: [localhost] => {
"vm.openstack.public_v4": "xx.xx.xx.xx"
}
PLAY RECAP ***********************************************************************************************************************
localhost : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
成功!
確認
GUI で確認しました。
ちゃんとできています!
ついでに削除も実行してみます。
削除の実行
以下は削除に使用した ymlファイルです。create_vm.yml から編集しました。
---
- name: delete a PowerVC Virtual Machine
hosts: localhost
tasks:
- name: delete a VM instance
os_server:
state: absent
name: deploytest
meta:
hostname: deploytest
group: ansible-vms
実行
$ ansible-playbook delete_vm.yml
PLAY [delete a PowerVC Virtual Machine] ******************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [localhost]
TASK [delete a VM instance] **************************************************************************************************
changed: [localhost]
PLAY RECAP ***********************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
成功しました。
GUI で確認
VM はなくなっています。
VM delete もできることが確認できました。
終わりに
Ansible の OpenStack Pluginを利用してPowerVC で サンプル・ファイル create_vm.yml で VM 作成および 簡単に作成した delete_vm.yml で VM 削除を実行しました。
ディスク作成なども加えられたらと思います。
以上です。