⾃动化运维利器 Ansible-变量

news2024/11/20 22:22:02

⾃动化运维利器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/JSON

ansible-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 vars
  hosts: all
  vars:
  	user: lilei
  	home: /home/lilei
  tasks:
 	- name: create the user {{ user }}
      user:
 	  	name: "{{ user }}"
 	    home: "{{ home }}"

通过PLAY属性vars_files定义:

---
- name: test play vars
  hosts: all
  vars_files:
 	- vars/users.yml
 	 	
cat vars/users.yml
---
	user: lilei
	home: /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=tom

ansible 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 example
 hosts: webservers
 # 关闭 facts 变量收集功能
 gather_facts: no
 remote_user: root
 tasks:
 - name: install nginx package
 yum: name=nginx state=present
 - name: copy nginx.conf to remote server
 copy: src=nginx.conf
dest=/etc/nginx/nginx.conf
 - name: start nginx server
 service:
 name: nginx
 enabled: true
 state: started

2.6 注册变量

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

Playbook:

---
- name: install a package and print the result
  hosts: webservers
  remote_user: root
  tasks:
 	- name: install nginx package
 	  yum: name=nginx state=present
 	  register: install_result
   - name: print result
 	  debug: 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 priority
  hosts: all
  remote_user: root
  vars:
   	user: mysql
  tasks:
- name: print the user value
  debug: 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.coloradmin.cn/o/2244289.html

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

相关文章

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分,这里用到的是代码库 GitHub 中part2。 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的内参矩阵…

【白话机器学习系列】白话 Softmax

文章目录 什么是 SoftmaxSoftmax 函数详解示例编程实现对矩阵应用 Softmax 函数 什么是 Softmax Softmax 函数,又称归一化指数函数,它使用指数函数将输入向量归一化为概率分布(每一个元素的范围都在 ( 0 , 1 ) (0,1) (0,1) 之间,…

thinkphp6配置多应用项目及多域名访问路由app配置

这里写一写TP6下配置多应用。TP6默认是单应用模式(单模块),而我们实际项目中往往是多应用的(多个模块),所以在利用TP6是就需要进行配置,开启多应用模式。 1、安装ThinkPHP6 1.1安装ThinkPHP6.…

无人机航测技术算法概述!

一、核心技术 传感器技术: GPS/GLONASS:无人机通过卫星定位系统实现高精度的飞行控制和数据采集。 高清相机:用于拍摄地面图像,通过后续图像处理生成三维模型。 激光雷达(LiDAR):通过激光扫…

Linux网络——套接字编程

目录 1. 网络通信基本脉络 2. 端口号 ① 什么是套接字编程? ② 端口号 port && 进程 PID 3. 网络字节序 4. 套接字编程 ① UDP版 ② TCP版 5. 改进方案与拓展 ①多进程版 ②多线程版 ③线程池版 ④守护进程化 1. 简单的重联 2. session &…

Excel如何把两列数据合并成一列,4种方法

Excel如何把两列数据合并成一列,4种方法 参考链接:https://baijiahao.baidu.com/s?id=1786337572531105925&wfr=spider&for=pc 在Excel中,有时候需要把两列或者多列数据合并到一列中,下面介绍4种常见方法,并且提示一些使用注意事项,总有一种方法符合你的要求:…

LabVIEW三针自动校准系统

基于LabVIEW的智能三针自动校准系统采用非接触式激光测径仪对标准三针进行精确测量。系统通过LabVIEW软件平台与硬件设备的协同工作,实现了数据自动采集、处理及报告生成,大幅提高了校准精度与效率,并有效降低了人为操作误差。 一、项目背景…

【Java】JDK集合类源码设计相关笔记

文章目录 前言1. Iterable2. RandomAccess2.1 RandomAccess 使用索引进行二分查找 3. Map3.1 HashMap3.2 IdentityHashMap 4. Collections 工具类4.1 Collections.shuffle() 洗牌 前言 目的: 收集JDK集合类的类图。记录一些有意思的设计。将之前写过的文章建立联系。 1. Ite…

macbook外接2k/1080p显示器调试经验

准备工具 电脑 满足电脑和显示器要求的hdmi线或者转接头或者扩展坞 betterdisplay软件 Dell P2419H的最佳显示信息如下 飞利浦 245Es 2K的最佳显示比例如下 首选1152

Stable Diffusion的解读(二)

Stable Diffusion的解读(二) 文章目录 Stable Diffusion的解读(二)摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…

Github 2024-11-16Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Go项目1Python项目1Lapce:用 Rust 编写的极快且强大的代码编辑器 创建周期:2181 天开发语言:Rust协议类型:Apache License 2.0St…

Redis作为分布式锁,得会避坑

日常开发中,经常会碰到秒杀抢购等业务场景。为了避免并发请求造成的库存超卖等问题,我们一般会用到Redis分布式锁。但是使用Redis分布式锁之前要知道有哪些坑是需要我们避过去的。 1. 非原子操作(setnx expire) 一说到实现Redis…

Qt、C++实现五子棋人机对战与本地双人对战(高难度AI,极少代码)

介绍 本项目基于 Qt C 实现了一个完整的五子棋游戏,支持 人机对战 和 人人对战 模式,并提供了三种难度选择(简单、中等、困难)。界面美观,逻辑清晰,是一个综合性很强的 Qt 小项目 标题项目核心功能 棋盘…

Vulnhub靶场案例渗透[12]-Grotesque: 1.0.1

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 目录扫描4. 敏感信息获取5. 反弹shell6. 权限提升 一、靶场搭建 1. 靶场描述 get flags difficulty: medium about vm: tested and exported from vi…

git日志查询和导出

背景 查看git的提交记录并下载 操作 1、找到你idea代码的路径,然后 git bash here打开窗口 2、下载所有的日志记录 git log > commit.log3、下载特定日期范围内记录 git log --since"2024-09-01" --until"2024-11-18" 你的分支 > c…

LeetCode Hot100 15.三数之和

题干: 思路: 首先想到的是哈希表,类似于两数之和的想法,共两层循环,将遍历到的第一个元素和第二个元素存入哈希表中,然后按条件找第三个元素,但是这道题有去重的要求,哈希表实现较为…

Vue3、Vite5、Primevue、Oxlint、Husky9 简单快速搭建最新的Web项目模板

Vue3、Vite5、Oxlint、Husky9 简单搭建最新的Web项目模板 特色进入正题创建基础模板配置API自动化导入配置组件自动化导入配置UnoCss接入Primevue接入VueRouter4配置项目全局环境变量 封装Axios接入Pinia状态管理接入Prerttier OXLint ESLint接入 husky lint-staged&#xf…

基于深度学习的文本信息提取方法研究(pytorch python textcnn框架)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Linux(命令格式详细+字符集 图片+大白话)

后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都会及时修改的! 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

机器学习中的概率超能力:如何用朴素贝叶斯算法结合标注数据做出精准预测

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…