ansible 和文件复制相关的几个模块

ansible 复制远程主机的文件到本地主机——fetch

例子1:
[[email protected]_7 ansible]# cat fetched.yml
---
- hosts: centos7
  remote_user: root
  tasks:
    - name : fetched file from centos7 into local
      fetch:
        src: /tmp/fstab_from_centos6
        dest: /tmp/centos

说明:
src  - 是远程主机的文件,这个参数只能使用文件,不能使用目录
dest - 是本地主机,用来保存文件的目录。它会将这里的参数看成是目录。注意,在执行ansible 成功后,dest 的路径会自动将远程文件保存到 /tmp/centos/remote_host/tmp/fstab_from_centos6

上面例子的结果:
[[email protected]_7 ansible]# ls  /tmp/centos/example.fetch.host/tmp
fstab_from_centos6

example.fetch.host 是在 /etc/ansible/hosts 主机列表里 centos7 对应的名称

例子2:
保存到本地时,直接使用远程的文件名,不需要remote_host 创建新的目录
[[email protected]_7 ansible]# cat fetched.yml
---
- hosts: centos7
  remote_user: root
  tasks:
    - name : fetched file from centos7 into local
      fetch:
        src: /tmp/fstab_from_centos6
        dest: /tmp/
        flat: yes

增加 flat 参数,当flat 为 yes 时,有两种情况:
(1)dest 是以"/" 结尾,怎文件直接保存在 dest 的目录下,所以现在的结果是:

fstab_from_centos6 保存在本地主机的 /tmp/fstab_from_centos6 

(2) dest 不是以 "/" 结尾,则dest 被看做文件,相当于 fstab_from_centos6 会重命名再保存。例如:
[[email protected]_7 ansible]# cat fetched.yml
---
- hosts: centos7
  remote_user: root
  tasks:
    - name : fetched file from centos7 into local
      fetch:
        src: /tmp/fstab_from_centos6
        dest: /tmp/centos
        flat: yes

fstab_from_centos6 被保存为 /tmp/cnetos

复制本地(或远程)文件 到远程主机

# Example from Ansible Playbooks
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644

# The same example as above, but using a symbolic mode equivalent to 0644
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u=rw,g=r,o=r

file 模块

file 模块用来修改文件、目录和符号文件的属性权限等。利用它的 state 参数,有更多丰富的用法。

修改权限属性:
[[email protected]_7 ansible]# ansible centos6 -m command -a "chdir=/tmp/new/ ls 1.txt -l"
192.168.188.109 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 0 Jan 16 12:22 1.txt

[[email protected]_7 ansible]# ansible centos6 -m file -a "path=/tmp/new/1.txt mode=0777"
192.168.188.109 | SUCCESS => {
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0777",
    "owner": "root",
    "path": "/tmp/new/1.txt",
    "size": 0,
    "state": "file",
    "uid": 0
}
[[email protected]_7 ansible]# ansible centos6 -m command -a "chdir=/tmp/new/ ls 1.txt -l"
192.168.188.109 | SUCCESS | rc=0 >>
-rwxrwxrwx 1 root root 0 Jan 16 12:22 1.txt
说明: 将远程主机 /tmp/new/1.txt 的文件修改权限属性为0777;
ansible 命令中,path 相当于 dest,指明了目标文件。

如果想修改所属主和所属组,可以:
ansible  centos6  -m  file  -a  "path=/tmp/new/1.txt   mode=0755 ower=apple group=apple"
命令执行结果:
[[email protected]_7 ansible]# ansible centos6 -m file -a "path=/tmp/new/1.txt mode=0755 owner=apple group=apple"
192.168.188.109 | SUCCESS => {
    "changed": true,
    "gid": 508,
    "group": "apple",
    "mode": "0755",
    "owner": "apple",
    "path": "/tmp/new/1.txt",
    "size": 0,
    "state": "file",
    "uid": 508
}
[[email protected]_7 ansible]# ansible centos6 -m command -a "chdir=/tmp/new/ ls 1.txt -l"
192.168.188.109 | SUCCESS | rc=0 >>
-rwxr-xr-x 1 apple apple 0 Jan 16 12:22 1.txt
说明: 只要增加 owner 和 group 参数就可以了。

