Class 傀儡参数化类和更改参数

Class 傀儡参数化类和更改参数,class,parameterized,puppet,Class,Parameterized,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,如下所示: nod

我试图理解木偶参数化类。我有一个这样定义的参数化类:

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。

samba是否安装在myserver1上,和/或是否触发了任何其他服务器安装任务?如果只是通知消息没有打印出来,那么它可能真的是一个问题

Notify应该像“Notify{”一样,我有一个大括号和一个尾随冒号:}

通知的调用类似于函数:通知(“我使用括号”)


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

我认为这与作用域有关。看起来您正在基节点中创建“default”类,然后在继承该基节点的某些内容之后为“default”类设置资源默认值


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

这是我的非拼写错误答案-我想你遇到了

下面是一个代码示例,根据票证中重写的示例,我调整了您的代码以获得您想要的效果:

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上用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

下面是一个简单的例子:

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

include apache-setup
或:


我在问题中键入原始代码时出错,但现在我已更正了notify语法错误。这不是问题所在。问题与我不了解如何使用参数化类有关。需要检查的其他内容-在实例化过程中传入了“true”,但条件与“true”匹配o这可能是一个大小写不匹配的问题。如果仍然不是这个问题,请检查puppetmaster和客户端日志中的错误消息。抱歉:这是另一个输入错误(我现在已修复)。我将查看日志。在我的问题中,
basenode
是一个节点而不是一个类。这对你的答案有影响吗?不,在我的回答中,我将它从一个节点切换到了另一个类,因为puppet不允许参数化节点。既然我想
basenode
成为一个节点,我该如何在我的情况下利用你的工作呢?我不知道,但我会ecommend反对使用基于节点的继承。随着使用puppet管理的节点数量越来越多,您可能最终希望迁移到ENC(),如果您的节点除了包含类之外还做其他事情,这将使迁移更加困难。我不认为基于节点的继承可以通过包含从其他类继承的类来处理。对于今年以后阅读的人来说:Puppet支持布尔值。无需检查带有正则表达式的k字符串。如果使用正标志,则理解性总是更好,例如
使用_samba=true
而不是
no_samba=false
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',
    }
  }
}