先从我自身的情况来说,我不是运维人员,并且对linux操作也不是特别熟悉,所以工作中我使用ansible基本就是在平常的自动化部署中,而使用最多的模块就是copy模块。我使用copy模块也主要是来替换生产环境的配置文件。所以,这里我主要介绍一下copy模块。说实话,对于其他模块,我接触的也不多。
我们先看官方文档怎么说的copy这个模块
The copy' module copies a file from the local or remote machine to a location on the remote machine. Use the [fetch] module to copy files from remote locations to the local box. If you need variable interpolation in copied files, use the [template] module. Using a variable in the
content’ field will result in unpredictable output. For Windows targets, use the [win_copy] module instead.
参数 | 描述 |
---|---|
src | 指定被copy的文件或目录 |
dest | 指定文件将被拷贝到远程主机的哪个目录中 |
force | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。 |
backup | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。 |
mode | 指定文件拷贝到远程主机后的权限,比如你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示 |
more test/a.txt
ansible all -m copy -a "src=/test/a.txt dest=/test/"
复制成功了。
这个时候如果我们再执行一次,可以看到结果发生了变化
在远程机器上也看到了这个文件
ansible all -m copy -a 'content="qqqqq\nwwww\n" dest="/test2/a_1.txt"'
FAILED! => {
“ansible_facts”: {
“discovered_interpreter_python”: “/usr/bin/python”
},
“changed”: false,
“checksum”: “a9dd8f985a0e22e8ce07dc2e9ec61d92fdeb96f9”,
“msg”: “Destination directory /test2 does not exist”
}
这个时候需要使用file模块,先创建目录:
ansible all -m file -a 'path=/test2/ state=directory'
ansible all -m copy -a 'src="/test/a.txt" dest="/test/" force=no'
通过上面的结果,我们看到,文件没有改变成功。我们现在去远程机器上看一下情况。
ansible all -m copy -a 'src="/test/a.txt" dest="/test/" backup=yes'
从上面的返回结果,我们看到文件已经改变了。现在去远程机器上看一下
文件被改变,并且生成了备份文件,验证符合预期。
ansible all -m copy -a "src=/test/a.txt dest=/test/ mode=0421"
可能有些同学对这个数字权限不是很清楚,这里简单说一下。
在Linu系统下用命令ll或者ls -la的时候会看到前面-rw-rw-r–一串字符,
r:read 代表读取权限 用数字4表示
w:write 代表写入权限 用数字2表示
x:excute 代表执行权限 用数字1表示
读取、写入、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,-r—w—x用数字表示成421。
常用的一些Linux文件权限如下:
444 r–r–r–
600 rw-------
644 rw-r–r–
666 rw-rw-rw-
700 rwx------
744 rwxr–r–
755 rwxr-xr-x
777 rwxrwxrwx
以755为例:
1-3位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;
4-6位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;
7-9位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。
对于copy模块,我就写一下我自己平时常用的,仅供参考。