一、实验环境
编写 ansible 清单
二、模块基本用法
ansible-doc-l #列出ansible所支持的模块
ansible-doc -s fetch #查看模块的详细帮助信息(fetch模块)
ansible all -m ping #调用模块(调用ping模块)
三、fetch 模块
ansible-doc -s fetch #查看 fetch 模块的详细帮助信息
fetch模块中参数作用:
dest:指定拉取文件到本地以后,文件存放的位置
src: 指定从受管主机中拉取哪个文件
步骤一:调用模块的同时传入参数:把testA组受管主机中的/etc/fstab拉取到本机的/testdir/ansible中
ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"
查看到 “changed”: true 说明拉取成功!!!
此时原目录并不存在
注意: /testdir/ansible目录不存在,会自动建立!!
步骤二:再次拉取(验证幂等性)
ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"
虽然SUCCESS,但并不代表已经完成了拉取动作,由"changed": false可以知道并未发生改变,而SUCCESS字样只是代表该动作已经进行过了,或者说该目录中已经有需要拉取的文件了,这就是ansible的幂等性
步骤三:当改变文件内容时再次执行
cd /testdir/ansible/server2/etc/
echo "have a nice day" >> fstab
ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"
可以看到server2进行了拉取的动作,而server3没有。这是因为server2的md5sum改变了,这就是md5sum校验的应用!!!
三、copy 模块
1. copy模块与fetch模块的区别
见名知义,copy模块的作用就是拷贝文件,它与之前介绍的fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中。
2. copy模块参数
参数 | 含义 |
---|---|
src | 用于指定需要copy的文件或目录 |
dest | 用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数 |
content | 当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。 |
force | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。 |
backup | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。 |
owner | 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。 |
group | 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。 |
mode | 指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r–r–", 则可以使用mode=0644表示,如果你想要在user对应的权限位,上添加执行权限,则可以使用mode=u+x表示 |
3. copy模块应用
类型一:当文件内容不一致时,直接覆盖:
类型二:当文件内容一致时,不进行copy动作:
类型三:使用content参数指定文件内容:
当文件内容不一致时,不覆盖:
类型四:使用 backup 参数。当文件内容不一致时,先备份,再覆盖
类型五:指定文件拥有者
指定拥有者的前提条件是远程主机中要有该用户,在远程主机中创建用户:
当远程主机中存在要拷贝的文件时,不进行拷贝,只修改拥有者:
步骤六:指定文件所属组
当远程主机中存在要拷贝的文件时,不进行拷贝,只修改所属组:
步骤七:指定文件权限
当远程主机中不存在要拷贝的文件时,拷贝后的文件的权限是指定的
当远程主机中存在要拷贝的文件时,不进行拷贝,只修改权限: