首页 > 解决方案 > 在厨师食谱的特定位置添加行

问题描述

我有/etc/csync/csync2.cfg一个格式如下的配置文件,

group ha_group
{
        key /etc/csync2/key_hagroup;
        host host1;
        host host2;
        include /etc/booth;
        include /etc/corosync/corosync.conf;
        include /etc/corosync/authkey;
}

我想弄清楚是否存在条目(例如include /var/tsm/tsm/tsm.conf;)。如果是,什么都不做,如果不是,添加它。

我在厨师超市检查了平衡文件和线路食谱。这些食谱中提供的操作的问题是,如果该条目不存在,它们会将其添加到文件的末尾。

我的用例要求将其添加到大括号中{},而不是文件末尾。我无法模板文件,因为内容/etc/csync/csync2.cfg可能因节点而异。

另一种选择是检查 csync2 命令行是否有任何选项来添加新条目https://github.com/LINBIT/csync2/blob/master/doc/csync2.adoc 以避免在配方中处理

标签: chef-infrachef-recipe

解决方案


您可以使用FileEdit解决它,方法是另外删除该}行并将其插入到最后。

file = Chef::Util::FileEdit.new("/etc/hosts")
file.insert_line_if_no_match("/www.example.com/", "www.example.com")
file.search_file_delete_line('}')
file.insert_line_if_no_match('}') 
file.write_file

推荐阅读