Puppet参数化类和更改参数

时间:2012-06-28 22:02:36

标签: class parameterized puppet

我正在尝试了解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 个答案:

答案 0 :(得分:1)

是否在myserver1上安装了samba,和/或是否触发了任何其他服务器安装任务?如果仅打印通知消息,则notify typenotice function相比可能会出现问题。

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

通知被称为函数:notice(“我使用括号”)

尝试将'notify'更改为'notice',看看它是否有效。您可能还想使用'puppet parser validate default.pp'检查puppet语法(假设您的默认类是default.pp)

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分: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',
    }
  }
}