1

パペットを初めて使用し、このモジュールを機能させようとしていますが、非常にイライラしています。

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::plugin::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'],
  }
}
4

2 に答える 2

1

動作していないマニフェストのフラグメントを添付していただけますか?

ここでは、パペット タイプの説明を見つけることができます: https://docs.puppetlabs.com/puppet/latest/reference/lang_datatypes.html、ハッシュについても。

ドキュメントによると:

ハッシュは、中括弧で囲まれたキーと値のペアとして記述されます。キーは => (矢印、太いコンマ、またはハッシュ ロケット) によってその値から区切られ、隣接するペアはコンマで区切られます。オプションの末尾のコンマは、最終値と右中括弧の間で使用できます。

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

したがって、間違いなく「(」ブラケットを「{」に変更する必要があります。また、キーの後は「=>」ではなく「:」にする必要があります。次のようなものが機能するはずです。

servers => { '127.0.0.1' =>
  { 'port' => '25826', },
}
于 2014-12-27T12:17:17.107 に答える
0

ハッシュ データを Foreman スマート クラス パラメーター (またはスマート変数) に入れる場合、それを Puppet に正しく渡すには、次の 2 つのことを行う必要があります。

  1. パラメータのデータ型をハッシュ、JSON、または YAML に設定します
  2. JSON または YAML を使用してデータを表す

1つ目は、ハッシュのように見える文字列ではなく、実際のデータのハッシュがPuppetに与えられることを保証し(おそらくこれがエラーの原因だと思います)、2つ目はForemanが入力内容を解析できるようにします.

Foreman で[Configure] > [Puppet classes] > [collectd::plugin::network] > [Smart class parameters] > [servers]に移動し、 [ Type ]を[ JSON ] (または、必要に応じて [Hash] または [YAML]) に設定します。

次に、パラメーターの値 (デフォルトまたはオーバーライドのいずれか) を次のように変更します。

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

これはJSON構文です。これを Puppet の DSL と比較すると、キーと値の区切り記号に => の代わりにコロンが使用され、文字列にのみ二重引用符が使用されていることがわかります。JSON では末尾のコンマが無効であることに注意してください。

ドキュメントまたは他の回答から例のパラメーターをコピーして、区切り記号と引用符を置き換えて JSON に変換することができます。

同等の YAML 形式は次のようになります。

---
  127.0.0.1: 
    port: "25826"

Foreman は、「ハッシュ」モードまたは「配列」モードのいずれかを受け入れ、IIRC はデフォルトで YAML 形式で保存/取得します。

Foreman がパラメーターの保存時にエラーを表示する場合、入力しているデータの形式が原因である可能性があります。jsonlint.comや json_verify (yajl パッケージの一部) など、JSON と YAML の両方に多数の検証および lint ツールがあるため、最初にデータを実行します。

セクション4.2.6 Smart Matchersの Foreman マニュアルに、複雑なデータ型に関する詳細情報があります。

この後も Puppet からエラーが発生する場合は、Foreman のホスト ページに移動し、YAML ボタンをクリックしてclasses:、YAML 出力のセクション (Puppet に渡されるもの) をコピーして貼り付け、空白を保持するように注意してください。

于 2014-12-30T13:35:18.410 に答える