⾃动化运维利器 Ansible-变量

⾃动化运维利器Ansible-变量

  • 一、变量命名规则
  • 二、变量的类型
    • 2.1 全局变量
    • 2.3 剧本变量
    • 2.4 资产变量
    • 2.5 facts变量
    • 2.6 注册变量
  • 三、变量的优先级

按顺序食用,口味更佳
( 1 ) ⾃动化运维利器Ansible-基础
( 2 ) ⾃动化运维利器 Ansible-Playbook
( 3 ) ⾃动化运维利器 Ansible-变量
( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制
( 5 ) ⾃动化运维利器 Ansible-Jinja2
( 6 ) ⾃动化运维利器 Ansible-最佳实战

ansible作为一门特殊的语言,肯定要涉及到变量定义、控制结构的使⽤等特性。

一、变量命名规则

变量的名字由字母下划线数字组成,必须以字⺟开头保留关键字不能作为变量名称,具体关键字比较多,不在列举。

正确的变量命名: aimyon_36,ztmy_1
错误的变量命名:_aaa ,2_bb

二、变量的类型

根据变量的作⽤范围⼤体的将变量分为:

  • 全局变量
  • 剧本变量
  • 资产变量

2.1 全局变量

全局变量,使⽤ansible 或使⽤ansible-playbook 时,手动通过 -e 参数传递给Ansible 的变量。

通过ansible 或 ansible-playbook 的 help 帮助, 可以获取具体格式使⽤⽅式:

 ansible -h | grep var-e EXTRA_VARS, 
--extra-vars=EXTRA_VARS set additional variables as key=value or YAML/JSONansible-playbook -h | grep var-e EXTRA_VARS, 
--extra-vars=EXTRA_VARS set additional variables as key=value or YAML/JSON

上述的help比较难懂,通过下边的举例说明。

传统的kv形式

 ansible all -i localhost, -m debug \-a "msg='my key is {{ key }}'" -e "key=value"

传递YAML/JSON的形式

cat a.json
{"name":"qfedu","type":"school"}ansible all -i localhost, -m debug \
-a "msg='name is {{ name }}, type is {{ type }}'" -e @a.json

2.3 剧本变量

该种变量和playbook有关,定义在playbook中。

通过PLAY属性vars定义:

---
- name: test play varshosts: allvars:user: lileihome: /home/lileitasks:- name: create the user {{ user }}user:name: "{{ user }}"home: "{{ home }}"

通过PLAY属性vars_files定义:

---
- name: test play varshosts: allvars_files:- vars/users.ymlcat vars/users.yml
---user: lileihome: /home/lilei
...

当需要定义的变量很多时,使用vars属性定义会显得很臃肿,此时可以将变量抽取出来形成单独的YAML文件。

2.4 资产变量

ansible中的资产分为静态资产和动态资产,资产变量就是和资产紧密相关的一种变量。

资产变量分为主机变量和主机组变量,分别针对资产中的单个主机和主机组。

主机组变量:
以下资产中,定义了⼀个组变量home ,此变量将针对webservers 这个主机组中的所有服务器有效。

cat hostsandgroupvars
[webservers]
172.18.0.3 user=lilei
172.18.0.4
[webservers:vars]  //home 是 web_servers 的组变量,会针对这个组内的所有服务器⽣效。
home="/home/lilei"ansible webservers -i hostsandgroupvars -m debug -a "var=home"
172.18.0.3 | SUCCESS => {"home": "/home/lilei"
}
172.18.0.4 | SUCCESS => {"home": "/home/lilei"
}

主机变量 VS 主机组变量
当主机变量和组变量在同⼀个资产中发⽣重名的情况,会有什么效果呢?

cat hosts_v2
[webservers]
172.18.0.3 user=lilei //主机变量
172.18.0.4
[webservers:vars]  //组变量
user=tomansible webservers -i hosts_v2 -m debug -a "var=user"
172.18.0.3 | SUCCESS => {"user": "lilei"
}
172.18.0.4 | SUCCESS => {"user": "tom"
}

在资产中定义了主机变量和组变量 user, 此时发现 172.18.0.3这台机器的主机变量 user 的优先级更⾼。

变量的继承
在介绍资产时说过资产的继承,那么变量是否也存在继承关系呢?

cat hosts_v3
[webservers]
172.18.0.3
[dbservers]
172.18.0.4
[allservers]
[allservers:children]
dbservers
webservers
[allservers:vars]
user=lilei

webservers和dbservers作为allservers的子类,子类会继承父类的变量,父类的变量属于组变量,因此主机变量优先级会更高。

2.5 facts变量

Facts变量不包含在前⽂中介绍的全局变量、剧本变量及资产变量之内。

Facts变量不需要我们⼈为去声明变量名及赋值。

它的声明和赋值完全有Ansible 中的 setup 模块帮我们完成。它收集了有关被管理服务器的操作系统版本、服务器IP地址、主机名,磁盘的使⽤情况、CPU个数、内存⼤⼩等等有关被管理服务器的私有信息。

在每次PlayBook运⾏的时候都会发现在PlayBook执⾏前都会有⼀个Gathering Facts的过程。这个过程就是收集被管理服务器的Facts信息过程。

⼿动收集Facts 变量

ansible all -i localhost, -c local -m setup

过滤Facts
Facts手动收集到的信息量很大,因此需要使用fileter操作对信息进行过滤。
仅获取服务器的内存情况信息

ansible all -i localhost, -m setup -a "filter=*memory*" -c local
localhost | SUCCESS => {"ansible_facts": {"ansible_memory_mb": {"nocache": {"free": 508,"used": 473},"real": {"free": 59,"total": 981,"used": 922},"swap": {"cached": 0,"free": 1981,"total": 1983,"used": 2}}},"changed": false
}

默认情况下,在执⾏PlayBook的时候,它会去⾃动的获取每台被管理服务器的facts信息。
若在整个PlayBook 的执⾏过程中,完全未使⽤过 Facts 变量,此时我们可以将其关闭,以加快PlayBook的执⾏速度。

---
- name: a play examplehosts: webservers# 关闭 facts 变量收集功能gather_facts: noremote_user: roottasks:- name: install nginx packageyum: name=nginx state=present- name: copy nginx.conf to remote servercopy: src=nginx.conf
dest=/etc/nginx/nginx.conf- name: start nginx serverservice:name: nginxenabled: truestate: started

2.6 注册变量

注册变量往往⽤于保存⼀个task任务的执⾏结果, 以便于debug时使⽤。或者将此次task任务的结果作为条件,去判断是否去执⾏其他task任务。注册变量在PlayBook中通过register关键字去实现。

Playbook:

---
- name: install a package and print the resulthosts: webserversremote_user: roottasks:- name: install nginx packageyum: name=nginx state=presentregister: install_result- name: print resultdebug: var=install_result

执行结果:

ok: [172.18.0.4] => {"install_result": {"changed": false,"failed": false,"msg": "","rc": 0,"results": ["1:nginx-1.16.1-1.el7.ngx.x86_64
providing nginx is already installed"]}
}

三、变量的优先级

⽬前介绍了全局变量、剧本变量、资产变量、Facts变量及注册变量。

  • Facts变量不需要⼈为去声明、赋值;
  • 注册变量只需通过关键字register去声明,⽽不需要赋值。
  • 全局变量、剧本变量及资产变量则完全需要⼈为的去声明、赋值。

此处不在介绍变量优先级的验证过程,直接说明优先级关系。

全局变量的定义

ansible-playbook -i hosts priority.yml -e "user=www"

剧本变量的定义

---
- name: test variable priorityhosts: allremote_user: rootvars:user: mysqltasks:
- name: print the user valuedebug: msg='the user value is {{ user }}'

资本变量的定义

[dbservers]
172.18.0.3
[webservers]
172.18.0.4 ansible_ssh_port=2222
[allservers:children]
dbservers
webservers
[allservers:vars]
user=tomcat

当⼀个变量同时在全局变量、剧本变量和资产变量中定义时,优先级最⾼的是全局变量;其次是剧本变量;最后才是资产变量。

按顺序食用,口味更佳
( 1 ) ⾃动化运维利器Ansible-基础
( 2 ) ⾃动化运维利器 Ansible-Playbook
( 3 ) ⾃动化运维利器 Ansible-变量
( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制
( 5 ) ⾃动化运维利器 Ansible-Jinja2
( 6 ) ⾃动化运维利器 Ansible-最佳实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯每日真题 - 第12天

题目:(数三角) 题目描述(14届 C&C B组E题) 解题思路: 给定 n 个点的坐标,计算其中可以组成 等腰三角形 的三点组合数量。 核心条件:等腰三角形的定义是三角形的三条边中至少有…

项目技术栈-解决方案-注册中心

项目技术栈-解决方案-注册中心 ZookeeperEureka、Nacos、Consul和Etcd参考文章 服务注册中心(Registry):用于保存 RPC Server 的注册信息,当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感…

uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置

uniapp适配暗黑模式配置 目录 uniapp适配暗黑模式配置setUIStyleDarkMode 适配app-plus manifest.json配置theme.json配置pages.json配置页面切换代码实现同步手机暗黑配置额外适配 参考官方文档:https://uniapp.dcloud.net.cn/tutorial/darkmode.html 主要用到api…

Wireshark中的length栏位

注:Ethernet II的最小data length为46,如果小于,会补全到46. 1.指定网卡抓取的,链路为ethernet。 IPv4 Ethernet II 长度为 14 bytes - L1ipv4 header中的length包括header和payload的总长度 - L2wireshark中length表示抓取的pac…

Spring 4.3 源码导读

Spring Framework 是一个功能强大的开源框架,广泛用于企业级 Java 应用程序开发。Spring 4.3 是一个成熟的版本,提供了丰富的功能和模块。以下是对 Spring 4.3 源码的一些关键部分的导读,帮助你更好地理解其架构和设计理念。 1. 源码获取 从…

前端开发迈向全栈之路:规划与技能

一、前端开发与全栈开发的差异 前端开发主要负责构建和实现网页、Web 应用程序和移动应用的用户界面。其工作重点在于网页设计和布局,使用 HTML 和 CSS 技术定义页面的结构、样式和布局,同时运用前端框架和库如 React、Angular 或 Vue.js 等构建交互式和…

后端总指挥---文件接口

为了方便编写项目时前后端的连接,在这里引进文件接口的概念,通常包含以下几个部分: 功能请求路径请求方式传输的数据类型请求入参数据样本响应的出参响应成功后的数据样本 这样前端编程与后端编程 可以根据文件接口这个文档来分别编写前后端&…

ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案

在当今快速发展的农业领域,智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快,智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…

通过wsl配置Qt的中文开发环境

本文列举了一些在WSL上配置Qt编译环境中遇到的一些问题及解决方案 关键词: Win10 22HUbuntu18.04xfce桌面交叉编译arm64qt / qtcreator中文输入及显示标题 安装qt,qtcreatorqt.qpa.screen: QXcbConnection: Could not connect to displayld: cannot find -lGLqmake: could no…

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作菜单栏 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div cla…

PostgreSQL 跨数据库访问

有这样的一个业务场景。有一个表对象在数据库 A 中&#xff0c;但是在同一个实例的数据库 B 中我想访问位于 A 库中的这个对象&#xff0c;那么有什么好的方法可以实现呢。 假设在数据库 cloud_test 中有如下的对象&#xff0c;现在想在数据库 cloud_health 中访问这个对象。 …

《应用概率统计》

《应用概率统计》主要有综合报告、学术论文、应用研究、应用简报、教学研究、学术活动报道、书评、新书介绍等栏目。 一、《应用概率统计》是中国数学会概率统计学会主办的全国性学术刊物&#xff0c;主要刊登概率论与数理统计的理论和应用两方面有创造性的学术论文&#xff0c…

Vue之插槽(slot)

插槽是vue中的一个非常强大且灵活的功能&#xff0c;在写组件时&#xff0c;可以为组件的使用者预留一些可以自定义内容的占位符。通过插槽&#xff0c;可以极大提高组件的客服用和灵活性。 插槽大体可以分为三类&#xff1a;默认插槽&#xff0c;具名插槽和作用域插槽。 下面…

unity3d————Resources异步加载

知识点一&#xff1a;Resources异步加载是什么&#xff1f; 在Unity中&#xff0c;资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行&#xff0c;如果加载的资源过大&#xff0c;可能会导致程序卡顿&#xff0c;因为从硬盘读取数据到内存并进行处理…

fatal error C1083: 无法打开包括文件: “stdio.h”: No such file or directory

在 Windows 上的 “终端” 里&#xff0c;对于已经执行过 cmake -S . -B build -G Ninja 的工程&#xff0c;执行了 cmake --build build出现了报错&#xff1a; fatal error C1083: 无法打开包括文件: “stdio.h”: No such file or directory 原因是&#xff0c;当前 “终端…

SpringBoot开发——Spring Boot 3.3整合RabbitMQ构建高效稳定的消息队列系统

文章目录 一、配置 RabbitMQ二、自动配置的核心组件三、发送消息至指定 Stream四、接收消息与 RabbitListener 注解五、实现自定义 RabbitListenerContainerFactory六、消息重试机制七、总 结 消息队列在分布式系统中起着至关重要的作用&#xff0c;它能够解耦系统、削峰填谷&a…

SpringBoot+Vue3实现数据可视化大屏

前端工程的地址:UserManagerFront: 数据可视化前端 (gitee.com) 效果展示&#xff0c;可以展现出来了&#xff0c;样式可能还有一些丑。 后端代码 后端主要是拿到数据并对数据进行处理&#xff0c;按照前端需要的格式进行返回即可。 import com.njitzx.entity.Student; impor…

vue3: toRef, reactive, toRefs, toRaw

vue3&#xff1a; toRef, reactive, toRefs, toRaw 扫码或者点击文字后台提问 <template><div>{{ man }}</div><hr><!-- <div>{{ name }}--{{ age }}--{{ like }}</div> --><div><button click"change">修…

CDH安装与配置及相关大数据组件实践

CDH安装与配置及相关大数据组件实践 一、CDH 介绍 CDH&#xff08;Cloudera’s Distribution Including Apache Hadoop&#xff09;是一个基于 Web 用户界面的大数据平台版本。它支持大多数 Hadoop 组件&#xff0c;包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoo…

《网络硬件设备完全技术宝典》

《网络硬件设备完全技术宝典》 网卡 集线器 交换机 路由器 双绞线 光缆 无线接入点AP 交换机技术与选择策略 冗余链路技术 由于物理链路和网络模块的损坏都将导致网络链路的失败&#xff0c;因此两个设备之间&#xff0c;特别是核心交换机与汇聚交换机之间的单链路…