03-常用模块(一)-文件操作模块
2018-08-27 本文已影响0人
洛神鬼道
Ansible
Ansible version : 2.6.2
常用模块(一)
文件操作模块
- acl
- archive
- assemble
- blockinfile
- copy
- fetch
- file
- find
- ini_file
- iso_extract
- lineinfile
- patch
- replace
- stat
- synchronize
- tempfile
- template
- unarchive
- xattr
- xml
模块:file
概要
设置文件、symlinks和目录的属性,或删除文件/symlinks/目录。许多其他模块支持与[file]模块相同的选项—包括[copy]、[template]和[assemble]。对于Windows主机,使用[win_file]模块。
参数
参数(*必选) | 默认值 | 注释 |
---|---|---|
attributes | null | 文件或者目录具有的属性。该字符串应包含与`lsattr'显示的属性顺序相同的属性。 |
follow | yes | 表示应遵循文件系统链接(如果存在)。在2.5版本以前,默认值为no |
force | no | 在两种情况下强制创建符号链接:源文件不存在(但稍后会出现); 目标存在并且是一个文件(需要取消链接“路径”文件并创建符号链接到“src”文件来替代)。 |
group | null | 文件/目录所属组名,将会提供给chown使用 |
mode | 设置文件或目录权限。 1.为了yaml能够解析,可以使用八进制表示,例如0644 2. ansible接收到字符串通过自己内部的方式转化为数字,例如'644'、‘0644’。 3. 采用symbolic模式。例如u+rwx 或者 u=rw,g=r,o=r | |
owner | 文件/目录所属用户名,将会提供给chown使用 | |
* path | 要管理的文件的路径。 别名:dest 、name
|
|
recurse | no | 递归设置指定的文件属性(仅适用于目录) |
selevel | s0 | SELinux文件上下文的级别部分。 这是MLS / MCS属性,有时称为range 。 _default 功能与seuser 功能相同。 |
serole | null | SELinux文件上下文的角色部分。_default 功能与seuser 功能相同。 |
setype | null | SELinux文件上下文的类型部分。_default 功能与seuser 功能相同。 |
seuser | null | SELinux文件上下文的用户部分。将默认系统策略,如果适用。如果设置为_default ,它将使用策略的user 部分(如果可用)。 |
src | null | 要链接到的文件的路径(仅适用于state=link 和state=hard )。接受绝对,相对和不存在的路径。相对路径是相对于正在创建的文件path ),这是UNIX命令ln -s SRC DEST 处理相对路径的方式。 |
state | file | 1. 如果是directory ,如果它们不存在,将创建所有中间子目录。 从Ansible 1.7开始,它们将使用提供的权限创建。2. 如果是file ,如果该文件不存在,则不会创建该文件; 如果您想要这种行为,请查看touch 值或[copy]或[template]模块。3. 如果是link ,将创建或更改符号链接。 使用hard 进行硬链接。4. 如果absent ,将递归删除目录,并且将取消链接文件或符号链接。注意,如果path 不存在,并且状态没有改变,那么absent 不会导致file 失败。如果touch (1.4中新增),如果path 不存在,将创建一个空文件,而现有文件或目录将接收到更新的文件访问和修改时间(类似于命令行中的touch 工作方式)。可选参数:absent, directory, file, hard, link, touch |
unsafe_writes | no | 通常,此模块使用原子操作来防止数据损坏或来自目标文件的不一致读取,有时系统配置或仅以阻止此操作的方式中断。 一个例子是docker挂载的文件,它们不能以原子方式更新,并且只能以安全的方式完成。 |
例子
ad-hoc
创建文件(指定权限)
ansible localhost -m file -a 'dest=/tmp/testdir.txt mode=0644 state=touch'
创建目录(指定用户、组、权限)
ansible localhost -m file -a 'dest=/tmp/testdir3 mode=0644 state=directory owner=luoshen group=luoshen'
playbook
修改所属用户、组、权限。如果mode使用8进制,首位必须为0.
- file:
path: /etc/foo.conf
owner: foo
group: foo
mode: 0644
- file:
src: /file/to/link/to
dest: /path/to/symlink
owner: foo
group: foo
state: link
- file:
src: '/tmp/{{ item.src }}'
dest: '{{ item.dest }}'
state: link
with_items:
- { src: 'x', dest: 'y' }
- { src: 'z', dest: 'k' }
创建文件(指定权限)
- file:
path: /etc/foo.conf
state: touch
mode: "u=rw,g=r,o=r"
修改已有文件权限
- file:
path: /etc/foo.conf
state: touch
mode: "u+rw,g-wx,o-rwx"
如果目录不存在,则创建
- file:
path: /etc/some_directory
state: directory
mode: 0755
模块:copy
概要
[copy]模块将文件从本地或远程计算机复制到远程计算机上的某个位置。 使用[fetch]模块将文件从远程位置复制到本地。如果需要在复制的文件中进行变量插值,使用[template]模块。 对于Windows,采用[win_copy]模块。
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
attributes | null | 文件或目录应具有的属性。 要获得支持的标志,请查看目标系统上chattr 的手册页。 该字符串应包含与lsattr 显示的属性顺序相同的属性。 |
backup | no | 创建一个包含时间戳信息的备份文件,如果你以某种方式错误地破坏了原始文件,就可以将其恢复原状。 |
checksum | null | 预期的sha1校验值,用于验证文件副本是否成功。如果未提供,则ansible将使用src文件的本地计算校验和。 |
content | null | 当替代src 使用时,将文件的内容直接设置为指定的值。 对于任何高级或格式化的内容,查看template 模块。 |
decrypt | yes | 此选项使用Vault控制源文件的自动解密。 |
* dest | 复制到远端必须是绝对路径。如果'src'是一个目录,'dest'也必须是一个目录。如果'dest'是一个不存在的路径并且'dest'已'/'结尾或者’src‘是一个目录,'dest'被创建。如果'src'与'dest'都是文件,则'dest'的父文件夹不会被创建,如果不存在则task会失败。 | |
directory_mode | null | 执行递归复制时,设置目录的模式。 如果未设置,我们将使用系统默认值。 该模式仅在创建新目录上设置,不会影响已存在的目录。 |
follow | no | 目标主机中的文件系统连接,如果存在,则保持一致。 |
force | yes | 默认值为yes,当内容与源不同时,将替换远程文件。 如果不是,则仅在目标不存在时才传输文件。 |
group | null | 文件/目录所属组名,将会提供给chown使用 |
local_follow | yes | 源主机中的文件系统连接,如果存在,则保持一致。 |
mode | 设置文件或目录权限。 对于习惯于/usr/bin/chmod 的人来说,实际上是八进制数。 你必须指定首位为零,以便Ansible的YAML解析器知道它是一个八进制数(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一个字符串并可以自己从字符串转换,在没有遵循这些规则之一的情况下给Ansible一个数字将得到一个十进制数,这将产生意想不到的结果。从版本1.8开始,模式可以指定为符号模式(例如,u + rwx或u = rw ,g = r,o = r)。从版本2.3开始,模式也可以是特殊的字符串保留.reserved表示文件将被赋予与源文件相同的权限。 |
|
owner | null | 文件/目录所属用户名,将会提供给chown使用 |
remote_src | no | 如果不是,它将在来源/master上搜索src。如果是,它将转到src的远程/目标机器。 默认为否。目前remote_src不支持递归复制。remote_src仅适用于版本2.6的mode = preserve。 |
selevel | s0 | SELinux文件上下文的级别部分。 这是MLS / MCS属性,有时称为range。 _default功能与seuser功能相同。 |
serole | null | SELinux文件上下文的角色部分。_default功能与seuser功能相同。 |
setype | null | SELinux文件上下文的类型部分。_default功能与seuser功能相同。 |
seuser | null | SELinux文件上下文的用户部分。将默认系统策略,如果适用。如果设置为_default,它将使用策略的user部分(如果可用)。 |
src | null | 要复制到远程服务器的文件的本地路径; 可以是绝对的或相对的。 如果path是目录,则以递归方式复制它。 在这种情况下,如果路径以“/”结尾,则只将该目录的内部内容复制到目标。 否则,如果它不以“/”结尾,则复制具有所有内容的目录本身。 此行为类似于Rsync。 |
unsafe_writes | no | 通常,此模块使用原子操作来防止数据损坏或来自目标文件的不一致读取,有时系统配置或仅以阻止此操作的方式中断。 一个例子是docker挂载的文件,它们不能以原子方式更新,只能以不安全的方式完成。这个布尔选项允许ansible回退到不安全的更新文件的方法,用于那些你没有任何其他选择的情况。 请注意,这受竞争条件的影响,并可能导致数据损坏。 |
validate | null | 要在复制到位之前运行的验证命令。 要验证的文件的路径是通过'%s'传递的,这必须在下面的例子中显示。 该命令是安全传递的,因此扩展和管道等shell功能将无法正常工作。 |
注意
- [copy]模块递归复制大量规模(超过数百个)文件,不会很方便。作为替代品,我们可以使用封装了rsync的[synchronize]模块。
- 对于windows主机,使用[win_copy]代替。
例子
ad-hoc
指定预期的校验值
ansible localhost -m copy -a "src=1.py dest=/tmp/ checksum=bbe26b84e40cfb01ac6f1395260b55afedf641b7"
复制内容到目标服务器
ansible localhost -m copy -a 'content="this is test text." dest=/tmp/test.txt'
playbook
复制文件(指定权限、用户、组)
- name: example copying file with owner and permissions
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: 0644
复制文件,如果不一样则先备份后复制
- name: Copy a new "ntp.conf file into place, backing up the original if it differs from the copied version
copy:
src: /mine/ntp.conf
dest: /etc/ntp.conf
owner: root
group: root
mode: 0644
backup: yes
在安全验证之后,复制文件
- name: Copy a new "sudoers" file into place, after passing validation with visudo
copy:
src: /mine/sudoers
dest: /etc/sudoers
validate: /usr/sbin/visudo -cf %s
在安全验证之后,源文件来自目标服务器,复制文件。
- name: Copy a "sudoers" file on the remote machine for editing
copy:
src: /etc/sudoers
dest: /etc/sudoers.edit
remote_src: yes
validate: /usr/sbin/visudo -cf %s
复制内容到目标服务器,如果有内容会覆盖
- name: Copy using the 'content' for inline data
copy:
content: '# This file was moved to /etc/other.conf'
dest: /etc/mine.conf'
模块:template
概要
template模块是用来处理jinja语法的。6个额外的变量可以在template使用。
变量 | 注释 |
---|---|
ansible_managed | 包含了一个字符串,可以用于描述模板名称、主机、模板文件修改时间以及所有者的uid,可以通过ansible.cfg里面的default配置 |
template_host | 包含了模板机器的节点名称 |
template_uid | 所有者的数字用户ID |
template_path | 模板路径 |
template_fullpath | 模板绝对路径 |
template_run_date | 模板呈现的日期。 |
参数
参数(*必选) | 默认值 | 注释 |
---|---|---|
attributes | null | 文件或目录应具有的属性。 要获得支持的标志,请查看目标系统上chattr 的手册页。 该字符串应包含与lsattr 显示的属性顺序相同的属性。 |
backup | no | 创建一个包含时间戳信息的备份文件,如果你以某种方式错误地破坏了原始文件,就可以将其恢复原状。 |
block_end_string | %} | 标记块结尾的字符串。 |
block_start_string | {% | 标记块起始的字符串。 |
* dest | 在远程计算机上呈现模板的位置。 | |
follow | no | 此标志表示如果存在应遵循目标中的文件系统链接。在Ansible 2.4版本以前为yes
|
force | yes | 默认值为yes,当内容与源不同时,将替换远程文件。 如果不是,则仅在目标不存在时才传输文件。 |
group | null | 文件/目录所属组名,将会提供给chown使用 |
lstrip_blocks | no | 如果将此设置为True,则前置空格和制表符将从行首开始删除到块。将此选项设置为True需要Jinja2版本> = 2.7。 |
mode | null | 设置文件或目录权限。 对于习惯于/usr/bin/chmod 的人来说,实际上是八进制数。 你必须指定首位为零,以便Ansible的YAML解析器知道它是一个八进制数(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一个字符串并可以自己从字符串转换,在没有遵循这些规则之一的情况下给Ansible一个数字将得到一个十进制数,这将产生意想不到的结果。从版本1.8开始,模式可以指定为符号模式(例如,u + rwx或u = rw ,g = r,o = r)。从版本2.3开始,模式也可以是特殊的字符串保留.reserved表示文件将被赋予与源文件相同的权限。 |
newline_sequence | \n | 指定用于模板文件的换行符。可选:\n 、\r 、 \r\n
|
own | null | 文件/目录所属用户名,将会提供给chown使用 |
selevel | s0 | SELinux文件上下文的级别部分。 这是MLS / MCS属性,有时称为range。 _default功能与seuser功能相同。 |
serole | null | SELinux文件上下文的角色部分。_default功能与seuser功能相同。 |
setype | null | SELinux文件上下文的类型部分。_default功能与seuser功能相同。 |
seuser | null | SELinux文件上下文的用户部分。将默认系统策略,如果适用。如果设置为_default,它将使用策略的user部分(如果可用)。 |
* src | Ansible控制节点上Jinja2格式化模板的路径。可以是绝对路径或者相对路径。 | |
trim_blocks | yes | 如果将其设置为True,则删除块后的第一个换行符(块,而不是变量标签!)。 |
unsafe_writes | no | 通常,此模块使用原子操作来防止数据损坏或来自目标文件的不一致读取,有时系统配置或仅以阻止此操作的方式中断。 一个例子是docker挂载的文件,它们不能以原子方式更新,只能以不安全的方式完成。这个布尔选项允许ansible回退到不安全的更新文件的方法,用于那些你没有任何其他选择的情况。 请注意,这受竞争条件的影响,并可能导致数据损坏。 |
validate | null | 要在复制到位之前运行的验证命令。 要验证的文件的路径是通过'%s'传递的,这必须在下面的例子中显示。 该命令是安全传递的,因此扩展和管道等shell功能将无法正常工作。 |
variable_end_string | }} | 标记打印语句末尾的字符串。 |
variable_start_string | {{ | 标记打印语句起始的字符串。 |
例子
ansible playbook
- template:
src: /mytemplates/foo.j2
dest: /etc/file.conf
owner: bin
group: wheel
mode: 0644
symbolic模式的ansible playbook
- template:
src: /mytemplates/foo.j2
dest: /etc/file.conf
owner: bin
group: wheel
mode: "u=rw,g=r,o=r"
从template创建ini格式文件
- template:
src: config.ini.j2
dest: /share/windows/config.ini
newline_sequence: '\r\n'
sshd配置安全升级,避免自己锁定退出
- template:
src: etc/ssh/sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: '0600'
validate: /usr/sbin/sshd -t -f %s
backup: yes