はじめに
本記事ではAnsibleを使ってStorage(ONTAP)を管理する1【Rocky LinuxへAnsible Install編】の続きとして、Volume作成の為のPlaybook作成に関する内容となります。
また、Twitter等で話題となっているOpenAIによって開発されたChatGPTを使ってPlaybookの作成を試し、どの程度修正すれば動くのか試してみたいと思います。
何をしたい?できる?
- Ansibleを使ってSVM上にVolumeを作成
- Playbookの作成にChatGPTを使ってみる
記事における構築環境
CIFS100というSVMへVolume作成を以下の設定値で実施します。
・サイズは5GB
・Volumeを切り出すAggregateはaggr1_node2
・Volume名はnfs100
・JunctionPathは/nfs100
・ExportPolicyはdefault
実行手順
ChatGPTの利用にあたってはまずOpen AIにアカウント作成が必要になります。
1. OpenAIのアカウント作成
ChatGPTのサイトにアクセスし、[Sign UP]をクリックします。
次に表示された画面で、メールアドレスを入力し、[I'm not a robot]にチェックを入れ、画面に表示される質問に従って、適切な画像を選択し[Verify]をクリック後[Continue]を選択します。
アカウント作成時に入力したメールアドレスに確認メールが飛ぶので、メール上の[Verify email address]をクリックします。
表示された画面下方に文章を入力する事で会話やコード生成が実施されます。
2. 条件を入力
本記事では以下の文章を入力して作成しています。
ONTAPのSVMに接続してVolume作成を行うAnsibleのPlaybookを作って
Volume作成の条件は以下の通り
・Vserver名はcifs100
・サイズは5GB
・Aggregateはaggr1_node2
・Volume名はnfs100
・JunctionPathは/nfs100
・ExportPolicyはdefault
結果は以下の画像のような形ですが、画像生成AIのStable Diffusionのように入力時の表現次第で出力が変わってくるので、色々と試してみることが良いと思います。
ChatGPTが生成したPlaybookは以下の通りです。
---
- name: Create volume on ONTAP SVM
hosts: localhost
connection: local
gather_facts: false
vars:
svm_host: "{{ svm_host }}"
svm_user: "{{ svm_user }}"
svm_password: "{{ svm_password }}"
svm_protocol: "{{ svm_protocol }}"
vserver: cifs100
size: 5
size_unit: GB
aggregate_name: aggr1_node2
volume_name: nfs100
junction_path: /nfs100
export_policy: default
tasks:
- name: Create volume
na_ontap_volume:
state: present
hostname: "{{ svm_host }}"
username: "{{ svm_user }}"
password: "{{ svm_password }}"
https: "{{ svm_protocol == 'https' }}"
vserver: "{{ vserver }}"
size: "{{ size }}"
size_unit: "{{ size_unit }}"
aggregate_name: "{{ aggregate_name }}"
volume_name: "{{ volume_name }}"
junction_path: "{{ junction_path }}"
export_policy: "{{ export_policy }}"
3. Playbookの修正
生成されたPlaybookに、以下環境情報部分のみ修正して試すとエラーが確認できました。
- SVMのホスト名またはIPアドレス
- SVMに接続するためのユーザー名
- SVMに接続するためのパスワード
- SVMに接続するためのプロトコル (SSHまたはHTTPS)
動作する為に実際に修正した部分は以下の項目です。
vars:の部分について
- 環境に合わせたIPやアカウント、プロトコルに変更
- size_unitの単位は小文字
task:について
-引数が誤っている部分を修正
volume_name: => name:
- ZAPI(REST APIを使わない)や認証エラーにならないように以下を追記
validate_certs: false
use_rest: Always
修正後のPlaybookは以下の通りです。
> cat playbook_volume_create.yml
---
- name: Create volume on ONTAP SVM
hosts: localhost
connection: local
gather_facts: false
vars:
svm_host: 172.16.10.147
svm_user: testuser
svm_password: XXXXXXX
svm_protocol: https
vserver: cifs100
size: 5
size_unit: gb
aggregate_name: aggr1_node2
volume_name: nfs100
junction_path: /nfs100
export_policy: default
tasks:
- name: Create volume
na_ontap_volume:
state: present
hostname: "{{ svm_host }}"
username: "{{ svm_user }}"
password: "{{ svm_password }}"
https: "{{ svm_protocol == 'https' }}"
vserver: "{{ vserver }}"
size: "{{ size }}"
size_unit: "{{ size_unit }}"
aggregate_name: "{{ aggregate_name }}"
name: "{{ volume_name }}"
junction_path: "{{ junction_path }}"
export_policy: "{{ export_policy }}"
validate_certs: false
use_rest: Always
修正後は以下のように問題無く挙動します。
> ansible-playbook -i inventory.yml -u user01 playbook_volume_create.yml --ask-pass -v
No config file found; using defaults
SSH password:
PLAY [Create volume on ONTAP SVM] ***************************************************************************************************
TASK [Create volume] ****************************************************************************************************************
changed: [localhost] => {"actions": ["create"], "changed": true}
PLAY RECAP **************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4. 生成されたPlaybookの修正部分の確認方法
とりあえず、何度も実行してエラーメッセージから確認してます。
例えば、以下のような結果となれば、volume作成に必要なnameという項目が使われてないので、生成されたPlaybookのVolume名の部分を修正することを試して行くといった形です。
> ansible-playbook -i inventory.yml -u user01 playbook_volume_create.yml --ask-pass -v
(中略)
TASK [Create volume] ****************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "missing required arguments: name"}
他に生成されたPlaybookではVolumeのサイズの単位がGBと大文字になってましたが、この場合は以下のエラーが出るので、小文字を使うという事が推測できます。
> ansible-playbook -i inventory.yml -u user01 playbook_volume_create.yml --ask-pass -v
(中略)
TASK [Create volume] ****************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "value of size_unit must be one of: bytes, b, kb, mb, gb, tb, pb, eb, zb, yb, got: GB"}
参考及びリンク
Ansibleを使ってStorage(ONTAP)を管理する1【Rocky LinuxへAnsible Install編】