ansible常用模块之 -- lineinfile模块 – 管理文本文件中的行

ansible常用模块之 -- lineinfile模块 – 管理文本文件中的行

lineinfile模块 – 管理文本文件中的行

一、摘要

  • 该模块确保特定的行在文件中,或者使用反向引用的正则表达式替换现有的行。
  • 当您只想更改文件中的一行时,这是主要有用的。
  • 如果您想更改多个相似的行,请参阅replace模块;如果您想插入/更新/删除文件中的一行块,请检查blockinfile。其他情况,请参见 copy 或 template 模块。

二、参数

参数选项/默认值描述
attributes
string
生成的文件或目录应该具有的属性。
要获得支持的标志,请查看目标系统上的chatr手册页。
该字符串应该包含与lsattr显示的相同顺序的属性。
= 操作符为默认值,否则需要在字符串中包含 + 或 - 操作符。
backrefs
boolean
· no ←
· yes
和 state=present 一起使用。
如果设置了,line可以包含反向引用(位置引用和命名引用),如果regexp匹配,则填充这些引用。
这个参数会略微改变模块的操作;Insertbefore和insertafter将被忽略,如果regexp在文件中的任何地方都不匹配,则该文件将保持不变。
如果regexp匹配,最后一个匹配行将被展开的行参数替换。
backup
boolean
· no ←
· yes
创建一个包含时间戳信息的备份文件,以便在不正确地损坏原始文件时可以恢复原始文件。
create
boolean
· no ←
· yes
和 state=present 一起使用。
如果指定了,如果文件不存在,则将创建该文件。
默认情况下,如果文件丢失,它将失败。
firstmatch
boolean
· no ←
· yes
和 insertafter 或者 insertbefore 一起使用。
如果设置,insertafter和insertbefore将处理匹配给定正则表达式的第一行。
group
string
应该拥有该文件/目录的组的名称,将提供给chown。
insertafter
string
· EOF ←
· *regex*
和 state=present 一起使用。
如果指定了,该行将在指定正则表达式的最后一次匹配之后插入。如果需要第一个匹配,则使用(firstmatch=yes)。
一个特殊值是可用的;EOF 用于在文件末尾插入行。
如果指定的正则表达式没有匹配项,则将使用EOF代替。
如果insertbefore被设置,默认值EOF将被忽略。
如果正则表达式同时传递给regexp和insertafter,则只有在没有找到与regexp匹配的情况下才执行insertafter。
不能与 backrefs 或 insertbefore 一起使用。
insertbefore
string
· BOF ←
· *regex*
和 state=present 一起使用。
如果指定了,则该行将插入到指定正则表达式的最后一次匹配之前。如果需要第一个匹配,则使用firstmatch=yes。
值是可用的; BOF 用于在文件的开头插入行。
如果指定的正则表达式没有匹配项,则将在文件末尾插入该行。
如果正则表达式同时传递给regexp和insertbefore,则只有在没有找到与regexp匹配的情况下才执行insertbefore。
不能与 backrefs 或 insertafter 一起使用。
line
string
要插入/替换到文件中的行。
要求设置 state=present
如果设置了反向引用,则可能包含反向引用,如果regexp匹配,则使用regexp捕获组展开这些引用。
mode
string
生成的文件或目录应该具有的权限。
对于那些习惯了/usr/bin/chmod的人来说,记住模式实际上是八进制数。你必须添加一个前导零,这样Ansible的YAML解析器就知道这是一个八进制数(比如0644或01777),或者引用它(比如’644’或’1777’),这样Ansible就可以接收到一个字符串,并可以进行自己的从字符串到数字的转换。
给Ansible一个不遵循这些规则的数字将会得到一个十进制数,这将会产生意想不到的结果。
从Ansible 1.8开始,模式可以指定为符号模式(例如,u+rwx或u=rw,g=r,o=r)。
others
string
文件模块接受的所有参数在这里也适用。
owner
string
应该拥有该文件/目录的用户名,将提供给chown。
path
path
required
要修改的文件。
regexp
string
要在文件的每一行中查找的正则表达式。
对于state=present,如果找到要替换的模式。只有找到的最后一行将被替换。
如果state=absent,则删除行。
如果正则表达式不匹配,该行将根据insertbefore或insertafter设置添加到文件中。
在修改一行时,regexp通常应该匹配该行的初始状态以及被行替换后的状态,以确保幂等性。
使用Python正则表达式。见http://docs.python.org/2/library/re.html。
selevel
string
Default:“s0”SELinux文件上下文的 level 部分。
这是MLS/MCS属性,有时称为范围。
当设置为_default时,它将使用策略的级别部分(如果可用的话)。
serole
string
SELinux文件上下文的角色部分。
当设置为_default时,它将使用策略的角色部分(如果可用的话)。
setype
string
SELinux文件上下文的类型部分。
当设置为_default时,它将使用策略的类型部分(如果可用的话)。
seuser
string
SELinux文件上下文的用户部分。
默认情况下,它使用系统策略。
当设置为_default时,它将使用策略的用户部分(如果可用的话)。
state
string
· present ←
· absent
这行是否应该存在。
unsafe_writes
boolean
· no ←
· yes
影响何时使用原子操作以防止数据损坏或从目标文件读取不一致。
默认情况下,该模块使用原子操作来防止数据损坏或从目标文件读取不一致,但有时系统的配置或破坏会防止这种情况发生。一个例子是docker装载的文件,它不能从容器内部原子地更新,只能以不安全的方式写入。
这个选项允许Ansible在原子操作失败时使用不安全的方法更新文件(然而,它并不强制Ansible执行不安全的写操作)。
重要!不安全的写操作会受到竞争条件的影响,并可能导致数据损坏。
validate
string
复制到位之前要运行的验证命令。
要验证的文件的路径是通过’%s’传入的,它必须像下面的示例中一样显示。
该命令是安全传递的,因此shell功能如扩展和管道将不起作用。

