工头/木偶模块 pdxcat/收集.哈希的语法



puppet新手,并试图让这个模块工作,但发现它非常令人沮丧。

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: can't convert String into Hash at /etc/puppet/modules/collectd/manifests/plugin/network.pp:28

我正在努力的插件是这个:https://forge.puppetlabs.com/pdxcat/collectd#class-collectdpluginnetwork

我尝试设置的值是 collectd::p lugin::network 下的服务器我试过:

('127.0.0.1': port => 25826,) and 
('hostname' '127.0.0.1' 'port' 25826) and '127.0.0.1': port => 25826,

以及无数其他选择。

有人可以告诉我如何编写有效的哈希吗?

清单:

[root@foreman ~]# cat /etc/puppet/modules/collectd/manifests/plugin/network/server.pp
#
define collectd::plugin::network::server (
  $ensure        = 'present',
  $username      = undef,
  $password      = undef,
  $port          = undef,
  $securitylevel = undef,
  $interface     = undef,
) {
  include collectd::params
  include collectd::plugin::network
  $conf_dir = $collectd::params::plugin_conf_dir
  validate_string($name)
  file { "${conf_dir}/network-server-${name}.conf":
    ensure  => $ensure,
    mode    => '0640',
    owner   => 'root',
    group   => $collectd::params::root_group,
    content => template('collectd/plugin/network/server.conf.erb'),
    notify  => Service['collectd'],
  }
}

您能否附上不起作用的清单片段?

在这里你可以找到木偶类型的描述:https://docs.puppetlabs.com/puppet/latest/reference/lang_datatypes.html,也是关于哈希的。

根据文档:

哈希被写为用大括号括起来的键/值对;键与其值用 =>(箭头、胖逗号或哈希火箭)分隔,相邻的对用逗号分隔。在最终值和右大括号之间允许使用可选的尾随逗号。

{ key1 => 'val1', key2 => 'val2' }

所以你肯定必须把"("括号改成"{"。同样在键之后应该是"=>"而不是":"这样的事情应该可以工作:

servers => { '127.0.0.1' =>
  { 'port' => '25826', },
}

将哈希数据放入 Foreman 智能类参数(或智能变量)时,您需要做两件事才能将其正确传递给 Puppet:

  1. 将参数的数据类型设置为哈希、JSON 或 YAML
  2. 使用 JSON 或 YAML 表示数据

第一个将确保Puppet被赋予一个实际的数据哈希,而不是一个看起来像哈希的字符串(我认为这可能是你得到的错误的原因),第二个允许Foreman解析你输入的内容。

在 Foreman 中导航以配置> Puppet 类>收集::p lugin::network> 智能类参数>服务器,并将类型设置为 JSON(或哈希或 YAML,如果您愿意)。

接下来,将参数的值(默认值或进一步向下的覆盖)更改为:

{"127.0.0.1":{"port":"25826"}}

这是JSON语法,如果你将其与Puppet的DSL进行比较,你会注意到它使用冒号而不是=>作为键/值分隔符,并且只对字符串使用双引号。 请注意,尾随逗号在 JSON 中无效。

几乎您可以从文档或其他答案中复制示例参数,替换分隔符和引号以将其转换为 JSON。

等效的 YAML 格式为:

---
  127.0.0.1: 
    port: "25826"

Foreman 将在"哈希"或"数组"模式下接受,IIRC 默认情况下将以 YAML 格式存储/检索它。

如果 Foreman 在保存参数时出现错误,则可能是由于您输入的数据格式造成的。 JSON和YAML有许多验证和检查工具,例如 jsonlint.com 或json_verify(yajl包的一部分),因此请先通过它运行数据。

有关复杂数据类型的更多信息,请参见 Foreman 手册的第 4.2.6 节智能匹配器。

如果在此之后仍然收到来自 Puppet 的错误,请转到 Foreman 中的主机页面,单击 YAML 按钮并复制/粘贴 YAML 输出的classes:部分(这是传递给 Puppet 的部分),注意保留空格。

相关内容

  • 没有找到相关文章

最新更新