ansible常见模块及使用方法
目录
1、查看支持的模块
2、获取模块的帮助
3、3个远程命令模块的区别
3.1、command模块
3.2、shell模块
3.3、script模块
4、copy模块
4.1、 copy模块应用案例
5、file模块
5.1、file模块应用案例
6、ping模块
7、yum模块
7.1、yum模块应用案例
8、service模块
8.1、service模块案例
8.2、查看httpd状态
9、user模块
9.1、user模块案例
10、fetch模块
11、group模块
11.1、group模块案例
1、查看支持的模块
[root@cong11 ~]# ansible-doc -l [root@cong11 ~]# ansible-doc -l | wc -l #查看支持的模块个数[root@cong11 ~]# ansible --version #查看我们的ansible版本号
2、获取模块的帮助
ansible-doc 模块名 或者ansible-doc -s 模块名 #获取指定模块帮助信息说明
这里我们使用ansible-doc获取下command模块的使用方式。
[root@cong11 ~]# ansible-doc command[root@cong11 ~]# ansible-doc -s command
3、3个远程命令模块的区别
3.1、command模块
command 模块可以帮助我们在远程主机上执行命令。
注意:使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的 shell 模块。
3.2、shell模块
shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理,shell模块支持管道与重定向等符号;所以,我们在终端输入的各种命令方式,都可以使用。
注:但是我们自己定义在/etc/profile或~/.bash_profile中的环境变量,shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句
3.3、script模块
script只能执行脚本,不能调用其他指令,但是script执行的是存放在ansbile管理端上的脚本。script模块跟上面类似,但执行脚本只要两步
第一个步骤:编写一个脚本
第二个步骤:运行ansible命令执行脚本
使用script模块可以在本地写一个脚本,在远程服务器上执行:
在ansible管理端编写一个脚本,这里还是使用上面的test.sh脚本为例:
总结:script和shell的区别是一个执行控制端的脚本,一个执行远程端的脚本。
4、copy模块
实现主控端向目标主机拷贝文件或目录,类似scp功能
copy模块常用选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
4.1、 copy模块应用案例
例1:使用src,把ansible主机上的/etc/hosts文件复制到主机组中机器的/tmp目录下
[root@cong11 ~]# ansible web_servers -m copy -a 'src=/etc/hosts dest=/tmp/ owner=root group=root mode=640 backup=yes'
说明:
#src 主控端文件位置(源文件地址)
#dest 被控端目标位置(目标地址)
#owner 文件复制过去后的所有者
#group 文件复制过去后的所属组
#content 将指定内容覆盖写入到目标主机文件中
#force=no 当主控端拷贝的文件名和目标名一致,但是内容不一致,放弃拷贝
#force=yes 当主控端拷贝的文件名和目标名一致,但是内容不一致,则进行覆盖
#mode 文件的权限设定
#backup=yes 如果目标位置存在同名的文件,在覆盖之前将原文件备份
192.168.121.13 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true, #是否对目标主机信息进行改变
"checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"dest": "/tmp/hosts", #显示目标路径信息
"gid": 0, #复制后的文件gid信息
"group": "root", #显示复制后文件属组信息
"md5sum": "54fb6627dbaa37721048e4549db3224d", #hosts文件的md5值
"mode": "0640", #显示复制后文件的权限信息
"owner": "root", #显示复制后文件的属主信息
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 158, #显示复制后文件的大小信息
"src": "/root/.ansible/tmp/ansible-tmp-1571668045.65-135407232805638/source",
"state": "file", #显示当前操作的是一个文件
"uid": 0 #显示复制后文件uid信息
}
192.168.121.12 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"dest": "/tmp/hosts",
"gid": 0,
"group": "root",
"md5sum": "54fb6627dbaa37721048e4549db3224d",
"mode": "0640",
"owner": "root",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 158,
"src": "/root/.ansible/tmp/ansible-tmp-1571668045.63-176379773679750/source",
"state": "file",
"uid": 0
}
查看目标主机是否复制成功
[root@cong11 ~]# ansible web_servers -m shell -a "ls -l /tmp/hosts"
例2:使用content将内容写入文件
[root@cong11 ~]# ansible web_servers -m copy -a 'content="Hello ansible\nyou are clever!\n" dest=/tmp/ansible.txt'
目标主机结果如下图:
注:如果目标主机没有该文件则会新建
5、file模块
file模块主要用于远程主机上的文件操作,如修改文件属性(权限、属主、属组)和创建文件、目录、符号链接等,file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:不是用于创建文件,而是检查文件是否存在,主要用于检查文件是否存在的应用场景。
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
5.1、file模块应用案例
例1:修改12,13上/tmp/hosts文件权限为777
[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/hosts mode=777"
查看文件权限
[root@cong12 ~]# ll /tmp/hosts
例2:将12,13上的/tmp/hosts文件创建符号链接到/opt目录下
[root@cong11 ~]# ansible web_servers -m file -a "src=/tmp/hosts dest=/opt/hosts state=link"
查看创建的符号链接
[root@cong12 ~]# ll /opt/hosts
删除链接文件
[root@cong11 ~]# ansible web_servers -m file -a "path=/opt/hosts state=absent"
例3:创建文件或目录
创建目录,如果它不存在
[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/dir1 state=directory"
touch创建空文件
[root@cong11 ~]# ansible web_servers -m file -a "path=/tmp/testfile1 state=touch"
6、ping模块
测试连接可通性,没有参数。通的话返回pong。
[root@cong11 ~]# ansible web_servers -m ping
7、yum模块
yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包。
常用参数:
- name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
- state参数:用于指定软件包的状态 ,默认值为present,表示确保软件包已经安装,除了present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
- disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。
- update_cache参数:是否更新缓存,默认值时no
- enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
- disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。
- enablerepo 参数和 disablerepo 参数可以同时使用。
7.1、yum模块应用案例
12,13两台主机安装httpd软件(12,13主机需要配置repo文件,指向yum源):
[root@cong11 ~]# ansible web_servers -m yum -a "name=httpd state=latest"
前往目标主机验证
[root@cong12 ~]# rpm -q httpd
8、service模块
Ansible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等。
service模块详解:
- name参数:此参数用于指定需要操作的服务名称,比如 nginx,httpd。
- state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的httpd,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted(重启)、reloaded。
- enabled参数:此参数用于指定是否将服务设置为开机启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。
- runlevel参数:服务启动级别
- arguments参数:服务命令行参数传递
注:想使用service模块启动服务,被启动的服务,必须可以使用service 命令启动或关闭
8.1、service模块案例
启动httpd服务并设置为开机自启
[root@cong11 ~]# ansible web_servers -m service -a "enabled=yes name=httpd state=started"
重启httpd服务
[root@cong11 ~]# ansible web_servers -m service -a "name=httpd state=restarted"
8.2、查看httpd状态
[root@cong11 ~]# ansible web_servers -m shell -a "ps -ef | grep httpd | grep -v 'grep'"
9、user模块
user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
常用参数
- name参数:必须参数,用于指定要操作的用户名称。
- group参数:此参数用于指定用户所在的基本组。
- gourps参数:此参数用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。
- append参数:如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合append参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no。
- shell参数:此参数用于指定用户的默认 shell。
- uid参数:此参数用于指定用户的 uid 号。
- expires参数:此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列,比如,你想要设置用户的过期日期为2020年12月31日,那么你首先要获取到2020年12月31日的 unix 时间戳,使用命令 “date -d 2020-12-31 +%s” 获取到的时间戳为1609344000,所以,当设置 expires= 1609344000 时,表示用户的过期时间为2020年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成18627(表示1970年1月1日到2020年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
- comment参数:此参数用于指定用户的注释信息。
- state参数:此参数用于指定用户是否存在于远程主机中,可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
- remove参数:当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel -r” 命令。
- password参数:此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串。
输入上述命令后,即可得到明文密码123456对应的加密字符串
update_password参数:此参数有两个值可选,always 和 on_create,当此参数的值设置为always 时表示,如果 password 参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为 always,但是当此参数设置为 on_create 时,on_create只为新用户设置密码。
generate_ssh_key参数:此参数默认值为 no,如果设置为 yes,表示为对应的用户生成 ssh 密钥对,默认在用户家目录的 ./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果同名的密钥已经存在与对应的目录中,原同名密钥并不会被覆盖(不做任何操作)。
9.1、user模块案例
例1:创建用户berry,登录shell为/sbin/nologin
[root@cong11 ~]# ansible web_servers -m user -a "name=berry shell=/sbin/nologin state=present"
[root@cong11 ~]# ansible web_servers -m shell -a 'grep "\<berry\>" /etc/passwd'
例2:删除刚才创建的用户berry及其宿主目录
[root@cong11 ~]# ansible web_servers -m user -a "name=berry remove=yes state=absent"
[root@cong11 ~]# ansible web_servers -m shell -a 'grep "\<berry\>" /etc/passwd'
注:注意该用户下不能有任何进程,否则会报错如下红色部分
例3:创建一个用户,指定用户密码
使用python命令行生成密码的加密字符串
复制生成的加密字符串作为password的值
ansible web_servers -m user -a 'name=testops password="$6$Uwz.LOIcCbgZipq0$.P7EFqXKFvBdr.Rky4qOsRjTl1uMKZSVfYChLzL2kM5i78TpozD7jxwjyMhaInDxQ7iEOUL1lwfD0tiec6FDN/"'
10、fetch模块
从远程主机拉取文件到本地
示例:从192.168.121.12主机上拉取文件/etc/hosts到ansible本地的/tmp目录
[root@cong11 ~]# ansible 192.168.121.12 -m fetch -a 'src=/etc/hosts dest=/tmp'
说明:fetch使用很简单,src和dest,dest只要指定一个接收目录,默认会在后面加上远程主机及src的路径。
11、group模块
group 模块可以帮助我们管理远程主机上的组。
常用参数
- name参数:必须参数,用于指定要操作的组名称。
- state参数:用于指定组的状态,两个值可选,present,absent,默认为 present,设置为 absent 表示删除组。
- gid参数:用于指定组的gid。
11.1、group模块案例
例1:.在12,13主机中创建名为testgroup的组
[root@cong11 ~]# ansible web_servers -m group -a "name=testgroup"
例2:删除 12,13主机中存在名为 testgroup的组
[root@cong11 ~]# ansible web_servers -m group -a 'name=testgroup state=absent'
删除成功的前提是不能有用户把被删除的组当成基本组。会报如下错误:
ansible常见模块及使用方法相关推荐
- 不同型号的二极管模块并联_常见消防模块的接线方法和实物演示
源自丨当宁消防网 ,版权归原作者所有! 很多筒子在网上搜索消防模块接线方法和接线图,其实消防模块的接线方法和接线图是不能一概而论的,不同类型的消防模块接线方法也不一样. 现在以常见的海湾GST-LD- ...
- 稳定性专题 | Spring Boot 常见错误及解决方法
导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...
- Python 的 time 模块导入及其方法
时间模块很重要,Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能,讲解一下Python 的 time 模块导入及其方法. 1,time 模块导入 import time; # ...
- python3常用模块_python常见模块有哪些
python常见模块有三种: 1.os模块,python的目录文件操作需要用到os模块 一.Os python的标准库中的os模块主要涉及普遍的操作系统功能.可以在Linux和Windows下运行,与 ...
- Ansible常用模块详解
Ansible常用模块 2015年底270多个模块,2016年达到540个,2018年01月12日有1378个模块,2018年07月15日1852个模块,2019年05月25日(ansible 2.7 ...
- python常见模块命令(os/sys/platform)
python常见模块命令(os/sys/platform) 一.Os Python的标准库中的os模块主要涉及普遍的操作系统功能.可以在Linux和Windows下运行,与平台无关. os.sep 可 ...
- SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...
centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课 rsync可以增量同步,scp不行 ...
- V.35协议转换器指示灯告警常见故障以及排除方法解析
我们在使用协议转换器的时候,可能常常会遇到一些故障问题,这个可能会困扰到很多朋友,在这里,杭州飞畅的小编专门整理了V.35系列协议转换器在使用过程中的一些常见的故障问题及解决方法,感兴趣的朋友可以一起 ...
最新文章
- php获取类的熟悉,php如何获取类的所有方法
- 简单web服务器学习总结
- java中frame窗体星星坠落_java窗体绘漫天星星和月亮
- mysql中3个月之前日期_在MySQL中从当前日期选择当前日期到3个月之间的日期?
- oracle清空回收站指定表,清空Oracle 10g回收站中以BIN$开头的表
- Node.js、express、mongodb 实现分页查询、条件搜索
- 盖雅工场完成3亿元C轮融资,由老虎环球基金领投...
- Win10显示文件扩展名
- Unity 事件番外篇:UnityEvent
- axure 设置背景虚化_Axure如何做背景虚化?
- glob.glob()之返回路径的正反斜杆问题
- Nonebot QQ机器人插件五:随机网易云音乐
- pip安装Cartopy小白版
- krita和ps比较_使用Krita,Scribus和Inkscape设计海报
- 在选择人员定位系统是应该注意什么?
- 研究生阶段应该如何度过?
- 如何在你的WordPress网站上添加成本计算器
- Matlab进行彩色图像直方图匹配(不用histeq函数)
- 【微信小程序】collection.watch实现对云端数据的实时监控
- 如何设置zencart买满多少免运费?
热门文章
- dalvik模式和art模式的区别
- 插件加载导致outlook崩溃
- 【更新版】域名安全防护智能解析DNS+CDN免费产品
- grep或/与的多重过滤,包含ABC,但不含ABCD的字符echo输出带颜色的字符
- 6个部件组成一个圆球_六块木头组成一个球形益智玩具,叫什么
- 如何给未签收物流备注信息
- 东南亚(Lazada shoppe)自养号测评如何解决收货地址及ip问题详解
- 音乐播放(Toggle PlayerPrefs)
- 半导体 ,p型和n型半导体的区别
- linux在代码中表示什么意思,Linux代码中的unlikely和likely分别是什么意思?