Ansible自动化运维,(1)模块

news2024/11/23 6:59:14

ansible是基于Python语言实现的,模块化:调用特定的模块完成特定的任务,支持自定义模块,可使用任何编程语言写模块(账号,软件等)。部署简单,基于python和SSH,相对安全,基于OpenSSH。

功能:批量执行远程命令,可以对远程的多台主机同时进行命令的执行;批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务;编排高级的企业级复杂的IT架构任务,Ansible的Playbook和role可以轻松实现大型的IT复杂架构;提供自动化运维工具的开发API,有很多运维工具,如jumpserver就是基于ansible实现自动化管理功能。

幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对。

ansible的安装:

yum安装需要加入epel源:本地yum源:

[root@Node1 ~]#:vim /etc/yum.repos.d/CentOS-Base.repo

[epel]
name=gn
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
        https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
        https://mirrors.huaweicloud.com/epel/$releasever/x86_64
        https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0

也可以直接yum安装:[root@Node1 ~]#:yum install -y epel-release.noarch

选择一种即可

安装ansible:yum install -y ansible

查看版本:使用ansible --version

相关文件:

/etc/ansible/ansible.cfg主配置文件,配置ansible工作特性,也可以在项目的项目中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件。

/etc/ansible/hosts主机清单

/etc/ansible/roles/存放角色的目录

主配置文件中几乎不需要修改,要开启71行的ansible的不验证即可

host_key_checking = False

由于是基于SSH,需要在客户端做一个ssh免密登录:

[root@Node1 ansible]#:ssh-keygen

三个回车

[root@Node1 ansible]#:ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.114.20

输入yes

输入密码

[root@Node1 ansible]#:ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.114.30

在主机清单中添加web,主机:vim /etc/ansible/hosts

[web]
192.168.114.20
192.168.114.30

查看主机:

ansible也是一个命令,执行临时任务,一次性任务 ,测试:

ansible 192.168.114.20 -m ping

-m是模块,使用ping模块

加个-k,密码验证:

我们添加了web模块,也可以直接使用web名,来测试:

ansible web -m ping

SUCCESS

其中ansible中支持许多模块:

通过命令ansible-doc -l查看

可以发现有3387个模块。

[root@Node1 ansible]#:ansible-doc -l | wc -l
3387

如果要具体查找某一个模块,可以,如查找ping模块:ansible-doc ping

#如果看ping模块详细解释:ansible-doc ping

简单模块:

模块:

但最常用的模块也就二三十个,针对特定业务只用十几个模块

1.command模块

2.shell模块

3.script模块

4.copy模块

5.get_url模块

6.fetch模块

7.stat模块

8.unarchive模块

9.archive模块

10.hostname模块

11.cron模块

12.yum和apt模块

13.yum_repository模块

14.service模块

1.command模块:

功能:在远程主机执行命令,此为默认模块,可忽略-m选项

该模块不具有幂等性

[root@Node1 ansible]#:ansible web -m command -a "touch /opt/asb"
[WARNING]: Consider using the file module with state=touch rather than running 'touch'.  If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
192.168.114.30 | CHANGED | rc=0 >>

192.168.114.20 | CHANGED | rc=0 >>
 

 在两台主机上发现创建了abs文件

2.shell模块:

要将配置文件中的114行改成shell:vim /etc/ansible/ansible.cfg。复制粘贴,yy,p

ansible web -a "echo '123' > /opt/test"

验证:发现在192.168.114.20和30上都有了文件test,内容是123

3.script模块:

如果想在多台主机上做某些事情,通过脚本的方式,在本机能够对多台主机执行脚本操作。

在本机/data下写一个创建文件的脚本:

执行命令:ansible web -m script -a "/data/test.sh"

此时,能够在两台主机上看到/opt/下有一个ky36的文件:

[root@Node2 opt]#:ls
ky36

[root@Node3 opt]#:ls
ky36

4.copy模块:

复制模块

src代表源文件路径

dest代表文件落地路径

owner属主

group属组

mode代表权限

我们把主机的/etc/fstab复制对面的/opt/下,并添加权限为644

ansible web -m copy -a "src=/etc/fstab dest=/opt/ mode=644"

查看验证:

在两台主机上创建张三用户:

[root@Node2 opt]#:useradd zhangsan -M -s /sbin/nologin

[root@Node2 opt]#:useradd zhangsan -M -s /sbin/nologin

