————————————————

Ansible变量

1 ansible变量的作用
主要用于保存Ansible运维操作中所需使用的信息
通过对变量值的更改或者变量值的读取,可以对Ansible运维操作进行灵活的管控
一方面能提升运维的自动化程度,另一方面也能实现更为复杂的运维功能

2 Ansible变量的类型

inventory变量(主机与主机组)
task任务变量
play变量
register注册变量
facts主机信息变量
命令行变量

3 Ansible变量的使用
在ad hoc命令行的模块参数中使用:{{变量名}}

在playbook中使用:在任务的模块参数中使用: {{变量名}}

inventory变量——在主机清单文件中定义

1)inventory主机变量
针对主机的变量,不同主机的变量值可以不同
2)inventory主机组变量
主机组中所有主机共享的变量

task变量——在任务中定义的变量
定义方式
在任务中使用vars键值对

vars:
 变量1: 值1
 变量2: 值2
 …
 变量N:值N

4 play变量——在某一play中定义的变量
定义方式
1)通过vars键值对定义变量

vars:
 变量1: 值1
 变量2: 值2
 …
 变量N:值N

2)通过外部文件定义变量,并将变量引入play中

vars_files:
  - 外部文件的路径列表

注:外部文件也是yml文件,并且其中只包含了变量的定义

变量存储数据的类型

整型(int)
浮点型(float)
布尔型(bool)
字符串
列表
字典

5 facts变量
facts信息:由ansible setup模块获得的远程主机的信息
facts变量:用于保存facts信息的变量,称为 facts变量
默认情况下,在play中的任务执行之前,ansible会自动收集远程主机的facts信息,并存放在相应facts变量中
facts变量由ansible自动创建,通常情况下无需手动定义facts变量

访问ansible_facts变量
方法1:通过点号引用
ansible_facts.键名
方法2:通过[ ]引用(推荐)
ansible_facts[ '键名' ]
eg1:

---
- hosts: group1
  tasks:
     - name: show memory
       debug:
           msg: "{{ansible_facts['memory_mb']['real']['total']}}"
#显示被管理主机的实际内存大小

eg2:

---
- hosts: group1
  tasks:
     - name: show uptime
       debug:
           msg: "{{ansible_facts['uptime_seconds']}}"
#显示主机的运行时间

6 register变量
register变量用于保存当前任务的执行结果,变量在任务中定义

---
- name: task任务的描述性信息
  模块名: 模块参数
  register: 变量名

eg:

---
- hosts: group1
  tasks:
     - name: show register variable value
       ping:
       register: result 
    - name: show result
      debug: 
          msg: "{{result}}"
#把ping执行结果保存在保存在result中,并通过debug显示

7 命令行变量
通过ansible-playbook命令定义与传递变量

ansible-playbook -e “变量1=值1 变量2=值2 …”
eg:

---
- name: play 1
  hosts: group1
  tasks:
     - name: show task variable
       debug:
           msg: "{{service}} is {{state}}"
 #playbook中定义service 和 state变量名 
ansible-playbook test.yml  -i myhosts -e "service=vsftpd state=stopped"
 #命令行传参直接把值赋给变量名

8 变量的作用域
全局作用域——在playbook的任何位置都能够访问该变量
命令行变量具有全局作用域

Host作用域——该变量能够被对应主机的所有相关任务访问(这些任务可以是属于不同play的)
Inventory主机变量/注册变量/facts变量

Play作用域——变量只能被其所在的play访问
Play变量具有Play作用域

task作用域——变量只能被其所在的task访问
task变量具有task作用域

9 变量的优先级
通常情况下,作用域越小的变量,优先级越高
当两个变量的变量名相同时,优先级低的变量会被优先级高的变量覆盖

10 变量引用的注意事项
采用键值对形式提供模块参数时,如果键值对冒号:后面紧跟着对变量的引用,则必须使用双引号或单引号将参数的值整个包含起来

posted @ 2022-11-20 14:19  Tjane'Blogs  阅读(195)  评论(0编辑  收藏  举报