ansible常用模块的简单使用

ansible模块使用官方文档:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html

 

# command模块常用选项(默认模块,此模块只能执行一些简单的命令,需要目标主机拥有python环境)

creates:一个文件名,当该文件存在,则该命令不执行,反正,则执行。

chdir:在执行指令之前,先切换到该指定的目录

removes:一个文件名,当该文件存在时,则该选项执行,反之,不执行。

举例:

[root@m01 ~]# ansible all -m command -a "hostname"
因为command是默认模块,所以也可以写成:
[root@m01 ~]# ansible all -a "hostname"
#sshd.pid文件不存在执行service start sshd,存在就不执行
[root@m01 ~]# ansible all -a 'creates=/run/sshd.pid service start sshd'

#切换目录,然后在执行pwd
[root@m01 ~]# ansible all -m command -a "chdir=/opt pwd"

 

# shell模块(使用方法同command模块,需要目标主机拥有python环境)

[root@m01 ~]# ansible all -m shell -a "hostname >> /tmp/hostname.txt"

 

# raw模块(使用方法同command模块,目标主机无需拥有python环境)

没有creates,chdir,removes这三个选项

 

# script模块(远程执行脚本)

#直接写本地脚本路径即可

[root@m01 scripts]# ansible all -m script -a "./yum.sh"

 

# file模块(设置文件符号链接和目录的属性,或删除文件/符号链接/目录)

force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效 yes | no

src:要被链接的源文件的路径,只应用于state=link的情况

dest:被链接到的目标路径,只应用于state=link的情况

state: 有如下几个选项:

directory:表示目录,如果目录不存在,则创建目录。

link:创建软链接

hard:创建硬链接

touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

absent:删除目录、文件或者取消链接文件。

 

# 创建目录
[root@m01 scripts]# ansible all -m file -a "path=/root/soulchild state=directory"

#在root目录下创建soulchild目录,设置所有者和组为nobody,权限为644,递归设置权限
[root@m01 scripts]# ansible all -m file -a 'path=/root/soulchild owner=nobody group=nobody mode=644 recurse=yes'

# 创建软连接
[root@m01 scripts]# ansible all -m file -a "src=/etc/hosts dest=/root/hosts state=link"

 

# copy模块(将文件从本地复制到远程主机)

copy模块包含如下选项:

backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no

content:用于替代”src”参数,可以直接设定指定文件的值

dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

directory_mode:递归的设定目录的权限,默认为系统默认权限

force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

validate:复制到目标位置之前先运行的验证命令。要验证的文件的路径通过“%s”传入。使用:validate='visudo -cf %s'

其他参数:所有的file模块里的选项都可以在这里使用

 

#将本地的show.sh发送到所有主机的/root目录下
[root@m01 ~]# ansible all -m copy -a "src=/server/scripts/show.sh dest=/root"

#将本地的show.sh发送到所有主机的/root目录下,并设置所有者和权限
[root@m01 ~]# ansible all -m copy -a "src=/server/scripts/show.sh dest=/root owner=nobody group=nobody mode=755"

 

 

# yum模块(安装删除软件包)

name:软件包的名称

state:

  •    absent:删除软件
  •    installed:安装
  •    latest:更新
  •    present:安装,同installed(默认)
  •    removed:删除软件

 

# 批量删除软件

[root@m01 scripts]# ansible all -m yum -a "name=cowsay state=removed"

 

# 批量安装软件

[root@m01 scripts]# ansible all -m yum -a "name=cowsay state=installed"

 

# cron模块(添加定时任务)

minute:0-59

hour:0-23

day:1-31

month:1-12

weekday:0-6===>周日-周六

可以用*,  */2这种形式,不写为*

name:描述,添加任务需要填写(删除时按照次名称删除)

job:要执行的命令

state:

absent:删除

present:添加(默认)

user:指定指定用户,默认为root

 

# 每天00:00开始备份etc目录

[root@m01 scripts]# ansible all -m cron -a 'name="backup etc" minute=00 hour=00 job="tar zcf /tmp/etc-`date +%Y%m%d-%H%M`.tar.gz /etc > /dev/null 2>&1" state=present'

 

# 删除指定任务

[root@m01 scripts]# ansible all -m cron -a "name='backup etc' state=absent"

 

每个模块官方都有更详细的例子和使用参数,这里只写一些简单的举例

 

标签: ansible

发表评论: