首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用厨师配方修改配置文件中的一行

使用厨师配方修改配置文件中的一行
EN

Stack Overflow用户
提问于 2015-04-29 22:28:52
回答 4查看 3.5K关注 0票数 4

我正试图使用主厨配方自动禁用MongoDB的透明大页面设置。

这里解释了THP设置:MongoDocs THP设置

我试图通过编辑grub配置文件"/etc/grub.conf“来遵循第一个选项"In Boot-Time配置(首选)”。

我所需要做的就是将"transparent_hugepage=never“添加到以”内核“开头的现有行的末尾。

我知道我可以用厨师::Util::FileEdit替换一行,使用如下所示:

代码语言:javascript
复制
ruby_block "replace_line" do
  block do
    file = Chef::Util::FileEdit.new("/etc/grub.conf")
    file.search_file_replace_line("/kernel/", "kernel <kernel path> <kernel options> transparent_hugepage=never")
    file.write_file
  end
end

但是我需要保留现有的内核路径和内核选项。

我尝试过使用厨师::Util:编辑,但是没有成功地初始化构造函数。厨师::Util::FileEdit是用文件路径初始化的(如上面所示),但是ruby文档说Chef::Util::Editor是用“line”初始化的。我试过了

代码语言:javascript
复制
lines = Chef::Util::Editor.new(<lines>) 

其中<lines> =文件路径、= Chef::Util::FileEdit.new()和= 'test string',但似乎什么都不起作用。

有没有人有过厨师::Util::编者的经验?还是一个更好的解决方案?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-15 16:56:47

我从来不知道如何使用Chef修改配置文件中的一行,但下面是我最后用于禁用MongoDB设置的菜谱。

配方:安装MongoDB

代码语言:javascript
复制
# Install MongoDB on Amazon Linux
# http://docs.mongodb.org/manual/tutorial/install-mongodb-on-amazon/

# 1: configure the package management system (yum)

# 2: install mongodb

# 3: configure mongodb settings

# 3.A: give mongod permission to files
# data & log directories (everything in /srv/mongodb)
# http://stackoverflow.com/questions/7948789/mongodb-mongod-complains-that-there-is-no-data-db-folder
execute "mongod_permission" do
    command "sudo chown -R mongod:mongod /srv/mongodb"
    #command "sudo chown mongod:mongod /var/run/mongodb/mongod.pid"
    #command "sudo chown -R $USER /srv/mongodb"
end

# 3.B: edit Transparent Huge Pages (THP) Settings
# get rid of mongod startup warning
# http://docs.mongodb.org/manual/reference/transparent-huge-pages/#transparent-huge-pages-thp-settings

# 3.B.1: disable
execute "disable_thp_khugepaged_defrag" do
    command "echo 0 | sudo tee /sys/kernel/mm/transparent_hugepage/khugepaged/defrag" # different b/c file doesn't have options list
end
execute "disable_thp_hugepage_defrag" do
    command "echo 'never > /sys/kernel/mm/transparent_hugepage/defrag' | sudo tee --append /sys/kernel/mm/transparent_hugepage/defrag"
end
execute "disable_thp_hugepage_enables" do
    command "echo 'never > /sys/kernel/mm/transparent_hugepage/enabled' | sudo tee --append /sys/kernel/mm/transparent_hugepage/enabled"
end

# 3.B.2: verify disabled on reboot
template "/etc/rc.local" do
    source "init-rc.local.erb"
    owner 'root'
    group 'root'
    mode '0775'
end

# 4: use upstart & monit to keep mongod alive

模板: init-rc.local.erb

代码语言:javascript
复制
touch /var/lock/subsys/local

if test -f /sys/kernel/mm/transparent_hugepage/khugepaged/defrag; then
  echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
票数 0
EN

Stack Overflow用户

发布于 2015-12-11 13:39:58

您自己的解决方案的问题是,模板可以用它自己的rc.local模板被另一个菜谱覆盖。

为了改变这一点,我将行添加到现有的rc.local中。

代码语言:javascript
复制
execute "disable_thp_hugepage_defrag" do
    command "sudo sed -i -e '$i \\echo never > /sys/kernel/mm/transparent_hugepage/defrag\\n' /etc/rc.local"
    not_if 'grep -c "transparent_hugepage/defrag" /etc/rc.local'
end
execute "disable_thp_hugepage_enables" do
    command "sudo sed -i -e '$i \\echo never > /sys/kernel/mm/transparent_hugepage/enabled\\n' /etc/rc.local"
    not_if 'grep -c "transparent_hugepage/enabled" /etc/rc.local'
end

grep确保行不在其中。

也许厨师有更好的办法来解决这个问题?

票数 0
EN

Stack Overflow用户

发布于 2015-12-29 21:26:13

通过对元素进行分组,可以有效地替换文件的内容。

例如,将"transparent_hugepage=never“添加到以”内核“开头的现有行的末尾

代码语言:javascript
复制
ruby_block "replace_line" do
  block do
    file = Chef::Util::FileEdit.new("/etc/grub.conf")
    file.search_file_replace_line(/kernel.*/, '\0 tansparent_hugepage=never')
    file.write_file
  end
end

\0添加整个机加工字符串

注:“”(单引号)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29955695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档