我需要扫描/etc/fstab
一个条目的文件,如果它不存在,则将另一个文件的内容附加到 /etc/fstab
.
我见过的 Ansible 模块似乎不允许将文件附加到另一个文件,而只是添加特定的“文本”行。
最佳答案
lineinfile如果您的用例只是检查是否存在特定行,则可以使用模块。
例如,如果您想确保有 /dev/sdb1
已定义分区并映射到 /data
并使用 ext4 文件系统,然后您可以使用:
lineinfile: dest=/etc/fstab regexp="^/dev/sdb1 " line="/dev/sdb1 /data ext4 defaults 1 2"
如果没有以
/dev/sdb1
开头的行然后它将它添加到文件的末尾。有帮助的是,如果该行的其余部分不匹配(例如,如果它安装为 ext3
),那么它将更改为提供的行。如果你真的需要它来使用文件的全部内容,那么你可以使用 file lookup这可能看起来像:
lineinfile: dest=/etc/fstab regexp="^/dev/sdb1 " line="{{ lookup('file', 'files/fstabdata') }}"
我还没有测试过。
如果您的用例是安装磁盘,那么您可以考虑使用 mount模块可以更好地处理事情。
如果你真的被卡住了,那么你总是可以用类似的东西来解决:
-name: Check for line in /etc/fstab
command: grep /dev/sdb1
changed_when: False
register: shell_out
-name: Append to /etc/fstab
command: cat /home/ansible/files/fstabdata >> /etc/fstab
when: shell_out.std_out != ''
但总的来说,在使用 Ansible 之前,您应该始终考虑使用提供的模块,然后再进行炮击。
关于file - 将源文件的内容附加到目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127360/