ansible常用模块

ansible常用模块

3.1、setup模块

获取主机信息,在playbook里经常用到的参数 gather_facts 就与该模块有关,经常使用的参数是 filter。

# 结果非常多,可以用文件重定向保存
ansible lzcx -m setup
# 过滤关键字
ansible lzcx -m setup -a 'filter=ansible_*_mb'
# 获取网卡信息
ansible lzcx -m setup -a "filter=ansible_eth[0-2]"

3.2、ping模块

测试控制端和远程主机之间的网络通信,注意:有一些主机禁ping,ping不通不代表不能访问

ansible lzcx -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 yuhui -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
远程文件信息查看
ansible yuhui -m command -a "ls -la /tmp/resolv.conf"
# 删除远程文件符号链接
ansible yuhui -m file -a "path=/tmp/resolv.conf state=absent"
# 远程文件信息查看
ansible yuhui -m command -a "ls -la /tmp/resolv.conf"

3.3、file模块

# 远程客户端新建software目录
ansible yuhui -m file -a "dest=/home/operation/software mode=754 state=directory"
# software目录下新建s2.txt文件
ansible yuhui -m file -a "dest=/home/operation/software/s2.txt state=touch"
# 修改s2.txt权限
ansible yuhui -m file -a "dest=/home/operation/software/s2.txt mode=600"
# 删除目录,连带目录下的文件一起删除
ansible yuhui -m file -a "dest=/home/operation/software state=absent"
# 还可以使用 path 参数指定路径
ansible yuhui -m file -a "path=/home/operation/test.txt state=touch"
# 删除文件
ansible yuhui -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 yuhui -m copy -a “src=/etc/ansible/ansible.cfg dest=/tmp/ansible.conf mode=0744”
ansible yuhui -m copy -a “src=/etc/ansible/ansible.cfg dest=/tmp/ansible.conf mode=0744 force=yes” # 测试force选项

测试src的"/"区别

ansible yuhui -m copy -a “src=/etc/ansible dest=/home/operation/temp directory_mode=0744” # 不加 “/” 是源目录一起复制
ansible yuhui -m file -a “dest=/home/operation/temp/ansible state=absent” # 删除远程目录 ansible
ansible yuhui -m copy -a “src=/etc/ansible/ dest=/home/operation/temp directory_mode=0744” # 加 “/” 是复制源目录内的文件和文件夹
ansible yuhui -m file -a “dest=/home/operation/temp/ state=absent” # 删除远程目录 temp
copy模块

3.5、template模块

用法和copy基本一致,也是复制本地文件到远程,主要用于复制配置文件,需要注意配置版本差异大的情况,常用参数如下:

backup: 拷贝的同时创建一个包含时间戳的备份文件,默认为 no
dest: 目标路径
force: 值(yes|no),是否覆盖远程文件,默认 yes
grup: 设置远程文件的所属组
owner: 设置文件的所有者
mode: 设置文件的权限。使用数值时不能省略打印位0,即四位数表示
src: ansible控制器上Jinja2格式的模板所在位置,可以是相对或绝对路径
validate: 在复制之前执行检测,如果要引用目标文件名,则使用 %s

安装nginx
ansible lzcx -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 lzcx -m template -a “src=/tmp/nginx.conf dest=/home/operation/nginx.conf mode=0770 backup=yes validate=‘nginx -t -c %s’”
删除复制的文件
ansible lzcx -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 lzcx -m shell -a “ls /etc/nginx/nginx.conf”
ansible lzcx -m fetch -a “src=/etc/nginx/nginx.conf dest=/home/operation” # 没有flat选项
ansible lzcx -m fetch -a “src=/etc/nginx/nginx.conf dest=/home/operation flat=yes” # 有flat选项,注意有flat选项时,dest选项必须以"/"结尾,否则报错
ansible lzcx -m fetch -a “src=/etc/nginx/nginx.conf dest=/home/operation/ flat=yes” # 有flat选项
fetch的flat选项

当需要从多个远程主机拉取文件时,需要考虑存放路径,最好有各自的主机名作为目录,便于区分