复制/etc/passwd过去,指定属主和属组:ansible web -m copy -a "src=/etc/passwd dest=/opt/ mode=644 group=zhangsan owner=zhangsan"

 验证:过来了,属主和属组都是zhangsan

ansible web -m copy -a "content='nihao cxk' dest=/opt/wsc",写文本复制到对面的/opt/下文件名叫wsc

验证:

5.get_url模块:

功能: 用于将文件从http、https或ftp下载到被管理机节点上

url下载文件的URL,下载的路径
dest下载到目标路径(绝对路径),指明下载文件的存放目录
告诉别人路径在什么位置

owner:指定属主

group:指定属组

mode:指定权限

checksum:对目标文件在下载后计算摘要,以确保其完整性

验证:

6.fetch模块:

从远程主机提取文件至ansible的主控端,与copy相反,但不支持目录

ansible web -m fetch -a "src=/etc/passwd dest=/mnt"这里的src是远端的/etc/passwd,提取到本机的/mnt下:

由于是两个远端主机,在/mnt/下都列出来了两个主机。包括/etc/passwd

一般适用于提取远端的日志文件:ansible web -m fetch -a "src=/var/log/messages dest=/data/"

7.file模块:

path 指定文件路径

state 文件状态,有:新建(touch) 删除(absent) 文件夹(directory) 链接文件(link)等

src 源文件

mode 权限

owner 属主

group 属组

recurse 递归,修改属性时有效

例1:在/opt/下创建wsc文件,权限644,属主zhangsan,属组root

ansible web -m file -a "path=/opt/wsc state=touch mode=644 owner=zhangsan group=root"

查看:

ansible web -m file -a "path=/opt/wsc state=absent"   删除/opt/下的wsc

查看:

例2:将/etc/passwd软链接到远端主机/opt/下取名为soft

验证查看:

8.stat模块:

功能:检查文件或文件系统的状态

exists:判断是否存在

检查passwd文件的状态信息

ansible web -m stat -a "path=/etc/passwd"

stat块为passwd的状态信息。

如果随便指定一个不存在的文件:

ansible web -m stat -a "path=/etc/bucunzai"

exists判断是否存在,发现为false不存在。

9.unarchive模块:

copy默认为yes,拷贝的文件是从ansilbe主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件remote_src和copy功能一样互斥。

解压功能,将ansible主控端解压到远端主机上去。

例如我们在主控端下载nginx-1.18.0.tar.gz安装包,解压到远端/opt/下

下载:[root@Node1 data]#:wget http://nginx.org/download/nginx-1.18.0.tar.gz

命令:ansible web -m unarchive -a "src=/data/"

在远端查看:7-3也同理

10.archive模块:

压缩的功能。将主控端的的文件压缩到远端指定的目录中。

例如将主控端的/var/log/下的所有文件打包压缩到远端,

命令:[root@Node1 ansible]#:ansible web -m archive -a "path=/var/log dest=/data/alllog.gz"

远端查看:7-3也一样

11.hostname模块:

功能:管理主机名

ansible web -m hostname -a "name=ansible"

验证:发现已经该名成了ansible主机名了 

12.cron模块:

功能:计划任务。

有hour,minute,weekday,name,job等关键字。

name是注释信息,在"jobs":[create]

准备一个脚本文件:

在2小时30分,周一到周五执行一次脚本,为在/opt/下创建一个a.sh文件。

发现已经执行成功了。

13.yum和atp模块:

name参数:必须参数,用于指定需要管理的软件包,安装latest,present。卸载absent。

例:安装httpd

ansible web -m yum -a "name='httpd' state=present"

远端查看:

删除httpd:

ansible web -m yum -a "name='httpd' state=absent"

验证卸载了: 

但这里,仅仅是把httpd卸载了,依赖包还在。不建议这样删除

14.yum_repository模块:

功能:建立yum仓库模块

name参数,指定要操作的唯一的仓库ID

baseurl参数,设置yum仓库的baseurl

file参数,用于设置仓库的配置文件名称

description参数,设置仓库的配置文件的名称

gpgcheck参数,用于设置是否开启rpm包验证功能,默认为no,表示不用包验证

ansible web -m yum_repository -a 'name=epel description=epel  baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no file=epel'

15.service模块:

功能用于管理服务

name参数,用于指定需要操作的服务名称,比如nginx

