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
两个模块都是用于执行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模块用于在远程机器上执行本地脚本(不需要把脚本文件拷贝到远程)。
这里在master上/tmp下准备一个1.sh的shell脚本 , 给group1组内所有机器执行这个脚本
master# ansible group1 -m script -a '/tmp/1.sh'
hostname模块用于修改主机名(注意: 它不能修改/etc/hosts文件)
将其中一远程机器主机名修改为salve
master# ansible 10.1.1.12 -m hostname -a 'name=salve'
基本格式: ansible 被管理机名称或组名 -m 模块名 -a "参数1=值1 参数2=值2"
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模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)
在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模块用于管理用户账号和用户属性
创建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安装一个软件
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模块用于控制服务的启动,关闭,开机自启动等。
启动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模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地。
(个人感觉很鸡肋,感兴趣百度一波)