Ansible 自动化运维

一、介绍

1、定义:

ansible是自动化运维工具,基于Python开发,具有批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于 paramiko(框架) 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块。ansible基于ssh来和远程主机通讯,不需要在远程主机上安装client/agents。

2、ansible 特点:

① 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作,没有agent。

② 默认使用SSH协议对设备进行管理。

③ 有大量常规运维操作模块,可实现日常绝大部分操作。

④ 通过Playbooks(剧本)来定制强大的配置、状态管理。

3、ansible 任务执行模式:

Ansible系统由控制主机对被管节点的操作方式可分为两类,即ad-hoc和playbook:

① ad-hoc(点对点)模式:使用单个模块,支持批量执行单条命令。 ad-hoc 命令是一种可以快速输入的命令,相当于bash中的一句shell。

② playbook(剧本)模式:是Ansible主要管理方式,playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作作的配置文件。

二、ansible 指令

1、安装ansible:

使用yum 安装

yum install epel-release -y

yum install ansible –y

2、ansible配置文件:

列出配置文件:rpm -qc ansible

vim /etc/ansible/ansible.cfg

① sudo_user:设置默认执行命令的用户,sudo_user = root。

② remote_port:这是指定连接的管理端口,默认是22 (SSH端口),remote_port = 22。

③ host_key_checking:设置是否检查SSH主机的密钥。可以设置为True或False,host_key_checking = False。

④ timeout:设置SSH连接的超时间隔,单位是秒,timeout = 60。

⑤ log_path:设置log_path把Ansible系统的输出记录到日志文件中,log_path = /var/log/ansible.log。

3、ansible 命令格式:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

● <host-pattern> 指定要执行操作的目标主机或主机集合。它可以是一个IP地址,也可以是一个库存文件中定义的主机分组名称。

● [-f forks] 用于设置并发执行任务的最大进程数。

● [-m module_name] 用于指定要使用的Ansible模块,Ansible模块是执行特定任务的独立单元。

● [-a args] 用于传递给指定模块的参数。

4、ansible 秘钥验证:

① 生成秘钥:

ssh-keygen -t rsa

② 向管理的主机发送秘钥:

ssh-copy-id root@IP

三、ad-hoc(点对点)模块的使用

1、设置 hosts 远程被控制主机:

vim /etc/ansible/hosts

定义hosts 有3类:

① Ex 1:未分组的主机,在任何组头之前指定。

② Ex 2:分组的主机。

③ Ex 3:和数据库有关的服务器集合。

ping模块测试连通性:ansible all -m ping

对库存文件中定义的所有主机执行操作,使用的模块是 ping。

2、command 模块:

(1) 介绍:

-m command:指定了使用的模块是 command,command 模块用于在远程主机上执行命令。

选项:

chdir:在执行命令之前,先切换到该目录。

creates=文件名,当这个文件存在,则传递给command模块的命令不执行。

removes=文件名,当这个文件不存在,则传递给command模块的命令不执行。

(2) 实例:

① ansible web -m command -a 'chdir=/app ls'

在web组中的主机执行 ls 命令,执行前先切换到 /app 目录下。

② ansible web -m command -a 'creates=/app/f1 touch /app/f2'

在web组中的主机执行 touch /app/f2 命令,当 /app/f1 文件存在时则不执行。

③ ansible web -m command -a 'removes=/app/f1 touch /app/f2'

在web组中的主机执行 touch /app/f2 命令,当 /app/f1 文件不存在时则不执行。

3、shell 模块:

shell模块用于在远程主机上调用shell解释器运行命令,shell模块可以利用shell的功能,如管道(|)、重定向、变量扩展等。

ansible web -m shell -a 'cat /etc/passwd |grep root'

4、copy 模块:

(1) 介绍:

copy 模块可用于复制文件到远程主机。

用法:

复制文件:-a "src= dest= "

给定内容生成文件:-a "content= dest= "

(2) 实例:

① ansible web -m copy -a "src=/root/app/f3 dest=/app"

把控制端的 /root/app/f3 文件,copy 到被控制端的 /app 下。

② ansible web -m copy -a "content='hello' dest=/app/f3 mode=222 backup=yes"

将被控制端的 /app/f3 文件写入 hello,修改权限为 222,并执行备份操作。

5、file 模块:

(1) 介绍:

Ansible的file模块用于管理和操作远程主机上的文件系统对象,可以方便地创建、删除、修改文件和目录属性,以及管理符号链接。

