我发现很难相信没有任何内容可以涵盖这个用例,但我的搜索结果证明没有结果。
我在/etc/fstab
中有一条线来装载一个不再可用的驱动器:
//archive/Pipeline /pipeline/Archives cifs ro,credentials=/home/username/.config/cifs 0 0
我想要的是将其改为
#//archive/Pipeline /pipeline/Archives cifs ro,credentials=/home/username/.config/cifs 0 0
我正在使用这个
---
- hosts: slurm
remote_user: root
tasks:
- name: Comment out pipeline archive in fstab
lineinfile:
dest: /etc/fstab
regexp: '^//archive/pipeline'
line: '#//archive/pipeline'
state: present
tags: update-fstab
期待它只是插入注释符号(#),而是替换整行,我最终用
#//archive/Pipeline
有没有办法全局捕获行的其余部分或只插入单个注释char?
regexp: '^//archive/pipeline *'
line: '#//archive/pipeline *'
或
regexp: '^//archive/pipeline *'
line: '#//archive/pipeline $1'
我正试图将我的脑袋包裹在lineinfile中,并且从我读过的内容看起来像insertafter是我正在寻找的,但是"插入"不是我想要的吗?
答案 0 :(得分:18)
您可以在案例中使用replace
模块:
---
- hosts: slurm
remote_user: root
tasks:
- name: Comment out pipeline archive in fstab
replace:
dest: /etc/fstab
regexp: '^//archive/pipeline'
replace: '#//archive/pipeline'
tags: update-fstab
它将替换匹配regexp
的所有字符串。
lineinfile
仅适用于一行(即使在文件中找到多个匹配)。它确保特定行不存在或与定义的内容一起出现。
答案 1 :(得分:13)
使用backrefs=yes:
与state = present一起使用。如果设置,则行可以包含后向引用(位置和命名),如果正则表达式匹配,将会填充这些引用。
像这样:
- name: Comment out pipeline archive in fstab
lineinfile:
dest: /etc/fstab
regexp: '(?i)^(//archive/pipeline.*)'
line: '# \1'
backrefs: yes
state: present
另请注意,我对regexp使用(?i)
选项,因为在示例fstab中,搜索表达式永远不会与Pipeline
匹配大写字母P.
答案 2 :(得分:2)
这是- name: Remove the pipeline archive
mount: name="/archive/pipeline" state=absent
是反模式的众多原因之一。在许多情况下,模板是最佳解决方案。在这种情况下,mount
模块就是为此而设计的。
mavenCentral()
}
但是“啊!”你说,你“想要保持那座山一次在fstab”。您使用{{1}}做了一个更好的事情,您已将其保留在 in ansible 。