24-Ansible-Playbook使用变量

一、Playbook中使用变量

变量名仅能由字母、数字和下划线组成,且只能以字母开头

  • 1、变量定义:
    • variable=value
    • 例: http_port=80
  • 2、变量调用方式:
    • 通过{{ variable_name }} 调用变量,且变量名前后建议加空格,有时用“{{ variable_name }}”才生效

变量来源

  • 1.ansible 的 setup facts 远程主机的所有变量都可直接调用
  • 2.通过命令行指定变量,优先级最高
ansible-playbook -e varname=value
  • 3.在playbook文件中定义
   vars:
 - var1: value1
 - var2: value2
  • 4.在独立的变量YAML文件中定义
 - hosts: all
  vars_files:
 - vars.yml
  • 5.在 /etc/ansible/hosts 中定义
    • 主机(普通)变量:主机组中主机单独定义,优先级高于公共变量
    • 组(公共)变量:针对主机组中所有主机定义统一变量
  • 6.在role中定义

使用 setup 模块中变量

[root@Ansible ~]# cat var.yml 
---
 - name: varl
  hosts: all
  gather_facts: yes
  tasks:
 - name: create log file
    file: name=/data/{{ ansible_nodename }}.log state=touch owner=t1 mode=600
  • 受控端主机:
[root@CentOSA data]# ll -lh
total 0
-rw-------. 1 t1 root 0 Feb 25 16:48 CentOSA.log
[root@CentOSB data]# ll -lh
total 0
-rw-------. 1 t1 root 0 Feb 25 16:47 CentOSB.log

在playbook 命令行中定义变量

[root@Ansible ~]# cat var2.yml 
---
- name: var2
  hosts: all
  tasks:
  - name: install package
    yum: name={{ pkname }} state=present

在这里插入图片描述

在playbook文件中定义变量

[root@Ansible ~]# cat var3.yml 
---
 - name: var3
  hosts: all
  vars:
 - username: user1
 - groupname: group1
  tasks:
 - name: create group
    group: name={{ groupname }} state=present
 - name: create user
    user: name={{ username }} group={{ groupname }} state=present

在这里插入图片描述
使用变量文件

  • 在一个独立的playbook文件中定义变量,在另一个playbook文件中引用变量文件中的变量,比playbook中定义的变量优化级高
[root@Ansible ~]# cat /root/vars.txt 
package_name: mariadb-server
service_name: mariadb
[root@Ansible ~]# cat var4.yml 
---
- name: var3
  hosts: all
  vars_files:
  - /root/vars.txt
  tasks:
  - name: install package
    yum: name={{ package_name }}
    tags: install
  - name: start service
    service: name={{ service_name }} state=started enabled=yes

在这里插入图片描述

[root@Ansible ~]# cat vars2.yml 
---
var1: httpd
var2: nginx
[root@Ansible ~]# cat var5.yml 
---         
 - name: var5
  hosts: all
  vars_files:
 - vars2.yml
  tasks:
 - name: create httpd log
    file: name=/opt/{{ var1 }}.log state=touch
 - name: create nginx log
    file: name=/opt/{{ var2 }}.log state=touch

在这里插入图片描述

[root@CentOSA opt]# ll -lh *.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 httpd.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 nginx.log
[root@CentOSB opt]# ll -lh *.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 httpd.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 nginx.log

主机清单文件中定义变量

  • 主机变量:
    • 在inventory 主机清单文件中为指定的主机定义变量以便于在playbook中使用
[websrvs]
www1.magedu.com http_port=80 maxRequestsPerChild=808
www2.magedu.com http_port=8080 maxRequestsPerChild=909
  • 组(公共)变量
    • 在inventory 主机清单文件中赋予给指定组内所有主机上的在playbook中可用的变量,如果和主机变是同名,优先级低于主机变量
[websrvs]
www1.magedu.com
www2.magedu.com

[websrvs:vars]
ntp_server=ntp.magedu.com
nfs_server=nfs.magedu.com
[websrvs]
192.168.0.101 hname=www1 domain=magedu.io
192.168.0.102 hname=www2 

[websvrs:vars]
mark=“-”
domain=magedu.org

ansible  websvrs  –m hostname –a ‘name={{ hname }}{{ mark }}{{ domain }}bash
#命令行指定变量: 
ansible  websvrs  –e domain=magedu.cn –m hostname –a    ‘name={{ hname }}{{ mark }}{{ domain }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值