1.只能包含下划线,数字,字母,只能下划线和字母开头
play》主机》全局
举个例子:
vars:
NAME:就是变量
NAME可以是A,也可以是B
user模块换行缩进,"{{NAME}}"是ansible中的格式

[root@serverb mnt]# id chihao
uid=1001(chihao) gid=1001(chihao) groups=1001(chihao)

受控机已经建立了名为chihao的用户
(2)也可以在文件中指定变量:

[root@bastion ansible]# vim user.yml

在里面写入:
把刚才的playbook改成:

这样也可以执行。在文件中指定变量 ,格式如此:
(3)在清单里指定变量

在清单写:
prod组作为变量
然后修改刚才的playbook

[root@serverb mnt]# id niubi
uid=1003(niubi) gid=1003(niubi) groups=1003(niubi)

受控主机也建立了新用户

(4)命令指定变量

[root@bastion ansible]# ansible-playbook test.yml -e "NAME=hahaha"PLAY [test] ********************************************************************************************************************************TASK [Gathering Facts] *********************************************************************************************************************
ok: [172.25.250.12]
ok: [172.25.250.11]TASK [create user] *************************************************************************************************************************
ok: [172.25.250.11] => {"NAME": "hahaha"
}
ok: [172.25.250.12] => {"NAME": "hahaha"
}

(5)使用数组定义变量

[root@bastion ansible]# cat shuzu.yml
---
USERLIST: chihao: age: 18obj: linuxpeilin: age: 15obj: java

编写一个数组
修改刚才的test

[root@bastion ansible]# cat test.yml
---
- name: testhosts: prodvars_files: ./shuzu.ymltasks:- name: create userdebug:var: USERLIST['chihao']['age']- debug:msg: "{{USERLIST['chihao']['obj']}}"

格式很重要
在此指定了变量的位置
2.变量注册

[root@westos Desktop]# TIME='date'
[root@westos Desktop]# echo $TIME
date
[root@westos Desktop]#

原理

[root@bastion ansible]# vim test.yml
[root@bastion ansible]# cat test.yml
---
- name: prodhosts: prodtasks:- name:shell:date

受控主机会执行date命令,但是如何把date的内容捕捉起来
显示rc=0就是执行成功

