【问题标题】:Assign variable inside puppet class在 puppet 类中分配变量
【发布时间】:2017-05-23 12:20:09
【问题描述】:

我是 puppet 的新手,因此我们将不胜感激。我正在尝试将静态数据传递到 Puppet 类中的变量apache_version,具体取决于操作系统版本。这个变量稍后将在.erb模板文件中使用,以根据版本配置apache。现在我的班级看起来像这样:

class some_class_name () {
  case $::operatingsystem {
    'RedHat' : {
      case $::operatingsystemrelease {
        /^7\..*/ : { }
        /^6\..*/ : { }
      }
    }
  }
}

如何在{} 括号内定义这个变量?至于.erb文件,应该这样使用:

<%- if @apache_version >= '2.4' -%>
    set something
<%- else -%>
     set something else
<%- end -%>

我的目标是这样的:

class some_class_name () {
  case $::operatingsystem {
    'RedHat' : {
      case $::operatingsystemrelease {
        /^7\..*/ : { $apache_version = '2.4' }
        /^6\..*/ : { $apache_version = '2.2' }
      }
    }
  }
}

但它不起作用。

【问题讨论】:

  • 对我来说很好。 facter operatingsystemfacter operatingsystemrelease 究竟输出了什么?你包括some_class_name吗?你如何检查$apache_version 的值?或许加notify { "Version: ${apache_version}": }
  • facter operatingsystem 给出RedHat facter operatingsystemrelease 给出7.2 (至少在我现在正在工作的系统上)some_class_name 正确包含在init.pp 文件中。至于检查 - 我不会在任何地方检查它。我是不是该?它不应该像这样工作吗,一旦我将版本分配给变量,它应该在.rb 文件中使用?
  • 如果 template() 调用在同一范围内,则该变量可以在 ERB 模板中使用,但显示的清单没有 template() 调用,因此很难说这是否是正确。
  • 仅供参考,没有理由用.*结束正则表达式

标签: puppet erb


【解决方案1】:

好的,我已经设法解决了这个问题。现在我正在使用:

if $::operatingsystemrelease =~ /^7\..*/ {
    $apache_version = '2.4'
  } else {
    $apache_version = '2.2'
  }

params.pp 文件中。有了这个,一切都被正确配置了。

【讨论】:

    【解决方案2】:

    最好在这里使用$::operatingsystemmajrelease 事实:

      if $::operatingsystemmajrelease == 7 {
        $apache_version = '2.4'
      } else {
        $apache_version = '2.2'
      }
    

    我也认为这是 Puppet 选择器的一个很好的用例:

    $apache_version = $::operatingsystemmajrelease ? { 7 => '2.4', default => '2.2' }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多