ansible变量-循环-判断-jinja2模板
1. ✅ansible变量1.1. 主机清单变量-自动修改主机名1️⃣修改主机清单定义主机名变量vim hosts [lb] 172.16.1.5 hostnamelb01.zhubl.xyz 172.16.1.6 hostnamelb02.zhubl.xyz [web] 172.16.1.7 hostnameweb01.zhubl.xyz 172.16.1.8 hostnameweb02.zhubl.xyz 172.16.1.9 hostnameweb03.zhubl.xyz 172.16.1.10 hostnameweb04.zhubl.xyz [db] 172.16.1.51 hostnamedb01.zhubl.xyz 172.16.1.52 hostnamedb02.zhubl.xyz [nfs] 172.16.1.31 hostnamenfs01.zhubl.xyz [bak] 172.16.1.41 hostnamebackup.zhubl.xyz [web:vars] passwordzhubl0007 [db:vars] passwordzhubl09962️⃣准备hosts文件vim ./files/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.5 lb01 lb01.zhubl.xyz 172.16.1.6 lb02 lb02.zhubl.xyz 172.16.1.7 web01 web01.zhubl.xyz 172.16.1.8 web02 web02.zhubl.xyz 172.16.1.9 web03 web03.zhubl.xyz 172.16.1.10 web04 web04.zhubl.xyz 172.16.1.31 nfs01 nfs01.zhubl.xyz 172.16.1.41 backup backup.zhubl.xyz 172.16.1.51 db01 db01.zhubl.xyz 172.16.1.52 db02 db02.zhubl.xyz 172.16.1.61 m01 m01.zhubl.xyz 172.16.1.62 m02 m02.zhubl.xyz3️⃣编写playbook剧本- hosts: web:db tasks: - name: 修改主机名 hostname: name: {{ hostname }} - name: 查看主机名 debug: msg: {{ hostname }} - name: 拷贝hosts文件 copy: src: ./files/hosts dest: /etc/hosts backup: yes - name: 修改用户密码 user: name: zbl password: {{ password|password_hash(sha512,zbl) }} state: present - name: 查看用户密码 debug: msg: {{ password }}4️⃣运行playbook剧本ansible-playbook -i hosts 09.hostname.yml5️⃣检查ansible -i hosts all -m shell -a hostname2. ✅ansible循环列表变量fruits: - a - b - c fruits[a,b,c] loop/with_items 循环对列表进行取值2.1. ☀️批量添加用户1️⃣编写playbook剧本- hosts: web tasks: - name: groupadd group: name: {{ item.name }} gid: {{ item.gid }} state: present loop: - { name: zbl01,gid: 5060 } - { name: zbl02,gid: 5070 } - { name: zbl03,gid: 5080 } - { name: zbl04,gid: 5090 } - name: useradd user: name: {{ item.name }} uid: {{ item.uid }} group: {{ item.name }} state: present loop: - { name: zbl01,uid: 5060 } - { name: zbl02,uid: 5070 } - { name: zbl03,uid: 5080 } - { name: zbl04,uid: 5090 }2️⃣运行playbook剧本ansible-playbook -i hosts 10.useradd.yml3️⃣检查ansible -i hosts web -m shell -a egrep zbl0[1-4] /etc/passwd3. ✅facts变量与条件判断when结合3.1. 不同的操作系统安装软件包编写playbook剧本when与facts变量结合- hosts: web gather_facts: true tasks: - name: yum yum: name: cowsay state: latest when: ansible_distribution is match(Kylin|Rocky) - name: apt apt: name: cmatrix state: latest when: ansible_distribution is match(Ubuntu|Debian)运行playbook剧本ansible-playbook -i hosts 11.yum.yml检查ansible -i hosts web -m shell -a rpm -qa cowsay4. ✅register变量与条件判断when结合编写playbook剧本- hosts: web:ubt gather_facts: true tasks: - name: register shell: hostnamectl | awk /Operating System/{print $3} register: os - name: yum yum: name: cowsay state: latest when: os.stdout is match(Kylin|Rocky) - name: apt apt: name: cmatrix state: latest when: os.stdout is match(Ubuntu|Debian)运行playbook剧本ansible-playbook -i hosts 12.when_register.yml5. ✅j2模板与if条件判断结合5.1. 部署keepalived服务使用j2模板发送配置文件到被管理主机上1️⃣准备j2模板vim files/keepalived.conf.j2 ! Configuration File for keepalived global_defs { router_id {{ansible_hostname}} } {% if ansible_hostname is match(lb01) %} vrrp_script check_lb.sh { script /server/scripts/check_lb.sh interval 2 weight 1 user root } {% endif %} vrrp_instance lb_vip_3 { {% if ansible_hostname is match(lb01) %} state MASTER priority 100 {% elif ansible_hostname is match(lb02) %} state BACKUP priority 50 {% endif %} interface ens33 virtual_router_id 51 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev ens33 label ens33:1 } {% if ansible_hostname is match(lb01) %} track_script { check_lb.sh } {% endif %} }2️⃣编写playbook剧本- hosts: lb gather_facts: true tasks: - name: install yum: name: keepalived state: latest - name: copy template: src: ./files/keepalived.conf.j2 dest: /etc/keepalived/keepalived.conf backup: true - name: start systemd: name: keepalived enabled: yes state: restarted3️⃣运行playbook剧本ansible-playbook -i hosts 13.keepalived_j2.yml4️⃣检查ansible -i hosts lb -m shell -a hostname -I6. ✅j2模板与for循环结合6.1. 分发nfs配置文件单变量1️⃣定义变量列表vim group_vars/all/vars.yml nfs_dir: - /nfs01/ - /nfs02/ - /nfs03/2️⃣准备j2模板文件vim files/exports.j2 {% for dir in nfs_dir %} #共享目录{{ dir }} {{ dir }} 172.16.1.31/24(rw,all_squash) {% endfor %}3️⃣编写playbook剧本- hosts: nfs tasks: - name: template template: src: ./files/exports.j2 dest: /tmp/exports4️⃣运行playbook剧本ansible-playbook -i hosts 14.export_j2.yml5️⃣检查ansible -i hosts nfs -m shell -a cat /tmp/exports6.2. 分发rsync配置文件多变量1️⃣定义变量列表vim group_vars/all/vars.yml rsync_dirs: - {module: data,path: /data/} - {module: blog,path: /app/code/blog/} - {module: backup,path: /nfs/backup/}2️⃣准备j2模板文件vim files/rsyncd.conf.j2 {% for dir in rsync_dirs %} [{{ dir.module }}] comment {{ dir.module }} path {{ dir.path }} {% endfor %}3️⃣编写playbook剧本- hosts: bak tasks: - name: rsync template: src: ./files/rsyncd.conf.j2 dest: /tmp/rsyncd.conf4️⃣运行playbookansible-playbook -i hosts 15.rsync_j2.yml5️⃣检查ansible -i hosts bak -m shell -a cat /tmp/rsyncd.conf6.3. 分发nginx配置文件1️⃣定义变量列表vim group_vars/all/vars.yml sites: - bird - ba - china2️⃣准备j2模板文件vim files/zhubl.xyz.conf.j2 server { listen 80; server_name {{ item }}.zhubl.xyz access_log /var/log/nginx/{{ item }}-access.log main; error_log /var/log/nginx/{{ item }}-error.log notice; root /app/code/{{ item }}/ location / { index index.html } }3️⃣编写playbook剧本- hosts: web tasks: - name: copy template: src: ./files/zhubl.xyz.conf.j2 dest: /tmp/{{ item }}.zhubl.xyz.conf loop: {{ sites }}4️⃣运行playbookansible-playbook -i hosts 16.nginx_j2.yml5️⃣检查ansible -i hosts web -m shell -a ls -l /tmp/*.conf生成数字序列{% for ip in range(2,11) %} 10.0.0.{{ ip }} {% endfor %} {% for ip in [1,2] %} 10.0.0.{{ ip }} {% endfor %}7. ✅总结剧本循环jinja2模板循环批量修改主机名主机清单变量目标rsync,nfs,lsync,web,nginx,php剧本剧本文件变量文件配置文件jinja2

