2

Puppetのパラメーター化されたクラスを理解しようとしています。私はこのように定義されたパラメータ化されたクラスを持っています:

class defaults(
  $no_samba = 'FALSE'
)
{
  if ($no_samba =~ /TRUE/) {
    notify { "will not install samba": } ;
  } else {
    # install samba here
  }

  # More server install tasks here...
}

さらに、ベースノードを次のように定義します。

node basenode
{
  class {'defaults':
    no_samba => 'FALSE',
  }
}

次に、サーバーをインスタンス化します。

node myserver1 inherits basenode {
  Class['defaults'] { no_samba => 'TRUE' }
}

ただし、これは機能しません。myserver1ノードは、sambaがインストールされないことを示す通知メッセージを表示しません。

4

4 に答える 4

1

sambaはmyserver1にインストールされましたか、および/または他のサーバーインストールタスクのいずれかがトリガーされましたか?通知メッセージのみが印刷されなかった場合は、 通知タイプ通知機能の問題である可能性があります。

Notifyは、「notify {"中括弧と末尾のコロンがあります":}」のようになります。

通知は関数のように呼び出されます:notice( "私は括弧を使用します")

'notify'を'notice'に変更して、機能するかどうかを確認してください。'puppet parser validate default.pp'を使用してpuppet構文を確認することもできます(デフォルトのクラスがdefault.ppにあると仮定します)

于 2012-06-29T01:50:53.000 に答える
1

これが私のタイプミスではない答えです-あなたはhttp://projects.puppetlabs.com/issues/7890に遭遇していると思います

チケットの書き直された例に基づいて、探している効果を得るためにコードを微調整したコードサンプルを次に示します。

class defaults(
  $no_samba = 'FALSE'
)
{

  notify {"no_samba_hack" :
    message => "$no_samba";
  }

  if ($no_samba =~ /TRUE/) {
    notify { "will not install samba": }
  } else {
    # install samba here
  }

  # More server install tasks here...
}

class basenode($no_samba="FALSE") {
  class {defaults: no_samba => $no_samba}
}

node yourserver {

  class { 'basenode' : no_samba => 'TRUE'}

}

Ubuntu12.04でpuppet2.7.11を使用して'puppetapply sample.pp'を使用して実行すると、次の出力が得られます。

notice: will not install samba
notice: /Stage[main]/Defaults/Notify[will not install samba]/message: defined 'message' as 'will not install samba'
notice: TRUE
notice: /Stage[main]/Defaults/Notify[no_samba_hack]/message: defined 'message' as 'TRUE'
notice: Finished catalog run in 0.05 seconds
于 2012-07-04T18:18:59.980 に答える
0

スコープと関係があると思います。ベースノードで「default」クラスを作成し、そのベースノードを継承するもので事後に「default」クラスのリソースデフォルトを設定しているようです。

http://docs.puppetlabs.com/guides/language_guide.html

「デフォルトはグローバルではありません。現在のスコープと現在のスコープより下のスコープにのみ影響します。」

于 2012-07-03T11:35:27.393 に答える
0

簡単な例を次に示します。

class apache-setup {
  class { 'apache':
    mpm_module => 'prefork',
  }
}

include apache-setup

または:

class { '::mysql::server':
  config_file => '/etc/my.cnf',
  root_password    => 'root', # Sets MySQL root password.
  override_options => {
    'mysqld' => {
      'max_connections' => '512',
      'max_allowed_packet' => '256M',
      'log' => 'ON',
      'log_slow_queries' => 'ON',
      'general_log' => 'ON',
      'wait_timeout' => '28800',
    }
  }
}
于 2015-03-30T21:19:01.840 に答える