Ansible - 将单词添加到该行的特定部分的特定行

Ansible - 将单词添加到该行的特定部分的特定行

我想将单词“nodev”添加到 /etc/fstab 文件中包含 /home 的行,
这是之前的文件

UUID=2ea6e2e5-d902-4289-b516-40c175cd481b /                       ext3    defaults        1 1
UUID=114107f7-5b48-44b7-ad38-09b47b1d6b02 /boot                   ext3    defaults        1 2
UUID=830757d1-60ad-4f4a-b41a-cad04d309e9d /home                   ext3    defaults        1 2
UUID=4b309559-2391-4f28-b2f5-38029e278db0 /tmp                    ext3    defaults        1 2
UUID=1dfc4cab-4de4-491f-8bd0-3503e9027717 /var                    xfs     defaults        0 0
UUID=f0846773-528b-42a2-a0dc-7a736595f7e1 /var/log                xfs     defaults        0 0
UUID=25ef70f1-7083-4a9b-a64c-970f5d4ad742 /var/log/audit          xfs     defaults        0 0
UUID=40d2f177-aa5c-43a1-9d85-e21bf2bafb39 swap                    swap    defaults        0 0

这就是我想要的

UUID=2ea6e2e5-d902-4289-b516-40c175cd481b /                       ext3    defaults        1 1
UUID=114107f7-5b48-44b7-ad38-09b47b1d6b02 /boot                   ext3    defaults        1 2
UUID=830757d1-60ad-4f4a-b41a-cad04d309e9d /home                   ext3    defaults,nodev        1 2
UUID=4b309559-2391-4f28-b2f5-38029e278db0 /tmp                    ext3    defaults        1 2
UUID=1dfc4cab-4de4-491f-8bd0-3503e9027717 /var                    xfs     defaults        0 0
UUID=f0846773-528b-42a2-a0dc-7a736595f7e1 /var/log                xfs     defaults        0 0
UUID=25ef70f1-7083-4a9b-a64c-970f5d4ad742 /var/log/audit          xfs     defaults        0 0
UUID=40d2f177-aa5c-43a1-9d85-e21bf2bafb39 swap                    swap    defaults        0 0

我如何使用 ansible 和 lineinfile 模块来做到这一点?

答案1

这可以用 来完成lineinfile,也许,假设文件的格式没有改变,并且defaults是为了限制匹配,之后nodev可以添加选项和行的其余部分:

- hosts: localhost
  tasks:
    - lineinfile:
        path: /tmp/fstab
        regexp: '^(\S+\s+/home\s+\S+\s+defaults)'
        line: '\1,nodev 1 2'
        backrefs: yes

经测试:

$ ansible-playbook lineinfile.yml
$ diff /tmp/fstab.orig /tmp/fstab

虽然对于挂载点有安装模块这可能比 的正则表达式解析更脆弱fstab。另一方面,正则表达式不会关心 UUID 是什么,而mount模块条目可能需要特定的东西,这些东西可能因主机而异。可能需要使用额外的规则或脚本来测试是否设置了适当的文件系统设备,以捕获正则表达式失败的低但不为零的可能性。

相关内容