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...
}

此外,我定义一个basenode如下:

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

然后我实例化一个服务器:

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

但是,这不起作用。myserver1 节点不显示指示不会安装 samba 的通知消息。

4

4 回答 4

1

是否在 myserver1 上安装了 samba,和/或是否触发了任何其他服务器安装任务?如果只是没有打印通知消息,那么可能确实是 通知类型通知功能的问题。

通知应该看起来像“通知{“我有大括号和一个尾随冒号”:}

Notice 像函数一样被调用:notice("i use parenthesis")

尝试将“通知”更改为“通知”,看看它是否有效。您可能还想使用“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'}

}

当我在 Ubuntu 12.04 上使用带有 puppet 2.7.11 的“puppet apply 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

这是一个简单的例子:

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 回答
0

我相信这与范围有关。看起来您正在基节点中创建“默认”类,然后在继承该基节点的事物之后为“默认”类设置资源默认值。

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

“默认值不是全局的——它们只会影响当前范围和低于当前范围的范围。”

于 2012-07-03T11:35:27.393 回答