我试图想出一个傀儡模块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完成这个任务?
提前致谢。