---
- name: prodhosts: prodtasks:- name:shell:dateregister: CHIHAO- debug:var: CHIHAO['rc']
```powershell

- name: prodhosts: prodtasks:- name:shell:dateregister: CHIHAO- debug:var: CHIHAO['stdout']

显示具体时间
chihao是一个变量,变量里面又可以设置字典
register把模块输出注册到指定的字符串中
3.事实变量
事实变量是ansible在受控主机中自动检测出的变量
有与主机相关的信息

  480  ansible prod -m setup

ad-hoc可以通过这样的方式查看
要查看架构

[root@bastion ansible]# cat test.yml
---
- name: prodhosts: prodtasks:- debug:var: ansible_facts['architecture']

查看IP

---
- name: prodhosts: prodtasks:- debug:var: ansible_facts['ens3']['ipv4']['address']

查看主机名

---
- name: prodhosts: prodtasks:- debug:var: ansible_facts['fqdn']

debug相当于echo,输入的变量都是setup里存在的
事实变量是真实存在的,不需要去定义变量
这相当于setup
4.魔法变量
ansible软件的内部信息

[root@bastion ansible]# ansible localhost -m debug -a 'var=hostvars'

查看所有的ansible内部信息

[root@bastion ansible]# ansible prod -m debug -a 'var=group_names'
172.25.250.11 | SUCCESS => {"group_names": ["prod","webservers"]
}
172.25.250.12 | SUCCESS => {"group_names": ["prod","webservers"]
}

查看组信息

[root@bastion ansible]# ansible prod -m debug -a 'var=groups'

所有的组信息

```powershell
[root@bastion ansible]# ansible prod -m debug -a 'var=inventory_hostname'
172.25.250.11 | SUCCESS => {"inventory_hostname": "172.25.250.11"
}
172.25.250.12 | SUCCESS => {"inventory_hostname": "172.25.250.12"

清单配置中当前受管主机的名称
5.j2模块的使用
自动生成配置文件

[root@bastion ansible]# cat test.j2
{# /etc/hosts line #}
127.0.0.1 localhost
{{ ansible_facts['ens3']['ipv4']['address']}} {{ansible_facts['fqdn']}}

j2文件的内容

---
- name: test j2hosts: prodtasks:- name: test j2template:src: ./test.j2dest: /mnt/hosts

在mnt/hosts会自动生成

[root@serverc mnt]# cat /mnt/hosts
127.0.0.1 localhost
172.25.250.12 serverc.exam.com
[root@serverb mnt]# cat /mnt/hosts
127.0.0.1 localhost
172.25.250.11 serverb.exam.com

为什么不直接写?使用这个方法,在哪个主机生成的名称都是不一样的,不是固定的
(1)for 语句

[root@bastion ansible]# cat test.j2
{% for NAME in users %}
{{NAME}}
{% endfor %}
[root@bastion ansible]# cat chihao.yml
---
- name: test j2hosts: prodvars: users:- chihao- peilin- goutasks:- name: test j2template:src: ./test.j2dest: /mnt/hosts

变量在此
(2)判定语句if
如果不是A,就显示B,是A就显示C

[root@bastion ansible]# cat test.j2
{% for NAME in users if not NAME== "gou" %}
{{loop.index0}}-{{NAME}}
{% endfor %}

0表示从0开始计数

[root@bastion ansible]# cat chihao.yml
---
- name: test j2hosts: prodvars: users:- chihao- peilin- goutasks:- name: test j2template:src: ./test.j2dest: /mnt/hosts

最后结果

[root@serverc mnt]# cat /mnt/hosts
0-chihao
1-peilin

如果名字为gou就停止循环计数,不是gou就从0开始计数

ansible5 变量相关推荐

  1. C++11_学习笔记

    Vector(std::initializer_list<double>)  //{1.2,12.3,111.2} 关键字virtual的意思是可能随后在其派生类中重新定义:含有纯虚函数的 ...

  2. Texlive安装与环境变量配置

    下载安装:https://www.jianshu.com/p/25896cc05cb4 去官网下载速度很快 环境变量配置:https://www.jianshu.com/p/f8f6c255098c

  3. Go 知识点(13) — 如何判断变量类型

    在 Go 语言中可以使用类型断言来判断变量的类型,类型断言的使用有两种方式: 返回两个值,分别是断言为设置类型后的值和断言成功的标志符: 返回一个值,表示断言为设置类型的值: 1. 返回单个值的使用 ...

  4. Go 知识点(10) — 子协程能否使用主协程变量

    我们来看这样一个问题,在主协程中创建的变量,在子协程中能否使用?来看下面代码: func main() {s := "hello"fmt.Printf("s outsid ...

  5. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  6. Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值

    1. 变量声明 要单纯声明一个变量,可以通过 var 关键字,如下所示: var s string 该示例只是声明了一个变量 s,类型为 string,并没有对它进行初始化,所以它的值为 string ...

  7. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  8. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  9. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

最新文章

  1. ESP8266-iot-2
  2. xml serialize
  3. case when完成不同条件的显示
  4. 二分图-匈牙利算法模板
  5. 【视频】vue生命周期函数
  6. kafka学习(二)kafka工作流程分析
  7. JavaScript中使Promise模式进行异步编程
  8. 【BZOJ4262】Sum 单调栈+线段树
  9. android动态渐变button,Android--自定义Button的样式以及动态渐变效果
  10. 为什么企业越来越重视数据分析与挖掘?
  11. linux ifcfg-33 没有eth0解决方法
  12. ODBC和JDBC是做什么的?为初学者理解概念问题
  13. 基于DEAP库的python进化算法-4.遗传算法求解TSP问题
  14. Mysql数据库优化方案
  15. dbv mysql_mysql数据库版本控制dbv使用
  16. 北斗导航:太空中最亮的“中国星”
  17. 射频信号发生器的使用以及相关中心频率,载波,调制波术语解释
  18. 不懂就学——什么是input和output?
  19. 【全文检索_01】核心理论
  20. 根式为什么是根式?(我可能疯了?)

热门文章

  1. OTT渠道首次反超PC,2022互联网营销结构的拐点又来了?
  2. 部落冲突-家乡防御建筑介绍(城墙、加农炮、箭塔、迫击炮、防空火箭、法师塔、空气炮、特斯拉电磁塔、炸弹塔、X连弩、地狱之塔、天鹰火炮、投石炮)
  3. micro850通讯协议msg_PLC原理与应用 罗克韦尔 Micro800 系列
  4. 提升自己捷径就在这里..
  5. Wind(万得)原生TDBAPI(JAVA版)封装成 WEB API (Demo版)
  6. oracle 检查索引失效,oracle 索引失效原因_汇总
  7. #五、先热热身--江恩那个看不见的正方在哪?
  8. 北京各大IDC机房介绍
  9. 分享实用思维导图模板,孩子期末复习就靠它了
  10. OAuth 2.0 文档