state参数,用于指定服务的状态

enabled参数,用于指定是否将服务设置为开机启动项。yes开机,no不会开机

在远端下载http服务,

yum install -y httpd

systemctl status httpd,查看状态,发现未启动

启动httpd服务:[root@Node1 ansible]#:ansible web -m service -a "name=httpd state=started"

验证:已启动

state=stopped是关闭服务。

16.user模块:

comment 用户的描述信息

createhome 是否创建家目录

group 指定基本组

groups 指定附加组

home 指定用户家目录

name 指定用户名

shell 指定默认shell

state 设置账号状态,不指定为创建

system 创建一个系统用户

uid 指定用户uid

ansible web -m user -a "name=user1 createhome=no uid=10000 group=root"     #创建用户user1,指定uid,不建立家目录,指定基本组。

验证:

17.group模块:

功能:管理组

创建组:ansible web -m group -a "name=nginx gid=88 system=yes"

查看验证

删除组:ansible web -m group -a "name=nginx state=absent"

18.reboot模块:

ansible web -m reboot

重启:

19.steup模块: 

有许多模块:

ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_uptime_seconds"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter=ansible_env'

查看IP:

----end----

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

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

相关文章

Qt 5.14.2+Android环境搭建

1. 安装QT5.14.2的过程中,选中套件(kit) qt for android。 如果已经安装了qt creator但没有安装该套件,可以找到在qt安装目录下的MaintenanceTool.exe,运行该程序添加套件。 2. 安装jdk8,android sdk&…

SAP系统中的应付账款(与MM集成,关账操作)

1. 与物料管理的集成 Plant: 工厂是后勤中的位于中心位置的组织对象,一个“工厂”可以是公司内的一个作业区,或一个分支机构。一个“工厂”可以是一个中央交付仓库,可以是一个区域的销售营业部,一个制造工厂,一个集团…

【Transformer Debugger】OpenAI开源大模型调测工具--可以在训练大模型之前理解模型的运行情况并干预

背景 OpenAI开源了一个全新的大模型调测工具:Transformer Debugger。这个工具可以帮助开发者调测大模型的推理情况,帮助我们理解模型的输出并提供一定的解释支持https://github.com/openai/transformer-debugger 应用场景 这一工具在多个领域展现出广…

寄存器组(堆栈指针寄存器小解)

寄存器组(堆栈指针寄存器小解) 寄存器组栈是向下伸长的出入栈操作时候的SP寄存器 例子 寄存器组 主堆栈指针(MSP):这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的 应用程序代码来使…

初阶 《操作符详解》 10. 逗号表达式

10. 逗号表达式 exp1, exp2, exp3, …expN 注&#xff1a; 1.逗号表达式&#xff0c;就是用逗号隔开的多个表达式 2.逗号表达式&#xff0c;从左向右依次执行&#xff0c;整个表达式的结果是最后一个表达式的结果 代码1 #include <stdio.h> int main() {int a 1;int b…

Flink 状态管理

一、状态 流式计算分为无状态和有状态两种情况。无状态的计算观察每个独立事件&#xff0c;并且根据最后一个事件输出结果。例如&#xff0c;流处理应用程序从传感器接收温度读数&#xff0c;并在温度超过90度时发出告警。有状态的计算则会基于多个事件输出结果。例如&#xf…

为什么永远不会有语言取代 C/C++?

每个 CPU 都带有一种称为 ISA&#xff08;指令集架构&#xff09;汇编的电路语言。ISA 程序集是一种硬件语言&#xff0c;由基本数据操作、数学计算和结构化编程&#xff08;即 jmp&#xff09;的操作组成。但是&#xff0c;为每个计算需求编写汇编代码无疑是耗时的&#xff0c…

DevOps CMDB平台整合Jira工单

背景 在DevOps CMDB平台建设的过程中&#xff0c;我们可以很容易的将业务应用所涉及的云资源&#xff08;WAF、K8S、虚拟机等&#xff09;、CICD工具链&#xff08;Jenkins、ArgoCD&#xff09;、监控、日志等一次性的维护到CMDB平台&#xff0c;但随着时间的推移&#xff0c;…

vue3-openlayers marker 光晕扩散(光环扩散)(postrender 事件和 render 方法)

