我想/etc/default/grub
用 puppet 把一行改成这样:
GRUB_CMDLINE_LINUX="cgroup_enable=memory"
我尝试使用似乎可以做到这一点的 augeas:
exec { "update_grub":
command => "update-grub",
refreshonly => true,
}
augeas { "grub-serial":
context => "/files/etc/default/grub",
changes => [
"set /files/etc/default/grub/GRUB_CMDLINE_LINUX[last()] cgroup_enable=memory",
],
notify => Exec['update_grub'],
}
它似乎有效,但结果字符串不在引号中,而且我想确保任何其他值都将用空格分隔。
GRUB_CMDLINE_LINUX=cgroup_enable=memory
是否有一些机制如何附加值并转义整个事情?
GRUB_CMDLINE_LINUX="quiet splash cgroup_enable=memory"
对于引用部分,您可以使用
augeasproviders
'shellvar
提供者并强制引用样式:这将在代理上使用 Augeas internaly(作为 Ruby 库),只是以更智能的方式。
至于附加到现有值,有两种选择:
augeasfacter
用于检索它),在清单中分析它并使用shellvar
类型附加到它;shellvar
提供程序,使其附加到值而不是替换它。第一个选项
事实
以下文件可以分布在您的模块中,
${modulepath}/${modulename}/lib/facter/grub_cmdline_linux.rb
并使用pluginsync
.这会将事实的当前值作为字符串返回,并删除该值周围的引号。它需要代理上的 Augeas Ruby 库,如果您已经使用该
augeas
类型,我想您已经拥有了。傀儡代码
下一步是使用此值来检查您的目标值是否包含在内。您可以拆分字符串并为此使用
stlib
模块函数:运行
检查幂等性:
第二种选择
如果您想尝试第二个选项,最好的方法可能是发送一个(不错的)PR 到
augeasproviders
'sshellvar
类型添加一个array_append
参数(或更好的名称):此参数会将值视为数组,如果尚未找到该值,则附加到现有值。这需要 Ruby 编码,但在许多其他情况下可以重用;-)
提示:这应该发生在这里。
(仅适用于 ubuntu 用户)
因为改变 /etc/default/grub 不是很好..
只需部署 /etc/default/grub.d/memory.cfg
GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX cgroup_enable=memory"
然后更新-grub
(请参阅 /etc/default/grub.d/*.cfg 功能)