Ansible(八)-- ansible 中的变量(一) vars变量 vars_files变量

一、ansible 中的变量

1.作用:将playbook中的某些值使用变量代替,从而简化playbook的编写
2.变量简介:要创建的用户、要安装的软件包、要重启的服务、要删除的文件、要从互联网检索的文档
3.方法:变量名应该由字母、数字、下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名。
4.全局范围:从命令行或ansible配置设置的变量
play范围:在play和相关结构中设置的变量
主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
'如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围

二、vars定义变量

1、playbook中的变量(vars和vars_files)

方式一

在playbook开头的vars块中:

---
- host:all
  vars:
    user:student
    home:/home/student

也可以定义多个变量

vars:
  testvar1: testfile
  testvar2: testfile2

除了使用上述语法,使用YAML的块序列语法也可以定义变量,示例如下

vars:
  - testvar1: testfile
  - testvar2: testfile2

在定义变量时,还能够以类似”属性”的方式定义变量,示例如下

---
- hosts: testB
  remote_user: root
  vars:
    httpd:
      conf80: /etc/httpd/conf.d/80.conf
      conf8080: /etc/httpd/conf.d/8080.conf
  tasks:
  - name: task1
    file:
      path: "{{httpd.conf80}}"
      state: touch
  - name: task2
    file:
      path: "{{httpd.conf8080}}"
      state: touch

如上例所示,我定义了两个变量,两个变量的值对应两个httpd配置文件路径

vars:
    httpd:
      conf80: /etc/httpd/conf.d/80.conf
      conf8080: /etc/httpd/conf.d/8080.conf

引用变量

当我们需要引用这两个变量时,有两种语法可用

语法一

"{{httpd.conf80}}"

语法二

"{{httpd['conf8080']}}"

这样使用变量在逻辑上比较清晰,可以看出conf80与conf8080都属于httpd相关的配置。

上例中,我在引用变量时使用了双引号,而在本文的第一个示例中引用变量时却没有使用双引号,这是因为,第一个示例中的变量在被引用时,并没有处于”开头的位置”,第一个示例中变量被引用时如下

path: /testdir/{{ testvar1 }}

当file模块的path参数引用对应的变量时,先写入了/testdir/,然后才引用了testvar1变量,{{ testvar1 }}并没有处于”开头的位置”,换句话说就是,{{ testvar1 }}前面还有字符串/testdir/

而在上述后面的示例中引用变量时,变量被引用时如下,处于”开头的位置”

path: "{{nginx.conf80}}"

这种情况下,我们引用变量时必须使用双引号引起被引用的变量,否则会报语法错误。

方式二

在外部文件定义playbook变量(vars_files)
在playbook中引入包含变量的文件时,需要使用vars_files关键字,被引入的文件需要以- 开头,以YAML中块序列的语法引入,示例如下

---
- hosts: testB
  remote_user: root
  vars_files:
  - httpd_vars.yml
  tasks:
  - name: task1
    file:
      path={{httpd.conf80}}
      state=touch
  - name: task2
    file:
      path={{httpd['conf8080']}}
      state=touch

在外部文件中写入

语法一示例:

  testvar1: testfile
  testvar2: testfile2

语法二示例:

  - testvar1: testfile
  - testvar2: testfile2

语法三示例:

httpd:
  conf80: /etc/httpd/conf.d/80.conf
  conf8080: /etc/httpd/conf.d/8080.conf

上例中使用vars_files关键字引入了对应的变量文件,然后使用了文件中定义的变量。

上例中vars_files关键字只引入了一个变量文件,也可以引入多个变量文件,每个被引入的文件都需要以- 开头,示例如下

 vars_files:
  - /testdir/ansible/httpd_vars.yml
  - /testdir/ansible/other_vars.yml

“vars”关键字和”vars_files”关键字可以同时使用,如下

 vars:
  - conf90: /etc/httpd/conf.d/90.conf
  vars_files:
  - /testdir/ansible/httpd_vars.yml

方式三

主机和主机组变量

定义server1.example.com的ansible_user主机变量:

`[webservers]
server1.example.com    ansible_user=student`

定义dbservers主机组的user组变量:

`[dbserver]

dbserver1.example.com

dbserver2.example.com

[dbservers:vars]

user=student`

定义嵌套组user变量:

[servers1]node1.example.comnode2.example.com
[servers2]node3.example.comnode4.example.com

[servers:children]
servers1
servers2

[servers:vars]

user=studen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值