我有一个全局字符串变量,实际上是一个名字数组:
" 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
答案 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)