基本上,我发现自己每次都做相同的长类声明:
node 'gluster3redis097.myservice.com' {
class { 'redis' :
class {'invoke' : }
class {'users' : }
class {'redis' :
package_ensure => '3.0.5',
#extra_config_file => '/etc/redis.d/redis-gluster3-master.conf',
daemonize => 'yes',
pid_file => '/var/run/redis.pid',
log_level => 'notice',
log_file => '/var/log/redis/redis.log',
#save_db_to_disk => false,
workdir => './',
bind => $::ipaddress,
slaveof => "${$gluster3redis_master_ips[37]}:6379",
slave_serve_stale_data => true,
# 2015.12.01 nathan Do not allow inadvertent writes to the slave
slave_read_only => true,
repl-diskless-sync-delay => '5',
repl-ping-slave-period => '10',
... and so on ...
... and so forth ...
让我们假设,对于这个集群,每个FIFTH节点都有一个单独的主节点。
那么,猜猜唯一改变的部分吗?
slaveof => "${$gluster3redis_master_ips[37]}:6379",
一定有更好的方法。
-风中奇缘(1995)1
根据https://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html#multiple-names,使用Puppetinherits
关键字是一个坏主意。
另外,令我沮丧的是,它们在https://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html#aside-best-practices中描述了以下最佳做法:
除了:最佳做法
尽管节点语句几乎可以包含任何Puppet代码,但我们建议您仅使用它们来设置变量和声明类。避免在其中使用资源声明,收集器,条件语句,链接关系和函数;所有这些都属于类或定义的类型。这将使在节点定义和ENC之间切换变得更加容易。2
我可以定义一个自定义类型吗?
我通读了如何将节点特定的信息传递给人偶中的类?,但我不确定他是否在问同样的问题,尽管我非常愿意学习如何定义类型,但我对它们的熟悉程度还不足以决定是否走这条路。
对于该Redis集群,如何避免像这样的每个Puppet Node定义重复自己?
我甚至欢迎一个非常通用的答案,我可以将其应用于我的特定案例,我也对此做了概括。
UPDATE:将使用通用配置Hiera通过这组环境的common.yaml文件似乎已经奏效。如果Dan Bowling不自愿参加,我将在回答中进一步阐述。
这是我最初发表的评论的更详尽的答案:
每当您发现自己将设置重新声明为类参数时,都应考虑使用Hiera。从文档:
Hiera是用于配置数据的键/值查找工具,旨在使Puppet更好,并允许您设置特定于节点的数据而无需重复自己。
第一步是确定层次结构,因为Hiera将使用该层次结构为请求的键查找适当的值。在您的示例中,仅需要一个简单的层次结构。这是一个示例hiera.yaml
配置文件:
:backends:
- yaml
:hierarchy:
- "node/%{::hostname}"
- "common"
:yaml:
:datadir: '/your/hiera/data/directory'
:merge_behavior: deeper
关于以上配置:
/your/hiera/data/directory/node/nodehostname.yaml
价值。在这里可以定义每个主机的配置。common.yaml
的/your/hiera/data/directory/node/common.yaml
因此,您common.yaml
可能看起来像这样:
redis::package_ensure: '3.0.5'
redis::pid_file: '/var/run/redis.pid'
并且您将具有以下节点{1,2} /your/hiera/data/directory/node/node{1,2}.yaml
:
redis::slaveof: 'your redis master value'
而node {3,4}将具有以下内容/your/hiera/data/directory/node/node{3,4}.yaml
:
redis::slaveof: 'your other redis master value'
在:merge_behavior: deeper
中hiera.yaml
,如果要合并在不同层级的设置或复杂的哈希合并成单一的价值是非常有用的。有关更多信息,请参见“ Hiera查找类型”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句