4
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を使ってStorage(ONTAP)を管理する2【ChatGPTでVolume作成用Playbookを作成】

Last updated at Posted at 2022-12-26

はじめに

本記事では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
qiita-square

実行手順

ChatGPTの利用にあたってはまずOpen AIにアカウント作成が必要になります。

1. OpenAIのアカウント作成

ChatGPTのサイトにアクセスし、[Sign UP]をクリックします。
qiita-square

次に表示された画面で、メールアドレスを入力し、[I'm not a robot]にチェックを入れ、画面に表示される質問に従って、適切な画像を選択し[Verify]をクリック後[Continue]を選択します。
qiita-square

パスワード設定後に、[Continue]を選択します。
qiita-square

アカウント作成時に入力したメールアドレスに確認メールが飛ぶので、メール上の[Verify email address]をクリックします。
qiita-square
qiita-square

表示された画面下方に文章を入力する事で会話やコード生成が実施されます。
qiita-square

2. 条件を入力

本記事では以下の文章を入力して作成しています。

ONTAPのSVMに接続してVolume作成を行うAnsibleのPlaybookを作って

Volume作成の条件は以下の通り
・Vserver名はcifs100
・サイズは5GB
・Aggregateはaggr1_node2
・Volume名はnfs100
・JunctionPathは/nfs100
・ExportPolicyはdefault

結果は以下の画像のような形ですが、画像生成AIのStable Diffusionのように入力時の表現次第で出力が変わってくるので、色々と試してみることが良いと思います。

014.png

 

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編】

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