当前位置: 首页 > news >正文

Ansible Playbook 概述与实践案例(下)

#作者:张桐瑞

文章目录

  • 四、条件判断的实现
  • 五、循环的实现
  • 六、Jinja模板应用
    • 1、Jinja模板
    • 2、handlers组件
  • 七、角色 role
    • 1、角色介绍
    • 2、案例: 部署zabbix-agent

四、条件判断的实现

when: 条件

在这里插入图片描述

- hosts: appserveruser: roottasks:- name: create userAuser: name=userA state=presentwhen: ansible_default_ipv4["address"]  == "192.168.140.11"- name: create userBuser: name=userB state=presentwhen: ansible_default_ipv4["address"] == "192.168.140.12"- name: create userCuser: name=userC state=presentwhen: ansible_default_ipv4["address"] == "192.168.140.13"

五、循环的实现

1、loop关键字

- hosts: appserveruser: roottasks: - name: create userAA/BB/CCuser: name={{ item }} state=presentloop:- "userAA"- "userBB"- "userCC"

2、通过字典为item变量赋值

- hosts: appserveruser: rootgather_facts: falsetasks:- name: create user11/22/33user: name={{ item["username"] }} shell={{ item["sh_name"] }} state=presentloop:- { "username":"user11", "sh_name":"/sbin/nologin" }- { "username":"user22", "sh_name":"/bin/bash" }- { "username":"user3z3", "sh_name":"/bin/sync" }

案例: 部署nginx

- hosts: appserveruser: rootgather_facts: falsetasks:- name: push nginx installercopy: src=/opt/work/nginx-1.20.1.tar.gz dest=/tmp- name: install nginx deps yum: name={{ item }} state=presentloop:- gcc- openssl-devel- zlib-devel- pcre-devel - name: compile nginx shell: chdir=/tmp tar xf /tmp/nginx-1.20.1.tar.gz  && cd nginx-1.20.1 && ./configure --prefix=/usr/local/nginx && make && make install- name: start nginx daemonshell: /usr/local/nginx/sbin/nginx && sed -ri '$a \/usr/local/nginx/sbin/nginx' /etc/rc.d/rc.local && chmod a+x /etc/rc.d/rc.local- name: clean nginx installershell: rm -rf /tmp/nginx*

剧本角色方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、Jinja模板应用

1、Jinja模板

支持在配置文件中调用变量{{ 变量名称 }}
增加配置文件灵活性
建议配置文件以.j2结尾
Jinja模板要使用template模块推送,触发变量替换

[appserver:vars]
mysql_port=3307[root@ansible ~]# sed -n '1,2p' /opt/work/my.cnf.j2
[mysqld]
port={{ mysql_port }}[root@ansible ~]# cat /opt/work/test5.yml
- hosts: appserveruser: roottasks:- name: copy my.cnftemplate: src=/opt/work/my.cnf.j2 dest=/etc/my.cnf

使用setup模块的状态数据定义配置文件

[mysqld]
bind-address={{ ansible_all_ipv4_addresses[0] }}
port={{ mysql_port }}

2、handlers组件

与tasks同级别组件, 默认情况 ,handers下定义的任务是不会自动执行的,只有在满足了一定的条件,由特定的条件触发其执行
应用场景
检测配置文件,自动重启服务加载配置

- hosts: appserveruser: roottasks:- name: copy my.cnftemplate: src=/opt/work/my.cnf.j2 dest=/etc/my.cnfnotify: restart MySQL daemon    // 触发handlers:- name: restart MySQL daemonservice: name=mariadb state=restarted

七、角色 role

1、角色介绍

本质上就是个目录
/etc/ansible/roles/
一个需求对应一个角色

  1. 创建角色
[root@ansible ~]# cd /etc/ansible/roles/
[root@ansible roles]# ansible-galaxy init nginx 
- Role nginx was created successfully
  1. 目录结构说明
[root@ansible ~]# tree /etc/ansible/roles/nginx/
/etc/ansible/roles/nginx/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars└── main.yml

defaults-默认参数
files-普通文件、软件安装包
handlers-触发的操作
meta-元数据
tasks-常规任务、操作
templates-jinja模块
tests-剧本相关的测试代码
vars-定义变量

