はじめに
PowerVC でデプロイする際に、cloud-init の user_data がどのように指定できるかを、GUI、OpenStack コマンド、curl コマンド、Ansible の 4通りの仮想マシンデプロイの方法で確認しました。
cloud-init の user data はデプロイ時に cloud-init の動作内で追加の処理を行うことができる仕組みです。
詳細は以下のドキュメントをご参考ください。
環境
PowerVC 2.1.1 (RHEL 8.6 on Power)
デプロイするVM : AIX 7.3
user_data に使用するファイルを準備
検証用に次のファイルを user_data で設定します。
#cloud-config
runcmd:
- touch /tmp/test.log
- echo "cloud-config test" >> /tmp/test.log
=> /tmp/test.log ファイルを作成し"cloud-config test" をファイルに書き込みを実行します。
実行ケース
1. PowerVC GUI で VMデプロイする場合
Deploy VM の GUI で Activation Input に設定したい user_data の内容を直接記載することで設定することが可能です。(この方法が一番簡単です)
GUI からデプロイ後の確認 (AIXサーバー)
# ssh root@xxx.xx.xxx.xx
Last unsuccessful login: Mon May 29 04:36:20 CDT 2023 on ssh from xxx.xx.xxx.xx
Last login: Tue May 2 06:01:22 CDT 2023 on /dev/vty0 from aix7301
*******************************************************************************
* *
* *
* Welcome to AIX Version 7.3! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
## oslevel -s
7300-00-01-2148
# ls -l /tmp/test.log
-rw-r--r-- 1 root system 18 May 29 04:20 /tmp/test.log
# cat /tmp/test.log
cloud-config test
#
=> cloud-init user_data により、デプロイ後に /tmp/test.log が作成され、"cloud-config test" が入力されていることが確認できました。
2. OpenStack コマンドでデプロイする場合
PowerVC サーバーから OpenStack コマンドを実行してサーバー作成を行う際の user_data の指定方法です。
(PowerVC では OpenStackコマンド使用は一応、推奨されていません)
参考:
コマンド実行準備
# source /opt/ibm/powervc/powervcrc
# export OS_USERNAME=root
# export OS_PASSWORD=<パスワードを記入>
openstack server create のオプションに --user-data "<ファイル>" を指定することで user_data を使用した仮想マシン作成が可能です。
# openstack server create --image <image ID> --flavor <flavor ID> --user-data cloud-init-test.cfg --network <network name or ID> testvm01
=> ログは省略しますが、デプロイ後に cloud-init user_data により /tmp/test.log が作成され、"cloud-config test" が入力されていることを実機で確認しました。
3. curl コマンドでデプロイする場合
1."cloud_initのuser_data ファイルを base64でエンコードした文字列" を作成
API で実行する場合は base64 へのエンコードが必要の様子です。
user_data (Optional) Configuration information or scripts to use upon launch. Must be Base64 encoded. Restricted to 65535 bytes.
・base64 で 対象のファイルをエンコード
# base64 cloud-init-test.cfg
I2Nsb3VkLWNvbmZpZwoKaG9zdG5hbWU6ICIke2hvc3RuYW1lfSIKcnVuY21kOgogLSB0b3VjaCAvdG1wL3Rlc3QubG9nCiAtIGVjaG8gImNsb3VkLWNvbmZpZyB0ZXN0IiA+PiAvdG1wL3Rlc3QubG9nCgo=
=>出力結果の "I2Nsb3VkLWNvbmZpZwoKaG9zdG5hbWU6ICIke2hvc3RuYW1lfSIKcnVuY21kOgogLSB0b3VjaCAvdG1wL3Rlc3QubG9nCiAtIGVjaG8gImNsb3VkLWNvbmZpZyB0ZXN0IiA+PiAvdG1wL3Rlc3QubG9nCgo=" を "body_deploy_vm.json" 内 の "cloud_initのuser_data ファイルを base64でエンコードした文字列" に記載します。
2. body_deploy_vm.json の準備
{
"server":{
"name":"<仮想マシン名>",
"max_count":1,
"imageRef":"<イメージID>",
"availability_zone":"Default Group",
"block_device_mapping_v2":[{
"boot_index": "0",
"uuid": "<ストレージ・テンプレートID>",
"source_type": "image",
"destination_type": "volume"
}],
"user_data": "cloud_initのuser_data ファイルを base64でエンコードした文字列", #<= ここに入力
"flavor":{
"ram": "4096",
"vcpus": "1",
"disk": "25",
"extra_specs":{
"powervm:min_proc_units":"0.1",
"powervm:proc_units":"0.2",
"powervm:max_proc_units":"2",
"powervm:min_mem":"2048",
"powervm:max_mem":"4096",
"powervm:shared_weight":"128",
"powervm:uncapped":"true",
"powervm:dedicated_proc":"false",
"powervm:max_vcpu":"2",
"powervm:availability_priority":"128",
"powervm:min_vcpu":"1",
"powervm:processor_compatibility": "POWER10",
"powervm:storage_connectivity_group":"<ストレージ接続グループIDを指定>"
}
},
"config_drive": true,
"networks":[
{
"uuid": "<ネットワークID>",
"fixed_ip": "<IPアドレス①>"
},
{
"uuid": "<ネットワークID>",
"fixed_ip": "<IPアドレス②>"
}
],
}
}
3. curl コマンドを実行するため OpenStack の token を取得して変数 OS_TOKEN に設定
# source /opt/ibm/powervc/powervcrc
# export OS_USERNAME=root
# export OS_PASSWORD=<パスワードを記入>
# export OS_TOKEN=`openstack token issue | grep "| id" | awk '{print $4}'`
4. curl でサーバー作成コマンドを実行
curl -k -X POST -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" --data @body_deploy_vm.json "https://<PowerVC_IPアドレス>:8774/v2.1/<tenant_id>/servers"
=> ログは省略しますが、デプロイ後にcloud-init user_data により /tmp/test.log が作成され、"cloud-config test" が入力されていることを実機で確認しました。
(補足)tenant_id を確認する方法
# source /opt/ibm/powervc/powervcrc
# export OS_USERNAME=root
# export OS_PASSWORD=<パスワードを記入>
# openstack catalog list
-> tenant_id を含むサービス・エンドポイントがリストされます。
4. ansible でデプロイする場合
body_deploy_vm.json は "curl コマンドでデプロイする場合" と同じファイルが使用可能です。
実行方法は以下参考:
=> ログは省略しますが、デプロイ後にcloud-init user_data により /tmp/test.log が作成され、"cloud-config test"が入力されていることを実機で確認しました。
(参考) PowerVS の場合
IBM Cloud Power Systems Virtual Server の API でも cloud-init user_data が指定できます。
userData : Cloud init user defined data
今回は オンプレミス PowerVCでのデプロイのため PowerVS の方は確認していませんが、また機会があれば別途確認します。
以上です。