常用模块介绍:
模块 | 作用 | 模块参数 | 示例 |
---|---|---|---|
ping | 测试现有的SSH参数是否能连通远程服务器 | $ ansible test -m ping | |
command | command是Ansible的默认模块,可以不指定模块名称直接运行Linux 命令,也可以通过-m参数指定command 模块,不支持管道。 | chdir:在执行指令之前,先切换到该指定的目录,类似cd /your/path&&command executable:切换shell来执行命令 | $ ansible test -a 'hostname' $ ansible test -m command -a 'hostname' |
raw | 官方文档的说法raw模块相当于使用SSH执行Linux命令,支持管道。 | $ ansible test -m raw -a 'cat /etc/passwd |wc -l' | |
shell | shell模块可以执行远程服务器上的shell脚本文件,同样支持管道,脚本需要绝对路径。 | $ ansible test -m shell -a '/home/devops/test.sh' | |
script | script模块可在远程服务器执行本地的脚本,相当于scp+shell组合。执行完会在远程服务器上删除脚本文件 | $ ansible test -m script -a '/test.sh' | |
file | file模块主要用于对远程服务器上的文件(包括链接和目录) 进行操作, 包括修改文件的权限、修改文件的所有者、创建文件、删除文件等。 | force:需要在两种情况下强制创建软链接 1.源文件不存在但之后会建立的情况下 2.目标软连接已经存在,需要取消之前的软链接,然后创建洗的软连接,有两个选项:yes/no group:定义文件/目标的属组 mode:定义文件/目录的权限 owenr:定义文件/目录的属主 path:必选项,定义文件/目录的路径 recurse:递归的设置文件的属性,只对目录有效 src:要被链接的源文件的路径,只应用于state=link的情况 dest:被链接到的路径,只应用于state=link的情况 state的取值有directory、file、link、hard、touch、absent: directory:如果文件不存在,创建目录 file:即使文件不存在,也不会被创建 link:创建软连接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件 | 创建/temp/filetest ansible test -m file -a 'path=/temp/filetest state=touch' 修改filetest权限 ansible test -m file -a 'path=/temp/filetest state=touch mode="u=rw,g=r,o=r"'' 修改filetest属主和权限 ansible test -m file -a "path=/temp/filetest owner=root group=root mode=0644" -become' |
copy | copy模块将本地文件/目录拷贝到远程服务器,类似scp命令。但比scp更强大,在拷贝文件的同时,也可以设置文件在远程服务器的权限和所有者。 | src:要复制到远程主机的文件地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,将递归复制。在这种情况下,如果路径使用"/“结尾,则只复制目录里的内容,如果没有使用”/"来结尾,则将包含目录在内的整个内容全部复制,类似于rsync dest:文件复制目的地,必须绝对路径,如果源文件是目录,dest指向的也必须是目录 force: 默认取值为yes,表示目标主机包含该文件,但内容不同时会强制覆盖,如果该选项设置为no, 则只有当目标主机的目标位置不存在于该文件时,才会进行复制 backup:默认取值为no,如果为取值为yes,在覆盖之前将原文件进行备份 directory_mode:递归设定目录权限,默认为系统默认权限 others:所有file模块里的选项都可以在这里使用 | #拷贝文件到远程服务器ansible test -m copy -a "src=test.sh dest=/temp/test.sh" #拷贝文件到远程服务器,如果远程服务器已经存在,则备份文件 ansible test -m copy -a "src=test.sh dest=/temp/test.sh backup=yes force=yes " #拷贝文件到远程服务器,并修改文件的所有者和权限 ansible test -m copy -a "src=test. sh dest=/temp/test. sh owner=root group= root mode=644 force=yes" - become |
user/group | user模块请求的是useradd,userdel,usermod三个指令,goup模块请求的是groupadd,groupdel,groupmod三个指令。 | name:需要操作的用户名(或群组名) comment:用户的详细描述 createhome:创建用户时,是否创建家目录,默认为yes Dhome:指定用户的家目录,需要与createhome选项配合使用 groups:指定用户的属组 uid:设置用户的uid Dgid:设置群组的gid password:设置用户的密码 state:是创建用户(或群组)还是删除用户(或群组),取值包括present和absent expires:用户的过期时间 shell:指定用户的shell环境。 | #创建用户ansible test -m user -a 'name=lucius uid=1329 group=root'-become #删除用户 ansible test -m user -a 'name=lucius state=absent' -become #创建群组 ansible test -m group -a "name=root state=present gid=l234" -become #删除群组 ansible test -m group -a "name=root state=absent" -become |
apt | apt模块用来在Debian/Ubuntu系统中安装软件、删除软件。 | name:软件包的名称 state:软件包的状态,可以取值为latest,absent,present和build-dep,默认为present autoremove:默认取值为no,如果取值为yes,将会移除不需要的软件包 force:强制安装或删除软件包 update_cache:作用与apt-get update相同 deb: deb文件的路径。 | 安装软件包ansible test -m apt -a "name=git state=present" -become 卸载软件包 ansible test -m apt -a "name=git state=absent" -become 更新源 ansible test -m apt -a "update_cache=yes" -become |
get_url | 下载数据到本地类似于curl命令。get_url比curl命令更灵活,可控制数据所有者、权限、检查下载数据的checksum等。 | url:必选,文件的下载地址 dest:必选,文件保存的绝对路径 mode:文件权限mode others:所有file模块里的选项都可以在这里使用 checksum: 文件校验码 headers:传递给下载服务器的HTTP Headers backup: 如本地存在同名文件,备份文件 timeout: 下载超时时间 | 下载文件到远程服务器ansible test -m get_url -a 'url=http://localhost:8000/data.tar.gz dest=/temp/test.tar.gz'<br> 下载文件到远程服务器, 并修改文件的权限<br>ansible test -m get_url -a 'url=http://localhost:8000/data.tar.gz dest=/temp/test.tar.gz mode=0777' 下载文件到远程服务器,并且检查文件的md5校验是否与控制端给出的md5校验相同 ansible test -m get_url -a 'url=http://localhost:8000/data.tar.gz dest=/temp/test.tar.gz checksum=md5:8b9f04bda6520871c898bc6a056deb9d |
unarchive | unarchive 模块用于解压文件,类似于tar 命令。默认unarchive将本地的压缩包拷贝到远程服务器,然后进行解压。 | remote_src:该选项可以取值为yes或no,用来表示解压的文件存在远程服务器中,还是存在本地所在的服务器中。默认取值为n o,表示在解压文件之前,先将控制节点上的文件复制到远程主机中,然后再进行解压 src:指定压缩文件的路径,该选项的取值取决于remote_src的取值,如果remotesrc取值为yes,则src指定的是远程服务器中压缩包的地址,如果remote_src 取值为no,则src 指向的是本地中的路径 dest:该选项指定的是远程服务器上的绝对路径,表示压缩文件解压的路径 list_files:默认情况下该选项取值为no,如果该选项取值为yes,也会解压文件,并且在ansible 的返回值中列出压缩包里的文件 exclude:解压文件时排除exclude选项指定的文件或目录列表 keep_newer:默认取值为False,如果该选项取值为True ,那么当目标地址中存在同名的文件,并且文件比压缩包中的文件更新时,不进行覆盖 owner:文件或目录解压以后的所有者 grop:文件或目录解压以后所属的群组 mode:文件或目录解压以后的权限 | 解压本地文件ansible test -m unarchive -a "src=test.tar.gz dest=/temp/test list_files=yes" 解压远程文件 ansible test -m unarchive -a "src=/temp/test.tar.gz dest=/temp remote_src=yes" |
git | git模块在远程服务器执行git相关的操作。该模块一般应用于需要源码安装时,从源码托管网站下载,然后执行命令源码安装。需要注意,该模块依赖于git,因此,在使用该模块前应该先安装git。 | repo:远程git库的地址,可以是一个git协议、ssh协议或http协议的git库地址 dest:必选选项,git库clone到本地服务器以后保存的绝对路径 version:克隆远程git库的版本,取值可以为HEAD 、分支的名称、tag的名称,也可以是一个commit的hash 值 force: 默认取值为no,当该选项取值为yes时,如果本地的git 库有修改,将会抛弃本地的修改 accept_hostkey:当该选项取值为yes时,如果git库的服务器不在know_hosts中,则添加到know_hosts中,key_file 指定克隆远程git库地址时使用的私钥。 | 将requests克隆到/temp/requests目录下ansible test -m git -a "repo=https://github.com/kennethreitz/requests.git dest=/temp/requests version=HEAD" 从源码安装requests ansible test -a "python setup.py install chdir=/temp/requests" -become 验证requests 是否安装成功 ansible test -a "python -c 'import requests'" |
stat | stat模块用于获取远程服务器上的文件信息,其作用类似于Linux下的stat命令。stat模块可以获取atime、ctime、mtime、checksum、size、uid、gid等信息。 | path:必选,用来指定文件/目录路径。 | 获取文件的相信信息ansible test -m stat -a "path=/etc/passwd" |
cron | cron是管理Linux下计划任务的模块。 | backup:取值为yes 或no,默认为no,表示修改之前先做备份 state:取值为present或absent,用来确认该任务计划是创建还是删除 name: 该任务的描述 job: 添加或删除任务,主要取决于state的取值 user:操作哪一个用户的crontab cron_file:如果指定该选项,则用该文件替换远程主机上cron.d目录下的用户任务计划 month weekday day minute hour:取值与cronta b 类似,例如,对于minute 的取值范围0~59,也可以选择"“表示每分钟运行,或者”/5"表示每5分钟运行。 | 增加一个crontab 任务$ ansible test -m cron -a 'backup=yes name="test cron" minute=*/2 hour=* job="ls /temp >/dev/null" 进入服务器,查看新增的crontab任务 $ crontab -1 |
service | service 模块的作用类似于Linux下的service命令,用来启动、停止、重启服务。 | name:服务的名称,该选项为必选项 state:可以取值为started 、stopped 、restarted 和reloaded。其中,started和stoped是幕等的,也就是说,如果服务已经启动了,执行started不会执行任何操作 sleep:重启的过程中,先停止服务然后sleep几秒再启动 pattern:定义一个模式,Ansible 首先通过sta阳s 命令查看服务的状态,以此判断服务是否在运行,如果通过sta tus 查看服务状态时没有响应,Ansible会尝试匹配ps 命令的输出,当匹配到相应模式时,认为服务已经启动,否则认为服务没有启动 enabled:取值为yes或no,用来设置服务是否开机启动。 | 安装Apache,默认情况下,Apache安装完成以后就会启动ansible test -m apt -a "name=apache2 state=present " -become 停止Apache ansible test -m service -a "name=apache2 state=stopped" 重启Apache ansible test -m service -a "name=apache2 state=restarted" |
sysctl | 该模块的作用与Linux下的sysctl命令相似,用于控制Linux的内核参数。 | name:需要设置的参数 value:需要设置的值 sysctl_file: sysctl.conf文件的绝对路径,默认路径是/etc/sysctl.conf reload:该选项可以取值为yes或no,默认为yes,用于表示设置完成以后是否需要执行 sysctl -p 操作。 | 设置overcommit_memory参数的值为lansible test -m sysctl -a "name=vrn.overcommit_memory value=l" -become |
mount | 在远程服务器上挂载磁盘,当进行挂盘操作时,如果挂载点指定的路径不存在,将创建该路径。 | name:挂载点的路径 state:可以取值为present, absent, mounted, unmounted,其中,mounted 与unmounted用来处理磁盘的挂载和卸载, 并且会正确配置fstab 文件, preset与absent只会设置fstab文件,不会去操作磁盘 fstype:指定文件系统类型,当state取值为present 或mounted 时,该选项为必填选项 src:挂载的设备 | 挂载/dev/vga盘到/mnt/temp目录ansible test -m mout -a "name=/mnt/temp src=/dev/vga fstype=ext4 state=mounted" |
synchronize | synchronize 模块是对rsync命令的封装,以便对常见的rsync任务进行处理。我们也可以使用command 模块调用rsync命令执行相应的操作。rsync是一个比较复杂的命令,相对来说,使用synchronize简单些。 | src:需要同步到远程服务器的文件或目录 dest:远程服务器保存数据的路径 archive:默认取值为yes ,相当于同时开启recursive、links、perms、times、owner、group、-D等选项 compress:默认为yes,表示在文件同步过程中是否启用压缩 delete:默认为no,当取值为yes时,表示删除dest中存在而src中不存在的文件。 | 同步本地目录到远程服务器ansible test -m synchronize -a "src=test dest=/temp" |