Puppet,使用 augeas 更改多个属性文件

bio*_*ark 2 puppet augeas

我经常使用 puppet 和 augeas 工具来配置属性文件。我的最新要求是对相当长的属性文件列表应用相同的固定更改集。所以,我想一次性完成,而不是为每个属性文件编写一个augeas。

例子:

  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "$path/file1.properties", 
    changes => $change_set,
  }
  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "$path/file2.properties", 
    changes => $change_set,
  }
etc...
Run Code Online (Sandbox Code Playgroud)

我想使用:

  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "[list of files to change], 
    changes => $change_set,
  }
Run Code Online (Sandbox Code Playgroud)

但这是不可能的,因为 augeas 需要预加载文件。

因为我使用的是 puppet 3.8,所以我不能使用foreach类型的循环。我看到在 puppet 4 中你可以声明一个文件列表,然后循环它们并做你的事情。这很酷……但在 puppet 3 中不起作用。

那么,我有没有其他解决方案然后多次复制/粘贴相同的代码?

干杯。

rap*_*ink 5

实现这一目标的最佳选择是创建一个定义的资源类型:

define customized::filetype ($change_set) {
 augeas { "customized filetype ${title}":
    lens    => 'a_customized_lens',
    incl    => $name, 
    changes => $change_set,
  }
}
Run Code Online (Sandbox Code Playgroud)

然后将其与标题中的数组一起使用:

customized::filetype { [
  "$path/file1.properties",
  "$path/file2.properties"
  ]:
  change_set => $change_set,
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以(我建议这样做)将更改集抽象为定义的资源类型中的键/值参数。例如:

define customized::filetype ($key, $value) {
 augeas { "customized filetype ${title}":
    lens    => 'a_customized_lens',
    incl    => $name, 
    changes => "set ${key} ${value}",
  }
}
Run Code Online (Sandbox Code Playgroud)