ansible 语句+jinjia2+roles
文章目录
- 1、when语句
- 1、判断表达式
- 1、比较运算符
- 2、逻辑运算符
- 3、根据rc的返回值判断task任务是否执行成功
- 5、通过条件判断路径是否存在
- 6、in
- 2、when和其他关键字
- 1、block关键字
- 2、rescue关键字
- 3、always关键字
- 3、ansible循环语句
- 1、基于列表循环(whith_items)
- 2、基于字典循环(with_dict)
- 3、loop循环
- 4、jinja2模块管理
- 1、为什么需要这个
- 2、jinjia条件语句
- 3、jinjiafor语句
- 4、jinjia2过滤器
- 1、default过滤器
- 2、password_hash
- 5、角色
- 1、为什么需要角色
- 2、创建角色
1、when语句
-
判断的结果一致的话,就执行任务,否则跳过任务
-
ansible中判断语句是when判断,默认when判断,就识别变量,所以的话,不需要使用"{{}}"来引用变量when inventory_hostname == 'node1
-
还有一个点就是如果不使用变量的话,就只使用这个值的话,那么的话就要带上这个双引号,并且里面还要有单引号即可
-
层级和模块的层级一样
1、判断表达式
1、比较运算符
符号 | 作用 |
---|---|
== | 比较2边是否相等 |
!= | 比较2边 |
>= | 左边大于右边 |
2、逻辑运算符
符号 | 作用 |
---|---|
and | 逻辑与,2边都为真,则返回 |
or | 逻辑或,有一个为真,则返回真 |
not | 逻辑否,对表达式进行取反,真为假,假为真 |
3、根据rc的返回值判断task任务是否执行成功
[root@controller mnt]# cat f8.yml
- hosts: node1tasks:- shell: ls /etc/passsssssregister: get_statusignore_errors: yes- debug:msg: rc is 0when: get_status.rc == 0- debug:msg: rc is errorwhen: get_status.rc != 0
5、通过条件判断路径是否存在
名称 | 作用 |
---|---|
file | 判断指定路径是否为一个文件 |
directory | 判断指定路径是否是一个目录 |
link | 判断指定路径是否为一个软链接 |
mount | 判断路径是否为挂载点 |
exists | 判断指定路径是否存在 |
# /etc/passwd存在的话,就执行任务
# when直接使用值的话需要使用双引号里面的值在加上单引号即可
[root@controller mnt]# cat f9.yaml
- hosts: alltasks:- debug:msg: existwhen: "'/etc/passwd is exists'"
6、in
- 判断值是不是在列表中
[root@controller mnt]# cat f3.yml
- hosts: node1tasks:- debug:msg: ens160 existswhen: "'ens160' in ansible_interfaces"
2、when和其他关键字
1、block关键字
- 判断一个部分的任务是否成功执行
[devops@controller ansible]$ cat when/2.yaml
- hosts: alltasks:- block:- file:path: /mnt/111.txtstate: touch- file:path: /mnt/1.dirstate: directorywhen: inventory_hostname == "node1"
2、rescue关键字
- block中任务失败的话,就会执行rescue下的任务,否则,不执行
- name: rescuehosts: alltasks:- block:- shell: ls /etc/p11111- file:path: /etc/passwdstate: filerescue:- debug:msg: rescuewhen: inventory_hostname == 'node1'
3、always关键字
- 无论block任务执行成功还是失败都会执行的
- name: rescuehosts: alltasks:- block:- shell: ls /etc/p11111- file:path: /etc/passwdstate: filerescue:- debug:msg: rescuealways:- debug:msg: alwayswhen: inventory_hostname == 'node1'
3、ansible循环语句
1、基于列表循环(whith_items)
- hosts: allvars:users:- zhangsan- lisi- wangwutasks:- debug:msg: "{{ item }}"with_items: "{{users}}"
2、基于字典循环(with_dict)
[devops@controller ansible]$ cat dict.yaml
- hosts: allvars:users:q1:uid: 2022name: zhangsanq2:uid: 2023name: lisitasks:- debug:msg: "{{ item.value.name }}"with_dict: "{{ users }}"# vaule就是uid和name
3、loop循环
- 天生用来便利列表,也可以过滤字典
[devops@controller ansible]$ cat loop.yml
- hosts: allvars:users:- zhangsan- lisi- wangwutasks:- debug:msg: "{{ item }}"loop: "{{ users }}" # 循环里面
4、jinja2模块管理
1、为什么需要这个
-
很多个主机都要搭建httpd服务,将一个httpd的配置文件拷贝到其余的主机上面,上面的ip地址都是一样的,所以的话,这个jinjia2模版文件会根据不同主机更改需要的内容
-
将带有变量的模版,拷贝到其他节点上面,变量会自动的识别出来的值
[devops@controller ansible]$ cat j1.yml
- hosts: alltasks:- template:src: /mnt/http.conf.j2dest: /mnt/httpd.conf
[devops@controller ansible]$ cat /mnt/http.conf.j2
Listen {{ ansible_ens160.ipv4.address }}:80# 会根据不同的主机来获取到不同的信息
2、jinjia条件语句
-
跟when语句是一样的
-
主要就是利用了setup收集事实变量,从而实现内容的更替
# 格式
{% if 表达式 %}
执行语句
{% elif 表达式 %}
执行语句{% else %}
执行语句{% endif %}
# 需求如果是node1主机就显示node1 is ok ,node2主机就显示node2 is ok
[devops@controller ansible]$ cat /mnt/1.j2
{% if ansible_hostname == 'node1' %}
"node1 is ok"
{% elif ansible_hostname == 'node2' %}
"node2 is ok"
{% else %}
error
{% endif %}[devops@controller ansible]$ cat j2.yml
- hosts: alltasks:- template:src: /mnt/1.j2dest: /mnt/1
3、jinjiafor语句
{% for 变量 in 循环体 %}
执行语句
{% endof %}
-
groups.all 获取所有主机
-
hostvars 获取指定主机的信息,比如获取node1的fqdn hostvars[node1].ansible_fqdn
[devops@controller ansible]$ cat j3.yml
- hosts: alltasks:- template:src: /mnt/3.j2dest: /etc/hosts[devops@controller ansible]$ cat /mnt/3.j2
{% for i in groups.all %}
{{ hostvars[i].ansible_ens160.ipv4.address }} {{ hostvars[i].ansible_fqdn}} {{ hostvars[i].ansible_hostname}}
{% endfor %}
4、jinjia2过滤器
1、default过滤器
- default 就是没有值的就使用定义的默认值
[devops@controller ansible]$ cat p1.yml
- hosts: nodevars:users:- name: qquid: 3333- name: ww- name: rrtasks:- debug:msg: "{{ item.uid|default('9999') }}"loop: "{{ users }}"
2、password_hash
[devops@controller ansible]$ cat p2.yml
- hosts: nodetasks:- user:name: j11password: "{{'123'|password_hash('sha512')}}"
5、角色
1、为什么需要角色
-
解决了这个剧本之间的移植的关系,使用了角色的话,就可以直接移植到其他主机上面也能进行运行,就变得非常的高效了
-
角色的组成部分
-
files:用于存放一些非模版文件的文件,就是一些普通的文件,会被复制到被控节点上面的
-
templates:用于存放角色相关的jinja2模版文件,当使用角色相关的模版时,如果没有明确指定模版的路径,则默认使用此目录中的模版
-
tasks:角色所需要执行的所有任务文件都存放于此,包含一个主文件main.yml,可以通过include的方式引入其他任务文件,就是可以创建多个tasks任务,然后在main,yml里面进行引用
-
handlers:用于定义角色中需要调用的handlers,包含一个主配置文件main.yml,也可以通过include引入其他的handlers文件
-
vars:定义此角色要用到的变量,包含一个主文件main.yml
-
meta:用于存储角色的元数据信息,这个写元数据用于描述角色的相关属性,作者等
-
defaults:除了vars目录,也可以定义角色用到的变量,定义的变量的优先级是最低的
-
2、创建角色
[devops@controller ansible]$ ansible-galaxy init apache
- Role apache was created successfully[devops@controller apache]$ ls
defaults files handlers meta README.md tasks templates tests vars# 编写一个httpd
[devops@controller tasks]$ cat main.yml
---
# tasks file for apache- name: mountmount:src: /dev/sr0path: /mediafstype: iso9660state: mounted
- name: use yumyum:name: httpdstate: present
- name: use templatetemplate:src: httpd.conf.j2dest: /etc/httpd/conf/httpd.conf
- name: index.htmlcopy:src: index.htmldest: /var/www/html/
- name: serviceservice:name: "{{item}}"state: startedenabled: yesloop:- firewalld- httpd
- name: firewalldfirewalld:service: httppermanent: yesstate: enabledimmediate: yes# {{}} 输出变量,for和if可以一起使用
{% if inventory_hostname == 'node1' %}
Listen {{hostvars['node1'].ansible_ens160.ipv4.address}}:80
{% elif inventory_hostname == 'node2' %}
Listen {{hostvars['node2'].ansible_ens160.ipv4.address}}:80
{% endif %}
相关文章:
ansible 语句+jinjia2+roles
文章目录 1、when语句1、判断表达式1、比较运算符2、逻辑运算符3、根据rc的返回值判断task任务是否执行成功5、通过条件判断路径是否存在6、in 2、when和其他关键字1、block关键字2、rescue关键字3、always关键字 3、ansible循环语句1、基于列表循环(whith_items)2、基于字典循…...
【Docker项目实战】使用Docker部署HumHub社交网络平台
【Docker项目实战】使用Docker部署HumHub社交网络平台 一、HumHub介绍1.1 HumHub简介1.2 HumHub特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载HumHub镜…...