创建目录:-a "path= state=directory"

创建链接文件:-a "path= src= state=link"

删除文件:-a "path= state=absent"

● state=:

directory:创建目录。

link:创建软链接。

hard:创建硬链接。

touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间。

absent:删除目录、文件或者取消链接文件。

(2) 实例:

① ansible web -m file -a "path=/app/f4 state=directory"

在被控制端,创建f4目录。

② ansible web -m file -a "path=/app/f11 src=/app/f1 state=link"

被控制端的 /app/f1 创建一个软链接 f11。

6、fetch 模块:

从远程某主机获取文件到本地。

dest:用来存放文件的目录。

src:在远程拉取的文件,必须是一个file,不能是目录。

ansible web -m fetch -a "src=/app/f1 dest=/app/"

从远程获取到本地的文件,会保存到以远程主机的IP 为名的目录中,并且保持原文件的目录结构:

7、cron 模块:

(1) 介绍:

cron模块是一个专门用于管理远程主机上定时任务的模块。

常见参数:

name:为Cron任务指定一个唯一名称,用于标识和管理该任务。若定义的名字没有修改,会把前一次定义的计划任务覆盖。

job:指定要运行的命令或脚本是什么。

state:指定状态,present表示添加定时任务,是默认设置;absent表示删除定时任务。

minute, hour, day, month, weekday:指定Cron任务执行的时间单位。

user:指定Cron任务所属的用户,默认是root。

backup:设置为yes时,在修改Cron条目前备份原始Cron配置文件。

(2) 实例:

① ansible web -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F'"

在远程主机上执行定时任务,每5分钟清空一次防火墙。

② ansible web -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F' state=absent"

删除定时任务。

8、yum 模块:

(1) 介绍:

yum 模块用于管理远程主机上的软件包。

常用参数:

name:所安装的包的名称

state:present安装, latest安装最新的, absent 卸载软件。

disable_gpg_check:是否禁止GPG checking,只用于`present‘ or `latest’。

(2) 实例:

① ansible web -m yum -a "name=dstat state=present disable_gpg_check=yes"

安装dstat 包,忽略gpg_check。

卸载 dstat 包:ansible web -m yum -a "name=dstat state=absent"

② 可以结合copy模块,将安装包发送到远程主机,再安装:

ansible web -m copy -a "src=/root/zabbix-release-3.4-2.el7.noarch.rpm dest=/app"

ansible web -m yum -a "name=/app/zabbix-release-3.4-2.el7.noarch.rpm state=present disable_gpg_check=yes"

9、service 模块:

(1) 介绍:

Ansible的service模块是一个专门用于管理远程主机上系统服务的模块。它提供了对服务进行启动、停止、重启、重新加载、查询状态以及设置开机自启动等操作。

常用参数:

name:服务名称。

state:started启动服务,stopped停止服务,restarted重启服务,reloaded重载配置

enabled #设置开机启动。

(2) 实例:

① 在远程主机安装nginx:

ansible web -m yum -a "name=nginx state=present disable_gpg_check=yes"

② 开启远程主机的nginx 服务:

ansible web -m service -a "name=nginx state=started"

③ 查询远程主机的 80 端口:

ansible web -m shell -a "ss -nutlp |grep 80"

10、user 模块:

(1) 介绍:

常用参数:

name:指定用户名

comment:用户的描述信息

group:指定基本组

groups:指定附加组,如果指定为(groups=)表示删除所有组

home:指定用户家目录

shell:指定默认shell

state:设置帐号状态,不指定为创建,指定值为absent表示删除

uid:指定用户的uid

(2) 实例:

ansible web -m user -a 'name=Bean1 uid=1111 group=bean shell=/bin/bash home=/app/Bean'

删除用户:

ansible web -m user -a "name=Bean1 state=absent"

11、group 模块:

常用参数:

gid:设置组的GID号

name:管理组的名称

state:指定组状态,默认为创建,设置值为absent为删除

ansible web -m group -a 'name=tom state=present'

12、script 模块:

在远程主机上执行服务器端的脚本文件。

实例:

① 在服务器端编写一个脚本:

vim /app/test.sh

#!/bin/bash

date >> /app/disk_total.log

df -lh >> /app/disk_total.log

② 在远程主机上执行该脚本:
ansible web -m script -a '/app/test.sh'