file 的 state 参数

熟悉 state 的几个参数,基本就满足我们平时对文件、目录和符号链接文件的操作了。
先来看看 state 有几个值? state 的值和我们要进行的操作,其实是一一对应的。
1. state=directory --  如果想创建一个目录
[[email protected]_7 ansible]# ansible test -m file -a "path=/tmp/testdir state=directory"
192.168.188.109 | SUCCESS => {
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0755",
    "owner": "root",
    "path": "/tmp/testdir",
    "size": 4096,
    "state": "directory",
    "uid": 0
}

可以看到,在远程主机已经创建了 /tmp/testdir 目录:
[[email protected]_7 ansible]# ansible test -m command  -a "chdir=/tmp ls -lthr"
192.168.188.109 | SUCCESS | rc=0 >>
total 16K
-rw-r--r-- 1 root root  484 Jan 12 15:08 fstab
drwxr-xr-x 2 root root 4.0K Jan 16 12:22 new
drwxr-xr-x 2 root root 4.0K Jan 16 14:50 testdir
drwx------ 2 root root 4.0K Jan 16 14:51 ansible_IOZLxg

2. state=touch --  创建文件
[[email protected]_7 ansible]# ansible test -m file -a "path=/tmp/new/1.txt state=touch"
[[email protected]_7 ansible]# ansible test -m command -a "chdir=/tmp/new ls -lthr"
192.168.188.109 | SUCCESS | rc=0 >>
total 0
-rw-r--r-- 1 root root 0 Jan 16 15:00 1.txt
注意: 使用 state=file ,当 path 指定的文件不存在的时候,并不能新创建文件。
重复对相同的文件使用 touch 只能改变文件的元数据属性,例如访问时间等等 stat 查看到的数据。

3. state=link  -- 创建符号链接
        当stat=link 的时候,就需要使用另一个 src 的参数一起搭配使用了。
[[email protected]_7 ansible]# ansible test -m file -a "path=/tmp/new/1_link.txt src=/tmp/new/1.txt state=link"

结果:
[[email protected]_7 ansible]# ansible test -m command -a "ls /tmp/new -l"
192.168.188.109 | SUCCESS | rc=0 >>
total 0
lrwxrwxrwx 1 root root 14 Jan 16 15:25 1_link.txt -> /tmp/new/1.txt
-rw-r--r-- 1 root root  0 Jan 16 15:02 1.txt

说明: path 指定了生成的符号链接文件的路径, src 指定了 被链接的文件是什么。

4. state=hard  --  创建硬链接
[[email protected]_7 ansible]# ansible test -m file -a "path=/tmp/new/1_hard.txt src=/tmp/new/1.txt state=hard"

[[email protected]_7 ansible]# ansible test -m command -a "ls -l /tmp/new "
192.168.188.109 | SUCCESS | rc=0 >>
total 0
-rw-r--r-- 2 root root  0 Jan 16 15:02 1_hard.txt
lrwxrwxrwx 1 root root 14 Jan 16 15:25 1_link.txt -> /tmp/new/1.txt
-rw-r--r-- 2 root root  0 Jan 16 15:02 1.txt

可以看到,1.txt 和 1_hard.txt  文件的属性都是一样的。

5.  state=absent  -- 删除目录、文件和符号链接
[[email protected]_7 ansible]# ansible test -m file -a "path=/tmp/new/1_link.txt state=absent"
这样就删除了一个符号链接文件。

template 模块

template 模块官网说明:
template使用了Jinjia2格式作为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。

通俗来讲,就是在本地 file.j2 文件里的变量状态,例如 username="{{ admin_username }}" password="{{ admin_password }}",
会一直保持变量状态。直到 file.j2 文件被 ansible 的 template 模块执行后,文件里面的变量都会被具体的值代替,并且传送到远程主机。

例如,在roles 里面调用了 template 模块,那么它就会到 global_vars 路径寻找存锤变量的文件,将对应的变量传递 file.j2 文件里。