“医者仁术”再进化,AI让乳腺癌筛查迎难而上
世卫组织最新数据显示,我国肿瘤疾病仍然呈上升趋势,肿瘤防控形势依然比较严峻。尤其是像乳腺癌等发病率较高的疾病,早诊断和早治疗意义重大,能够有效降低病死率。 另一方面,中国地域广阔且发展不平衡,各地…...

安卓流式布局实现记录
效果图: 1、导入第三方控件 implementation com.google.android:flexbox:1.1.0 2、布局中使用 <com.google.android.flexbox.FlexboxLayoutandroid:id"id/baggageFl"android:layout_width"match_parent"android:layout_height"wrap_co…...
-bash gcc command not found解决方案(CentOS操作系统)
以 CentOS7 为例,执行以下语句 : yum install gcc如果下载不成功,并且网络没有问题。 执行以下语句 : cp -r /etc/yum.repos.d /etc/yum.repos.d.bakrm -f /etc/yum.repos.d/*.repocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.…...

(二)Python输入输出函数
一、输入函数 input函数:用户输入的数据,以字符串形式返回;若需数值类型,则进行类型转换。 xinput("请入你喜欢的蔬菜:") print(x) 二、输出函数 print函数 输出单一数值 x666 print(x) 输出混合类型…...

从调用NCCL到深入NCCL源码
本小白目前研究GPU多卡互连的方案,主要参考NCCL和RCCL进行学习,如有错误,请及时指正! 内容还在整理中,近期不断更新!! 背景介绍 在大模型高性能计算时会需要用到多卡(GPU…...

深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec
文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号…...

优选算法第一讲:双指针模块
优选算法第一讲:双指针模块 1.移动零2.复写零3.快乐数4.盛最多水的容器5.有效三角形的个数6.查找总价格为目标值的两个商品7.三数之和8.四数之和 1.移动零 链接: 移动零 下面是一个画图,其中,绿色部分标出的是重点: 代码实现&am…...

智能优化算法-水循环优化算法(WCA)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 水循环优化算法 (Water Cycle Algorithm, WCA) 是一种基于自然界水循环过程的元启发式优化算法,由Shah-Hosseini于2012年提出。WCA通过模拟水滴在河流、湖泊和海洋中的流动过程,以及蒸发…...

基于SpringBoot的个性化健康建议平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于智能推荐的卫生健康系统的相关信息成为…...

Mapsui绘制WKT的示例
步骤 创建.NET Framework4.8的WPF应用在NuGet中安装Mapsui.Wpf 4.1.7添加命名空间和组件 <Window x:Class"TestMapsui.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…...

Modbus TCP 西门子PLC指令以太口地址配置以及 Poll Slave调试软件地址配置
1前言 本篇文章讲了 Modbus TCP通讯中的一些以太网端口配置和遇到的一些问题, 都是肝货自己测试的QAQ。 2西门子 SERVER 指令 该指令是让外界设备主动连接此PLC被动连接, 所以这里应该填 外界设备的IP地址。 这边 我因为是电脑的Modbus Poll 主机来…...

MySQL表的基本查询上
1,创建表 前面基础的文章已经讲了很多啦,直接上操作: 非常简单!下一个! 2,插入数据 1,全列插入 前面也说很多了,直接上操作: 以上插入和全列插入类似,全列…...

MySQL中什么情况下类型转换会导致索引失效
文章目录 1. 问题引入2. 准备工作3. 案例分析3.1 正常情况3.2 发生了隐式类型转换的情况 4. MySQL隐式类型转换的规则4.1 案例引入4.2 MySQL 中隐式类型转换的规则4.3 验证 MySQL 隐式类型转换的规则 5. 总结 如果对 MySQL 索引不了解,可以看一下我的另一篇博文&…...
数据治理的意义
数据治理是一套管理数据资产的流程、策略、规则和控制措施,旨在确保数据的质量、安全性、可用性和合规性。数据治理的目标通常包括但不限于以下几点: 1. **提高数据质量**:确保数据的准确性、一致性、完整性和可靠性。 2. **确保数据安全**…...
快手游戏服务端C++开发一面-面经总结
1、tcp的重传机制有哪几种?具体描述一下 最基本的超时重传 超过时间就会重传 三个重复ACK 快速重传 减少等待超时、 接收方可以发送选择性确认 不用重传整段 乱序到达 可以通知哪些丢失 重复数据重传 2、override和final? override可写可不写 写出来就…...

git的学习使用(认识工作区,暂存区,版本区。添加文件的方法)
学习目标: 学习使用git,并且熟悉git的使用 学习内容: 必备环境:xshell,Ubuntu云服务器 如下: 搭建 git 环境认识工作区、暂存区、版本区git基本操作之添加文件(1):gi…...

Series数据去重
目录 准备数据 Series数据去重 DataFrame数据和Series数据去重对比 在pandas中,Series.drop_duplicates(keep, inplace)方法用于删除Series对象中的重复值。 keep: 决定保留哪些重复值。可以取以下三个值之一: first(默认值&…...

Python语言核心12个必知语法细节
1. 变量和数据类型 Python是动态类型的,变量不需要声明类型。 python复制代码 a 10 # 整数 b 3.14 # 浮点数 c "Hello" # 字符串 d [1, 2, 3] # 列表 2. 条件语句 使用if, elif, else进行条件判断。 python复制代码 x 10 if x > 5: print(&q…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...