本篇介绍一下使用 vue3-openlayers marker 光晕扩散&#xff08;光环扩散&#xff09;&#xff08;postrender 事件和 render 方法&#xff09; 1 需求 marker 光晕扩散&#xff08;光环扩散&#xff09; 2 分析 marker 光晕扩散&#xff08;光环扩散&#xff09;使用 post…

图片如何去水印,分享4个小妙招,手把手教会你!

作为一个经常逛社区网站下载表情包、头像的人&#xff0c;遇到的一个大难题就是图片有水印。如何才能快速去除水印&#xff1f;询问了一圈身边朋友&#xff0c;搜集了各种资料&#xff0c;小编整理了4个超好用的方法。 如果大家和小编一样&#xff0c;能坐着就不站着&#xff0…

38.控制功能实现

上一个内容&#xff1a;37.添加简易的调试功能 以 37.添加简易的调试功能 它的代码为基础进行修改 效果图&#xff1a; 下图红框位置的功能实现 Dlls项目中添加一个Dialog Dialog如下 然后给它添加一个类&#xff0c;MFC添加的类可能会报错添加 #include "afxdialogex.h…

基于SSM构建的校园失眠与压力管理系统的设计与实现【附源码】

毕业设计(论文) 题目&#xff1a;基于SSM构建的校园失眠与压力管理系统的设计与实现 二级学院&#xff1a; 专业(方向)&#xff1a; 班 级&#xff1a; 学 生&#xff1a; 指导教师&a…

shell 脚本的部分指令和操作符

终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 2.已知网址www.hqyj.com&#xff0c;使用expr截取出www、hqyj、com&#xff0c;不能使用cut&#xff0c;不能出现数字

C++ 基础:指针和引用浅谈

指针 基本概念 在C中&#xff0c;指针是存储其他变量的内存地址的变量。 我们在程序中声明的每个变量在内存中都有一个关联的位置&#xff0c;我们称之为变量的内存地址。 如果我们的程序中有一个变量 var&#xff0c;那么&var 返回它的内存地址。 int main() {int var…

Stable Diffusion 3 正式开源,超强文生图模型 SD3-M 上线,赶紧来试试吧!

前言 我们都知道 Stable Diffusion 3 是一款强大的文生图模型&#xff0c;拥有20亿参数&#xff0c;因其高效的推理速度和卓越的生成效果而备受瞩目。 近日&#xff0c;Stability AI在推特上宣布正式开源了 Stable Diffusion 3 Medium&#xff08;SD3-M&#xff09; 权重&…

住宅IP代理服务终极指南:增强安全性和可访问性

在当今的数字安装程序中&#xff0c;隐私和可访问性对于企业和个人都至关重要。满足这些需求的一个强大工具是住宅 IP 代理服务。这些服务为用户提供住宅 IP 地址&#xff0c;这些地址是互联网产品 (ISP) 计算房主的真实 IP。在本综合指南中&#xff0c;我们将探讨住宅 IP 代理…

Chrome插件:​Vue.js Devtools 高效地开发和调试

在现代前端开发中&#xff0c;Vue.js因其灵活性和性能优势&#xff0c;受到越来越多开发者的青睐。然而&#xff0c;随着项目规模的扩大&#xff0c;调试和优化变得愈发复杂。幸运的是&#xff0c;Vue.js Devtools的出现&#xff0c;为开发者提供了一套强大的工具集&#xff0c…

【道合顺展会预告】2024国际传感器仪器仪表物联网长沙展览会!

传感器技术作为万物互联的基石&#xff0c;正以前所未有的速度驱动着全球各行各业的转型升级。在此背景下&#xff0c;2024国际传感器&仪器仪表&物联网展览会将于6月28日至30日在长沙盛大启幕&#xff0c;道合顺传感将携公司最新技术及科研成果参加展览会&#xff0c;并…

运维.Linux下执行定时任务(上:Cron简介与用法解析)

运维专题 Linux下执行定时任务&#xff08;上&#xff1a;Cron简介与用法解析&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAd…

Hadoop3:MapReduce中的Reduce Join和Map Join

一、概念说明 学过MySQL的都知道&#xff0c;join和left join 这里的join含义和MySQL的join含义一样 就是对两张表的数据&#xff0c;进行关联查询 Hadoop的MapReduce阶段&#xff0c;分为2个阶段 一个Map&#xff0c;一个Reduce 那么&#xff0c;join逻辑&#xff0c;就可以…