ansible:远程自动化运维

news/2024/9/18 14:52:29/ 标签: 运维, ansible, 自动化

ansible是基于python开发的配置管理和应用部署工具。

也是自动化运维的重要工具。

可以批量配置,部署,管理上千台主机。

只需要在一台主机配置ansible就可以完成其他主机的操作。

操作模式:

1、模块化操作:命令行执行

2、playbook:剧本,也就是把命令行脚本化,脚本的格式是yaml格式

ansible的特性:幂等性

幂等性:多次操作或者多次执行,对系统的影响不会发生变化,无论执行多少次结果都是一样的,ansible什么都不会做

ansible的四大组件:

1、lnventory : 主机清单 主机组

必须要声明管理主机的地址或者其他撇脂,不声明ansible无法对主机进行操作

2、modules :学习的核心

ansible的功能都是靠模块来实现

3、插件

4、playbooks :剧本 ---------脚本(复用)


模块和语法的学习

192.168.124.10 ansible

192.168.124.20 目标主机1

192.169.124.30 目标主机2

准备工作,安装epel源,安装ansible

yum -y install epel-release

yum -y install ansible

1 [root@localhost opt]# cd /etc/ansible
2 [root@localhost ansible]# ls
3 ansible.cfg  hosts  roles
4 [root@localhost ansible]# vim hosts

命令行:

ansible-doc -l  列出ansible所有的模块
1、command模块:基础模块 也是ansible的默认模块,不支持管道符和重定向操作,执行一般的linux命令
ansible <组名/ip地址> -m  (指定模块,不加-m,默认使用command) -a <参数或者命令>  

动态有变化的是无法跟踪的,如tail -f 加了-f就是动态的,不会显示,不加-f静态的,就会显示

command可以对目标主机的压缩包解压,但是必须要有指定的解压路径

ansible常用的参数

chdir :在目标主机提前进入目录,然后执行指令

[root@localhost ansible]# ansible 192.168.124.20 -a 'chdir=/home ls'
192.168.124.20 | CHANGED | rc=0 >>
test1

creates :判断文件是否存在,如果存在就不执行后面的指令

[root@localhost ansible]# ansible 192.168.124.20 -a 'creates=/opt/123 ls /opt'
192.168.124.20 | SUCCESS | rc=0 >>
skipped, since /opt/123 exists

removes :判断文件是否存在,如果存在就执行后面的指令

[root@localhost ansible]# ansible 192.168.124.20 -a 'removes=/opt/123 ls /opt'
192.168.124.20 | CHANGED | rc=0 >>
123
nginx-1.22.0
nginx-1.22.0.tar.gz
rh
2、shell模块 :支持管道符和重定向,也可以用逻辑表达式&&(且) ;(逻辑或)
1 [root@localhost ansible]# ansible 192.168.124.20 -m shell -a 'useradd 2test'
2 192.168.124.20 | CHANGED | rc=0 >>3 [root@localhost ansible]# ansible 192.168.124.20 -m shell -a 'echo 123456 | passwd --stdin test'
4 192.168.124.20 | CHANGED | rc=0 >>
5 更改用户 test 的密码 。
6 passwd:所有的身份验证令牌已经成功更新。
7 [root@localhost ansible]# ansible 192.168.124.20 -m shell -a 'echo 123 > /opt/123' 192.168.124.20 | CHANGED | rc=0 >>8 [root@localhost ansible]# ansible 192.168.124.20 -m shell -a 'cat /opt/123'
9 192.168.124.20 | CHANGED | rc=0 >>
10 123

练习:

在主机创建一个脚本,在脚本中写#!/bin/bash ifconfig 然后运行脚本,在一条命令中完成

[root@localhost ansible]# ansible 192.168.124.30 -m shell -a 'echo -e "#!bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'
192.168.124.30 | CHANGED | rc=0 >>
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.124.30  netmask 255.255.255.0  broadcast 192.168.124.255inet6 fe80::b995:4bbd:202c:45e5  prefixlen 64  scopeid 0x20<link>inet6 fe80::1bdf:23b7:bdb0:d771  prefixlen 64  scopeid 0x20<link>inet6 fe80::e95f:aa56:10e4:6888  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:f2:6f:c7  txqueuelen 1000  (Ethernet)RX packets 23839  bytes 2467642 (2.3 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 21702  bytes 1777782 (1.6 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 37017  bytes 3226288 (3.0 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 37017  bytes 3226288 (3.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255ether 52:54:00:3c:3a:39  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
3、cron模块 :定时任务模块 minute / hour / day /month /weekday

                                                 对应 :分/时/日/月/周

创建定时任务:9月的第3天的8:30 执行ls /opt这个命令 名字为test1

[root@localhost ansible]# ansible 192.168.124.20 -m cron -a 'minute=30 hour=8 day=3 month=9 job="ls /opt" name="test1" '

job表示定时任务执行的命令

删除名字为None的定时任务

ansible 192.168.124.20 -m cron -a 'name="None" state=absent'

4、user模块 :用户管理模块

参数

name :用户名 必选参数

state :present 创建 可以不加默认是创建

absent 删除

system=yes/no 创建用户时no是普通用户,yes是程序用户

uid :指定用户的uid

group:指定用户组

shell:默认是系统用户可以不加/bin/bash

creates_home=yes/no 不是默认的家目录/home

/opt/test1家目录 create_home=yes 创建 ,no就是不创建

password:用户添加密码

remove=yes/no state=absent删除用户,删除用户时是否删除家目录

创建普通用户

参数

name :用户名 必选参数

state :present 创建 可以不加默认是创建

absent 删除

system=yes/no 创建用户时no是普通用户,yes是程序用户

uid :指定用户的uid

group:指定用户组

shell:默认是系统用户可以不加/bin/bash

creates_home=yes/no 不是默认的家目录/home

/opt/test1家目录 create_home=yes 创建 ,no就是不创建

password:用户添加密码

remove=yes/no state=absent删除用户,删除用户时是否删除家目录

创建普通用户

ansible 192.168.124.20 -m user -a 'name=xy102 system=no'

创建程序用户

ansible 192.168.124.20 -m user -a 'name=xy102  shell=/sbin/nologin system=yes'

创建用户指定家目录同时添加密码

ansible 192.168.124.20 -m user -a 'name=xy88 home=/opt/xy788 create_home=yes password=123456'

删除用户同时删除家目录

ansible 192.168.124.20 -m user -a 'name=xy88 remove=yes state=absent'

5、copy复制模块:当前主机的文件复制到目标主机

ansible 192.168.124.20 -m copy -a 'src=/opt/xy102.txt dest=/opt/'

src表示源文件 dest 目标主机的保存路径

mode 复制文件,表示权限

owner 文件的所有者 属主

group 文件的所在组 属组

ansible 192.168.124.20 -m copy -a 'src=/opt/xy102.txt dest=/opt/ mode=640 owner=bmm group=bmm'

content 指定复制的内容,就不能用src

ansible 192.168.124.20 -m copy -a 'content="黑神话:悟空,性价比高" dest=/opt/houzi.txt mode=777 owner=bmm group=bmm'

6、file模块:设置文件属性

mode owner group state=touch | abstent touch创建 absent删除

ansible 192.168.124.20 -m file -a 'path=/opt/abc.txt state=touch mode=777 owner=bmm group=bmm'

创建一个链接文件

ansible 192.168.124.20 -m file -a 'path=/opt/abc.txt .link src=/opt/abc.txt state=link'

 删除文件

ansible 192.168.124.20 -m file -a 'path=/opt/abc.txt .link state=absent'

7、hostname模块:给目标主机设置主机名

ansible 192.168.124.30 -吗hostname -a "name=nginx"

8、ping模块 : 测试主机和目标主机是否ping通

ansible all -m ping

9、yum模块 :在目标主机安装软件,只能安装和卸载

安装软件

ansible 192.168.124.20 -m yum -a 'name=httpd'

卸载软件

ansible 192.168.124.20 -m yum -a 'name=httpd state=absent'

10、service模块 :管理目标主机上软件的运行状态

参数

name 服务名称 必加参数

state=started|stopped|restarted

enabled=true

runlevel=60运行级别,设置了开机自启就需要声明运行级别

ansible 192.168.124.20 -m service -a 'name=nginx enabled=true state=started runlevel=60'

1安装nginx 2开机自启nginx 开机自启 3访问的内容是this is nginx1 !

ansible 192.168.124.20 -m shell -a 'echo "this is nginx1" > /usr/share/nginx/html/index.html'

ansible 192.168.124.20 -a 'curl 192.168.124.20'
访问

 

11、防火墙和网络模块

 拒绝30ping20

ansible 192.168.124.20 -m iptables -a 'chain=INPUT protocol=ICMP source=192.168.124.30 jump=REJECT' -b

 防火墙策略拒绝80端口

ansible 192,168.233.20 -m iptables -a "chain=INPUT protocol=tcp destination port=8
0 jump=REJECT" -b

 防火墙策略允许80端口

ansible 192,168.233.20 -m iptables -a "chain=INPUT protocol=tcp destination port=8
0 jump=ACCEPT" -b

删除防火墙策略

ansible 192,168.233.20 -m iptables -a "chain=INPUT protocol=tcp destination port=8
0 jump=REJECT state=absent" -b

给80端口放空

ansible 192.168.124.20 -m firewalld -a 'service=nginx zone=public permanent=true state=enabled immediate=true' -b
firewall的配置文件没有nginx,所以用下端口+协议来进行放空

ansible 192.168.124.20 -m firewalld -a 'port=80/tcp zone=public permanent=true state=enabled immediate=true' -b

 删除放空的端口

ansible 192.168.124.20 -m firewalld -a 'port=80/tcp zone=public permanent=true state=disenabled immediate=true' -b

配置网卡

ansible 192.168.124.30 -m ansible.builtin.lineinfile -a "path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp='^IPADDR' line='IPADDR=192.168.124.29' " -b

重启网卡

ansible 192.168.124.30 -a 'systemctl restart network'

12、script模块 运行本地的脚本,把脚本运行的结果输出到目标主机

ansible 192.168.124.20 -m script -a '/opt/test.sh'

13、setup模块 查看目标主机的信息

查看cpu

ansible 1892.168.124.20 -m setup -a 'filter=ansible_* processor *'

查看内核

ansible 1892.168.124.20 -m setup -a 'filter=ansible_proc_cmdline'

查看内存

ansible 1892.168.124.20 -m setup -a 'filter=ansible_mem*'

查看系统信息

ansible 1892.168.124.20 -m setup -a 'filter=ansible_system'


总结:

command和shell(常用)

copy、yum、user

service服务 对服务进行管理

file模块 文件属性进行修改

hostname 改主机名

ping

主机清单:

主机组:IP地址

批量匹配ip地址10-50

vim hosts

192.168.124.[1:5] [0:9]

组嵌套

[web]

192.168.124.20

[web1]

192.168.124.30

[webs:children]

web

web1


http://www.ppmy.cn/news/1515944.html

相关文章

搭建 Vue 项目博客

一、引言 Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;非常适合用于构建用户界面。本篇博客将详细介绍如何使用 Vue CLI 搭建一个简单的 Vue 项目博客。 二、安装 Node.js 和 npm 在开始之前&#xff0c;请确保你的计算机上已经安装了 Node.js 和 npm。如果没有&…

嵌入式UI开发-lvgl+wsl2+vscode系列:11、SSD202移植运行评估demo程序

一、前言 接下来我们根据开发板的LVGL指南移植lvgl的demo程序到开发板上&#xff0c;以及将一个评估的项目移植到开发板上&#xff0c;你将会发现移植lvgl到ssd2xx的板子上似乎很简单&#xff0c;但通过评估程序你将更加方便了解lvgl是否可以满足你的开发需求&#xff0c;除了…

电脑U口管理软件分享|U口管理软件哪个好?

电脑U口&#xff08;即USB端口&#xff09;管理软件是保护电脑安全、防止数据泄露和恶意软件入侵的重要工具。 在选择U口管理软件时&#xff0c;需要考虑其功能、易用性、安全性以及是否满足个人或企业的具体需求。以下是一些值得推荐的电脑U口管理软件及其特点&#xff1a; 1…

SpringBoot整合定时任务

定时任务是企业级开发中必不可少的组成部分&#xff0c;诸如长周期业务数据的计算&#xff0c;例如年度报表&#xff0c;诸如系统脏数据的处理&#xff0c;再比如系统性能监控报告&#xff0c;还有抢购类活动的商品上架&#xff0c;这些都离不开定时任务。本节将介绍两种不同的…

Obsidian Publish的开源替代品Markopolis

什么是 Markopolis &#xff1f; Markopolis 是一款旨在提供 Markdown 文件的 Web 应用和 API 服务器。它允许您以网站形式共享 Markdown 笔记&#xff0c;并使用 API 与 Markdown 文件交互和操作它们。类似于 Obsidian Publish&#xff0c;但又不会被锁定在 Obsidian 生态系统…

微分方程(Blanchard Differential Equations 4th)中文版Section4.2

正弦强迫系统 在本节中,我们研究的是外力为正弦或余弦函数的强迫谐振子方程: d 2 y d t 2 + p d y d t + q y = g ( t ) , \frac{d^2 y}{dt^2} + p \frac{dy}{dt} + qy = g(t), dt2d2y​+pdtdy​+qy=g(t), 其中 g ( t ) g(t) g(t) 是一个正弦或余弦函数。这种类型的外部强…

qt creator自动运行单元测试

qt creator自动运行单元测试 工具-选项-Testing-General&#xff0c;找到Automatically run&#xff0c;选项卡选择All。

SwiftUI 革命:打造未来派用户界面的艺术

标题&#xff1a;SwiftUI 革命&#xff1a;打造未来派用户界面的艺术 在当今快速发展的移动应用领域&#xff0c;用户界面(UI)的设计和实现已经成为开发者们关注的焦点。SwiftUI&#xff0c;作为苹果公司推出的现代UI框架&#xff0c;以其声明式编程范式、强大的数据绑定能力和…

【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondUnique.cs

这段代码定义了一个名为 GH_Ex_Ana_CondUnique 的 Grasshopper 组件。以下是该组件的功能和介绍&#xff1a; 功能介绍&#xff1a; 这个组件是用于在 Excel 范围内添加基于唯一值的条件格式。它允许用户高亮显示工作表中的唯一值或非唯一值。 主要特点&#xff1a; 条件格式…

稳石机器人 | 工业级AMR S1200L,专为多样化需求设计,柔性拓展更易用

近日&#xff0c;稳石机器人重磅推出基于新品控制器ROC1000的全新移动机器人AMR S1200L&#xff0c;专为满足生产制造和仓储物流的多样化需求而设计&#xff0c;无需改造现场&#xff0c;最快可在1周内完成部署。 重载型AMR-S1200L设计注重实用性和灵活性&#xff0c;可在室内…

解决执行npm run dev报错node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

问题&#xff1a; 最近下载了一个开源系统&#xff0c;执行npm install很顺利&#xff0c;以为大功告成&#xff0c;结果运行npm run dev时报错node: --openssl-legacy-provider is not allowed in NODE_OPTIONS 解决方法&#xff1a; 应用程序配置&#xff08;package.json&a…

Ansible初识

ansible初识 Ansible是一种自动化工具&#xff0c;用于配置管理、应用程序部署和任务自动化。它基于Python语言开发&#xff0c;使用SSH协议进行通信&#xff0c;并且不需要在被管理的主机上安装任何客户端。Ansible使用简单的YAML语言来描述任务和配置&#xff0c;使得操作简…

测试用例的设计

*涉及概念来源于《软件测试的艺术》 目录 一、为什么要设计测试用例&#xff1f; 二、黑盒测试与白盒测试介绍 三、测试用例常见设计方法 1.黑盒测试(功能测试) 2.白盒测试(结构测试) 四、测试策略 五、测试用例怎么写 一、为什么要设计测试用例&#xff1f; 由于时间…

一本读懂数据库发展史的书

数据库及其存储技术&#xff0c;一直以来都是基础软件的主力。数据库系统的操作接口标准&#xff0c;也是应用型软件的重要接口&#xff0c;关系重大。 作为最“有感”的系统软件&#xff0c;数据库的历史悠久、品类繁多、创新活跃。 对数据库历史发展的介绍&#xff0c;有利…

前端知识点

1.常见文本标签 2.属性 3.区块 4.表单 如果那个性别只能是单选的话要加上name属性 css 相邻选择器就是跟在被选中的里面的所有 js基本语法 js函数&#xff1a;就跟C语言差不多啊 改文本 引入js

【C#】【EXCEL】Bumblebee/Classes/ExColumn.cs

文章目录 Bumblebee/Classes/ExColumn.csFlow diagramDescriptionCode Bumblebee/Classes/ExColumn.cs Flow diagram #mermaid-svg-6WUm4r0wDJG9uelI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6WUm4r0wDJG9ue…

[Algorithm][综合训练][对称之美][经此一役小红所向无敌][连续子数组最大和]详细讲解

目录 1.对称之美1.题目链接2.算法原理详解 && 代码实现 2.经此一役小红所向无敌1.题目链接2.算法原理详解 && 代码实现 3.连续子数组最大和1.题目链接2.算法原理详解 && 代码实现 1.对称之美 1.题目链接 对称之美 2.算法原理详解 && 代码实现…

C# 循环访问目录树详解与示例

文章目录 一、目录树遍历的概念二、使用System.IO命名空间三、DirectoryInfo和FileInfo类四、递归遍历目录树五、示例&#xff1a;列出目录树中的所有文件和文件夹六、异常处理七、迭代方法八、总结 在C#中&#xff0c;访问文件系统是常见的需求之一。有时我们需要遍历目录树以…

使用SQLite进行Python简单数据存储的线程安全解决方案

在 Python 中使用 SQLite 进行简单数据存储时&#xff0c;线程安全是一个需要注意的问题。SQLite 本身是线程安全的&#xff0c;但在多线程环境下&#xff0c;可能仍然需要做一些额外的工作来确保数据访问的安全性。 1、问题背景 一位开发者正在编写一个简单的聊天服务器和客户…

leetcode 数组+哈希+双指针+子串+滑动窗口

——————双指针 283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] …