file - 将源文件的内容附加到目标文件

标签 file ansible

我需要扫描/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/

相关文章:

ansible - 在ansible中将组的交集指定为group_vars文件

iOS:如何将音频文件读入 float 缓冲区

java - 即使文件存在于机器中,也无法使用 Android 访问本地机器上的文件

ansible - 如何将 Ansible 的 with_item 与变量一起使用?

docker - 使用 Ansible 安装 Docker

amazon-web-services - 具有两个角色的剧本 : running role B complains with role A's code which successfully ran

java - 文件未保存到目录中

ios - Realm.io 删除 Realm 文件

html - 验证失败后恢复输入类型=文件的值

json - Ansible : pass a variable in a json_query filter