rm nginx.conf # 删除上一个步骤的文件
rm -rf 192.168.1.214/ # 删除上一个步骤的文件

使用 inventory_hostname 变量获取主机信息,显然生产使用时应该使用该格式合适
ansible lzcx -m fetch -a “src=/etc/nginx/nginx.conf dest=/home/operation/{{inventory_hostname}} flat=yes”

补充,上面的操作会将文件拉取后保存为主机IP,不是真正的保存在以主机IP为文件上一级目录,在dest后加’/'即可
ansible lzcx -m fetch -a “src=/etc/nginx/nginx.conf dest=/home/operation/{{inventory_hostname}}/ flat=yes”
11.fetch的inventory_hostname变量使用

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 lzcx -m synchronize -a “src=/etc/nginx/nginx.conf dest=/home/operation mode=pull”
12.synchronize拉取文件

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 my_vm -m shell -a ‘cat /proc/cpuinfo | grep “model name” | wc -l’

3.10、raw模块

raw也是命令执行模块,直接使用ssh执行,通常用在客户机还没有python环境

ansible my_vm -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 lzcx -m group -a “name=t1” -b # 添加组 t1
ansible lzcx -m user -a “name=t1 group=t1” -b # 添加用户 t1 并指定组
例:查看创建的用户
ansible lzcx -a “id t1”
例:删除用户和家目录
ansible lzcx -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 cetntos6:lzcx -m yum -a “name=yum-utils state=present” -b
列出dos2unix信息
ansible 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 centos6:lzcx -m yum -a “name=dos2unix download_only=true” -b
指定安装本地rpm
ansible lzcx -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 centos6 -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 lzcx -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 lzcx -m raw -a “rpm -qa | grep nginx”
卸载nginx
ansible lzcx -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参数会启动服务

3.13.1 安装nginx
ansible lzcx -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
3.13.2启动nginx,并设置开机启动
ansible lzcx -m service -a “name=nginx state=started enabled=true” -b
3.13.3重启
ansible lzcx -m service -a “name=nginx state=restarted sleep=3” -b -o
3.13.4停止nginx
ansible lzcx -m service -a “name=nginx state=stopped” -b
3.13.5取消开机启动
ansible lzcx -m service -a “name=nginx enabled=false” -b
3.13.6卸载nginx
ansible lzcx -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⽤于移除

3.15.1安装ntp客户端
ansible lzcx -m yum -a “name=ntpdate state=latest” -b
3.15.2添加一个定时任务,每30分钟执行同步时间一次,注意是添加对控制端执行用户对应的crontab下
ansible lzcx -m cron -a ‘name=“custom job” minute=/30 hour= day=* month=* weekday=* job=“/user/sbin/ntpdate pool.ntp.org”’
3.15.3查看添加的定时任务,添加后的centos路径为 /var/spool/cron/ 下的用户名文件
ansible lzcx -m shell -a “crontab -l | grep -A 1 job”
3.15.4删除定时任务,注意指定任务描述
ansible lzcx -m cron -a ‘name=“custom job” state=absent’
3.15.5设置一个环境变量,并定于任务
ansible lzcx -m cron -a ‘env=yes name=app_home value=/tmp’ -o
3.15.6设置一个时间同步任务
ansible lzcx -m cron -a ‘name=“time sync” job=“/usr/bin/ntpdate ntp1.aliyun.com day=*/1”’ -o
3.15.7查看任务,并打印出环境变量
ansible lzcx -m shell -a “crontab -l | grep -C 1 ‘time sync’”
3.15.8删除任务
ansible lzcx -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 lzcx -m debug -a ‘msg=“Hello world!”’
ansible lzcx -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 lzcx -m archive -a “path=/home/operation/test.sh remove=true”
例:压缩一个目录并指定格式为字zip
ansible lzcx -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 lzcx -m unarchive -a “src=/home/operation/python_script.tar.gz dest=/home/operation”
例: 加creates选项
ansible lzcx -m unarchive -a “src=/home/operation/python_script.tar.gz dest=/home/operation creates=yes”
例: 打印解压缩文件,注意删除远程文件
ansible lzcx -m file -a “path=/home/operation/python_script state=absent”
ansible lzcx -m unarchive -a “src=/home/operation/python_script.tar.gz dest=/home/operation list_files=true”
例: 解压远程压缩包,注意解压的文件必须在本地有同名文件,经试验,如果本地没有同名文件,将报错
ansible lzcx -m unarchive -a “src=/home/operation/python_script.tar.gz dest=/home/operation remote_src=yes list_files=true”
例: 从URL上下载并解压,注意解压之后,下载的压缩包源文件会被删除,该选项不要求本地有相应的文件,但本地控制端需要有wget命令
ansible lzcx -m unarchive -a “src=http://nginx.org/download/nginx-1.14.0.tar.gz dest=/home/operation remote_src=yes”
13.unarchive

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 lzcx -m get_url -a “url=http://nginx.org/download/nginx-1.14.2.tar.gz dest=/home/operation mode=0744”
例: 远程复制文件,相当于远程主机拷贝文件到指定目录
ansible lzcx -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 lzcx -m wait_for -a “port=8000 delay=10 timeout=10”

