ansible常用模块实例
Command模块:
Command:在远程主机执行命令,默认模块可忽略-m。
Command:模块不支持变量,管道符,&,$,echo >等需要使用shell模块。
ansible all -m command -a 'systemctl restart network'
重启主机清单的所有主机的网络(以上是完整的写法)。
可以省略-m,因为它时默认的模块。
ansible all -a 'systemctl restart network'
ansible web -a 'ls -l /tmp' (查看web组tmp目录下面有哪些文件)
ansible all -a 'mkdir -p /data' (所有主机创建/data目录)
ansible all -a 'df -hT' (查看所有主机的磁盘使用率)
查看命令的帮助:ansible-doc command 详细参数
ansible all -a 'removes=/data/test.txt rm -rf /data/test.txt'
removes:如果这个文件不存在则不执行,文件存在则执行
ansible all -a 'ls -l /data/' (首先查看目录为空)
Ansible all -a 'creates=/data/aa.txt touch /data/aa.txt'
creates:如果存在反而不执行,如果不存在反而执行
ansible all -a 'chdir=/data ls -l'
chdir:切换至某个文件夹下
shell模块:
shell和command相似,用于执行shell命令。
Shell不是默认的模块所以要加-m
ansible all -m shell -a 'echo $HOSTNAME'
使用shell模块输出所有主机的名字。
ansible all -a 'useradd test1' (所有的主机创建一个test1的用户)
ansible all -m shell -a 'cat /etc/passwd | grep test1'
使用管道符查看是否创建成功。
nsible all -m shell -a 'echo 123.com!|passwd --stdin test1'
为所有主机的test1用户生成密码口令。
删除某个文件但是后缀时日期的有很多需要*号匹配
ansible all -m shell -a 'rm -rf /tmp/aa.txt.*'
Script:运行脚本模块(ansible-doc script:帮助)
只需要在ansible端将脚本编写好,就可以在所有的主机上面执行。
例子:在/tmp目录下面写一个简单的脚本。
ansible all -m script -a '/tmp/hostname.sh'
Copy模块:
将ansible端/tmp目录下的hostname.sh复制到所有主机的/tmp目录下面。
ansible all -m copy -a 'src=/tmp/hostname.sh dest=/tmp/hostname.sh'
src:源路径
dest:目标路径
ansible all -a 'ls -l /tmp' (查看是否都已经复制到所有主机的/tmp目录下面)
将ansible端的aa.txt拷贝到所有的主机,如果其他主机存在aa.txt文件,执行这条命令后将会备份原有的,将新的这个aa.txt拷贝到指定的路径下。
ansible all -m copy -a 'src=/tmp/aa.txt dest=/tmp/aa.txt backup=yes'
ansible all -a 'ls -l /tmp/' (查看是否备份及复制)
删除备份的文件
ansible all -m shell -a 'rm -rf /tmp/aa.txt.*'
将文件拷贝到所有的主机,并设置权限及所有者。
ansible all -m copy -a 'src=/tmp/hostname.sh dest=/tmp/hostname.sh mode=000 owner=test1'
有原始文件的话还是要加上backup=yes,做一个备份。
查看权限
Content:输出内容到文件
ansible all -m copy -a 'content="welcome to beijing" dest=/tmp/welcome.txt'
查看是否输出到目标主机的welcome.txt文件
Fetch:从客户端(ansible-client)取文件至服务器端(ansible-server),copy相反,目录文件可以先tar,因为只支持单个文件不支持目录拉取。
将远程所有主机的messages日志拉取到ansible端的目录
ansible all -m fetch -a 'src=/var/log/messages dest=/data/'
src=ansible-client (客户端文件)
dest=ansible-server(ansible服务端)
file:设置文件属性,包括删除创建。
State=touch(创建文件)
Directory(创建目录)
Link(创建软连接文件)
Absent(删除)
在远程主机的/backup目录创建一个文件。
ansible all -m file -a 'path=/backup/aa.txt state=touch'
删除远程主机的文件。
ansible all -m file -a 'path=/backup/aa.txt state=absent'
创建文件夹,(删除文件夹及文件建议使用shell模块)
ansible all -m file -a 'path=/backup/dir1 state=directory'
创建一个软连接文件(将/etc/fstab软连接到/backup目录下)
ansible all -m file -a 'src=/etc/fstab dest=/backup/fstab state=link'
删除软连接
ansible all -m file -a 'dest=/backup/fstab state=absent'
创建一个文件设置属主为test1,及文件的权限644。
ansible all -m file -a 'path=/backup/test.txt state=touch mode=644 owner=test1'
Cron:计划任务
支持时间:minute(钟),hour(时),day(天),month(月),weekday(星期)
制作一个简单的备份脚本测试
Vi logbak.sh (在ansible端制作一个备份的脚本)
然后复制到所有主机清单的opt目录下并加执行权限
ansible all -m copy -a 'src=/data/logbak.sh dest=/opt/logbak.sh mode=+x'
然后我们制作一个每分钟都执行的脚本。
ansible all -m cron -a 'minute=*/1 job=/opt/logbak.sh name=allbak'
minute:分钟 设置的每一分钟执行一个为了看效果,实际的操作跟你设置crontab是一样的,根据你公司要求设置备份的时间。
Job:设置执行脚本的路径
Name:设置脚本名字
我们查看清单主机的计划任务看是否设置完成。
查看主机清单主机备份目录已经有备份。
禁用计划任务。
Disabled=yes(禁用任务,也就是注释掉任务)
No(开启任务,也就是取消注释)
ansible all -m cron -a 'disabled=yes job=/opt/logbak.sh name=allbak'
删除备份日志计划任务,彻底不使用计划任务(state=absent)删除命令有些是类似的。
ansible all -m cron -a 'job=/opt/logbak.sh name=allbak state=absent'