查看文件是否生成:

ansible web -m command -a "chdir=/app ls"

查看文件内容:

ansible web -m shell -a "cat /app/disk_total.log"

13、setup 模块:

facts 组件是 Ansible 用于采集远程机器设备信息的一个功能,可以使用setup 模块查机器的所有facts信息。setup模块下经常使用的一个参数是filter 参数,用于对facts信息进行匹配筛选。

实例:查询10.1.1.60主机的全部信息

ansible 10.1.1.60 -m setup

筛选内存信息:

ansible 10.1.1.60 -m setup -a "filter='*mem*'"

四、Ansible playbook 的使用

1、介绍:

playbook由YMAL语言编写,是ansible用于配置,部署和管理被控节点的剧本。通过 playbook 的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。

执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是需要大量的操作时候,最好使用playbook。

playbook 方便的重用代码,移植到不同的机器上。

2、语法:

① 文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。

② 在同一行中,#之后的内容表示注释。

③ YMAL中的列表元素以"-"开头然后紧跟着一个空格,后面为元素内容。

例如 - apple - banana - orange。

④ 同一个列表中的元素应该保持相同的缩进,否则会被当做错误处理。

⑤ play中hosts,variables,roles,tasks等对象的表示方法都是键值,中间以":"分隔,":"后面还要增加一个空格。

3、Playbooks 配置文件的基础组件:

① hosts:运行指定任务的目标主机。每个playbook都必须指定hosts,可以使用系统默认的/etc/ansible/hosts,也可以自己编辑,在运行的时候加上 -i 选项,指定清单的位置即可。

② remoute_user:在远程主机上执行任务的用户,指定远端主机中的哪个用户来登录远端系统。

③ tasks:任务列表,指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块。

④ templates:包含了模板语法的文本文件。

⑤ variables:变量。

⑥ handlers:由特定条件触发的任务,当某任务的状态在运行后为changed时,可通过"notify"通知给相应的 handlers。

4、Playbooks 的编写与执行:

(1) 编写一个剧本:

vim /etc/ansible/web.yml

在远程主机上安装nginx,将本机上的nginx配置文件拷贝给远程主机,开启nginx服务。

---

- hosts: web

  remote_user: root

  tasks:

           - name: yum install nginx

             yum: name=nginx state=latest

          - name: copy nginx.conf

            copy: src=/app/nginx.conf dest=/etc/nginx/nginx.conf backup=yes

            tags: reloadnginx

          - name: start service

            service: name=nginx state=started

            tags: startnginx

tags:为任务添加标签。标签可用于在执行Playbook时筛选要执行的任务,例如只运行带有特定标签的任务。

检查剧本的语法:

ansible-playbook /etc/ansible/web.yml --syntax-check

(2) 在剧本中加入handlers 触发任务:

在Ansible剧本(Playbook)中,handlers 起着延迟执行某些特定任务的作用。一个典型的例子是配置Web服务器,如果在剧本中修改了Nginx或Apache的配置文件,可以编写一个handler来重启服务,并在修改配置的任务后面添加notify指令指向该handler,重启服务以使新配置生效。

vim /etc/ansible/web.yml

handlers:

        - name: reload

          service: name=nignx state=restarted

(3) 在剧本中加入variables 变量:

① 变量可以不定义在playbook 中,直接在命令行给出。

- name: start service

  service: name={{ servername }} state=started

  tags: start{{ servername }}

ansible-playbook web.yml -e servername=nginx -t startnginx

-e servername=nginx 指定变量的值为nginx ; -t startnginx 执行这个标签的操作。

② 变量可以直接定义在playbook 中

---

- hosts: web

  remote_user: root

  vars:

          - servername: nginx

  tasks:

          - name: yum install {{ servername }}

            yum: name={{ servername }} state=latest

          - name: copy {{ servername }}.conf

            copy: src=/app/{{ servername }}.conf dest=/etc/{{ servername }}/{{ servername }}.conf backup=yes

            notify: reload

            tags: reload{{ servername }}

          - name: start service

            service: name={{ servername }} state=started

            tags: start{{ servername }}

handlers:

         - name: reload

           service: name={{ servername }} state=restarted

执行剧本:

ansible-playbook /etc/ansible/web.yml

检验:查看远程主机的80端口:

五、Ansible Role

1、介绍:

role 是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,以层次性、结构化地组织 playbook。

● 目录结构:

① 角色名

② files:存放需要复制到远程主机的静态文件,如证书、配置备份等。

③ handlers:定义事件触发的任务 (main.yml),比如服务重启。

④ tasks:包含主要执行的任务列表 (main.yml)。

⑤ templates:金甲模板,存放模板文件,支持变量替换。

⑥ vars:自定义变量。

2、编写 Role:

(1) 创建目录结构:

cd /etc/ansible

mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p

touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml

echo 1234 > roles/nginx/files/index.html

cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

(2) 编写任务:

vim /etc/ansible/roles/nginx/tasks/main.yaml

---

- name: install nginx packge

  yum: name=nginx state=latest

- name: copy index.html

  copy: src=/etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html/index.html

- name: copy nginx.conf template

  template: src=/etc/ansible/roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf

  notify: restart nginx

- name: make sure nginx service running

  service: name=nginx state=started enabled=yes

(3) 编写配置文件:

vim /etc/ansible/roles/nginx/templates/nginx.conf.j2

worker_connections {{ worker_connections }};

(4) 编写变量:

vim /etc/ansible/roles/nginx/vars/main.yaml

worker_connections: 1024

(5) 编写 handlers:

vim /etc/ansible/roles/nginx/handlers/main.yaml

---

- name: restart nginx

  service: name=nginx state=restarted

(6) 编写剧本:

vim /etc/ansible/roles/site.yaml

- hosts: 10.1.1.60

  roles:

          - nginx

3、执行 Role:

(1) 语法测试:

ansible-playbook site.yaml --syntax-check

(2) 执行:

ansible-playbook /etc/ansible/roles/site.yaml

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

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

相关文章

报表控件Stimulsoft在JavaScript报告工具中的事件:查看器事件(上)

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…

[华为OD]给定一个 N*M 矩阵,请先找出 M 个该矩阵中每列元素的最大值 100

题目&#xff1a; 给定一个 N*M 矩阵&#xff0c;请先找出 M 个该矩阵中每列元素的最大值&#xff0c;然后输出这 M 个值中的 最小值 补充说明&#xff1a; N 和 M 的取值范围均为&#xff1a;[0, 100] 示例 1 输入&#xff1a; [[1,2],[3,4]] 输出&#xff1a; 3 说…

力扣-有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 注…

(三十一)第 5 章 数组和广义表(稀疏矩阵的三元组行逻辑链接的顺序存储表示实现)

1. 背景说明 2. 示例代码 1)errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

AI 工具合集

以下工具来源于互联网&#xff0c;可能会失效&#xff0c;请参考使用 网红工具 名称链接说明GPT-4https://chat.openai.com/ 需要梯子&#xff0c;需要付费。功能最强大的聊天机 器人。 文心一言https://yiyan.baidu.com/welcome 国内版 GPT&#xff0c;需要申请账号。回答问…

最好用的电脑监控软件,电脑监控软件怎么监控员工

电脑监控软件是一种专为跟踪和记录计算机使用情况而设计的应用程序&#xff0c;主要用于提升企业内部的信息安全、提高工作效率及监管员工行为。这些软件通常通过以下几种方式实现监控功能&#xff1a; 实时屏幕监控&#xff1a; 软件能够实时显示被监控电脑的屏幕画面&#x…

数据分析:扩增子分析(qiime2平台全流程分析)

Amplicon sequencing analysis pipeline through qiime2 platform qiime2是扩增子数据分析的最佳平台之一&#xff0c;其提供了大量从原始data到统计分析的插件&#xff0c;尤其是它的可重复分析且可扩展插件的理念使得其成为扩增子分析首选的平台。 Platform qiime2是扩增子…

Airmail 5 for Mac:高效电子邮件管理软件

Airmail 5 for Mac作为一款功能强大的电子邮件客户端软件&#xff0c;为Mac用户带来了全新的邮件管理体验。其高效、直观的操作界面&#xff0c;使得用户可以轻松管理各类邮件&#xff0c;提升工作效率。 Airmail 5 for Mac v5.7.4中文激活版 首先&#xff0c;Airmail 5支持多个…

若依前后端部署系统--详细附图

一、后端部署 1、在ruoyi项目的Maven中的生命周期下双击package.bat打包Web工程&#xff0c;生成jar包文件。 提示打包成功 2、多模块版本会生成在ruoyi/ruoyi-admin模块下target文件夹,我们打开目录ruoyi-admin/taget&#xff0c;打开cmd&#xff0c;运行java -jar jar包名称…

