Ansible教程:Variables


在Ansible中,可以定义及使用各种类型的变量,下面依次进行介绍。

Ansible自动收集的系统变量

在运行任何一个Ansible命令/playbook的时候,Ansible都会先运行setup模块,搜集被控制主机的信息,并将这些信息保存到系统变量中。因此在playbook中可以直接使用这些变量。

Inventory变量

首先可以在inventory中定义变量:

text
[dev]
150.230.127.2 var1="test inventory variable"

接下来就可以在playbook中使用变量:

yaml
---
- hosts: dev
  tasks:
    - name: load content from variable
      shell: echo "{{ var1 }}" > /tmp/testvar.txt

读取系统变量

yaml
---
- hosts: dev
  tasks:
    - name: save system info to file
      shell: echo "RAM {{ansible_memtotal_mb}} MB" > /tmp/sysinfo.txt

通过命令行传递变量给ansible-playbook

bash
ansible-playbook xxx.yml -e uname="lcoding" upass="testpass"

使用register将某个命令的执行结果保存到变量中

yaml
---
- hosts: dev
  tasks:
    - name: save info to variable
      shell: whoami
      register: var1
    - name: print username
      debug:
        msg: "{{var1}}"

如果上面的变量 var1 中还有其他的属性,可以通过 “.” 来进行访问。比如:var1.stdout

在playbook中定义变量

yaml
---
- hosts: dev
  vars:
    uname: lcoding
    upass: 'testpass'  # 密码必须以字符串方式定义
  tasks:
    - name: Pass variables to user module
      user:
        name: "{{uname}}"
        password: "{{upass | password_hash('sha512')}}"

通过命令行交互获取用户名及密码

yaml
---
- hosts: dev
  vars_prompt:
    - name: uname
      prompt: "Enter your username"
      private: no
    - name: upass
      prompt: "Enter your password"
      private: yes
  tasks:
    - name: Pass variables to user module and create a user
      user:
        name: "{{uname}}"
        password: "{{upass | password_hash('sha512')}}"

通过专门的文件定义变量

创建文件:credentials.yml

yaml
---
uname: lcoding
upass: 'testpass'

然后就可以在playbook中引用它:

yaml
---
- hosts: dev
  var_files: credentials.yml
  tasks:
  # ......

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !