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'

posted @ 2020-02-10 21:59  點燈的人  阅读(819)  评论(0编辑  收藏  举报