03-常用模块(一)-文件操作模块

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 要管理的文件的路径。 别名:destname
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=linkstate=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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容