原文地址:http://blog.51cto.com/hellocjq/2061703

时间: 2024-10-10 08:49:29

ansible 和文件复制相关的几个模块的相关文章

使用 Ansible 管理 MySQL 复制

Ansible 是一个新兴的 IT 自动化工具.本文将介绍如何通过 Ansible 配置及管理 MySQL 主.从复制环境,实现部署过程自动化,体验 Ansible 简单快速带来的快感. 简介: Ansible 是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具 Chef,Puppet,Saltstack.Ansible 是通过 Python 语言开发.Ansible 平台由 Michael DeHaan 创建,他同时也是知名软件 Cobbler 与 Func 的作者.Ansible

C语言(七)文件的相关操作

转载请标明出处: http://blog.csdn.net/u011974987/article/details/52354074 C语言文件的打开与关闭 在C语言中,文件操作都是由库函数来完成的,我们就来总结文件的相关的操作. 文件的打开(fopen函数) fopen() 函数用来打开一个文件,它的格式为: FILE *fopen(char *filename, char *type); filename为文件名(包括文件路径),type为打开方式,它们都是字符串.fopen() 会获取文件信

ProFTPD <=1.3.5 mod_copy 未授权文件复制漏洞

poc如下: #!/usr/bin/env python# coding=utf-8 """Site: http://www.beebeeto.com/Framework: https://github.com/n0tr00t/Beebeeto-framework""" import randomimport telnetlib from baseframe import BaseFramefrom utils.http import http

【C】C语言中文件操作相关内容

1. 文件和流的关系 C将每个文件简单地作为顺序字节流.每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件的关系. 在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流.标准输出流和标准错误.流提供了文件和程序的通信通道.打开一个文件将返回指向FILE结构(在stdio.h中定义)的指针,它包含用于处理文件的信息,也就是说,这个结构包含文件描述符.文件描述符是操作系统数组(打开文件列表的索引).每个数组

linux学习笔记(1)-文件处理相关命令

列出文件和目录 ls (list) #ls 在终端里键入ls,并回车,就会列出当前目录的文件和目录,但是不包括隐藏文件和目录 #ls -a 列出当前目录的所有文件 #ls -al 列出当前目的所有文件的详细信息 创建目录 mkdir (make directory) #mkdir test 在当前目录创建test的目录 显示当前目录 pwd (print working directory) #pwd 打印当前目录 切换到其他目录 cd (change directory) #cd 目录名 复制

Windows系统中监控文件复制操作的几种方式

http://blog.sina.com.cn/s/blog_4596beaa0100lp4y.html 1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得到源和目标文件名. 可以控制拒绝操作. 缺点: 不能对文件进行控制. 只对Shell文件操作有效, 对原生Api MoveFile, CopyFile之类的操作无效. 用法: 从ICopyHook派生一个COM对象, 重载CopyCallbackA和CopyCallbackW, 然后把COM注册到H

Java 文件复制

摘要 尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式. 1.使用File Streams复制 这是最经典的方式将一个文件的内容复制到另一个文件中. 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B. 这是第一个方法的代码: public static void copyFil

Linux(5)、文件内容相关命令

文件内容相关 新增内容 vim 模式化编辑器.全屏编辑器 centos7安装vim:yum -y install vim 三种模式 1.编辑模式,打开vim后默认的模式,没卵用: 2.插入模式,直接可以修改文本内容: 3.末行模式,可以使用命令操作文本内容: :10d 删除第10行 :10,20d 删除第10行-20行 模式之间转换: 编辑模式 --> 输入模式: i 在当前光标所在字符前面进入输入模式 a 在当前光标所在字符后面进入输入模式 o 在当前光标所在行的下方新建一行,并转换为输入模式

maven资源文件的相关配置

https://www.cnblogs.com/pixy/p/4798089.html https://blog.csdn.net/u011900448/article/details/78281269 https://www.cnblogs.com/hi-feng/p/7892724.html maven资源文件的相关配置构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件.src/main/java和src/test/java 这两个目录中的