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

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...

我想使用:

  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "[list of files to change], 
    changes => $change_set,
  }

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

由于我使用的是 Puppet 3.8,所以我不能使用foreach循环类型。我看到在 puppet 4 中,您可以声明一个文件列表,然后循环执行这些文件并执行操作。这很酷……但在 puppet 3 中不起作用。

那么,除了多次复制/粘贴相同的代码之外,我还有其他解决方案吗?

干杯。

答案1

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

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

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

customized::filetype { [
  "$path/file1.properties",
  "$path/file2.properties"
  ]:
  change_set => $change_set,
}

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

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

相关内容