Ansible之Playbook中使用变量

Playbook中同样也支持变量
变量名:仅能由字母、数字和下划线组成,且只能以字母开头

变量定义:

variable=value
variable: value

范例:

http_port=80
http_port: 80

变量调用方式:

通过{ { variable_name }} 调用变量,且变量名前后建议加空格,有时用"{ { variable_name }}"才生效

变量来源:

  1. ansible 的 setup facts 远程主机的所有变量都可直接调用
  2. 通过命令行指定变量,优先级最高
[root@centos8 ~]# ansible-playbook -e varname=value test.yml
  1. 在playbook文件中定义
vars:
  var1: value1
  var2: value2
  1. 在独立的变量YAML文件中定义
- hosts: all
  vars_files:
    - vars.yml
  1. 在主机清单文件中定义
    主机(普通)变量:主机组中主机单独定义,优先级高于公共变量
    组(公共)变量:针对主机组中所有主机定义统一变量
  2. 在项目中针对主机和主机组定义
    在项目目录中创建 host_vars和group_vars目录
  3. 在role中定义

变量的优先级从高到低如下

-e 选项定义变量 -->playbook中vars_files --> playbook中vars变量定义 -->host_vars/主机名文件 -->主机清单中主机变量--> group_vars/主机组名文件-->group_vars/all文件--> 主机清单组 变量
使用 setup 模块中变量

本模块自动在playbook调用,不要用ansible命令调用,生成的系统状态信息, 并存放在facts变量中
facts 包括的信息很多,如: 主机名,IP,CPU,内存,网卡等

facts 变量的实际使用场景案例

通过facts变量获取被控端CPU的个数信息,从而生成不同的Nginx配置文件
通过facts变量获取被控端内存大小信息,从而生成不同的memcached的配置文件
通过facts变量获取被控端主机名称信息,从而生成不同的Zabbix配置文件
....

案例:使用setup变量

[root@centos8 ~]# ansible 172.31.0.28 -m setup -a 'filter="ansible_default_ipv4"'
172.31.0.28 | SUCCESS => {
    "ansible_facts": {
        "ansible_default_ipv4": {
            "address": "172.31.0.28",
            "alias": "eth0",
            "broadcast": "172.31.255.255",
            "gateway": "172.31.0.254",
            "interface": "eth0",
            "macaddress": "00:0c:29:ac:f5:a4",
            "mtu": 1500,
            "netmask": "255.255.0.0",
            "network": "172.31.0.0",
            "type": "ether"
        },
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false
}

[root@centos8 ~]# ansible 172.31.0.28 -m setup -a 'filter="ansible_nodename"'
172.31.0.28 | SUCCESS => {
    "ansible_facts": {
        "ansible_nodename": "centos8.longxuan.vip",
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false
}

范例:

---
# var1
- hosts: websrvs
  remote_user: root
  gather_facts: yes
  tasks:
    - name: create log file
      file: name=/data/{
  { ansible_nodename }}.log state=touch owner=long mode=600

执行

[root@centos8 ~]# ansible-playbook var1.yml

范例: 显示 eth0 网卡的 IP 地址

- hosts: websrvs
  tasks:
    - name: show eth0 ip address {
  { ansible_facts["eth0"]["ipv4"]["address"]}}
      debug:
        msg: ip address {
  { ansible_eth0.ipv4.address }}

执行

[root@centos8 ~]# ansible-playbook -v show_ip.yml 
Using /etc/ansible/ansible.cfg as config file

PLAY [websrvs] *********************************************************************************

TASK [Gathering Facts] *************************************************************************
ok: [172.3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值