当前位置: 首页 > 工具软件 > Group Shell > 使用案例 >

ansible模块-shell模块

东门航
2023-12-01

ansible是基于模块工作的。

ansible本身没有批量管理的能力, 真正具有批量管理的是ansible所运行的模块

ansible支持的模块非常的多,目前版本3000多个

这篇文章介绍几个常用的模块

官网模块文档地址: https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html

查看所有支持的模块

# ansible-doc -l		
a10_server                      Manage A10 Networks AX/SoftAX...
a10_server_axapi3               Manage A10 Networks AX/SoftAX...
a10_service_group               Manage A10 Networks AX/SoftAX...
a10_virtual_server              Manage A10 Networks AX/SoftAX...
aci_aaa_user                    Manage AAA users (aaa:User)
。。。。。。

如果要查看ping模块的用法,使用下面命令(其它模块以此类推)

# ansible-doc ping

command与shell模块(重点)

两个模块都是用于执行linux命令的,这对于命令熟悉的工程师来说,用起来非常high。
shell模块与command模块差不多(command模块不能执行一些类似$HOME,>,<,|等符号,但shell可以)

master# ansible -m command group1 -a "useradd user2"
master# ansible -m command group1 -a "id user2"

master# ansible -m command group1 -a "cat /etc/passwd |wc -l"		--报错
master# ansible -m shell group1 -a "cat /etc/passwd |wc -l"		--成功

master# ansible -m command group1 -a "cd $HOME;pwd"	  --报错
master# ansible -m shell  group1 -a "cd $HOME;pwd"	  --成功

script模块(重点)

script模块用于在远程机器上执行本地脚本(不需要把脚本文件拷贝到远程)。
这里在master上/tmp下准备一个1.sh的shell脚本 , 给group1组内所有机器执行这个脚本

master# ansible group1 -m script -a '/tmp/1.sh'

hostname模块

hostname模块用于修改主机名(注意: 它不能修改/etc/hosts文件)

将其中一远程机器主机名修改为salve

master# ansible 10.1.1.12  -m hostname -a 'name=salve'

基本格式: ansible 被管理机名称或组名 -m 模块名 -a "参数1=值1 参数2=值2"

file模块

file模块用于对文件相关的操作(创建, 删除, 软硬链接,设置权限等)

创建一个目录

master# ansible group1 -m file -a 'path=/test state=directory'

创建一个文件

master# ansible group1 -m file -a 'path=/test/111 state=touch'

递归修改owner,group,mode

master# ansible group1 -m file -a 'path=/test recurse=yes owner=bin group=daemon mode=1777'

删除目录(连同目录里的所有文件)

master# ansible group1 -m file -a 'path=/test state=absent'

创建文件并指定owner,group,mode等

master# ansible group1 -m file -a 'path=/tmp/111 state=touch owner=bin group=daemon mode=1777'

删除文件

master# ansible group1 -m file -a 'path=/tmp/111 state=absent'

创建软链接文件

master# ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab state=link'

创建硬链接文件

master# ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab2 state=hard'

copy模块

copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)
在master上准备一个文件,拷贝此文件到group1(主机组)的所有机器上

master# echo master > /tmp/222
master# ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333'

使用content参数直接往远程文件里写内容(会覆盖原内容)

master# ansible group1 -m copy -a 'content="ha ha\n" dest=/tmp/333'
注意:ansible中-a后面的参数里也有引号时,记得要单引双引交叉使用,如果都为双引会出现问题

使用backup参数控制是否备份文件

backup=yes表示如果拷贝的文件内容与原内容不一样,则会备份一份
group1的机器上会将/tmp/333备份一份(备份文件命名加上时间),再远程拷贝新的文件为/tmp/333
master# ansible group1 -m copy -a 'src=/etc/fstab dest=/tmp/333 backup=yes owner=daemon group=daemon mode=1777'

user模块

user模块用于管理用户账号和用户属性
创建aaa用户,默认为普通用户,创建家目录

master# ansible group1 -m user -a 'name=aaa state=present'

创建bbb系统用户,并且登录shell环境为/sbin/nologin

master# ansible group1 -m user -a 'name=bbb state=present system=yes  shell="/sbin/nologin"'

删除aaa用户,但家目录默认没有删除

master# ansible group1 -m user -a 'name=aaa state=absent'

删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录

master# ansible group1 -m user -a 'name=bbb state=absent remove=yes'

yum模块

yum模块用于使用yum命令来实现软件包的安装与卸载。

使用yum安装一个软件

master# ansible group1 -m yum -a 'name=vsftpd state=present'

使用yum卸载httpd,httpd-devel软件

master# ansible group1 -m yum -a 'name=httpd,httpd-devel state=absent' 

service模块

service模块用于控制服务的启动,关闭,开机自启动等。

启动vsftpd服务,并设为开机自动启动

master# ansible group1 -m service -a 'name=vsftpd state=started enabled=on'

关闭vsftpd服务,并设为开机不自动启动

master# ansible group1 -m service -a 'name=vsftpd state=stopped enabled=false'

fetch模块

fetch模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地。
(个人感觉很鸡肋,感兴趣百度一波)

 类似资料: