【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本
文章目录
- 一、Ansible安装及远程控制
- 1、关闭防火墙和SELinux
- 2、安装ansible
- 3、配置SSH无密码登录
- 1、在管理机上生成一对密钥
- 2、将公钥下发到远程主机
- 3、保管密钥
- 4、主机目录
- 二、常用模块
- 1、setup模块
- 2、copy模块
- 3、file模块
- 4、shell模块
- 5、script模块
- 6、ping模块
- 7、group模块
- 8、yum模块
- 9、service模块
- 三、playbook脚本
- 1、指定节点和用户
- 2、任务列表
- 3、handlers
- 4、基本语法
- 1、变量
- 2、条件语句
- 3、循环
- 4、include
- 四、谢谢观看!
一、Ansible安装及远程控制
前提:要有两台主机(我这里是两台虚拟机)
如下:

ansible只需在管理机上安装即可。
被管理机要设置静态IP 设置方法可参考此篇博客
被管理机也被称为节点。
下文中,将被管理机centos_7_1简称为被控主机1
1、关闭防火墙和SELinux
systemctl status firewalld #查看防火墙状态

防火墙状态参数为active即为开启。
sudo systemctl stop firewalld #临时关闭防火墙
参数改为inactive即关闭状态。

关闭SELinux
查看:
getenforce

关闭:
sudo setenforce 0

2、安装ansible
1、安装Ansible软件包的EPEL源
yum install epel-release

2、安装ansible
yum -y install ansible

3、查看ansible版本
ansible --version

3、配置SSH无密码登录
需要使用到两个命令:ssh-keygen(生成一对密钥)、ssh-copy-id(把本地主机的公钥复制到目标主机上)。
1、在管理机上生成一对密钥
ssh-keygen -t rsa
遇到询问,一路回车

执行完毕后会在/root/.ssh下生成一对密钥,其中id_rsa为私钥,id_rsa.pub为公钥。

2、将公钥下发到远程主机
ssh-copy-id root@192.168.58.132 #该地址为被控主机1的ip地址

3、保管密钥
ssh-add .ssh/id_rsa
ssh 192.168.58.132 #被控机ip

此时就处于被控主机1的家目录下。
回到管理机,只需输入ssh命令
ssh 管理机ip

4、主机目录
主机目录又称主机清单,保存了ansible所管理的远程主机信息及一些连接参数,也可用来对远程主机进行分类。
主机目录的配置文件默认是/etc/ansible/hosts
查看该文件:
vi /etc/ansible/hosts
可看到以下内容:

将该文件清空,输入一下内容:
[webservers]
192.168.58.132 #被控主机1的ip地址
测试被控主机1是否能被ping通
ansible webservers -m ping

二、常用模块
查看ansible中已加载的模块
ansible-doc -l
通过ansible命令可以调用这些模块
ansible [节点] -m [模块] -a [参数]
1、setup模块
用于获取节点的详细信息。
例,使用setup模块查看webservers组的节点信息。
ansible webservers -m setup
2、copy模块
可实现从管理机向节点复制静态文件,并设置合理的文件权限。
常用参数:
dest #文件复制的目的地
src #复制的源文件
backup #是否备份原始文件
validate #复制前是否检验需要复制目的地的路径
例:
将/root/demo/demol.txt复制到所以节点的/root目录下(若没有该文件可换成其它文件):
cd /root/demo
ansible all -m copy -a 'dest=/root src=/root/demo/demol.txt
3、file模块
可用来定义文件或目录属性、权限,创建、删除文件或目录。
常用参数:
mode #文件的读/写权限
path #文件路径
src #文件链接路径
stat #默认值:file #选项:file #创建文件 link #创建链接sbsent#删除文件
4、shell模块
可以执行远程主机的shell脚本文件,也支持管道。
例:
检查mysql进程是否存在:
ansible all -m shell -a 'ps -ef|grep mysql'

由图可知,节点192.168.58.132下有mysql进程。
5、script模块
用于将管理机上的shell脚本发送到节点上执行。
例,
写一个脚本:
vi hello.sh//脚本内容为:
#!/bin/bash
echo "hello ansible"
不会写shell脚本可参考这两篇博客:
Shell概念、命令、操作(重定向、管道、变量)
Shell脚本编写基本语法
将该脚本发送到webservers组的节点上执行:
ansible webservers -m script -a '/root/hello.sh'

6、ping模块
检查连通性。
ansible webservers -m ping
7、group模块
可以在节点上创建组。
常用参数
gid #用户组的GID
name #用户组的名字
state #默认值;present #选项:present #新增# absent #删除
例:
在webservers组的节点上创建一个组名为test、GID为2017的组:
ansible webservers -m group -a 'gid=2017 name=test'

