使用Ansible来管理Storage(ONTAP)的3个【变量】
首先
本文是在继续之前【Rocky Linux安装Ansible篇】使用Ansible管理Storage(ONTAP)的内容, 接下来将涉及到为ONTAP管理而创建的清单文件和Playbook的内容。
本次内容相对较少, 主要记录了清单文件的分组和变量。
你想做什么?可以吗?
-
- インベントリファイルへグループ名を記載してAnsibleのPlaybookを実行する
-
- インベントリファイルに変数を追記してみる
- ONTAPの操作の際にインベントリファイルへ変数を記載してみる
关于ONTAP的Ansible模块
使用Ansible进行ONTAP卷和LIF的创建以及任务执行时,对应于每个所谓的CIL操作命令存在相应的Ansible模块,因此使用相关模块来进行管理操作。
此外,执行每个模块时需要ONTAP的认证信息。(不可省略)
为了减少繁琐的步骤,可以在清单文件中使用变量来减少在每个任务中重复填写身份验证信息。因此,可以尝试在该文章中像以下的图片一样通过在同一份脚本中列出DNS设置和卷删除的内容并执行,但仍然需要分别填写身份验证信息。
关于变量对应的库存文件
除了将变量写入不同的文件之外,还可以设置以下两项。
-
- ホスト変数
- グループ変数
在清单文件中,您需要记录要操作的目标(服务器等)。对于这些操作目标,您可以在文件中进行分组。
在清单文件中列出的目标主机名及以下列出的变量将成为主机变量,变量将在创建的组中以vars:以下的方式列出,成为组变量。
在文章中的环境信息
本文介绍了我们在以下环境下进行的实施内容。
-
- Rocky Linux : 9.1
-
- Python : 3.9.14
-
- Ansible (Core): 2.14.1
-
- netapp-lib : 2021.6.25
- netapp.ontap : 22.1.0
以下是对环境的描述:
设置步骤
首先,我们要先确认关于分组指定行为的差异,然后将变量添加到清单文件中,以确认其行为如何。最后,我们将确认在清单文件中添加ONTAP变量是否能正常运行。
1. 修正库存文件
以以下方式描述库存文件:
-
- 全ホストはallというグループに所属
-
- Linuxというホストは階層化された子グループに所属しない
- Ansibleというホストはall以下にあるgroup01という子グループに所属
> cat inventory.yml
---
all:
hosts:
Linux:
ansible_host: 172.16.10.148
children:
group01:
hosts:
Ansible:
ansible_host: 172.16.10.180
...
2. 制定Playbook
> cat playbook_ping.yml
---
- name: "Ping all hosts"
hosts: all
gather_facts: no
tasks:
- name: "Ping all hosts"
ping:
...
3. 执行针对所有目标的Playbook。
Playbook会对Playbook中指定的所有主机(host: all)进行ping测试,因此将对清单文件中的两个主机进行ping操作。
> ansible-playbook -i inventory.yml -u user01 playbook_ping.yml --ask-pass
SSH password:
PLAY [Ping all hosts] ***************************************************************************************************************
TASK [Ping all hosts] ***************************************************************************************************************
ok: [Linux]
ok: [Ansible]
PLAY RECAP **************************************************************************************************************************
Ansible : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Linux : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
指定使用group01,并执行Playbook。
可以使用相同的清单文件和Playbook,但是通过在ansible-playbook中使用-l选项指定group01,可以指定操作的目标。
> ansible-playbook -i inventory.yml -l group01 -u user01 playbook_ping.yml --ask-pass
SSH password:
PLAY [Ping all hosts] ***************************************************************************************************************
TASK [Ping all hosts] ***************************************************************************************************************
ok: [Ansible]
PLAY RECAP **************************************************************************************************************************
Ansible : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在Playbook的执行中,将主机变量和组变量记录在清单文件中。
以前我们在执行ansible-playbook命令时,需要使用–u user01来指定用户名,并且通过–ask-pass参数来每次手动输入密码。现在我们将帐户信息添加到清单文件中,以确保在不指定–ask-pass的情况下执行。
组变量将被记录在主机名下的vars:中。
此外,清单文件如下所示,直接以账号写入(在这里并没有进行加密)。
> cat inventory2.yml
---
all:
hosts:
Linux:
ansible_host: 172.16.10.148
ansible_user: user01
ansible_password: XXXXXXX
children:
group01:
vars:
ansible_user: user02
ansible_password: XXXXXXX
hosts:
Ansible:
ansible_host: 172.16.10.180
通过在清单文件中记录帐户信息,确认在不指定-u选项和–ask-pass选项的情况下,Playbook能够正常运行。
> ansible-playbook -i inventory2.yml playbook_ping.yml
PLAY [Ping all hosts] ***************************************************************************************************************
TASK [Ping all hosts] ***************************************************************************************************************
ok: [Linux]
ok: [Ansible]
PLAY RECAP **************************************************************************************************************************
Ansible : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Linux : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
6. 如果要对变量的值进行加密处理
从安全角度考虑,一些不想直接记录的信息,如账户信息,可以使用Ansible Vault对变量的值进行加密。
使用ansible-vault encrypt_string命令,将以!vault |开头的加密字符串输出写入到清单文件中,与以下示例类似。
在执行命令后的”New Vault password”部分,使用ansible-playbook命令的参数–ask-vault-pass来输入用于解密的密码。
在从标准输入读取明文输入之后,输入想要加密的字符串,并通过[Crtl+d]结束输入。以下是对字符串”passtest123456″进行加密的示例。
> ansible-vault encrypt_string
New Vault password:
Confirm New Vault password:
Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a newline)
passtest123456
Encryption successful
!vault |
$ANSIBLE_VAULT;1.1;AES256
34656638373035666334323431646138383437386132646230386132386237653934346532366538
3833636438333237316135303262613066336531646338340a393563633838633636653530356235
37363262343362303338643835666637653638373434643463306135383636653034386365353434
6266366463316166300a663166353165383061633235363135343066646561656138643561343163
3534
当写入到库存文件中时,会变成以下的形式。
> cat inventory3.yml
---
all:
hosts:
Linux:
ansible_host: 172.16.10.148
ansible_user: user01
ansible_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
34656638373035666334323431646138383437386132646230386132386237653934346532366538
3833636438333237316135303262613066336531646338340a393563633838633636653530356235
37363262343362303338643835666637653638373434643463306135383636653034386365353434
6266366463316166300a663166353165383061633235363135343066646561656138643561343163
3534
children:
group01:
vars:
ansible_user: user02
ansible_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
34656638373035666334323431646138383437386132646230386132386237653934346532366538
3833636438333237316135303262613066336531646338340a393563633838633636653530356235
37363262343362303338643835666637653638373434643463306135383636653034386365353434
6266366463316166300a663166353165383061633235363135343066646561656138643561343163
3534
hosts:
Ansible:
ansible_host: 172.16.10.180
如果要使用加密信息来执行Playbook,则使用–ask-vault-pass选项。
(输入解密密码,该密码是使用ansible-vault encrypt_string指定的)
> ansible-playbook -i inventory3.yml playbook_ping.yml --ask-vault-pass
Vault password:
PLAY [Ping all hosts] ***************************************************************************************************************
TASK [Ping all hosts] ***************************************************************************************************************
ok: [Linux]
ok: [Ansible]
PLAY RECAP **************************************************************************************************************************
Ansible : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Linux : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
将ONTAP账户写入清单文件并执行PlayBook
在使用组变量进行ONTAP管理并修改到清单文件之前,Playbook会对以下内容进行修正。
-
- svm_userとsvm_passwordをの値部分を変数で表記 (実際の値を記載しない)
- hostsをgroup01に変更
> cat playbook_svm_info2.yml
---
- name: ONTAP Info
hosts: group01 <===localhostからgroup01に変更
collections: netapp.ontap
gather_facts: no
become: no
vars:
ansible_python_interpreter: /usr/bin/python3
tasks:
- name: run ONTAP gather facts for vserver info
na_ontap_rest_info:
hostname: 172.16.10.147
username: "{{ svm_user }}" <===インベントリファイルへ記載する変数で表記
password: "{{ svm_password }}" <===インベントリファイルへ記載する変数で表記
https: true
validate_certs: false
use_rest: Always
gather_subset:
- svm/svms
在清单文件中,记录Playbook使用的变量。
在这个示例中,我们对变量值进行了加密,并追加了以下内容。
- svm_userとsvm_passwordという変数と値をgroup01のvarsに追記
> cat inventory3.yml
---
all:
hosts:
Linux:
ansible_host: 172.16.10.148
ansible_user: user01
ansible_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
33353737376639653965653233323430323862313632343565316131333165343830333734313364
3661363233333031646339613563336464323537383562310a366533653838326431613364653962
34346237303536356634633732626339306633393730383161626462356333306161653430616635
3931393763303335320a623461363535346566643930373435373738613361663164303461383731
3735
children:
group01:
vars:
ansible_user: user02
ansible_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
36353130623338613735653864656431633735316464303133373964323066383632643434323735
6564343162636463343736656530646233343839326338620a363036313734663931303931663630
66396166383830396662306263326361653062303230373863313166353964616630363131363263
3334616537616365360a383633383762363665353634303036653866386165646635386133336266
3165
svm_user: testuser
svm_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
33353737376639653965653233323430323862313632343565316131333165343830333734313364
3661363233333031646339613563336464323537383562310a366533653838326431613364653962
34346237303536356634633732626339306633393730383161626462356333306161653430616635
3931393763303335320a623461363535346566643930373435373738613361663164303461383731
3735
hosts:
Ansible:
ansible_host: 172.16.10.180
执行使用Playbook的ONTAP
在这个例子中,我们对账户信息进行了加密。因此,在执行ansible-playbook时,需要使用–ask-vault-pass选项来输入解密密码并执行。
> ansible-playbook -i inventory3.yml playbook_svm_info2.yml --ask-vault-pass -v
No config file found; using defaults
Vault password:
PLAY [ONTAP Info] *******************************************************************************************************************
TASK [run ONTAP gather facts for vserver info] **************************************************************************************
ok: [Ansible] => {"changed": false, "ontap_info": {"svm/svms": {"_links": {"self": {"href": "/api/svm/svms?max_records=1024&fields="}}, "num_records": 1, "records": [{"_links": {"self": {"href": "/api/svm/svms/0cda076f-59a4-11ed-9583-d039ea17268b"}}, "name": "cifs100", "uuid": "0cda076f-59a4-11ed-9583-d039ea17268b"}]}}}
PLAY RECAP **************************************************************************************************************************
Ansible : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
参考和链接 jí
使用Ansible来管理Storage(ONTAP)的教程:【在Rocky Linux上安装Ansible】
利用Ansible管理存储(ONTAP)的2个【使用ChatGPT创建卷的Playbook】。