0
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?

More than 1 year has passed since last update.

"Ansible を使用した PowerVC の自動化" の試行 - VM 作成、削除

Last updated at Posted at 2021-03-03

以前の記事、"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鍵交換

  1. Local Mac PC で ssh-keygen コマンド で ssh key を作成
  2. PowerVC_Server に public key を転送
  3. 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 の設定

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で確認。)

create_vm.yml
 ---
- 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 で確認しました。

deployetest.jpg

ちゃんとできています!


ついでに削除も実行してみます。

削除の実行

以下は削除に使用した ymlファイルです。create_vm.yml から編集しました。

delete_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 で確認

スクリーンショット 2021-03-03 15.25.27.png

VM はなくなっています。

VM delete もできることが確認できました。


終わりに

Ansible の OpenStack Pluginを利用してPowerVC で サンプル・ファイル create_vm.yml で VM 作成および 簡単に作成した delete_vm.yml で VM 削除を実行しました。
ディスク作成なども加えられたらと思います。

以上です。

0
0
0

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
0
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?