ansible常用模块
3、ansible常用模块
3.1、setup模块
获取主机信息,在playbook里经常用到的参数 gather_facts 就与该模块有关,经常使用的参数是 filter。
# 结果非常多,可以用文件重定向保存
ansible -i lzcx all -m setup
# 过滤关键字
ansible -i lzcx all -m setup -a 'filter=ansible_*_mb'
# 获取网卡信息
ansible -i lzcx all -m setup -a "filter=ansible_eth[0-2]"
3.2、ping模块
测试控制端和远程主机之间的网络通信,注意:有一些主机禁ping,ping不通不代表不能访问
ansible -i lzcx all -m ping
3.3、file模块
file模块主要用于创建和删除主机上的文件、目录、软/硬链接,常用参数如下:
force: 在两种情况下强制创建软链接。1.源文件不存在但之后会建立的情况下;2.目标软连接已经存在,需要取消之前的软链接,然后创建新的软连接,有两个选项:yes|no;
group: 定义文件/目标的属组
mode: 定义文件/目录的权限
owenr: 定义文件/目录的属主
path: 定义文件/目录的路径
recurse: 递归的设置文件的属性,只对目录有效
src: 要被链接的源文件的路径,只应用于state=link的情况
dest: 被链接到的路径,只应用于state=link的情况,也可以指定路径
file: 即使文件不存在,也不会被创建
link: 创建软连接
hard: 创建硬链接
touch: 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent: 删除目录、文件或者取消链接文件
state: 状态描述,可用选项有absent, directory, file, hard, link, touch,默认file
# 例:创建远程文件符号链接
ansible -i yuhui all -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
# 远程文件信息查看
ansible -i yuhui all -m command -a "ls -la /tmp/resolv.conf"
# 删除远程文件符号链接
ansible -i yuhui all -m file -a "path=/tmp/resolv.conf state=absent"
# 远程文件信息查看
ansible -i yuhui all -m command -a "ls -la /tmp/resolv.conf"
# 远程客户端新建software目录
ansible -i yuhui all -m file -a "dest=/home/operation/software mode=754 state=directory"
# software目录下新建s2.txt文件
ansible -i yuhui all -m file -a "dest=/home/operation/software/s2.txt state=touch"
# 修改s2.txt权限
ansible -i yuhui all -m file -a "dest=/home/operation/software/s2.txt mode=600"
# 删除目录,连带目录下的文件一起删除
ansible -i yuhui all -m file -a "dest=/home/operation/software state=absent"
# 还可以使用 path 参数指定路径
ansible -i yuhui all -m file -a "path=/home/operation/test.txt state=touch"
# 删除文件
ansible -i yuhui all -m file -a "path=/home/operation/test.txt state=absent"
3.4、copy模块
复制控制端文件到远程客户端,主要参数如下:
backup: 在文件存在的时候可以选择覆盖之前,将源文件备份.设定值:yes/no 缺省为yes。
content: 用于替代"src",可以直接设定指定文件的值
backup: 在文件存在的时候可以选择覆盖之前,将源文件备份.设定值:yes/no 缺省为yes。
content: 用于替代"src",可以直接设定指定文件的值
dest: 被复制到远程主机的本地对象文件或者文件夹
mode: 复制对象的设定权限
directory_mode:递归设置目录的权限,默认为系统默认权限
force: 是否强制覆盖.设定值:yes/no 缺省为no,当源文件和目标文件一样时,即使强制覆盖也不生效
others: 所有的file模块里的选项都可以在这里使用
src: 被复制到远程主机的本地对象文件或者文件夹,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于 rsync
validate: The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the example below. The command is passed securely so shell features like expansion and pipes won't work. 以上是说明原文,大意:复制之前验证,验证路径通过 %S 传递,不能使用shell的扩展和管道特性。: 被复制到远程主机的本地对象文件或者文件夹
# 将本地文件/etc/ansible/ansible.cfg复制到目标机器/tmp/ansible.conf,copy模块和Linux的copy一样可以重命名
ansible -i yuhui all -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.conf mode=0744"
ansible -i yuhui all -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.conf mode=0744 force=yes" # 测试force选项
# 测试src的"/"区别
ansible -i yuhui all -m copy -a "src=/etc/ansible dest=/home/operation/temp directory_mode=0744" # 不加 "/" 是源目录一起复制
ansible -i yuhui all -m file -a "dest=/home/operation/temp/ansible state=absent" # 删除远程目录 ansible
ansible -i yuhui all -m copy -a "src=/etc/ansible/ dest=/home/operation/temp directory_mode=0744" # 加 "/" 是复制源目录内的文件和文件夹
ansible -i yuhui all -m file -a "dest=/home/operation/temp/ state=absent" # 删除远程目录 temp
3.5、template模块
用法和copy基本一致,也是复制本地文件到远程,主要用于复制配置文件,需要注意配置版本差异大的情况,常用参数如下:
backup: 拷贝的同时创建一个包含时间戳的备份文件,默认为 no
dest: 目标路径
force: 值(yes|no),是否覆盖远程文件,默认 yes
grup: 设置远程文件的所属组
owner: 设置文件的所有者
mode: 设置文件的权限。使用数值时不能省略打印位0,即四位数表示
src: ansible控制器上Jinja2格式的模板所在位置,可以是相对或绝对路径
validate: 在复制之前执行检测,如果要引用目标文件名,则使用 %s
# 安装nginx
ansible -i lzcx all -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm state=present" -b
# 使用 validate 验证,将安装后的配置上传到控制端做验证
ansible -i lzcx all -m template -a "src=/tmp/nginx.conf dest=/home/operation/nginx.conf mode=0770 backup=yes validate='nginx -t -c %s'"
# 删除复制的文件
ansible -i lzcx all -m file -a "path=/home/operation/nginx.conf state=absent" -b
3.6、fetch拉取⽂件模块
和copy工作方式类似,fetch是从远程拉取配置文件到本机,只能拉取文件不能拉取目录。常用参数如下:
dest: 在本地存放拉取文件的目录。例如dest=/data,src=/etc/fstab,远程主机名host.exp.com,则保存的路径为/data/host.exp.com/etc/fstab。
fail_on_missing: 值(yes|no),默认no,当设置为yes时,如果拉取的文件不存在,则任务失败
flat: 改变拉取后的路径存放格式。如果设置为yes,且当dest以"/"结尾时,将直接把源文件的basename存储在dest下。
src: 拉取远程主机上的源文件。目前不支持拉取目录
validate_checksum: fetch到文件后,检查MD5是否和源文件相同
# 拉取lzcx主机上的nginx配置文件
ansible -i lzcx all -m shell -a "ls /etc/nginx/nginx.conf"
ansible -i lzcx all -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation" # 没有flat选项
ansible -i lzcx all -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation flat=yes" # 有flat选项,注意有flat选项时,dest选项必须以"/"结尾,否则报错
ansible -i lzcx all -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation/ flat=yes" # 有flat选项
# 当需要从多个远程主机拉取文件时,需要考虑存放路径,最好有各自的主机名作为目录,便于区分
rm nginx.conf # 删除上一个步骤的文件
rm -rf 192.168.1.214/ # 删除上一个步骤的文件
# 使用 inventory_hostname 变量获取主机信息,显然生产使用时应该使用该格式合适
ansible -i lzcx all -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation/{{inventory_hostname}} flat=yes"
# 补充,上面的操作会将文件拉取后保存为主机IP,不是真正的保存在以主机IP为文件上一级目录,在dest后加'/'即可
ansible -i lzcx all -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation/{{inventory_hostname}}/ flat=yes"
3.7、rsync模块synchronize
synchronize模块用于实现简单的rsync功能,无法实现完整的rsync功能。在ansible中,可以通过command或者shell模块调用rsync命令,以下是常用参数:
src: 指定待传输的源⽂件可以是相对路径,也可以是绝对路径
dest: ⽬标路径可以是绝对路径,也可以是相对路径
mode: 指定推(push)还是拉(pull)的传输模式;push时,本地为sender端,pull时,远程为sender端默认为push
archive: 等价于rsync的"-a"选项,即使⽤归档模式它等价于rsync的"-rtopgDl"选项值为yes/no
times: 保留mtime属性
group: 保留所属组属性
owner: 保留所有者属性
links: 拷贝链接⽂件⾃⾝
perms: 保留权限属性
recursive: 递归到⽬录中的⽂件
compress: 传输过程中压缩传输应该总是开启,除⾮遇到问题即rsync的"-z"选项
copy_links: 拷贝软链接的⽂件名和其指向的⽂件的内容即a指向b⽂件时,将在⽬标端⽣成a普通⽂件,但此⽂件中的内容是b中的内容,默认为 no
dirs: ⾮递归⽅式传输⽬录
delete: ⽬标端如果⽐源端⽂件多,则删除这些多出来的⽂件,要求recursive=yes,默认为 no
checksum: 等价于"-c"选项,将基于⽂件的checksum来判断是否同步,⽽不是默认的quickcheck算法,该算法基于⽂件⼤⼩和最近的mtime来判断是否要同步该选项会⼤幅降低效率,应谨慎使⽤注意,它⽆法影响archive,即archive仍会启⽤
existing_only: receiver端没有的⽂件不同步但仍会传输,只是临时⽂件重组后不重命名⽽已
partial: 等价于"--partial"选项默认rsync在传输中断时会删除传输了⼀半的⽂件,指定该选项将保留这部分不完整的⽂件,使得下次传输时可以直接从未完成的数据块开始传输
dest_port: ssh的连接端⼝
rsync_opts: 指定额外的rsync选项使⽤数组的⽅式传递这些选项
rsync_path: 等价于"--rsync-path"选项,⽬的是启动远程rsync;例如可以指定[--rsync-path=rsync],甚⾄[--rsync-path=cd/tmp/c&&rsync]当不指定rsync路径时,默认为/usr/bin/rysnc
rsync_timeout: 指定rsync在多久时间内还没有数据传输就超时退出
verify_host: 对⽬标主机进⾏ssh的hostkey验证
# 从远程拉取文件
ansible -i lzcx all -m synchronize -a "src=/etc/nginx/nginx.conf dest=/home/operation mode=pull"
3.8、command模块
在远程主机上执行命令,默认模块,常用参数如下:
chdiiv: 在执行命令之前,通过 cd 命令进入到指定目录
creates: 定义一个文件是否存在,如果存在运行相应命令
removes: 定义一个文件是否存在,如果不存在运行相应命令
executable: 改变shell使用command进行执行,并且执行时要使用绝对路径
free_form: 命令模块采用自由形式命令组合;即可以输入任意linux命令
removes: 定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤
warn: 如果ansible配置文件中定义了命令警告,如果参数设置了no/false将不会警告此行命令
3.9、shell模块
ansible默认模块command不支持shell变量和管道等,如需使用 -m shell 指定shell模块,普通的命令是通过python的ssh执行
# 查看核心数
ansible -i my_vm all -m shell -a 'cat /proc/cpuinfo | grep "model name" | wc -l'
3.10、raw模块
raw也是命令执行模块,直接使用ssh执行,通常用在客户机还没有python环境
ansible -i my_vm all -m raw -a 'cat /proc/cpuinfo | grep "model name" | wc -l'
3.11、user模块与group模块
user模块调用的是 useradd,userdel,usermod命令,group模块调用的是 groupadd,groupdel,groupmod命令,user常用参数如下:
name: 指定创建、删除、修改的用户名
password: 设置用户密码,只能使用加密密码作为值
system: 设置为yes表示创建一个系统用户,只能用于创建,不能用于修改已有用户为系统用户
state: 用户的创建(present)或者删除(absent),默认present
createhome: 创建家目录,已有用户但家目录不存在也可以创建。值为 yes|no
home: 指定创建的家目录路径
move_home: 如果设置为yes,则"home="表示将家目录移动到此选项指定的路径下
uid: 设置用户uid
group: 设置用户primary group
groups: 将用户加入到指定组中。如果设置为 "groups=",则会将用户的其他(除用户名的)组移除
shell: 设置用户的shell
force: 配合 'state=absent' 时,等价于 'userdel --force',即强制删除用户、家目录和邮件列表
remove: 配合 'state=absent' 时,等价于 'userdel --remove',即删除家目录和邮件列表
update_password: user是幂等模块,"always"总是修改密码,"on_create"只在创建用户时设置密码
ansible -i lzcx all -m group -a "name=t1" -b # 添加组 t1
ansible -i lzcx all -m user -a "name=t1 group=t1" -b # 添加用户 t1 并指定组
# 查看创建的用户
ansible -i lzcx all -a "id t1"
# 删除用户和家目录
ansible -i lzcx all -m user -a "name=t1 state=absent force=yes" -b
3.12、yum模块
在线包管理软件,常用参数如下:
download_only: ansible2.7新增选项,只下载rpm包不安装
config_file: yum的配置文件
disable_gpg_check: 安装时禁止gpgcheck,仅在state=present或latest时生效
disablerepo: 禁用指定的repoid,多个repoid使用逗号分隔
enablerepo: 明确使用该repoid
exclude: 排除指定包的安装,仅在state=present或latest时生效
list: 类似yum list
name: 指定安装的包名,可带上版本号(name-1.0),也可以传递一个URL或者一个本地的rpm包的路径
state: 安装状态。(present,installed,latest)用于安装,(absent、remove)用于移除
update_cache: 强制更新yum cache
# 安装nginx源
http://nginx.org/packages/centos/6/x86_64/RPMS/nginx-1.14.2-1.el6.ngx.x86_64.rpm
# 两个组安装 yum-utils 工具,注意安装软件需要切换root
ansible -i cetntos6:lzcx -m yum -a "name=yum-utils state=present" -b
# 列出dos2unix信息
ansible -i centos6:lzcx -m yum -a "list=dos2unix"
# 只下载不安装,下载后的路径在 /var/cache/yum/x86_64/7/base/packages/dos2unix-6.0.3-7.el7.x86_64.rpm ,/var/cache/yum/x86_64/6/base/packages/dos2unix-3.1-37.el6.x86_64.rpm
ansible -i centos6:lzcx -m yum -a "name=dos2unix download_only=true" -b
# 指定安装本地rpm
ansible -i lzcx all -m yum -a "name=/var/cache/yum/x86_64/7/base/packages/dos2unix-6.0.3-7.el7.x86_64.rpm state=present" -b
ansible -i centos6 all -m yum -a "name=/var/cache/yum/x86_64/6/base/packages/dos2unix-3.1-37.el6.x86_64.rpm state=present" -b
# 在线安装nginx,注意在 ansible2.7.4中,可以从指定的在线源中直接安装,而不是下载源到本地,然后再指定源安装了
ansible -i lzcx all -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm state=present" -b
# 查看是否安装
ansible -i lzcx all -m raw -a "rpm -qa | grep nginx"
# 卸载nginx
ansible -i lzcx all -m yum -a "name=nginx state=absent" -b
3.13、service模块
service 风格服务管理模块,以下是常用参数如下:
enabled: 设置是否开机启动,true|false
name: 操作的服务名称,必选
pattern: 定义一个匹配模式,如果通过status指令查看服务的状态没有响应时,就会通过 ps 指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel: 定义运行级别
sleep: 如果执行了 restarted ,在stop和start之间等待设置的时间
state: 对服务执行 启动、停止、重启、重新加载等操作(started、stopped、restarted、reloaded),当服务未启动时,使用reloaded参数会启动服务
# 安装nginx
ansible -i lzcx all -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm state=present" -b
# 启动nginx,并设置开机启动
ansible -i lzcx all -m service -a "name=nginx state=started enabled=true" -b
# 重启
ansible -i lzcx all -m service -a "name=nginx state=restarted sleep=3" -b -o
# 停止nginx
ansible -i lzcx all -m service -a "name=nginx state=stopped" -b
# 取消开机启动
ansible -i lzcx all -m service -a "name=nginx enabled=false" -b
# 卸载nginx
ansible -i lzcx all -m yum -a "name=nginx state=absent" -b
3.14、systemd模块
systemd 风格服务管理模块,使用方法和service大同小异,以下是常用参数如下:
daemon_reload: 是否在执行之前重新加载配置,yes|no,默认是 no
enabled: 是否设置开机启动
masked: 是否将此unit做mask(隐藏、掩盖)处理。mask后的unit将无法启动
name: 操作服务的名称
state: 对服务执行 启动、停止、重启、重新加载等操作(started、stopped、restarted、reloaded),当服务未启动时,使用reloaded参数会启动服务
3.15、cron模块
定时任务设置和管理模块,常用参数如下:
backup: (yes|no),设置是否在修改之前备份文件
cron_file: 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d中。必须同时指定user选项
user: 指定修改crontab的用户,默认为root
disabled: 禁用crontab中的某个job,要求state=present
env: (yes|no)设置一个环境变量,将添加到crontab的顶端。使用name和value定义变量名和值
job: 需要执行的命令。如果设置了env,则表示环境变量的值,此时job='xxx'等价于value='xxx',要求state=present
minute: 分(0-59, *, /N),不写时,默认为
hour: 时(0-23, *, /N),不写时,默认为
day: ⽇(1-31, *, /N),不写时,默认为
month: ⽉(1-12, *, /N),不写时,默认为
weekday: 周(0-6 for Sunday-Saturday, ),不写时,默认为
name: 描述crontab任务的字符串。但如果设置的是env,则name为环境变量的名称。要求state=absent,注意,若未设置name,且state=present,则总会创建⼀个新job条⽬,即使cron_file中已经存在同样的条⽬
special_time: 定时任务的别称,⽤于定义何时运⾏job条⽬,有效值有reboot/hourly/daily/weekly/monthly/yearly/annually
state: job或者env的状态是present(默认)还是absent。present⽤于创建,absent⽤于移除
# 安装ntp客户端
ansible -i lzcx all -m yum -a "name=ntpdate state=latest" -b
# 添加一个定时任务,每30分钟执行同步时间一次,注意是添加对控制端执行用户对应的crontab下
ansible -i lzcx all -m cron -a 'name="custom job" minute=*/30 hour=* day=* month=* weekday=* job="/user/sbin/ntpdate pool.ntp.org"'
# 查看添加的定时任务,添加后的centos路径为 /var/spool/cron/ 下的用户名文件
ansible -i lzcx all -m shell -a "crontab -l | grep -A 1 job"
# 删除定时任务,注意指定任务描述
ansible -i lzcx all -m cron -a 'name="custom job" state=absent'
# 设置一个环境变量,并定于任务
ansible -i lzcx all -m cron -a 'env=yes name=app_home value=/tmp' -o
# 设置一个时间同步任务
ansible -i lzcx all -m cron -a 'name="time sync" job="/usr/bin/ntpdate ntp1.aliyun.com day=*/1"' -o
# 查看任务,并打印出环境变量
ansible -i lzcx all -m shell -a "crontab -l | grep -C 1 'time sync'"
# 删除任务
ansible -i lzcx all -m cron -a 'name="time sync" state=absent'
3.16、cronvar模块
除cron模块可以管理cron运行环境变量之外,cronvar
backup: 值(yes|no),如果设置yes则会在远程cron_file前备份这些文件
cron_file: 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d中
state: present表示创建变量,absent表示移除变量
user: 指定用户的crontab将被修改,默认为root
value: 环境变量的值,要求state=present
3.17、mount模块
文件系统的挂载、卸载,以下是常用参数:
fstype: 必选项,挂载文件的类型,可以是iso9660、ext4、xfs等等
name: 必选项,挂载点
opts: 传递给mount命令的参数
src: 必选项,要挂载的文件
state: 必选项,值为(mounted|unmounted|present|absent),以下为参数用法:
present: 只处理fstab中的配置
absent: 删除挂载点
mounted: 自动创建挂载点并挂载
umounted: 卸载
3.18、debug模块
自定义输出格式信息,类似echo、print语句。ansible中的debug主要用于输出变量值、表达式值以及用when语句条件判断。以下是常用参数:
msg: 输出自定义信息。如果省略,则输出普通字符串
var: 指定待调试的变量。只能指定变量,不能指定自定义信息,且变量不能加 {{}} 包围,而是直接的变量名
verbosity: 控制debug运行的调试级别,有效值为一个数值N
ansible -i lzcx all -m debug -a 'msg="Hello world!"'
ansible -i lzcx all -m debug -a 'var=ansible_eth0.ipv4.address'
3.19、归档模块archive
⽤于在远端压缩⽂件。当然,前提是在远端主机上要有对应的压缩⼯具。⽀持zip/gz/tar/bz2。以下是常用参数:
dest: 目标归档文件名。除非path指定要压缩的是单文件,否则需要dest选项
fromat: 指定压缩格式,默认为gz格式
group: 文件/目录所属的组
owner: 文件/目录所有者
mode: 设置文件/目录的权限,支持'0644或'u+rwx或'u=rw,g=r,o=r'等格式
path: 要压缩的文件,可以是绝对路径,也可以是glob统配的路径,还可以是文件列表
remove: 压缩后删除源文件
# 压缩单个文件并删除源文件
ansible -i lzcx all -m archive -a "path=/home/operation/test.sh remove=true"
# 压缩一个目录并指定格式为字zip
ansible -i lzcx all -m archive -a "path=/home/operation/lzcx dest=/home/operation/lzcx.zip format=zip"
3.20、解包模块unarchive
默认复制ansible端的归档⽂件到被控主机,然后在被控主机上进⾏解包。如果设置选项remote_src=yes,则表⽰解包被控主机上的归档⽂件,要求在被控主机上有对应的解包命令。unzip命令⽤于解压".zip"⽂件,gtar(tar包提供)命令⽤于解压".tar"、".tar.gz"、".tar.bz2"和".tar.xz"。用参数如下:
creates: 如果指定的⽂件存在则不执⾏该任务。可⽤于实现幂等性
dest: 远程机器上需要被解包的归档⽂件,要求是绝对路径
exclude: 列出解包过程中想要忽略的⽬录和⽂件
group: ⽂件/⽬录的所属组
owner: ⽂件/⽬录的所有者
mode: 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
keep_newer: 在解包过程中,如果⽬标路径中和包中有同名⽂件,且⽐包中的⽂件更新,则保留新的⽂件
list_files: 设置为true时,将返回归档⽂件中的⽂件列表,默认 no
remote_src: 设置为yes表⽰远程主机上已有⽬标归档⽂件,即不再从本地复制归档⽂件到远端,直接在远端解包。默认为no
src: 如果remote_src=no,将复制本地归档⽂件到远端,可相对路径也可绝对路径. 如果remote_src=yes, 将解包远程已存在的归档⽂件,果remote_src=yes且src中包含了"😕/",将指挥远程主机从url中下载⽂件并解包
# 解压本地文件到远程
ansible -i lzcx all -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation"
# 加creates选项
ansible -i lzcx all -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation creates=yes"
# 打印解压缩文件,注意删除远程文件
ansible -i lzcx all -m file -a "path=/home/operation/python_script state=absent"
ansible -i lzcx all -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation list_files=true"
# 解压远程压缩包,注意解压的文件必须在本地有同名文件,经试验,如果本地没有同名文件,将报错
ansible -i lzcx all -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation remote_src=yes list_files=true"
# 从URL上下载并解压,注意解压之后,下载的压缩包源文件会被删除,该选项不要求本地有相应的文件,但本地控制端需要有wget命令
ansible -i lzcx all -m unarchive -a "src=http://nginx.org/download/nginx-1.14.0.tar.gz dest=/home/operation remote_src=yes"
3.21、下载模块get_url
当下载HTTP和HTTPS链接时,客户端要求有get命令,否则报错;下载ftp文件时,客户端要求有ftp命令
注意,dest为⽬录或者force=yes时,总是会下载⽂件到临时存放⽬录中,只不过不⼀定会替换旧⽂件。只有
force=no(默认)且dest是⼀个⽂件时,在⽂件已存在时才不会下载⽂件。以下是常用参数:
backup: 下载⽂件时同时创建⼀个名称中包含时间戳的备份⽂件
dest: ⽂件保存路径,必须为绝对路径。如果dest是⼀个⽬录,则使⽤url的base name作为⽂件名。# 如果dest是⼀个⽬录,则'force'选项不⽣效。# 如果dest是⼀个⽬录,则总是会下载⽬标⽂件,但只在已存在的⽂件变化了才会替换旧⽂件
force: 如果设置为yes,且dest不是⼀个⽬录时,则总是会下载⽂件,但只在已存在的⽂件变化了才会替换旧⽂件。如果设置为no(默认),则只会在⽬录路径下不存在该⽂件时才会进⾏下载。
tmp_dest: 下载时临时存放⽬录,在任务执⾏完成前会删除下载的临时⽂件
group: ⽂件/⽬录的所属组
owner: ⽂件/⽬录的所有者
mode: 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
timeout: 请求url时的超时时间,默认10秒钟
url: 要下载的url路径,(http|https|ftp)😕/[user[:pass]]@host.domain[:port]/path。还⽀持file格式的路径,实现复制功能。file:///path/to/file
# 下载nginx文件并设置权限
ansible -i lzcx all -m get_url -a "url=http://nginx.org/download/nginx-1.14.2.tar.gz dest=/home/operation mode=0744"
# 远程复制文件,相当于远程主机拷贝文件到指定目录
ansible -i lzcx all -m get_url -a "url=file:///home/operation/lzcx.zip dest=/tmp/lzcx.zip"
3.22、wait_for模块
有些时候任务之间对状态、⽂件、端⼝等资源是有依赖关系的,只有满⾜了前提,任务才会继续。wait_f or模块就是⽤于判断任务在满⾜什么条件的情况下会继续。主要⽤来判断端⼝是否开启、⽂件是否存在、⽂件中是否存在某些字符串。以下是常用参数:
delay: 在检查操作进⾏之前等待的秒数
host: 等待这个主机处于启动状态,默认为127.0.0.1
port: 等待这个端⼝已经开放
path: 这个⽂件是否已经存在
search_regex: 在⽂件中进⾏正则匹配
state: present/started/stopped/absent/drained。默认started
当检查的是⼀个端⼝时:
started:保证端⼝是开放的
stopped:保证端⼝是关闭的
当检查的是⼀个⽂件时:
present/started:在检查到⽂件存在才会继续
absent:检查到⽂件被移除后才会继续
sleep: 两次检查之间sleep的秒数,默认1秒
timeout: 检查的等待超时时间(秒数,默认300)
# 连接上主机后10秒后才检查8000端⼝是否处于开放状态,300秒(默认值)内未开放则超时
ansible -i lzcx all -m wait_for -a "port=8000 delay=10 timeout=10"
3.23、script模块
script模块⽤于控制远程主机执⾏脚本。在执⾏脚本前,ansible会将本地脚本传输到远程主机,然后再执⾏。在执⾏脚本的时候,其采⽤的是远程主机上的shell环境。 以下是常用参数:
chdir: 在远程执⾏脚本前先切换到此⽬录下
creates: 当此⽂件存在时,不执⾏脚本。可⽤于实现幂等性
removes: 当此⽂件不存在时,不执⾏脚本。可⽤于实现幂等性
free_form: 本地待执⾏的脚本路径、选项、参数。之所以称为free_form,是因为它是脚本名+选项+参数