Ansible_变量管理与设置
一、Ansible变量管理
1、变量概述
- Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量
- 通过变量,可以轻松地在Ansible项目中管理给定环境的动态值
2、变量命令规范
- 变量只能包含字母、数字和下划线
- 变量不能以数字开头
3、变量的定义
- Ansible项目中可以在多个位置定义变量
- Ansible变量的三大范围
- 全局范围:从命令行或Ansible配置设置的变量
- Play范围:在playbook和相关结构中设置的变量
- 主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
- 变量优先级:越小越优先(小指的是范围;越靠近使用的值,优先级越高)
二、在Playbook中设置变量
1、使用INI类型定义变量(将变量放在playbook开头的vars块中)
---
- hosts: all
vars:
user: lisi
home: /home/lisi
2、使用YAML类型定义变量(使用vars_files关键字,后面跟上相对于playbook位置的外部变量文件名称列表)
---
- hosts: all
vars_files:
- vars/users.yml //也可以使用绝对路径;使用相对路径则必须将vars目录到与Playbook文件所在相同的目录下
3、在Playbook中使用变量
声明了变量后,可以在任务中使用这些变量;若要引用变量,可以将变量名放在双大括号内“{{ }}”
---
- hosts: all
vars:
user: joe
tasks:
- name: Create the user {{ user }}
user:
name: "{{ user }}" //如果大括号前面有内容,则不需要加引号
三、主机变量和主机组变量
1、应用于主机变量的分类
- 主机变量,应用于特定主机
- 组管理,应用于一个主机组或一组主机组中的所有主机
- 主机变量优先于组变量,但playbook中定义的变量的优先级比这两者更高
2、定义特定主机变量
[servers]
192.168.121.10 ansible_user=root
3、定义主机组变量
[servers]
192.168.121.81
192.168.121.82 [servers:vars]
user=lisi
//创建主机组变量后改组内的主机都可以使用user变量
4、使用目录添加主机和主机组变量
- 定义主机和主机组的变量的首选做法是在与清单文件或其所在目录相同的目录中,创建host_vars和group_vars两个目录
- 建议的做法是使用在host_vars和group_vars目录中定义清单变量,而不直接在清单文件中定义它们(目录名必须是host_vars、group_vars)
- 可以单独对特定主机定义变量、可以对主机组设置变量、可以对主机组里面的每个主机定义变量
- 演示实例:例如在一个场景中,需要管理两个数据中心,并在/etc/ansible/inventory清单文件中定义数据中心主机
[root@localhost ~]# vim /etc/anisble/inventory
[datacenter1]
node1.example.com
node2.example.com [datacenter2]
node3.example.com
node4.example.com [datacenters:children] //表示datacenters组包含上面的两个主机组
datacenter1
datacenter2
四、使用其他方式设置变量
1、从命令覆盖变量(也可以定义临时的变量)
- 清单变量可被playbook中设置的变量覆盖,这两种变量又可通过在命令行中传递参数到ansible或ansible-playbook命令来覆盖,在命令行上设置的变量称为额外变量
- 演示实例:
[root@localhost ~]ansible-playbook test.yml -e "user=apache2"
2、使用数组作为变量
- 除了将同一元素相关的配置数据(软件包列表、服务列表和用户列表等)分配到多个变量外,也可以使用数组。这种做法的一个好处在于,数组是可以浏览的
- 演示实例:
//定义一个数组
users:
zhangsan:
first_name: san
last_name: zhang
home_dir: /home/zhangsan lisi
first_name: si
last_name: li
home_dir: /home/lisi - 演示使用变量来访问用户数据:
---
- hosts: all
vars:
- users: //数组名称(自定义)
first_user: //该数字里面第一个用户变量
full_name: zhangsan
dir_name: /tmp/zhangsan
secend_user:
full_name: lisi
dir_name: /tmp/lisi
tasks:
- name: create user zhangsan
user:
name: users['first_user']['full_name']
state: present - name: create user lisi
user:
name: users['secend_user']['full_name']
state: present
//也可以在外部使用变量文件来自定义数组,只需在playbook文件里面引用即可 - 注意事项:
- 如果键名与python方法或属性的名称(如discard、copy和add)相同,点表示法可能会造成问题
- 建议在任何给定Ansible项目的所有文件中一致地采用一种语法,不要混用
3、使用已经注册的变量打印输出结果
- 使用register语句捕获命令输出
- 输出保存在一个临时变量中,然后在playbook中可用于调试用途(debug模块)或者达成其他目的,例如:基于命令输出的特定配置
- 演示实例:
[root@localhost ~]# vim /etc/ansible/playbook.yaml
---
- hosts: all
tasks:
- name: create user
user:
name: "{{ user }}"
create_home: no
state: present register: result //result表示输出结果,变量名可以任意取 - name: abc
debug: var=result //变量值=上面的变量(打印输出结果) - 运行该playbook时,debug模块用于将result注册变量的值转储到终端
[root@localhost ~]# ansible-playbook -C /etc/ansible/playbook.yaml PLAY [client.example.com] ************************************************************************************************************************************************* TASK [Gathering Facts] ****************************************************************************************************************************************************
ok: [client.example.com] TASK [create user] ********************************************************************************************************************************************************
changed: [client.example.com] TASK [abc] ****************************************************************************************************************************************************************
ok: [client.example.com] => {
"result": {
"changed": true,
"failed": false
}
} PLAY RECAP ****************************************************************************************************************************************************************
client.example.com : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ansible_变量管理与设置的更多相关文章
- Tesnsorflow命名空间与变量管理参数reuse
一.TensorFlow中变量管理reuse参数的使用 1.TensorFlow用于变量管理的函数主要有两个: (1)tf.get_variable:用于创建或获取变量的值 (2)tf.varia ...
- Atititcmd cli环境变量的调用设置与使用
Atititcmd cli环境变量的调用设置与使用 1.1. Cgi 环境变量的调用设置与使用1 1.2. 环境变量vs 系统变量1 1.3. 环境变量的分类 A.与服务器相关的环境变量B ,与客户 ...
- 【转】Mac OS X 中 Zsh 下 PATH 环境变量的正确设置
在 Mac OS X 中使用 zsh,环境变量 PATH 一不小心就会变得很紊乱,表现为自己设置的路径总是被放到系统路径之后,部分路径还会有重复.这是我们不太了解 zsh 启动时加载文件的顺序和 Ma ...
- 在ASP.NET Core配置环境变量和启动设置
在这一部分内容中,我们来讨论ASP.NET Core中的一个新功能:环境变量和启动设置,它将开发过程中的调试和测试变的更加简单.我们只需要简单的修改配置文件,就可以实现开发.预演.生产环境的切换. A ...
- VSCode的Python扩展下程序运行的几种方式与环境变量管理
在VSCode中编写Python程序时,由于有些地方要使用环境变量,但是发现设置的环境变量有时不起作用,花了点时间研究了一下,过程不表,直接说结论. 首先,环境变量的设置,Python扩展中有三种方式 ...
- 集成direnv 与docker-compose 进行环境变量管理
direnv 是一个不错的换将变量管理工具,同时日常的开发测试中我们使用docker-compose 会比较多,一般我们的玩法是 可以再docker-compose 中指定环境变量,可以通过envir ...
- direnv 一个强大的环境变量管理工具
direnv 是一个基于golang 编写的强大的环境变量管理工具,可以帮助我们简化环境变量管理,而且 支持的平台比较多. 基本使用 下载二进制软件包 https://github.com/dir ...
- ASP.NET Core配置环境变量和启动设置
在这一部分内容中,我们来讨论ASP.NET Core中的一个新功能:环境变量和启动设置,它将开发过程中的调试和测试变的更加简单.我们只需要简单的修改配置文件,就可以实现开发.预演.生产环境的切换. A ...
- windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32
到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe JavaWindowsCC++C# 当电脑里面有多个jdk或是jre时,在cmd里面到底是用的哪个 ...
随机推荐
- OOUML系列总结及终章回顾
盼望着,盼望着,OO课程终于结束了,但是,此刻的我却感到一丝失落,甚至想着再来一单元岂不妙哉? 目录 总结本单元三次作业架构 四个单元中架构设计及OO方法理解的演进 四个单元中测试理解与实践的演进 课 ...
- Julia语言程序基础
Julia-lang 新兴的Julia语言,Julia 一开始就是为高性能而设计的. Julia 程序通过 LLVM 编译成高效的多平台机器码. Julia中文社区: https://cn.julia ...
- 浅谈Android中的事件分发机制
View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的. 首先介绍一下什么是MotionEvent.所谓MotionEv ...
- 【CTF】WDCTF-2017 3-1 writeup
题目来源:WDCTF-2017 题目链接:https://adworld.xctf.org.cn/task/answer?type=misc&number=1&grade=1& ...
- Fastbin attack 总结
Fastbin attack 本文参考了ctf-wiki 和glibc 要了解fastbin attack,我们先要了解fastbin的机制.由于libc2.26后加入了tcache机制,我们这里就只 ...
- Flutter 状态管理- 使用 MobX
文 / Paul Halliday, developer.school 创始人 众所周知,状态管理是每个软件项目都需要持续迭代更新的方向.它并不是一个「一次性」的工作, 而需要不断确保你遵循的最佳实践 ...
- BLUENRG-LP 学习笔记
在学习 BLUENRG-LP 的过程中,及时地把碰到的问题记录下来,并作解答,形成本文档. 该文档会时时更新,并且当某些章节内容过多时,会独立出来,形成新的文章. BLUENRG-LP 的特性 芯片内 ...
- mooc人大单元测试4
@font-face { font-family: Wingdings } @font-face { font-family: 宋体 } @font-face { font-family: " ...
- 使用Viper读取Nacos配置(开源)
使用Viper读取Nacos配置(开源) 一.前言 目前Viper支持的Remote远程读取配置如 etcd, consul:目前还没有对Nacos进行支持,本文中将开源一个Nacos的Viper支持 ...
- 光猫和路由器都支持ipv6,却无法使用ipv6?
这些年很多地方的光猫都能获得ipv6地址了,而且新出的路由基本都支持ipv6,但是还是有很多人在http://test-ipv6.com看不到自己的ipv6地址,也上不了ipv6网站. 我也遇到这个问 ...