如何在 conf 文件中没有 header 部分的情况下更新 Puppet ini_setting 或 ini_subsetting 资源?

How to update Puppet ini_setting or ini_subsetting resource without section header in conf file?

我想知道是否有人可以帮助我解决我的 conf 文件问题。我需要获得如下所示的输出,但在使用 inifile 时遇到问题。我把我的代码和测试输出放在下面。由于“[]”,我的服务无法启动。非常感谢您的意见和想法。谢谢!

预期输出

cat /etc/service.conf
info something something...
without section header
setting1=value1

测试

testscript1.pp

ini_setting {'setx':
ensure  => present,
  path    => '/etc/service.conf',
  key_val_separator => '=',
  setting => 'setting1',
  value   => 'value1',
}

testscript1.pp

的输出
cat /etc/service.conf
info something something...
[setx]
setting1=value1

testscript2.pp

$defaults = {
      ensure  => present,
      path    => '/etc/service.conf',
      key_val_separator => '=',
}
$settings = {
      ' ' => {
        'setting1' => 'value1',
      }
    }
create_ini_settings($settings,$defaults)

testscript2.pp

的输出
cat /etc/service.conf
info something something...
[ ]
setting1=value1

由于我真的很想删除 [] 字符,因为它在服务重启期间会导致错误,所以我使用了 section_prefix => '#',。第一个傀儡代理 运行 运行顺利。现在的问题是,如果 Puppet 代理 运行 的频率时间(比如每小时),由于缺少部分 header,它会在 conf 文件中 auto-append 详细信息。我决定使用 ini_subsetting 但我遇到了错误。

testscript3.pp

ini_subsetting {'subset':
      ensure            => present,
      section           => '',
      key_val_separator => '=',
      path              => '/etc/service.conf',
      setting           => 'setting1',
      subsetting        => '',
      value             => 'value1',
    }

testscript3.pp

的输出
Error: Failed to apply catalog: Parameter path failed on Ini_subsetting[subset]: File paths must be fully qualified, not '/etc/service.conf'.

非常感谢任何建议或建议。

谢谢。

你试过 testscript1.ppsection => '' 了吗?

看起来像这样:

ini_setting {'setx':
  ensure            => present,
  path              => '/etc/service.conf',
  key_val_separator => '=',
  section           => '',
  setting           => 'setting1',
  value             => 'value1',
}

输出将是:

cat /etc/service.conf
info something something...
setting1=value1

或者您可以尝试使用 force_new_section_creation => false,因为它在默认情况下是正确的,并且会强制创建一个部分,如模块的 reference.

中所述

至于您的第 3 个示例,它可能因空白 subsetting 参数而失败。 ini_subsetting 资源类型需要 settingsubsetting 参数才能工作。

如果您正在管理的文件没有某种节标记,那么它就不是 INI 文件,即使在 puppetlabs/inifile 模块支持的广义意义上也是如此。据我所知,您需要选择不同的方法来管理文件。

您可以考虑对整个文件进行模板化,或者为其编写自定义类型和提供程序,但在遇到这么多麻烦之前,您应该考虑是否有来自 puppetlabs/stdlib 的旧 file_line 资源足以满足您的需求。