Puppet - 完全删除 ini_setting

Puppet - remove ini_setting completely

我使用的是 Puppet 4.5.3 和 ini_setting 模块版本 1.4.2。我需要能够删除 ini 文件中的节。例如:

[header]
ip = '1.1.1.1'
hostname = 'myserver'
port = 80

我可以使用 ensure => absent 参数删除 ini 文件的每个部分,但我找不到删除节 header 的方法,或者最好是在一个命令中删除整个内容。

我剩下的是

[header]

有谁知道如何做到这一点?不幸的是,我需要保留同一文件中的其他节,所以我不能简单地删除该文件。

谢谢,

使用 Augeas 类型:

augeas { 'remove_ini_header':
  incl    => '/etc/example.ini',
  lens    => 'IniFile.lns_loose',
  changes => 'rm section[. = "header"]',
}

为了稍微分解一下,首先我使用了 built-in IniFile.lns_loose 镜头(即 "generic" INI 文件的松散解析)和 augtool 来查看树的当前状态:

$ augtool -t "IniFile.lns_loose incl /etc/example.ini"
augtool> print /files/etc/example.ini
/files/etc/example.ini
/files/etc/example.ini/section = "header"
/files/etc/example.ini/section/ip = "'1.1.1.1'"
/files/etc/example.ini/section/hostname = "'myserver'"
/files/etc/example.ini/section/port = "80"

整个部分在树的一部分中,因此为该部分调用 rm 将删除整个子树。

要匹配 header 部分,您需要搜索名为 section 的节点,其中值(右侧)为 header。命令的 [. = "header"] 部分是一个 path expression,用于过滤值为 header.

的节点