ansible5 变量
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 变量相关推荐
- C++11_学习笔记
Vector(std::initializer_list<double>) //{1.2,12.3,111.2} 关键字virtual的意思是可能随后在其派生类中重新定义:含有纯虚函数的 ...
- Texlive安装与环境变量配置
下载安装:https://www.jianshu.com/p/25896cc05cb4 去官网下载速度很快 环境变量配置:https://www.jianshu.com/p/f8f6c255098c
- Go 知识点(13) — 如何判断变量类型
在 Go 语言中可以使用类型断言来判断变量的类型,类型断言的使用有两种方式: 返回两个值,分别是断言为设置类型后的值和断言成功的标志符: 返回一个值,表示断言为设置类型的值: 1. 返回单个值的使用 ...
- Go 知识点(10) — 子协程能否使用主协程变量
我们来看这样一个问题,在主协程中创建的变量,在子协程中能否使用?来看下面代码: func main() {s := "hello"fmt.Printf("s outsid ...
- C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...
- Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值
1. 变量声明 要单纯声明一个变量,可以通过 var 关键字,如下所示: var s string 该示例只是声明了一个变量 s,类型为 string,并没有对它进行初始化,所以它的值为 string ...
- VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、
1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...
- 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin
1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...
- Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法
函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...
最新文章
- ESP8266-iot-2
- xml serialize
- case when完成不同条件的显示
- 二分图-匈牙利算法模板
- 【视频】vue生命周期函数
- kafka学习(二)kafka工作流程分析
- JavaScript中使Promise模式进行异步编程
- 【BZOJ4262】Sum 单调栈+线段树
- android动态渐变button,Android--自定义Button的样式以及动态渐变效果
- 为什么企业越来越重视数据分析与挖掘?
- linux ifcfg-33 没有eth0解决方法
- ODBC和JDBC是做什么的?为初学者理解概念问题
- 基于DEAP库的python进化算法-4.遗传算法求解TSP问题
- Mysql数据库优化方案
- dbv mysql_mysql数据库版本控制dbv使用
- 北斗导航:太空中最亮的“中国星”
- 射频信号发生器的使用以及相关中心频率,载波,调制波术语解释
- 不懂就学——什么是input和output?
- 【全文检索_01】核心理论
- 根式为什么是根式?(我可能疯了?)
热门文章
- OTT渠道首次反超PC,2022互联网营销结构的拐点又来了?
- 部落冲突-家乡防御建筑介绍(城墙、加农炮、箭塔、迫击炮、防空火箭、法师塔、空气炮、特斯拉电磁塔、炸弹塔、X连弩、地狱之塔、天鹰火炮、投石炮)
- micro850通讯协议msg_PLC原理与应用 罗克韦尔 Micro800 系列
- 提升自己捷径就在这里..
- Wind(万得)原生TDBAPI(JAVA版)封装成 WEB API (Demo版)
- oracle 检查索引失效,oracle 索引失效原因_汇总
- #五、先热热身--江恩那个看不见的正方在哪?
- 北京各大IDC机房介绍
- 分享实用思维导图模板,孩子期末复习就靠它了
- OAuth 2.0 文档