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',
}
}
}