3.23、script模块

script模块⽤于控制远程主机执⾏脚本。在执⾏脚本前,ansible会将本地脚本传输到远程主机,然后再执⾏。在执⾏脚本的时候,其采⽤的是远程主机上的shell环境。 以下是常用参数:

chdir: 在远程执⾏脚本前先切换到此⽬录下
creates: 当此⽂件存在时,不执⾏脚本。可⽤于实现幂等性
removes: 当此⽂件不存在时,不执⾏脚本。可⽤于实现幂等性
free_form: 本地待执⾏的脚本路径、选项、参数。之所以称为free_form,是因为它是脚本名+选项+参数

3.24、parted模块–待完成

3.25、except模块–待完成

3.26、docker相关–待完成

3.27、kubernetes模块–待完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了减轻多服务器配置和操作工作量以及安全性,特研究此课题,理论上可以同步所有想同步的文件,并且做到一键操作,不需要切换用户,不需要多次操作脚本,中途不需要输入任何字。 1, hosts文件 2, play.yml文件 剧本文件,按标准放到tasks文件夹内,因后面脚本写了路径,如果不愿意放tasks文件夹,需要改后面sh脚本路径参数 3, rsync_notice.py文件 钉钉机器人发送消息文件,此文件放在tools文件夹内,会调用备份日志进行分析,过滤后,发送到钉钉群内。各位同事可修改文件里的Webhoo为自己的机器人key 4, deploy.sh 文件 调用py钉钉文件发消息,并且处理备份日志,删除近期日志等后续事宜,请放在tools文件夹内 1.3.3. 功能基本介绍 1, 在对应脚本里基本都有注释,这里简单介绍下 2, 剧本文件需要在主控机器(备份机器),root用户下运行,运行一次即可,后续sh及py脚本会自动处理。一键搞定所有事情,中途无需手动干预; 3, 自行修改host文件为自己项目地址,bak为备份文件服务器,为安全起见,hosts文件进行了vault加密,密码123456,运行剧本文件,请加—ask-vault-pass 4, 再次提醒,在脚本运行完成后,为保险起见,可将hosts文件中的root密码删除,或修改复杂密码,不会影响后续同步功能。 5, 剧本流程介绍: 1) 主控被控端安装rsync及相关依赖软件; 2) 主控与被控端添加备份用户,rsync; 3) 主控端即备份服务器建立备份文件夹,设置归属用户; 4) 主控及被控端自动切换rsync用户,使用rsync用户配置免密访问所有被控端,即便服务器被黑,rsync用户访问也做不了什么; 5) 主控端即备份服务器使用rsync用户增加同步、日志记录、钉钉发送消息等定时任务; 6) 定时任务里各个需要同步的源地址及项目名称,请自行修改; 7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据不关心,所以读取后,进行数据处理,取出服务器地址、成功标识,或未成功标识; 2) 调用钉钉机器人接口,采取markdown形式,此形式可以定义一个固定的标题,比如:rsync同步情况汇总,这样在钉钉机器人安全设置里,只需要将标题设为关键字即可,具体发送内容千奇百怪也没关系。另外两种方式各有弊端,未研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值