同一个角色中,相互引用数据时,不需要添加任何目录,直接调用即可

2、案例: 部署zabbix-agent

  1. 创建zabbixAgent角色
[root@ansible ~]# cd /etc/ansible/roles/
[root@ansible roles]# ansible-galaxy init zabbixAgent
- Role zabbixAgent was created successfully
  1. 准备zabbix-agent配置文件模板
[root@ansible roles]# cp /etc/zabbix/zabbix_agentd.conf /etc/ansible/roles/zabbixAgent/templates/zabbix_agentd.conf.j2[root@ansible roles]# vim /etc/ansible/roles/zabbixAgent/templates/zabbix_agentd.conf.j2
Server=192.168.140.10
ServerActive=192.168.140.10
Hostname={{ ansible_fqdn }}

setup模块找主机名

  1. 编写剧本
[root@ansible ~]# cat /etc/ansible/roles/zabbixAgent/handlers/main.yml
---
# handlers file for zabbixAgent- name: restart Zabbix-Agent daemonservice: name=zabbix-agent state=restarted[root@ansible ~]# cat /etc/ansible/roles/zabbixAgent/tasks/main.yml
---
# tasks file for zabbixAgent- name: zabbix repoyum_repository:name: zabbix44file: zabbix44description: zabbix44  YUM repobaseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/gpgcheck: noenabled: yes- name: install Zabbix-Agentyum: name=zabbix-agent state=present- name: copy zabbix-agent config filetemplate: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.confnotify: restart Zabbix-Agent daemon- name: start Zabbix-Agent daemonservice: name=zabbix-agent state=started enabled=yes

在这里插入图片描述
在这里插入图片描述
4) 执行角色/剧本

[root@ansible ~]# cat /opt/work/installZabbixAgent.yml
- hosts: appserveruser: rootroles:- zabbixAgent[root@ansible ~]# ansible-playbook /opt/work/installZabbixAgent.yml 
http://www.dtcms.com/a/353863.html

相关文章:

  • 基于muduo库的图床云共享存储项目(二)
  • STM32 之串口WIFI应用--基于RTOS的环境
  • AlphaFold 2 本地部署与安装教程(Linux)
  • ICCV 2025 | 清华IEDA提出GUAVA,单图创建可驱动的上半身3D化身!实时、高效,还能捕捉细腻的面部表情和手势。
  • 【51单片机】【protues仿真】基于51单片机篮球计时计分器数码管系统
  • 什么是代理ip?代理ip的运作机制
  • C++ 中 ::(作用域解析运算符)的用途
  • 大小鼠糖水偏爱实验系统 糖水偏好实验系统 小鼠糖水偏好实验系统 大鼠糖水偏好实验系统
  • 【半导体制造流程概述】
  • 优化IDEA卡顿的问题
  • 使用CCProxy搭建http/https代理服务器
  • AWS OpenSearch 可观测最佳实践
  • Maya绑定:人物绑定详细案例
  • 数据结构之 【红黑树的简介与插入问题的实现】
  • 数值分析离散积分近似求值
  • 【数据分析】微生物群落网络构建与模块划分的比较研究:SparCC、Spearman-RAW与Spearman-CLR方法的性能评估
  • Shell编程-随机密码生成
  • volitale伪共享问题及解决方案
  • SoC如何实现线程安全?
  • 【进阶篇第五弹】《详解存储过程》从0掌握MySQL中的存储过程以及存储函数
  • TypeScript:Interface接口
  • 如何启动一个分支网络改造试点?三步走
  • 【链表 - LeetCode】25. K 个一组翻转链表
  • 干眼症护理学注意事项
  • linux下的网络编程(2)
  • 技术分析 | Parasoft C/C++test如何突破单元测试的隔离难题
  • 亚马逊关键词策略全解析:类型、工具与多账号运营优化指南
  • AT_abc406_f [ABC406F] Compare Tree Weights
  • Windows/Linux 环境下 Jmeter 性能测试的安装与使用
  • 基于SpringBoot的宠物领养服务系统【2026最新】