Windows Server 评估版转换(升级)为完整版

临时方法 获取 Windows Server 的剩余宽限期 Slmgr /dliWindows Server免费试用期可以使用以下命令合法延长5次&#xff0c;共180天&#xff1a; slmgr /rearm这意味着所评估的 Windows Server 的最长可用时间为 3 年 ( 180 days * 6)。 试用期到期后&#xff0c;Windows S…

为什么有些3D模型导入总是渲染不出来?---模大狮模型网

在使用3D建模软件时&#xff0c;有时候会遇到一些导入模型后无法正确渲染的问题&#xff0c;这给用户带来了不便和困扰。本文将探讨一些可能导致3D模型无法渲染的原因&#xff0c;并提供解决方案&#xff0c;帮助您顺利渲染模型。 一、文件格式不兼容某些3D建模软件只支持特定的…

共赢闽企数字生态,2024纷享销客福建生态伙伴会圆满成功

4月26日&#xff0c;2024纷享销客福建生态伙伴会在厦门顺利举行&#xff0c;大会以“共赢闽企数字生态&#xff0c;共绘数智发展蓝图“为主题&#xff0c;特邀纷享销客创始人&CEO罗旭、建发旅游集团信息中心总经理高勇、金蝶&#xff08;厦门&#xff09;市场总监王鹭鸣、纷…

一加Ace3/12/Ace2pro手机ColorOS14刷KernelSU内核ROOT-解决无限重启变砖

一加Ace3/一加12/一加11等手机升级了安卓14底层&#xff0c;并且ColorOS版本也更新到了14版本界面和功能都比之前的系统表现更加优秀&#xff0c;但刷机方面&#xff0c;相对之前存在一些差异&#xff0c;特别是KernelSU内核级别root权限&#xff0c;不再支持一键刷入KernelSU通…

七、OSPF特殊区域及其特性

目录 OSPF区域分类 hello报文中option字段 1.末节区域&#xff08;Stub区域&#xff09; 2.完全末节区域&#xff08;Toally Stub区域&#xff09; 3.七类LSA 4.非完全末节区域&#xff08;NSSA区域&#xff09; 5.完全非完全末节区域&#xff08;Toally NSSA区域&#…

vue使用pdfjs-dist在电脑上展示PDF文件

安装 安装的时候一定要带上版本号,这里采用的是2.0.943(因为这个版本对于我目前的项目比较合适可以正常使用,其他版本大概率会报错),当前项目使用的是vue2,vue的版本是2.5.10 npm install pdfjs-dist@2.0.943 查看版本发现这玩意版本非常之多 使用 在使用pdfjs-dist库…

CSS Position定位(详解网页中的定位属性)

目录 一、Position介绍 1.概念 2.特点 3.作用 4.应用 二、Position用法 1.position属性 2.static定位 3.fixed定位 4.relative定位 5.absolute定位 6.sticky定位 7.重叠的元素 三、CSS定位属性 四、总结 一、Position介绍 1.概念 文档流&#xff08;Document Fl…

uniapp 微信小程序 分享海报的实现

主页面 <template><view class"page"><!-- 自定义导航栏--><Navbar title"我的海报"></Navbar><view class"container"><poster ref"poster" :imageUrl"image" :imageWidth"7…

NGINX发布动态页面的方法

一、建立 [rootserver100 html]# vim index.php [rootserver100 html]# pwd /usr/share/nginx/html 二、下载PHP文件 [rootserver100 conf.d]# dnf install php.x86_64 -y 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可…

Latex入门教学——常用语句介绍

目录 一、导言 二、正文 三、图片 四、公式 五、表格 六、参考文献 LaTex模板下载 IEEE模板&#xff1a;IEEE Article Templates - IEEE Author Center Journals通用模板&#xff1a;Overleaf, Online LaTeX Editor其他方法&#xff1a;百度&#xff0c;CSDN等。 一、导…

力扣题目:寻找数组的中心下标

力扣题目&#xff1a;寻找数组的中心下标 题目链接: 724.寻找数组的中心下标 题目描述 代码思路 根据题目内容&#xff0c;维护好前后缀和&#xff0c;然后从左到右遍历寻找合适的下标 代码纯享版 class Solution {public int pivotIndex(int[] nums) {int sumleft 0, su…