chef-infra - 在厨师食谱的特定位置添加行
问题描述
我有/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 以避免在配方中处理
解决方案
您可以使用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
推荐阅读
- c - HackerRank 上的对角线差
- sql - 引用表中没有主键或候选键
- python-3.x - 如何在 pytorch 中将模型中的每个参数的 require_grad 更改为 false?
- jackson - 以 CBOR 格式解码 VALUE_EMBEDDED_OBJECT 令牌类型
- python - 获取 numpy genfromtxt 的常量“(得到 12 列而不是 11 列)”错误。我已经尝试过其他帖子的解决方案,但没有一个有效
- json - 方法“加载”不起作用引导表
- vba - 无法设置 PageSetup 的特定属性
- javascript - 在 Javascript 中将对象作为参数传递 - 但不仅仅是一个参数,而是一个由变量构建的参数
- javascript - 通过jQuery禁用和启用按钮但启用按钮后未触发onclick事件
- python - Python selenium 脚本无法点击某些链接