加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 我为什么要使用puppet参数化类?

发布时间:2020-12-13 18:02:34 所属栏目:Linux 来源:网络整理
导读:通常在处理复杂的木偶模块时,我会在节点级别或类内部设置变量.例如., node 'foo.com' { $file_owner = "larry" include bar }class bar { $file_name = "larry.txt" include do_stuff}class do_stuff { file { $file_name: ensure = file,owner = $file_owne
通常在处理复杂的木偶模块时,我会在节点级别或类内部设置变量.例如.,
node 'foo.com' {
  $file_owner = "larry" 
  include bar 
}

class bar { 
  $file_name = "larry.txt"
  include do_stuff
}

class do_stuff {
  file { $file_name:
    ensure => file,owner  => $file_owner,}
}

参数化类如何/何时/为何在这种情况下有所帮助?你是如何使用参数化类来构建你的木偶模块的?

解决方法

参数化类是一种语言结构,可以帮助您更好地构建代码.它可以防止您过度使用全局变量(如示例中所示).

想象一下,您在节点描述中包含了20多个类,并且所有类都需要在清单的全局或节点范围中设置一些变量.参数化类也允许您轻松拥有默认参数,因此您可以使用$file_owner的默认值,而不必在几个不同的位置提供相同的值(例如拉里).

您的示例代码段(带有两个额外的节点)可以编写如下:

node 'example.com' { 
  class { bar: }
}

node 'example.net' {
  class { bar: owner = "harry" }
}

node 'example.net' {
  class { bar: file_name = "barry.txt" }
}

class bar($owner = "larry",$file_name = "larry.txt") { 
  class { do_stuff: owner => $owner,file_name => $file_name }
}

class do_stuff($owner,$file_name) {
  file { $file_name:
    ensure => file,owner  => $owner,}
}

使用全局变量时,您需要在每个节点中声明一个名为$owner的变量,并且您将无法覆盖每个节点的$file_name变量/参数.相反,您需要为每个节点声明另一个bar类.

关于Puppet语言演变的文档,当然还有语言指南,提供了一些关于如何使用参数化类的好例子以及这种语言结构背后的基本原理:

> http://projects.puppetlabs.com/projects/1/wiki/Development_Language_Evolution#Parameterized+classes
> http://docs.puppetlabs.com/guides/language_guide.html#parameterised-classes

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读