Ansible 自定义变量
自定义变量简介
Ansible引入变量,可以方便Playbook重用,对于多次执行playbook,只要改变变量名即可,不用编写新的playbook。并且Ansible支持10种以上的变量定义方式,常用的变量来源如下:
- inventory变量,变量来自于主机清单文件
- facts变量
- playbook变量,变量在playbook中定义
- 变量文件,专门创建用于保存变量的文件
自定义变量应用
- inventory变量
# 改清单文件
[root@pubserver ansible]# vim inventory
[webservers]
web[1:2]
[dbs]
db1
[cluster:children]
webservers
dbs
[dbs]
db1 username="wangwu" # 定义主机变量
[webservers:vars] # 定义组变量
username="zhaoliu"
# 通过变量创建用户
[root@pubserver ansible]# vim var1.yml
---
- name: webservers create user
hosts: dbs,webservers
tasks:
- name: create user
user:
name: "{{username}}" # 调用变量
state: present
# 运行
[root@pubserver ansible]# ansible-playbook var1.yml
PLAY [webservers create user] *********************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************
ok: [db1]
ok: [web1]
ok: [web2]
TASK [create user] ********************************************************************************************************************************
changed: [web2]
changed: [web1]
changed: [db1]
PLAY RECAP ****************************************************************************************************************************************
db1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- facts 中定义变量
[root@pubserver ansible]# vim fact.yml
---
- name: copy
hosts: all
tasks:
- copy:
content: "{{ansible_hostname}}:{{ansible_bios_version}}" #主机名字和BIOS版本信息
dest: /tmp/facts.txt
# 运行
[root@pubserver ansible]# ansible-playbook fact.yml
PLAY [copy] ***************************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************
ok: [db1]
ok: [web2]
ok: [web1]
TASK [copy] ***************************************************************************************************************************************
changed: [db1]
changed: [web2]
changed: [web1]
PLAY RECAP ****************************************************************************************************************************************
db1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- playbook中定义 变量
[root@pubserver ansible]# vim user_jack.yml
---
- name: create user
hosts: webservers
vars: # 定义变量
username: "jack"
mima: "123456"
tasks:
- name: create some users
user:
name: "{{username}}" # 调用变量
state: present
password: "{{mima|password_hash('sha512')}}" # 调用变量
# 运行
[root@pubserver ansible]# ansible-playbook user_jack.yml
PLAY [create user] ********************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************
ok: [web2]
ok: [web1]
TASK [create some users] **************************************************************************************************************************
changed: [web1]
changed: [web2]
PLAY RECAP ****************************************************************************************************************************************
web1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 变量文件 定义变量
# 创建变量文件
[root@pubserver ansible]# vim vars.yml
---
mao: laohu
gou: lang
[root@pubserver ansible]# vim user_anm.yml
---
- name: create ani
hosts: webservers
vars_files: vars.yml # 调用变量文件
tasks:
- name: create amin
user:
name: "mao" # 调用变量
state: present
password: "{{gou|password_hash('sha512')}}" # 调用变量
# 运行
[root@pubserver ansible]# ansible-playbook user_anm.yml
PLAY [create ani] *********************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************
ok: [web2]
ok: [web1]
TASK [create amin] ********************************************************************************************************************************
changed: [web2]
changed: [web1]
PLAY RECAP ****************************************************************************************************************************************
web1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0