Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

news2024/11/16 3:35:39

目录

一、ansible概述

1、简介

2、Ansible主要功能:

3、Ansible的另一个特点:所有模块都是幂等性

4、Ansible的优点:

5、Ansible的四大组件:

二、ansible环境部署:

1、环境:

2、安装ansible:

3、Ansible的配置文件:

4、 配置远程主机清单

三、ansible的模块(重要)

1、ansible的命令格式:

2、模块1:command模块

3、模块二:shell模块

4、模块3:cron模块

5、模块4:USER模块

6、模块5:group模块(了解)

7、模块6:ping模块

8、模块7:hostname模块

9、模块8:COPY模块

10、模块9:file模块

11、模块10:yum模块

12、模块11:service/systemd模块

13、模块12:script模块

14、模块13:setup模块

四、管理主机清单

1、主机变量

2、组变量

3、组嵌套


一、ansible概述

1、简介


Ansible是自动化运维工具,能实现跨主机对应用编排管理部署。

Ansible能批量配置、部署、管理上千台主机,是应用级别的跨主机编排工具。

比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。
是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

2、Ansible主要功能:

远程操控主机功能

自动化运维(playbook剧本yaml格式)

Ansible能批量的配置、部署、管理上千台主机。类似于xshell的一键输入的工具,不需要每次都切换主机进程操作,只要有一台Ansible的固定主机,就可以实现所有节点的操作

不需要agent(客户端)的概念,只需要一台主机上配置了Ansible即可

Ansible是基于模块来进行工作的,只是提供了一种运行的架构,真正执行操作和变更的是Ansible的模块来实现的。

Ansible默认是通过ssh的密钥对实现通信。(可以改)

3、Ansible的另一个特点:所有模块都是幂等性

所谓幂等性,指的是多次操作和多次执行对系统资源的影响是一致的

systemctl stop firewalld 是幂等性

systemctl restart firewalld不是幂等性

http的get是幂等性

http的post不是幂等性

Ansible的幂等性,决定了你可以放心大胆的使用,重复执行摸个任务不会对结果产生任何影响(绝大多数情况)

4、Ansible的优点:

部署较为简单,只要在控制主机部署即可。被控制主机需要有ssh和python2.5以上版本。基本上Linux虚拟机都能满足这两个

Ansible只能控制Linux系统,Windows不行

基于模块工作,可以使用任意语言开发模块(二次开发,底层架构)

5、Ansible的四大组件:

  1. inventory主机清单(主机组):定义Ansible可以远程操作的服务器
  2. 模块:常用的有13个模块。通过模块可以实现远程的配置和操作
  3. plugins插件
  4. playbook:基本(shell脚本)yaml格式

二、ansible环境部署:

1、环境:

        管理端:20.0.0.21 Ansible

        被管理端:20.0.0.22、20.0.0.23

2、安装ansible:

基于epel源安装
先安装 epel 源
yum install -y epel-release

yum安装ansible
yum install -y ansible

3、Ansible的配置文件:

/etc/ansible/

ansible.cfg:ansible的主配置文件,一般无需修改

hosts:主机组,声明可以被控制的主机

roles:公共角色目录

4、 配置远程主机清单

修改hosts文件:

vim hosts

配置主机有两种方式:1、直接声明主机的IP地址 2、主机名(要在/etc/hosts中做映射)

主机上生成密钥对并且传给被控制主机:

ssh-keygen -t rsa

配置密钥对验证

ssh-keygen -t rsa #一路回车,使用免密登录

sshpass -p '123' ssh-copy-id root@20.0.0.22

sshpass -p '123' ssh-copy-id root@20.0.0.23

若发送密钥对不成功,先到目标主机上执行一个命令,然后再传

ansible 20.0.0.23 -m command -a 'date'

ansible 20.0.0.22 -m command -a 'date'

三、ansible的模块(重要)

1、ansible的命令格式:

ansible 组名/IP地址 -m 模块名称 -a '参数列表(执行的命令)'

ansible 20.0.0.23 -m shell -a 'touch /opt/123 && echo 123 > /opt/123 && cat /opt/123'
&& 逻辑且,前一个命令成功才会执行下一个命令

ansible 20.0.0.23 -m shell -a 'touch /opt/456 ; ehco 456 > /opt/456 ; cat /opt/456'
;分号表示逻辑或,前面不管成功与否,后面的命令都会执行

ansible不适用交互式的命令

2、模块1:command模块

在远程主机执行Linux命令,不支持管道符,重定向输出

指定IP地址:

ansible 20.0.0.23 -m command -a 'date'
ansible 20.0.0.22 -m command -a 'date'