三、示例

# 确保SELinux设置为强制模式
- name: Ensure SELinux is set to enforcing mode
  lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=enforcing

# 确保wheel组不在sudoers配置中
- name: Make sure group wheel is not in the sudoers configuration
  lineinfile:
    path: /etc/sudoers
    state: absent
    regexp: '^%wheel'

# 用我们自己的条目替换本地主机条目
- name: Replace a localhost entry with our own
  lineinfile:
    path: /etc/hosts
    regexp: '^127\.0\.0\.1'
    line: 127.0.0.1 localhost
    owner: root
    group: root
    mode: '0644'

# 请确保Apache默认端口号为8080
- name: Ensure the default Apache port is 8080
  lineinfile:
    path: /etc/httpd/conf/httpd.conf
    regexp: '^Listen '
    insertafter: '^#Listen '
    line: Listen 8080

# 确保我们在/etc/services中添加了自己的注释
- name: Ensure we have our own comment added to /etc/services
  lineinfile:
    path: /etc/services
    regexp: '^# port for http'
    insertbefore: '^www.*80/tcp'
    line: '# port for http by default'

# 如果文件不存在,则向该文件添加一行,而不传递regexp
- name: Add a line to a file if the file does not exist, without passing regexp
  lineinfile:
    path: /tmp/testfile
    line: 192.168.1.99 foo.lab.net foo
    create: yes

# Yaml要求在双引号中转义反斜杠,而不是在单引号中转义
# 确保JBoss内存设置完全符合所需
- name: Ensure the JBoss memory settings are exactly as needed
  lineinfile:
    path: /opt/jboss-as/bin/standalone.conf
    regexp: '^(.*)Xms(\\d+)m(.*)$'
    line: '\1Xms${xms}m\3'
    backrefs: yes

# 完全引用是因为行中有“:”。请参阅YAML文档中的Gotchas。
# 在保存之前验证sudoers文件
- name: Validate the sudoers file before saving
  lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%ADMIN ALL='
    line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
    validate: /usr/sbin/visudo -cf %s

官方文档:https://docs.ansible.com/ansible/2.9/modules/lineinfile_module.html#lineinfile-module

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值