ansible常用模块的介绍和使用
常用模块介绍
一)ping模块
测试主机是否是通的,用法简单,不涉及参数;
ansible -i /etc/ansible/hosts web -m ping
-i : 指定Inventory (清单) 文件,一般是指ansible的hosts文件
二)setup模块
setup模块,主要用于获取主机信息,在playbooks里经常会用到,gather_facts就与该模块相关,setup模块下经常使用的一个参数是filter参数,具体示下:
查看主机内存信息
查看接口为ens33的网卡信息:
将主机的信息输出到指定的目录下,每台主机的信息输入到主机文件中(/etc/ansible/hosts里的主机名)
结果是在/tmp/facts目录下有/etc/ansible/hosts文件中的主机信息,可以是用cat查看文件内容;
三)file模块
file模块主要用于远程主机上的文件操作,具体使用如下:
创建一个软连接
管理节点的命令:
受控节点的结果:
删除文件:
管理节点的命令:
受控节点的结果:
创建文件:
管理节点的命令:
受控节点的结果:
file模块常用的参数:
force:需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况下;另一种是目标软连接已经存在,需要先取消之前的软连接,然后创建新的软连接,有两个选项:yes|no;
group:定义文件/目录的属组;
mode:定义文件/目录的权限;
owner:定义文件/目录的属主;
path:必选项,定义文件/目录的路径,required;
recurse:递归的设置文件的属性,只对目录有效;
src:要被链接的源文件的路径,只应用于state=like的情况;
dest:被链接到的路径,只应用于state=link的情况;
state:
directory:如果目录不存在,创建目录;
file:即使文件不存在,也不会被创建;
link:创建软连接;
hard:创建 硬链接;
touch:如果文件不存在,则会创建 一个新的文件,如果文件或目录已存在,则更新其左后修改时间;
absent:删除目录、文件或者取消连接文件;
四)copy模块
复制文件到远程主机,如下示例:
管理节点:
拷贝文件并修改属组属主和权限
受控节点:
$ ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes" #拷贝文件到远程主机并保留备份文件
控制节点
被控节点
$ ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'" 有待验证
常用参数:
backup #在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no;
content #用于替代"src",可以直接设定指定文件的值;
directory_mode #递归的设定目录的权限,默认为系统默认权限;
force #如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes;
others #所有的file模块里的选项都可以在这里使用;
dest #必选项,要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录, required;
src #要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,#如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync;
validate #复制文件前进行验证,文件的路径的验证是通过"%s";
五)service模块
用于管理主机服务,能够同时管理centos6和7,不区分centos6的service和centos7的systemctl,实例如下:
网卡重启:
nginx服务启动:
结果:
常用参数:
name #必选项,服务名称;
state #对当前服务执行启动,停止、重启、重新加载等操作(started, stopped, restarted, reloaded);
enabled #是否开机启动yes|no;
pattern #定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行;
runlevel #运行级别;
arguments #给命令行提供一些选项;
sleep #如果执行了restarted,在则stop和start之间沉睡几秒钟;
六)cron模块
用于管理计划任务,实例如下:
管理节点:
受控节点:
管理节点:
受控节点:
管理节点:
受控节点:
管理节点:
受控节点:
管理节点:
常用参数:
name #该任务的描述;
backup #对远程主机上的原任务计划内容修改之前做备份;
cron_file #如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划;
day #日(1-31,,/2,……);
hour #小时(0-23,,/2,……);
minute #分钟(0-59,,/2,……);
month #月(1-12,,/2,……);
weekday #周(0-7,*,……);
job #要执行的任务,依赖于state=present;
special_time #指定什么时候执行,参数:reboot(重启时),yearly(每年),annually,monthly,weekly,daily,hourly;
state #确认该任务计划是创建还是删除;
user #以哪个用户的身份执行;
七)yum模块
使用yum包管理器来管理软件包,实例如下:
1.安装最新版本的apache
2. 移除apache
3. 升级所有的软件包
4. 安装整个Development tools 相关的软件包
5. 从本地仓库安装
ansible test -m yum -a 'name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
6. 从远程仓库安装
ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present' |
常用参数:
name #要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径;
config_file #yum的配置文件;
disable_gpg_check #关闭gpg_check;
disablerepo #不启用某个源;
enablerepo #启用某个源;
state #用于描述安装包最终状态,<em>present/latest</em>用于安装包,<em>absent</em>用于卸载安装包。
八)、user模块
用户管理模块,使用实例:
结果:
常用参数:
home #指定用户的家目录,需要与createhome配合使用;
comment #此参数用于指定用户的注释信息
groups #指定用户的属组;
uid #指定用的uid;
password #指定用户的密码;
name #指定用户名;
createhome #是否创建家目录yes|no;
system #是否为系统用户;
remove #当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r;
state #是创建还是删除;
shell #指定用户的shell环境;
state #此参数用于指定用户是否存在于远程主机中,可选值有present、absent,默认值为present,表示用户需要存在,当设置为absent时表示删除用户
注:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/erc/shadow文件中,所以需要先将密码字符串进行加密处理,然后将得到的字符串放到password中即可。
生成密码:
echo "123456" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin
发行版本不同使用的加密方法可能不同,具体查看/etc/login.defs文件确认
九) group模块
组管理模块,使用实例如下:
常用参数:
gid #指定gid;
name #指定组名称;
state #操作状态,present,absent;
system #是否为系统组;
十) filesystem模块
在块设备上创建文件系统,实例如下:
$ ansible test -m filesystem -a 'fstype=ext2 dev=/dev/sdb1 force=yes'
$ ansible test -m filesystem -a 'fstype=ext4 dev=/dev/sdb1 opts="-cc"'
常用参数:
dev #目标块设备;
force #在一个已有文件系统的设备上强制创建;
fstype #文件系统的类型;
opts #传递给mkfs命令的选项;
十一) mount模块
配置挂载点:
$ ansible test -m mount 'name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present'
$ ansible test -m mount 'name=/srv/disk src='LABEL=SOME_LABEL' state=present'
$ ansible test -m mount 'name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present'
$ ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
$ ansible test -a 'losetup /dev/loop0 /disk.img'
$ ansible test -m filesystem -a 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
$ ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
常用参数:
fstype #必选项,挂载文件的类型;
name #必选项,挂载点;
opts #传递给mount命令的参数;
src #必选项,要挂载的文件;
state #必选项;
present #只处理fstab中的配置;
absent #删除挂载点;
mounted #自动创建挂载点并挂载之;
umounted #卸载;
十二) get_url模块
该模块主要用于从http https ftp 服务器上下载文件(类似于wget)
常用参数:
sha256sum #下载完成后进行sha256 check;
timeout #下载超时时间,默认10s;
url #下载的URL;
url_password、url_username #主要用于需要用户名密码进行验证的情况;
use_proxy #使用代理,代理需事先在环境变更中定义;
十三)unarchive模块
用于解压文件的模块:
管理节点:
受控节点
解压文件不拷贝压缩包到地址目录中:
控制节点:
受控节点:
从网上下载压缩包并解压至指定的目录:
管理节点
受控节点 :
常用参数:
copy #在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在;
creates #指定一个文件名,当该文件存在时,则解压指令不执行;
dest #远程主机上的一个路径,即文件解压的路径;
group #解压后的目录或文件的属组;
list_files #如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项;
mode #解决后文件的权限;
src #如果copy为yes,则需要指定压缩文件的源路径;
owner #解压后文件或目录的属主;
十四) script模块
在指定的节点上执行shell/python脚本(注意,该脚本是在ansible控制节点上的)
ansible web -m script -a '/root/src.sh'
十五) shell模块
在指定的节点上执行shell/python脚本(注意,该脚本在远程节点上)shell模块支持' “|”,变量“$”,以及重定向'
ansible web -m shell -a '/bin/bash /root/dest.sh'
十六)command 模块
用于执行远程系统命令,此模块为ansible默认执行的模块,也是常用的模块之一;command模块不支持' “|”,变量“$”,以及重定向'
十七)raw 模块
类似于command模块,区别在于raw模块支持管道传递:
十八)Template模块
template 使用了Jinja2格式作为文件模块,进行文档内变量的替换模块,它的每次使用都会被ansible标记为"changed"状态。
十九)git模块
- accept_hostkey:接受key,默认是no
- key_file:指定私钥的位置和名称
- repo:指定git代码仓库的地址
- dest:指定代码克隆的地址
- version:指定版本
二十)git_conf模块
list_all:yes or no 列出所有设置范围
name:设置的名称。如果未提供任何值,则将从配置中读取该值(如果已设置)查看git config help中的core字段的值
repo:git存储库的路径,用于从特定存储库读取和写入值
scope:local or global、system 指定从哪个范围读取/设置值。设置配置值时,这是必需的。如果将其设置为local,则还必须指定repo参数。仅在不使用list_all = yes时默认为system
value:指定单个设置的名称时,请提供一个值以将该设置设置为给定值,此值也是查看git config help中的values字段的值
二十一)synchronize模块
使用rsync同步文件,将主控方目录推送到指定节点的目录下,其参数如下:
- delete:删除不存在的文件,delete=yes 使两边的内容一样(即以推送方为主),默认是no
- src:要同步到目的地的源主机上的路径;路径可以是绝对的或相对的,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制。
- dest:目的地主机上将与源同步的路径;路径可以是绝对路径或相对路径。
- dest_port:默认目录主机上的端口,默认是22,走的是ssh协议。
- mode:push或pull,默认push
,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上拉去文件。
- rsyn_opts:通过传递参数组来指定其他rsyn选项。
- archive:镜像rsync存档标志,启用递归、链接、排列、时间、所有者、组标志。
- recursive:递归式同步
- checksum:校验文件的属性。
例子:
EXAMPLES:
# Synchronization of src on the control machine to dest on the remote hosts
- synchronize:
src: some/relative/path
dest: /some/absolute/path
# Synchronization using rsync protocol (push)
- synchronize:
src: some/relative/path/
dest: rsync://somehost.com/path/
# Synchronization using rsync protocol (pull)
- synchronize:
mode: pull
src: rsync://somehost.com/path/
dest: /some/absolute/path/
# Synchronization using rsync protocol on delegate host (push)
- synchronize:
src: /some/absolute/path/
dest: rsync://somehost.com/path/
delegate_to: delegate.host
# Synchronization using rsync protocol on delegate host (pull)
- synchronize:
mode: pull
src: rsync://somehost.com/path/
dest: /some/absolute/path/
delegate_to: delegate.host
# Synchronization without any --archive options enabled
- synchronize:
src: some/relative/path
dest: /some/absolute/path
archive: no
# Synchronization with --archive options enabled except for --recursive
- synchronize:
src: some/relative/path
dest: /some/absolute/path
recursive: no
# Synchronization with --archive options enabled except for --times, with --checksum option enabled
- synchronize:
src: some/relative/path
dest: /some/absolute/path
checksum: yes
times: no
# Synchronization without --archive options enabled except use --links
- synchronize:
src: some/relative/path
dest: /some/absolute/path
archive: no
links: yes
# Synchronization of two paths both on the control machine
- synchronize:
src: some/relative/path
dest: /some/absolute/path
delegate_to: localhost
# Synchronization of src on the inventory host to the dest on the localhost in pull mode
- synchronize:
mode: pull
src: some/relative/path
dest: /some/absolute/path
# Synchronization of src on delegate host to dest on the current inventory host.
- synchronize:
src: /first/absolute/path
dest: /second/absolute/path
delegate_to: delegate.host
# Synchronize two directories on one remote host.
- synchronize:
src: /first/absolute/path
dest: /second/absolute/path
delegate_to: "{{ inventory_hostname }}"
# Synchronize and delete files in dest on the remote host that are not found in src of localhost.
- synchronize:
src: some/relative/path
dest: /some/absolute/path
delete: yes
recursive: yes
# Synchronize using an alternate rsync command
# This specific command is granted su privileges on the destination
- synchronize:
src: some/relative/path
dest: /some/absolute/path
rsync_path: "su -c rsync"
# Example .rsync-filter file in the source directory
# - var # exclude any path whose last part is 'var'
# - /var # exclude any path starting with 'var' starting at the source directory
# + /var/conf # include /var/conf even though it was previously excluded
# Synchronize passing in extra rsync options
- synchronize:
src: /tmp/helloworld
dest: /var/www/helloworld
rsync_opts:
- "--no-motd"
- "--exclude=.git"