如何迭代木偶?或者如何避免它?

时间:2015-06-03 09:48:42

标签: puppet

我有一个全局字符串变量,实际上是一个名字数组:

" mongo1,mongo2,mongo3"

我在这里做的是使用","将它们分成一个数组。作为分隔符然后将该数组馈送到定义中以创建我需要的所有实例。

问题是,每个实例都有不同的端口。我创建了一个新的stdlib函数来获取数组中名称的索引,并将其提供给port参数。

这看起来很糟糕,我不想改变stdlib。

所以我想知道如何使用类似nx2数组的方法来做这件事?

" mongo1,端口1; mongo2,PORT2; mongo3,PORT3"

或两个数组

" mongo1,mongo2,mongo3"和" port1,port2,port3"

class site::mongomodule {
  class { 'mongodb':
    package_ensure => '2.4.12',
    logdir         => '/var/log/mongodb/'
  }

  define mongoconf () {
    $index = array_index($::site::mongomodule::mongoReplSetName_array, $name)

    mongodb::mongod { "mongod_${name}":
      mongod_instance => $name,
      mongod_port     => 27017 + $index,
      mongod_replSet  => 'Shard1',
      mongod_shardsvr => 'true',
    }
  }

  $mongoReplSetName_array = split(hiera('site::mongomodule::instances', undef), ',')

  mongoconf { $mongoReplSetName_array: }
}
我正在使用的模块就是这个:

https://github.com/echocat/puppet-mongodb

使用puppet 3.8.0

2 个答案:

答案 0 :(得分:4)

当您查找密钥时,Hiera可以为您提供哈希值,因此您可以在hiera中使用这样的内容:

mongoinstances:
  mongo1:
    port: 1000
  mongo2:
    port: 1234

然后在hiera中查找密钥以获取哈希值,并将其传递给Call SQL Server job from C#,这将在哈希值中为每个条目创建一个资源实例。

$mongoinstances = hiera('mongoinstances')
create_resources('mongoconf', $mongoinstances)

您需要通过添加mongoconf参数来更改$port才能生效。每次要从hiera传递其他值时,只需将其作为参数添加到您定义的类型中。

答案 1 :(得分:1)

如果您使用的是puppet> = 4.0,请使用每个函数的木偶哈希值。

定义hash例如:

$my_hash = { mongo1 => port1,
             mongo2 => port2, } 

接下来使用each函数,例如:

$my_hash.each |$key, $val| { some code }.

有关puppet here中迭代的更多信息。