使用puppet在同一文件夹中复制多个文件夹文件

我试图想出一个傀儡模块sensu_client在一个实例中安装和configurationsensu客户端。

模块目录结构如下所示:

 . |-- examples |-- files | |-- client-ssl | |-- custom_plugins | | |-- common | | `-- <env> | `-- default_plugins |-- manifests |-- spec | `-- classes `-- templates `-- custom_plugins |-- common `-- <env> 

文件夹和他们的描述是这样的:

files/default_plugins/ :来自互联网的默认插件
files/custom_plugins/common :我们编写的插件,与环境files/custom_plugins/common
files/custom_plugins/<env> :我们编写的特定于环境的插件

和模板目录相同的想法。

如果可能的话,我想将所有这些插件复制到客户端的/etc/sensu/plugins文件夹中,因为在我们的其他环境中(我们使用ansiblepipe理),我们已经将sensu插件位置标准化为/etc/sensu/plugins夹。

当我运行我写的清单时,出现以下错误消息:

 Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Error while evaluating a Resource Statement, Cannot alias File[copy common custom plugins] to ["/etc/sensu/plugins/"] at /etc/puppetlabs/code/environments/<env>/modules/sensu_client/manifests/config.pp:46; resource ["File", "/etc/sensu/plugins/"] already declared at /etc/puppetlabs/code/environments/<env>/modules/sensu_client/manifests/config.pp:46 at /etc/puppetlabs/code/environments/<env>/modules/sensu_client/manifests/config.pp:46:3 on node <fqdn> 

这是显而易见的,因为我有几个文件块,我试图复制文件/模板到/etc/sensu/plugins目录。

你们可以请我指出推荐的方法来完成这个工作吗?

这是我想要达成的另一个小事情,但没有完成。 我想生成/etc/sensu/conf.d/client.json文件,看起来像这样

 { "client": { "name": "<hostname>", "address": "<ip address>", "subscriptions": ["<hostname>", "all", "<env>", "<service>"] } } 

我们有两种运行木偶的环境,命名约定遵循这种模式。

环境1:FQDN是<env>-<service><index>.<domain-name1>.tld和hostname是<env>-<service><index>
环境2:FQDN是<service><index>.<domain-name2>.tld和hostname是<service><index>

我的模板文件如下所示:

 { "client": { "name": "<%= @hostname %>", "address": "<%= @ipaddress %>", "subscriptions": <%= @pr_subscription_array %> } } 

在我的清单中使用此块获取pr_subscription_array:

 $pr_service_name = regsubst("${facts[hostname]}", '^(.*?)-([a-zA-Z]*)[0-9]*', '\2') $pr_subscription_array = [ "${facts[hostname]}", "all", "${facts['agent_specified_environment']}", "$pr_service_name" ] 

这是生成这样的订阅: "subscriptions": ["<hostname>", "all", "<env>", "<service><index>"]

一些如何服务领域是不正确的。 它带有索引号。 任何build议如何使用puppet完成这个任务?

提前致谢。