はじめに
本記事ではAnsibleを使ってStorage(ONTAP)を管理する3【変数編1】の続きとして、ONTAP管理の為のインベントリファイルやPlaybook作成に関する内容となります。
今回は主にPlaybook内に記載する変数(主にvars)について記載を致します。
何をしたい?できる?
- PlaybookのVarsセクションで変数の設定を行う
- コマンドラインから変数を指定して実行する
- 変数を別ファイルとして作成し、Playbook内で変数用ファイルを指定して実行
- 変数の値を対話的に入力して処理を実行する
ONTAPの Ansibleモジュールについて
AnsibleからONTAPのVolume作成やNFSサービスの開始を実施する際には、認証情報や対象のSVMなどのオブジェクトを指定して実行が必要になります。
(省略できない)
以下の図のように、仮にVolume作成とNFSサービス開始を同一のPlaybookに記載して実行しようとしても認証情報やSVM名を夫々記載しなくてはいけない為、各タスクに直接記載するのは冗長な形になります。
![]() |
---|
この記事では、その手間を減らすために、PlayBookのVarsセクションに変数を記載して動作を確認してみるといった内容となります。
記事における環境情報
本記事では、以下の環境で実施した内容となります。
- Rocky Linux : 9.1
- Python : 3.9.14
- Ansible (Core): 2.14.1
- netapp-lib : 2021.6.25
- netapp.ontap : 22.1.0
環境のイメージとしては以下の通りです。
![]() |
---|
設定手順
1. Varsセクションによる変数指定(Play変数)
ONTAPにVolumeを作成するTaskを記載したPlaybookを以下のように記載して実行します。
tasksの部分には値を直接記載せずに、上方にあるvarsの部分に纏めて記載しています。
Volume名を例にすると、taskにはname: "{{ volume_name }}"と記載し、
vars部分に volume_name: nfs100することで、nfs100というVolumeを作成する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: XXXXXX
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
Playbookを実行後、varsに記載された値でvolumeが作成されているのがStorage上で確認することができます。
> ansible-playbook -i inventory.yml -u user01 playbook_volume_create.yml --ask-pass
SSH password:
PLAY [Create volume on ONTAP SVM] ***************************************************************************************************
TASK [Create volume] ****************************************************************************************************************
changed: [localhost]
PLAY RECAP **************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Storage上の確認では以下の通り、nfs100というVolumeが5GBで作成されています。
vol show -vserver cifs100
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
cifs100 cifs100_root aggr1_node2 online RW 1GB 972.0MB 0%
cifs100 cifsvol100 aggr1_node1 online RW 3GB 2.03GB 28%
cifs100 nfs100 aggr1_node2 online RW 5GB 4.75GB 0%
3 entries were displayed.
2. コマンドによる変数指定(extra変数)
そのまま続けて、Volume名とVolumeサイズをPlaybookとは別の値にしてコマンド上で指定して実行してみます。
(名前をnfs123で、サイズは45、junction_pathは/nfs123を指定しています)
ansible-playbookコマンドに-eを使用することで変数の指定が可能になります。
> ansible-playbook -i inventory.yml -u user01 playbook_volume_create.yml -e "volume_name=nfs123 size=45 junction_path=/nfs123" --ask-pass
SSH password:
PLAY [Create volume on ONTAP SVM] ***************************************************************************************************
TASK [Create volume] ****************************************************************************************************************
changed: [localhost]
PLAY RECAP **************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Storage側で作成結果を見てみると、コマンドラインで指定した値が優先されている為、45GBのVolumeが作成されているのが確認できます。
> vol show -vserver cifs100
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
cifs100 cifs100_root aggr1_node2 online RW 1GB 971.9MB 0%
cifs100 cifsvol100 aggr1_node1 online RW 3GB 2.03GB 28%
cifs100 nfs100 aggr1_node2 online RW 5GB 4.75GB 0%
cifs100 nfs123 aggr1_node2 online RW 45GB 42.75GB 0%
4 entries were displayed.
3. 変数を別ファイルにしてPlaybookの実行
手順2までに作成したVolumeを削除後に、Playbookのvarsの部分を別ファイルに記載して、Playbookではvars_filesの部分に、変数を記載した別ファイルを指定して実行します。
ファイルの構成は以下の通りです。
Playbookは以下のようにvarsではなく、vars_filesを使い変数用ファイルのパスを記載します。
> cat playbook_volume_create2.yml
---
- name: Create volume on ONTAP SVM
hosts: localhost
connection: local
gather_facts: false
vars_files:
- vars/vol_create_vars.yml
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
変数を記載したファイルの内容は以下となります。
> cat vars/vol_create_vars.yml
svm_host: 172.16.10.147
svm_user: testuser
svm_password: XXXXXX
svm_protocol: https
vserver: cifs100
size: 5
size_unit: gb
aggregate_name: aggr1_node2
volume_name: nfs100
junction_path: /nfs100
export_policy: default
Playbookを実行します。
> nsible-playbook -i inventory.yml -u user01 playbook_volume_create2.yml --ask-pass
SSH password:
PLAY [Create volume on ONTAP SVM] **************************************************************************************************
TASK [Create volume] ***************************************************************************************************************
changed: [localhost]
PLAY RECAP *************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Storage側で作成結果を見てみると、別ファイルで指定した内容のVolumeが作成されている事が確認できます。
> vol show -vserver cifs100
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
cifs100 cifs100_root aggr1_node2 online RW 1GB 971.8MB 0%
cifs100 cifsvol100 aggr1_node1 online RW 3GB 2.03GB 28%
cifs100 nfs100 aggr1_node2 online RW 5GB 4.75GB 0%
3 entries were displayed.
4. 変数を対話的に入力してPlaybookの実行
パスワードや実行環境によって異なる値を入れたい場合にPlaybookの実行のタイミングで変数を入力することができます。
利用するにはPlaybook上でvars_promptに対話的に入力したい変数を指定します。
指定可能な主な要素は以下の通りです。
要素 | 概要 |
---|---|
name | 変数名を入力 |
prompt | 入力する時にプロンプトに表示される文字列 |
private | trueの時は入力中の値が画面に表示されない |
confirm | trueの時は値の再入力が必要 |
ここではSVMのユーザ名とパスワードを対話的に入力する為に、変数用のファイル上の記載を削除しておきます。
ファイルの内容は以下の通りで、変数用のファイルからはsvm_user: testuserとsvm_password: XXXXXXが無くなっているのが確認でき、Playbookには対話的にsvm_userとsvm_passwordを入力するようにvars_promptの記載を行います。
> cat playbook_volume_create2.yml
---
- name: Create volume on ONTAP SVM
hosts: localhost
connection: local
gather_facts: false
vars_files:
- vars/vol_create_vars.yml
vars_prompt:
- name: svm_user
prompt: Enter SVM User Name!
private: false
- name: svm_password
prompt: Enter SVM Password!
private: true
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
> cat vars/vol_create_vars.yml
svm_host: 172.16.10.147
svm_protocol: https
vserver: cifs100
size: 5
size_unit: gb
aggregate_name: aggr1_node2
volume_name: nfs100
junction_path: /nfs100
export_policy: default
Playbookの実行を行うと、vars_promptに記載したprompt表示("Enter SVM User Name!"の部分)
が確認できるので、変数の値を入力します。
> ansible-playbook -i inventory.yml -u user01 playbook_volume_create2.yml --ask-pass
SSH password:
Enter SVM User Name!: testuser
Enter SVM Password!:
PLAY [Create volume on ONTAP SVM] ************************************************************************************************
TASK [Create volume] *************************************************************************************************************
changed: [localhost]
PLAY RECAP ***********************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
参考及びリンク
Ansibleを使ってStorage(ONTAP)を管理する1 【Rocky LinuxへAnsible Install編】
Ansibleを使ってStorage(ONTAP)を管理する2【ChatGPTでVolume作成用Playbookを作成】