8、yum模块
从指定服务器自动下载安装RPM包,并且可自动处理依赖性关系。
常用参数:
name #包名
state 选项:present #安装latest #更新absent #卸载
例:
在被控主机1上安装命令tree:
ansible 192.168.58.132 -m yum -a "name=tree state=present"

9、service模块
管理节点上的服务,可开启、关闭、重启服务等。
参数 选项 含义
enabled yes/no 是否开机自启动
name -- 服务名称state started 启动stopped 关闭restarted 重启reloaded 重新下载
例:
开启被控节点192.168.58.132端的firewalld服务:
ansible 192.168.58.132 -m service -a "name=firewalld state=started"
可在对应节点使用systemctl status firewalld命令来查看firewalld状态。
三、playbook脚本
在学习ansible模块的时候,都是使用命令在节点上执行任务,命令使用比较复杂,且每执行一次均要重复输入,为避免重复输入命令,ansible提供了playbook脚本。一个能被ansible执行的YAML文件叫做playbook。
1、指定节点和用户
每个playbook都需要指定针对那些节点进行运维,并且以哪个用户来执行任务。
指定节点:hosts
指定用户:users
-hosts: webservers #指定webservers组中的所有节点users: root #指定用户为root
注:hosts的值可以是主机或组,也可以是关键字all,全部节点。
2、任务列表
即要执行的任务的队列,关键字为tasks。任务列表中的每个任务都通过调用ansible模块完成。按定义的先后顺序执行。
例:
tasks:- name: running nginx #启动nginx服务service: name=nginx state=running #调用service模块
name标签是对任务的描述,也可以不加,但一般是会使用name标签。
3、handlers
对ansible模块进行调用,用于处理一些动态事件。
handlers中的模块调用与任务列表中的任务不同,任务默认按定义顺序执行,而handlers只有被触发时才会执行。
4、基本语法
1、变量
在playbook文件中,是通过字段vars来定义变量的。
例:
- hosts: all #指定节点为所有节点vars:http_port: 80 #定义http_port变量,值为80
2、条件语句
由字段when声明。
例:
当操作系统为Red Hat时执行重启命令:
task:- name: reboot Red Hat hostcommand: /usr/sbin/rebootwhen: ansible_os_family=="Red Hat"
执行顺序:先判断when条件。如果成立,返回True,则执行上一条语句command:;
如果不成立,返回False,不会触发上一条语句
3、循环
常见的循环由字段with_items声明。
例:
在指定节点上同时安装多个软件;
task:- name: install LAMPyum: name={{item}} state=presentwith_items:- nginx- mysql-server- php
代码功能:安装nginx、mysql-server、php 3个软件。with_items会自动循环执行上面的语句:name={{item}} state=present,会用软件名替换item,循环次数为元素个数。
4、include
当多个playbook需要重复使用任务列表时,可以将任务内容抽离出来写入独立文件中,要调用时只需用include将文件包含进来。
例:有单独的任务列表文件tasks/nignx.yml,文件内容为:
---
- name: install nginxyum: name=nginx state=present #安装nginx
此后,如果有playbook要执行该操作,只需写入以下代码:
tasks:- include: tasks/nginx.yml #将该文件包含进来
用例演示:
通过编写一个playbook实现Apache的安装与启动。
1、创建目录:
mkdir /root/ansible
在该目录下添加apache.yml文件,此文件就是一个playbook
cd /root/ansible
touch apache.yml
编写playbook内容为:
---
- hosts: 192.168.58.132users: rootvars:http_port: 80max_clients: 200tasks:- name: ensure apache is latestyum: pkg=httpd state=latest- name: write the apache config filetemplate: src=/srv/httpd.j2 dest=/etc/httpd.confnotify:- restart apache- name: ensure apache is runningservice: name=httpd state=startedhandlers:- name: restart apacheservice: name=httpd state=restarted
使用以下命令调用:
ansible-playbook /root/ansible/apache.yml
四、谢谢观看!
参考书籍:《Linux系统管理与自动化运维》黑马程序员/编著
相关文章:
【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本
文章目录 一、Ansible安装及远程控制1、关闭防火墙和SELinux2、安装ansible3、配置SSH无密码登录1、在管理机上生成一对密钥2、将公钥下发到远程主机3、保管密钥 4、主机目录 二、常用模块1、setup模块2、copy模块3、file模块4、shell模块5、script模块6、ping模块7、group模块…...
惠州石湾DELL T130服务器黄灯不开机案例
惠州石湾一个朋友反馈一台DELL PowerEdge T130 塔式服务器故障为 通电后无法开机,前面同时亮3个故障灯。闪电灯,电压灯,高温灯 1:这种情况建议大家更换一个同型号的电源进行故障排除。 2:朋友把该服务器硬件最小化测…...
⭐SmartControl: Enhancing ControlNet for Handling Rough Visual Conditions
目录 0 Abstract 1 Motivation 2 Related Work 2.1 Text-to-Image Diffusion Model 2.2 Controllable Text-to-Image Generation 2.3 ControlNet 2.4 Control Scale Exploration 3 Method 3.1 Framework 3.2 Control Scale Predictor 3.3 Unaligned Data Constructi…...
wordpress站外调用指定ID分类下的推荐内容
在WordPress中,如果你想从站外调用指定ID分类下的推荐内容,你可以使用WordPress REST API来实现。以下是一个基本的步骤指南: 1. 启用REST API 确保你的WordPress站点已经启用了REST API。大多数现代WordPress版本默认启用此功能。 2. 获取…...
Ente: 我们的 Monorepo 经验
原文:manav - 2024.10.29 九个月前,我们切换到了 monorepo。在此,我将介绍我们迄今为止的切换经验。 这并不是一份规范性的建议,而是一个经验的分享,目的是希望能够帮助其他团队做出明智的决策。 与大多数岔路不同&…...
Kafka java 配置
前言: 大家好,大家在springboot项目中,经常采用 KafkaListener 做为消费者。这个是spring为我们封装的。 但是某些情况 注解的方式并不能满足需求。这个时候就需要手动版本了。 介绍: 我们已经集成spring-Kafka 就不需要再…...
网络安全现状:复杂的威胁形势导致压力水平飙升
《2024 年网络安全状况》报告深入分析了当前网络安全挑战和趋势。 该报告重点介绍了几个关键的关注领域,包括人员短缺、技能差距、不断演变的威胁和预算限制,同时还指出了取得进展的领域,例如对威胁响应能力的信心增强以及对网络风险评估的认…...
【机器学习】强化学习(1)——强化学习原理浅析(区分强化学习、监督学习和启发式算法)
文章目录 强化学习介绍强化学习和监督学习比较监督学习强化学习 强化学习的数学和过程表达动作空间序列决策策略(policy)价值函数(value function)模型(model) 强化学习和启发式算法比较强化学习步骤代码走…...
【SoC设计指南 基于Arm Cortex-M】学习笔记1——AMBA
AMBA简介 先进微控制器总线架构(Advanced Microcontroller Bus Architecture,AMBA)是用在arm处理器上的片上总线协议规范集。 AMBA总线协议规范集包含AHB、APB、AXI等。 AHB:先进高性能总线(Advanced High-performance Bus) APB&…...
flutter鸿蒙模拟器 Win环境调试报错问题记录(暂未解决)
前情提要: 1、flutter项目已经正确生成了ohos项目 2、flutter和鸿蒙的环境变量配置正确 3、ohos项目执行flutter build hap成功 4、没有真机,使用win环境创建的x86模拟器 问题状态 使用模拟器运行ohos,控制台提示“安装HAP 报 code:9568347错…...
详解Rust标准库:HashSet
## 查看本地官方文档安装rust后运行 rustup doc查看The Standard Library即可获取标准库内容 std::collections::hash_set::HashSet定义 HashSet是一种集合数据结构,它只存储唯一的元素。它主要用于检查元素是否存在于集合中,或者对元素进行去重操作&…...
记录学习react的一些内容
由于是在公司实际项目中学习,所以不是很完整 需要一点一点的学 1.React.useState 类似于vue中的ref 可以修改状态 但是是异步的 感觉不好用 const [wishData, setWishData] React.useState<any>(null); 只能使用setxxx来修改 2.useEffect(()>{},[]) 类…...
json绘制热力图
首先需要一段热力信息的json,我放在头部了。 然后就是需要de-geo库了。 实现代码如下: import * as d3geo from d3-geoimport trafficJSON from ../assets/json/traffic.jsonlet geoFun;// 地理投影函数// let info {max: Number.MIN_SAFE_INTEGER,mi…...
linux 下查看程序启动的目录
以azkaban为例 第一步、ps -ef | grep azkaban 查询出进程号 第二步、cd /proc/ 第三步 、cd 进程号 第四部 ll 查看详情 查看jar 位置 查看jar 启动命令...
书生浦语第四期基础岛L1G2000-玩转书生「多模态对话」与「AI搜索」产品
文章目录 一、MindSearch二、书生浦语三、书生万象四、进阶任务 一、MindSearch MindSearch 是一个开源的 AI 搜索引擎。它会对你提出的问题进行分析并拆解为数个子问题,在互联网上搜索、总结得到各个子问题的答案,最后通过模型总结得到最终答案。书生浦…...
保护Kubernetes免受威胁:容器安全的有效实践
安全并非“放之四海而皆准”的解决方案,相反地,它更多的是一个范围,受其应用的特定上下文的影响。安全领域的专业人士很少宣称什么产品是完全安全的,但总有方法可以实现更强的安全性。在本文中,我们将介绍各种方法来支…...
【客观理性深入讨论国产中间件及数据库-科创基础软件】
随着国产化的进程,越来越多的国企央企开始要求软件产品匹配过程化的要求, 最近有一家银行保险的科技公司对行为验证码产品就要求匹配国产中间件, 于是开始了解国产中间件都有哪些厂家 一:国产中间件主要产品及厂商 1 东方通&…...
MFC中Excel的导入以及使用步骤
参考地址 在需要对EXCEL表进行操作的类中添加以下头文件:若出现大量错误将其放入stdafx.h中 #include "resource.h" // 主符号 #include "CWorkbook.h" //单个工作簿 #include "CRange.h" //区域类,对Excel大…...
AWS S3在客户端应用不能使用aws-sdk场景下的文件上传与下载
简介 通常情况下,应用程序上传文件到AWS S3,会使用aws-sdk,但是有些情况下,客户端应用会有安装限制,比如不能安装aws-sdk,此时我们就需要通过其他方式实现文件上传与下载。 这里我们提供一个服务端&#…...
深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解
前面我们已经通过三篇文章,详细介绍了 Qwen2.5 大语言模型在 Transformers 框架中的技术细节,包括包和对象加载、模型初始化和分词器技术细节: 深入解析 Transformers 框架(一):包和对象加载中的设计巧思与…...
Hperledger Fabric入门课程3 ——软硬件环境
购买专栏前请认真阅读:《Fabric项目学习笔记》专栏介绍 1. 硬件环境 不论是在当前系统上运行、云服务器还是虚拟机,建议内存4G或以上,硬盘空间建议50G以上。 2. 操作系统 Fabric 的操作一般在Linux 或 MacOS上,Mac暂时不支持Apple Silicon芯片即m1以后的芯片。 如果读者…...
NanoSVG完整教程:从SVG文件解析到贝塞尔曲线渲染
NanoSVG完整教程:从SVG文件解析到贝塞尔曲线渲染 【免费下载链接】nanosvg Simple stupid SVG parser 项目地址: https://gitcode.com/gh_mirrors/na/nanosvg NanoSVG是一款轻量级的SVG解析库,能够将SVG文件高效转换为贝塞尔曲线数据,…...
从零构建生成式AI项目:RAG、智能体与微调实战指南
1. 从零到一:构建端到端生成式AI项目的全景图如果你是一名开发者或技术爱好者,最近打开GitHub,大概率会被各种以“RAG”、“Agent”、“Fine-tuning”为标题的项目刷屏。生成式AI,尤其是大语言模型,已经从实验室的尖端…...
Kali+MSF 安全攻防实操|Windows 渗透完整流程教程
入侵电脑,并没有我们想象的那么难,今天我们的文章主要是给一些基础比较薄弱的小伙伴们准备的,如果你从来没有利用msf进入过对方计算机,就赶紧找个风和日丽的下午,跟着博主一起来试试吧~ 01 什么是msf 演示环境 02 …...
从微信小程序转战uniapp,我总结的路由跳转对照表与迁移心得
从微信小程序到Uniapp:路由跳转深度迁移指南与实战避坑 第一次在Uniapp项目里看到uni.navigateTo这个API时,我下意识地以为它和微信小程序的wx.navigateTo完全一样——直到某个深夜,测试同学突然报告说iOS设备上连续跳转7个页面后应用直接闪退…...
在Linux Mint上搞定Synopsys VCS和Verdi 2018.06:一个学生党的完整踩坑与配置实录
在Linux Mint上搞定Synopsys VCS和Verdi 2018.06:一个学生党的完整踩坑与配置实录 作为一名微电子专业的学生,第一次接触Synopsys的VCS和Verdi工具时,我完全被它们的强大功能所震撼。然而,当我在自己的Linux Mint系统上尝试安装这…...
ETS2LA:为《欧洲卡车模拟2》带来终极智能驾驶体验的5大核心功能
ETS2LA:为《欧洲卡车模拟2》带来终极智能驾驶体验的5大核心功能 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist 想…...
浏览器运行Cursor AI编辑器:Docker+KasmVNC部署全攻略
1. 项目概述:在浏览器中运行 Cursor AI 编辑器如果你是一名开发者,大概率听说过或者正在使用 Cursor——这款集成了强大 AI 辅助编程能力的编辑器。它基于 VS Code,但深度整合了类似 ChatGPT 的对话和代码生成功能,能极大提升编码…...
基于开关电容器的级联多电平逆变器,使用布尔PWM控制技术研究(Simulink仿真实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
2026.5.12:三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗?
三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗? 环境: - 三台服务器 1. 一台fastapi中有websocket接口的服务器:43.226.44.50 2. 一台代理上面1里面的fastapi服务的nginx:43.226.44.184 3. 一台代…...