相关新闻

springboot+vue在线商城系统设计与实现

springboot+vue在线商城系统设计与实现

文章目录前言源码获取详细视频演示具体实现截图后端框架SpringBoot前端框架Vue持久层框架MyBaits成功系统案例:参考代码数据库前言 博主介绍:CSDN特邀作者、985高校计算机专业毕业、现任某互联网大厂高级全栈开发工程师、Gitee/掘金/华为云/阿里云/GitHub等平台持续…

2026/7/4 0:41:07 阅读更多 →
端侧推理软件栈

端侧推理软件栈

目前单个嵌入式设备算力不足以训练模型,运行大语言模型进行推理,算力也是很吃紧的。嵌入式设备上可以部署轻量模型推理软件栈。 如何构建嵌入式设备模型软件栈: 1、构建自己的模型文件格式; 模型文件 模型结构(算子…

2026/7/3 10:08:22 阅读更多 →
网络专栏之网络API原理

网络专栏之网络API原理

TCP连接建立 连接前的准备工作 1.socket() socket()是应用程序与协议栈交互的抽象接口。如何实现的?由两个部分组成,一个是fd的分配(有fd用户才能使用),一个是tcp控制块(TCB)(UDP连…

2026/5/17 10:31:41 阅读更多 →

最新新闻

KMR221与PIC18F86J15的嵌入式电压管理方案

KMR221与PIC18F86J15的嵌入式电压管理方案

1. 项目概述:KMR221与PIC18F86J15的电压管理方案在嵌入式系统设计中,精确的电压管理一直是硬件工程师面临的挑战。最近我在一个工业控制项目中,尝试将KMR221电源管理IC与PIC18F86J15微控制器结合使用,实现了令人满意的电压控制效果…

2026/7/4 0:42:44 阅读更多 →
YOLO数据集构建与优化实战指南

YOLO数据集构建与优化实战指南

1. YOLO数据集基础认知YOLO(You Only Look Once)作为当前最流行的实时目标检测算法,其数据集结构设计直接影响模型训练效果。与ImageNet等传统分类数据集不同,YOLO数据集采用"图片标注文本"的配对形式,每个标…

2026/7/4 0:40:44 阅读更多 →
如何快速掌握洛雪音乐音源配置:面向新手的终极实战指南

如何快速掌握洛雪音乐音源配置:面向新手的终极实战指南

如何快速掌握洛雪音乐音源配置:面向新手的终极实战指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为不同音乐平台的版权限制而烦恼吗?洛雪音乐音源项目为你提供了…

2026/7/4 0:38:43 阅读更多 →
从AI代码风格到工程实践:Codex Taste如何重塑开发者的代码质量观

从AI代码风格到工程实践:Codex Taste如何重塑开发者的代码质量观

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 如果你是一名开发者,最近是否感觉自己的代码“味道”有点不对?比如,代码越写越长,功…

2026/7/4 0:36:42 阅读更多 →
STM32F207ZG与25CSM04 Page EEPROM高速数据存储方案

STM32F207ZG与25CSM04 Page EEPROM高速数据存储方案

1. 项目背景与核心需求在嵌入式系统开发中,快速精确的数据检索一直是个关键挑战。传统EEPROM虽然能可靠存储数据,但受限于串行接口和页写机制,在大数据量场景下往往成为性能瓶颈。而25CSM04这款Page EEPROM与STM32F207ZG高性能MCU的组合&…

2026/7/4 0:34:42 阅读更多 →
2026视频去水印教程手机电脑免费方法与软件推荐

2026视频去水印教程手机电脑免费方法与软件推荐

日常整理学习素材、收藏参考内容时,我们常会遇到带平台标识的视频,不同的水印位置、不同的使用场景,适合的处理方式也不一样。本文整理了 2026 年实用的手机、电脑端免费处理方法,搭配常用工具介绍与合规提示,适合个人…

2026/7/4 0:32:41 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