指定组,组内所有的声明主机都会执行:

ansible webserver -m command -a 'date'
ansible dbservers -m command -a 'date'

所有声明的主机全都执行:

ansible all -m command -a 'date'

不加-m,不声明使用的模块,默认就是command模块:

ansible 20.0.0.23  -a 'date'

command的一些常用参数:

chdir:在远程主机上运行命令,提前进入目录

先进home目录,然后再执行命令

ansible all -m command -a 'chdir=/opt ls'

creates:判断指定文件是否存在,若存在,不执行后续的操作

ansible all -m command -a 'creates=/opt/123 ls/opt'

removes:ansible all -m command -a 'chdir=/opt ls'

ansible 20.0.0.22 -m command -a 'removes=/opt/123 ls/opt'

3、模块二:shell模块

在远程主机上执行命令,相当于远程主机

ansible 20.0.0.22 -m shell -a 'useradd test'

#创建用户test
ansible 20.0.0.22 -m shell -a 'echo 123456 | passwd --stdin test'

#给test用户创建密码

举个例子:将IP地址切片出来:

ansible 20.0.0.22 -m shell -a "echo $(ifconfig ens33 | awk  'NR==2{print $2}')"

在ansible当中,多个引号之间要做隔离

创建脚本,再写入内容,最后执行

举个例子:写一个脚本

ansible 20.0.0.22 -m shell -a 'echo -e "#/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'

4、模块3:cron模块

远程给主机设置定时任务

两种状态: present表示添加(默认就是添加,可以省略)

absent:表示移除。在ansible中absent都可以表示移除的意思(删除)

* * * * * 分时日月周

分=minute

时=hour

日=day

月=month

周=weekday

job:任务计划需要执行的命令或者脚本

name:任务计划的名称,可以不加

ansible 20.0.0.22 -m cron -a 'minute="*/5" job="ls /opt" name=test1'

举个例子:

写一个9月1号8点30分,执行ls /opt 任务名:test2

30 8 1 9 *

ansible 20.0.0.22 -m cron -a 'minute="30" hour="8" day="1" month="9" job="ls /opt" name="test2"'

查看定时任务:

ansible 20.0.0.22 -m command -a 'crontab -l'

删除定时任务:

ansible 20.0.0.22 -m cron -a 'name=test1 state=absent'

删除未命名的定时任务(所有的None都会删除):

多个定时任务,如果不给名字都是None,一旦删除None,全部删除,不推荐(最好是指定一个不重复的名称)

ansible 20.0.0.22 -m cron -a 'name=None state=absent'

5、模块4:USER模块

用户管理模块

常用的参数:

name 指定用户名,必须要有

state present:创建用户,可以不加,默认

absent :删除一定要加absent

system=yes|no。标记用户使用是一个程序用户

uid:用户的唯一标识

group:指定用户的所在组

create_home=yes|no:替换用户的家目录,不替换可以不写,可省略

password:给用户创建密码

comment:添加用户的注释信息,可有可无

remove=yes|no,当删除用户时,加上remove=yes,删除用户的家目录,相当于userdel -r。如果不需要删除用户家目录,可省略这一项

ansible 20.0.0.22 -m user -a 'name=koeda system=yes '

在创建用户时,虽然我声明了是一个程序用户,但是默认的登录shell如果没有额外的声明,还是默认的/bin/bash,UID会按照程序用户来指定

创建程序用户:

ansible 20.0.0.22 -m user -a 'name=koeda1 system=yes shell=/sbin/nologin'

使用ansible的USER模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash

如果创建程序用户,一定要声明system=yes,声明shell的类型 shell=/sbin/nologin

也可以指定uid的方式,给用户分配一个uid

创建用户,选择uid,创建密码,指定家目录:

ansible 20.0.0.22 -m user -a 'name=koeda3 uid=1010 password=123456 home=/opt/test1'

更改用户家目录:

ansible 20.0.0.22 -m user -a 'name=koeda3 home=/home/koeda3 create_home=yes'

删除用户及其家目录:

ansible 20.0.0.22 -m user -a 'name=koeda remove=yes state=absent'

6、模块5:group模块(了解)

用户组的管理模块

gid 设置组的id

name必须要有

创建用户组:

ansible 20.0.0.22 -m group -a 'name=test1 gid=306 system=yes'

创建用户时添加到指定的组:

ansible 20.0.0.22 -m user -a 'name=test uid=1011 group=test1 '

删除用户组:

ansible 20.0.0.22 -m group -a 'name=test1 state=absent'

7、模块6:ping模块

ansible all -m ping

