linux学习

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 

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注