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

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

我正在尝试提出一个 puppet 模块sensu_client,用于在实例中安装和配置 sensu 客户端。

模块目录结构如下:

.
|-- 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/<env>:我们编写的特定于环境的插件

对于模板目录有同样的想法。

如果可能的话,我想将所有这些插件复制到/etc/sensu/plugins客户端的同一个文件夹中,因为在我们的其他环境中(我们使用 ansible 进行管理),我们已将 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>"]
  }
}

我们在两个环境中运行 puppet,命名约定遵循这种模式。

环境 1:FQDN 为<env>-<service><index>.<domain-name1>.tld且主机名是<env>-<service><index>
环境 2:FQDN 为<service><index>.<domain-name2>.tld且主机名是<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>"]

不知为何服务字段无法正常显示。它带有索引号。关于如何使用 puppet 完成此操作,您有什么建议吗?

提前致谢。

相关内容