能ping通的主机必须是声明的主机

只有在/etc/ansible/hosts文件中声明的主机,ansible的控制端才可以进行远程操作

8、模块7:hostname模块

更改被控制端的主机名:

ansible 20.0.0.22 -m hostname -a 'name=webservers'

ansible 20.0.0.23 -m hostname -a 'name=dbservers'

9、模块8:COPY模块

用于复制指定的主机文件到远程主机的模块

常用的参数:

dest:指出要复制的文件在哪,必须使用绝对路径。如果源目标是目录,指目标也得是目录。如果目标的文件存在,会覆盖原有的内容

src:复制文件的源,最好使用绝对路径,源目标是目录,指目标也得是目录

owner:支出文件的所有者

group:指定文件的所在组

content:从主机复制指定的内容到目标主机,用content就不能使用src

mode:指定复制之后的文件的权限

ansible 20.0.0.22 -m copy -a 'src=/opt/123 dest=/opt/123.txt owner=test mode=655'

举个例子:将ky32.txt文件复制到22主机,所有者test程序用户,所在组test,文件的权限600

ansible 20.0.0.22 -m user -a 'name=test system=yes shell=/sbin/nologin'
#创建程序用户
ansible 20.0.0.22 -m group -a 'name=test gid=333 system=yes'
#创建用户组
ansible 20.0.0.22 -m copy -a 'src=/opt/ky32.txt dest=/opt/32.txt owner=guoqi group=guoqi mode=600'
#复制文件,并且给权限

复制目录:

复制目录时,要保证不是空目录,要有文件

ansible 20.0.0.22 -m copy -a 'src=/opt/test dest=/opt/test1/ mode=777'

指定输入一个内容:

相当于echo功能

echo一个hello world!到22主机的opt下

ansible 20.0.0.22 -m copy -a 'content="hello world!" dest=/opt/hello.txt'

10、模块9:file模块

文件模块跟目录没有关系

管理文件属性

相关参数:

owner、group、mode等

state=link:创建链接文件

state=touch:创建文件

state=directory 创建目录

state=absent:删除文件

修改文件的所有者和所在组

ansible 20.0.0.22 -m file -a 'owner=test group=test mode=777 path=/opt/demo.txt'

file模块创建文件

ansible 20.0.0.22 -m file -a 'path=/opt/ky32.txt state=touch'
#创建文件

file模块创建目录

ansible 20.0.0.22 -m file -a 'path=/opt/ky32 state=directory'

将本机的/etc/fatab文件复制到远程主机,再用这个文件创建一个连接文件:

ansible 20.0.0.23 -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak'
#先复制
ansible 20.0.0.23 -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'
#在创建链接文件

基于file模式删除远程文件

ansible 20.0.0.23 -m file -a 'path=/opt/fstab.link state=absent'

11、模块10:yum模块

在远程主机上安装软件包

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

ansible 20.0.0.23 -m yum -a 'name=tree'

在目标主机上的操作都是后台运行,不影响其他用户的使用。在日志中能打印

卸载软件:

ansible 20.0.0.23 -m yum -a 'name=tree state=absent'

12、模块11:service/systemd模块

常用参数:

state=started|stopped|restarted 三种管理动作

enabled=true 表示是否设置开机自启,默认就是开机不自动启动

runlevel:配合enabled的,若设置开机自启,可以设置运行级别。在命令行可以设置,但是不生效,必须要在playbook中使用

ansible 20.0.0.52 -m service -a 'enabled=ture name=nginx state=restarted'

举个例子:nginx 安装nginx 设置为开机自动,设置访问页面this is nginx

ansible 20.0.0.52 -m yum -a 'name=epel-release'

ansible 20.0.0.52 -m yum -a 'name=nginx'

ansible 20.0.0.52 -m service -a 'enabled=true name=nginx state=restarted'

ansible 20.0.0.52 -m shell -a 'echo this is nginx > /usr/share/nginx/html'

13、模块12:script模块

运行本地脚本,然后将结果输出到目标主机

先创建一个脚本

chmod  777 test.sh

运行脚本,将内容输出到远程主机上

ansible all -m script -a 'test.sh'

14、模块13:setup模块

主要作用就是查看目标主机的环境信息(facts),目标节点的系统信息

查看所有环境信息

ansible all -m setup

查看目标主机的IP信息

ansible all -m setup -a 'filter=*ipv4'

查看CPU信息:

ansible all -m setup -a 'filter=*memory*'
ansible_processor

查看内存信息:

ansible all -m setup -a 'filter=*memory*'
ansible_memory_mb

查看内核:

ansible all -m setup -a 'filter=*proc*'
ansible_processor

查看os系统:

ansible all -m setup -a 'filter=*os*'
ansible_os_family

查看硬盘信息:

ansible all -m setup -a 'filter=*dev*'
ansible_devices

四、管理主机清单

快速声明多个主机

vim /etc/ansible/hosts
20.0.0.6[1:3]
#声明主机范围。表示声明20.0.0.61-63主机

取消密钥队免密登录

ansible_host:声明连接时的IP地址

ansible_port:声明对方的连接端口。默认是ssh的默认端口

ansible_user:指定连接时使用对方主机的用户名。不指定表示主机执行ansible的用户即为使用目标主机的用户名

ansible_password:指定连接ssh时的密码。这里是目标主机的用户密码

ansible_become:提升用户权限。也可以改变用户的身份

例如:ansible_become root。需要声明用户的密码

ansible_become-password:指定切换用户的密码。基于免密钥登录实现。
 

1、主机变量

vim /etc/ansible/hosts
#声明主机变量

#指定ip,定义好ssh连接的端口,用户,密码。做到免密连接
20.0.0.2[5:6] ansible_port=22 ansible_user=root ansible_password=123

这里将25、26主机生面变量,27没有声明

vim /etc/ansible/ansible.cfg

取消ssh的秘钥对验证

#---71行取消注释---
host_key_checking = False

测试连通性:

ansible webservers -m ping

这里注意:

声明好的主机节点的端口必须是22,root用户的密码必须是123

2、组变量

声明组变量
[webservers:vars]        #表示为 webservers 组内所有主机定义变量
ansible_user=root
#所有主机用户都是root
ansible_password=123
#所有主机密码都是123
ansible_port=22
#所有主机端口都是22

声明所有的主机都是用相同的用户名密码和端口
[all:vars1]                            #表示为所有组内的所有主机定义变量
ansible_user=root
#所有主机用户都是root
ansible_password=123
#所有主机密码都是123
ansible_port=22
#所有主机端口都是22

3、组嵌套

[nginx]
20.0.0.20
20.0.0.21
20.0.0.22

[apache]
20.0.0.3[0:3]

[webs:children]	#表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache

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

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

相关文章

智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学校优化算法4.实验参数设定5.算法结果6.…

学习——html基础

什么是HTML Hyper Text Markup Language (超文本标记语言) 标记又俗称标签(tag)&#xff0c;一般格式&#xff1a; 如 <h1></h1>标签里还可以有属性(Attribute)&#xff1a; <tagName Atrribute “value" /> 如 <meta charset"utf-8"…

长短期记忆(LSTM)神经网络-多输入回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编…

使用Httpclient来替代客户端的jsonp跨域解决方案

最近接手一个项目&#xff0c;新项目需要调用老项目的接口&#xff0c;但是老项目和新项目不再同一个域名下&#xff0c;所以必须进行跨域调用了&#xff0c;但是老项目又不能进行任何修改&#xff0c;所以jsonp也无法解决了&#xff0c;于是想到了使用了Httpclient来进行服务端…

测试工具Jmeter:界面介绍、核心选项说明、核心选项用途

本文章主要介绍Jmeter的界面布局&#xff0c;以及各个选项的功能和它们的用途。 JMeter基本原理是建立一个线程池&#xff0c;多线程运行取样器产生大量负载&#xff0c;在运行过程中通过断言来验证结果的正确性&#xff0c;通过监听器来记录测试结果。 1. Jmeter主界面 当我…

Linux 进程通信

文章目录 匿名管道匿名管道使用匿名管道原理匿名管道读写 命名管道命名管道使用命名管道特性 共享内存共享内存原理共享内存使用 补充说明 补充说明部分为相关函数和不太重要的概念介绍 匿名管道 匿名管道使用 使用方法一&#xff1a; 使用函数介绍&#xff1a; #include &…

Ubuntu18.04 上通过 jihu 镜像完成 ESP-IDF 编译环境搭建流程

为了解决国内开发者从 github 克隆 esp 相关仓库慢的问题&#xff0c;已将 esp-idf 和部分重要仓库及其关联的子模块镜像到了 jihu&#xff0c;这些仓库将自动从原始仓库进行同步。此篇博客用来阐述 Ubuntu18.04 上通过 jihu 镜像完成 ESP-IDF 编译环境搭建流程。 注&#xff1…

从零开始制作一个Douban图像下载器:Wt库的基础知识和操作指南

