Linux Ansible自动化运维 setup模块 debug模块

本文详细介绍了Ansible中变量的定义、引用及文件分离,强调了setup模块在收集远程主机信息中的作用,并展示了如何使用debug模块进行调试。通过setup模块获取的主机信息保存在特定变量中,可以在playbook中引用这些变量进行条件判断或其他操作。
摘要由CSDN通过智能技术生成

一、ansible 中的变量

在ansible中使用变量,能让我们的工作变得更加灵活,在ansible中,变量的使用方式有很多种。

变量的定义

先说说怎样定义变量,变量名应该由字母、数字、下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名。

由于之前的几篇文章都是在通过剧本举例,所以我们先看怎样在playbook中使用变量。

如果我们想要在某个play中定义变量,可以借助vars关键字,示例如下

---
- hosts: testB
  vars:
    testvar1: testfile
  remote_user: root
  tasks:
  - name: task1
    file:
      path: /testdir/{
   {
    testvar1 }}
      state: touch

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上例中,先使用vars关键字,表示在当前play中进行变量的相关设置。

vars关键字的下一级定义了一个变量,变量名为testvar1,变量值为testfile

当我们需要使用testvar1的变量值时,则需要引用这个变量,如你所见,使用{ { 变量名 }}可以引用对应的变量。

定义多个变量

也可以定义多个变量,示例如下。

vars:
  testvar1: testfile
  testvar2: testfile2

 
 
 
  • 1
  • 2
  • 3

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

vars:
  - testvar1: testfile
  - testvar2: testfile2

 
 
 
  • 1
  • 2
  • 3

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

---
- 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

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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

 
 
 
  • 1
  • 2
  • 3
  • 4

引用变量

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

语法一

"{
   {httpd.conf80}}"

 
 
 
  • 1

语法二

"{
   {nginx['conf8080']}}"

 
 
 
  • 1

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

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

path: /testdir/{
   {
    testvar1 }}

 
 
 
  • 1

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

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

path: "{
   {nginx.conf80}}"

 
 
 
  • 1

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

其实,上述情况也有例外

前文中有描述过,当在playbook中为模块的参数赋值时,可以使用”冒号”,也可以使用”等号”,当使用”等号”为模块的参数赋值时,则不用考虑引用变量时是否使用”引号”的问题,示例如下

---
- hosts: testB
  remote_user: root
  vars:
    httpd:
      conf80: /etc/httpd/conf.d/80.conf
      conf8080: /etc/httpd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值