引言 欢迎来到本文&#xff0c;如果你希望从豆瓣下载海量的高清图像、学习使用现代C web应用程序框架Wt库开发web应用程序&#xff0c;或者了解如何利用代理IP和多线程技术提高爬虫效率和稳定性&#xff0c;那么你来对地方了。在接下来的内容中&#xff0c;我们将为你提供一个…

Springboot数据加密篇

一、密码加密 1.1Hash算法(MD5/SHA-512等) 哈希算法&#xff0c;又称摘要算法&#xff08;Digest&#xff09;&#xff0c;是一种将任意长度的输入通过散列函数变换成固定长度的输出的单向密码体制。这种映射的规则就是哈希算法&#xff0c;而通过原始数据映射之后得到的二进制…

2023中国品牌节金谱奖荣誉发布 酷开科技获颁OTT行业科技创新奖

11月17日—19日&#xff0c;以“复苏与腾飞”为主题的2023第十七届中国品牌节&#xff0c;在杭州市云栖小镇国际会展中心成功举行。在18日晚间的荣耀盛典上&#xff0c;“TopBrand 2023中国品牌节金谱奖”荣誉发布&#xff0c;酷开科技斩获OTT行业科技创新奖。 酷开科技作为OTT…

JavaWeb笔记之JavaWeb JDBC

//Author 流云 //Version 1.0 一. 引言 1.1 如何操作数据库 使用客户端工具访问数据库&#xff0c;需要手工建立连接&#xff0c;输入用户名和密码登录&#xff0c;编写 SQL 语句&#xff0c;点击执行&#xff0c;查看操作结果&#xff08;结果集或受影响行数&#xff09;。…

MySQL的增删改查(进阶)--上

1. 数据库约束 1.1 约束类型 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&#xff08;或两个列多个列的结合&#xff09;有唯一标识&#xf…

3-10岁孩子数学发展里程碑

文章目录 3岁4岁5岁6-7岁&#xff08;1-2年级&#xff09;8-9岁&#xff08;3-4年级&#xff09;10岁&#xff08;5年级&#xff09; 当然&#xff0c;孩子的数学能力发展会因个体差异而有所不同&#xff0c;但以下是一个大致的指导&#xff0c;用来描述从3岁到10岁孩子在数学上…

HPM6750系列--第十一篇 Uart讲解(轮询模式)

一、目的 在介绍完GPIO的相关内容下一个必须介绍的就是uart了&#xff0c;因为串口一个主要用途就是用于调试信息打印。 HPM6750在uart的配置上也是相当炸裂&#xff0c;有17个串口&#xff1b;结合HPM6750的高主频高内存&#xff0c;完全可以作为一个串口服务器。 ​​​​​​…

Pycharm enable IntelliBot #patched后,工程无法打开

#本地环境# Pycharm&#xff1a;2023.12 Pro 对应robot pkg版本&#xff1a; robotframework 6.1 robotframework-databaselibrary 1.2.4 robotframework-pythonlibcore 4.1.2 robotframework-requests 0.9.4 robotframework-seleniumlibrary 6.1.…

新增工具箱管理功能、重构网站证书管理功能,1Panel开源面板v1.9.0发布

2023年12月18日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.0版本。 在这一版本中&#xff0c;1Panel引入了新的工具箱管理功能&#xff0c;包含Swap分区管理、Fail2Ban管理等功能。此外&#xff0c;1Panel针对网站证书管理功能进行了全面重构&…

移动云捐赠三款开源项目,加速新一代基础软件生态繁荣

随着云计算、大数据、人工智能等新领域新信息技术的发展&#xff0c;我国基础软件的自主可控极大程度地影响着产业链上下游的多样性和技术创新的发展空间。移动云作为中国移动涉云业务的主入口&#xff0c;一直坚持共享开源价值&#xff0c;积极推动中国开源软件生态的繁荣发展…

UE5 水材质注意要点

1、两个法线反向交替流动&#xff0c;可以去观感假的现象 2、水面延边的透明度低 3、增加水面延边的浪花 4、增加折射 折射要整体质量至少在High才有效果 改为半透明材质没有法线信息&#xff1f; 5、处理反射效果 勾选为true 找到这个放在水域 勾为false&#xff0c;即可有非…

基于ssm品牌手机销售信息系统论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于品牌手机销售信息系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了品牌手机销售信息系统&#xff0c;它彻底…

05_Web框架之Django二

Web框架之Django二 学习目标和内容 1、能够使用类视图的写法 2、能够使用模板语言的相关语法 3、能够理解过滤器的作用 4、能够理解并使用模板继承 一、类视图 1、类视图介绍 视图是一个可调用的对象&#xff0c;它接收一个请求然后返回一个响应&#xff0c;这个可调用对象可…