如何避免在in节点的类声明中重复自己?

内森·巴萨尼斯(Nathan Basanese)

基本上,我发现自己每次都做相同的长类声明:

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    

关于以上配置:

  1. 希拉将首先寻找/your/hiera/data/directory/node/nodehostname.yaml价值。在这里可以定义每个主机的配置。
  2. 对于所有其他值,Hiera会恢复到默认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: deeperhiera.yaml,如果要合并在不同层级的设置或复杂的哈希合并成单一的价值是非常有用的。有关更多信息,请参见“ Hiera查找类型”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在接口和类定义中避免字段声明重复

来自分类Dev

如何避免代码合同声明中的代码重复

来自分类Dev

如何避免在模块声明中重复类型定义?

来自分类Dev

如何避免在ModelForm和CreateView类中重复字段列表?

来自分类Dev

如何避免在嵌套类结构中重复属性?

来自分类Dev

如何避免在ModelForm和CreateView类中重复字段列表?

来自分类Dev

如何避免在BEM级联中重复父类名?

来自分类Dev

如何避免在C ++中的派生类中重复基类构造函数参数?

来自分类Dev

密码:避免重复节点

来自分类Dev

如何避免重复多个CSS类

来自分类Dev

如何避免重复多个CSS类

来自分类Dev

如何避免JMS Messages类的代码重复?

来自分类Dev

避免在python中重复输入类名

来自分类Dev

如何避免在节点,sqlite中插入重复记录[knex,objectionJS]

来自分类Dev

如何避免在节点,sqlite中插入重复记录[knex,objectionJS]

来自分类Dev

头文件中的类声明重复

来自分类Dev

如何避免Slick的模型声明冗长和重复

来自分类Dev

Gradle从lib中排除Java类,将其替换为自己的类,以避免重复

来自分类Dev

JavaScript类,如何在实践中应用“关注分离”和“不要重复自己”(DRY)

来自分类Dev

如何避免多个节点进程做重复的事情?

来自分类Dev

避免在 Cypher QL 中循环到 json 数组的节点重复

来自分类Dev

声明地图时避免重复

来自分类Dev

如何避免在Shadow DOM中重复样式?

来自分类Dev

如何避免haml模板中的标记重复?

来自分类Dev

如何避免在MySQL中插入重复项?

来自分类Dev

如何避免XSL转换中的重复?

来自分类Dev

如何避免在C ++中重复删除变量?

来自分类Dev

如何避免在INSERT INTO wordpress中重复

来自分类Dev

如何避免Java中重复的代码?

Related 相关文章

  1. 1

    在接口和类定义中避免字段声明重复

  2. 2

    如何避免代码合同声明中的代码重复

  3. 3

    如何避免在模块声明中重复类型定义?

  4. 4

    如何避免在ModelForm和CreateView类中重复字段列表?

  5. 5

    如何避免在嵌套类结构中重复属性?

  6. 6

    如何避免在ModelForm和CreateView类中重复字段列表?

  7. 7

    如何避免在BEM级联中重复父类名?

  8. 8

    如何避免在C ++中的派生类中重复基类构造函数参数?

  9. 9

    密码:避免重复节点

  10. 10

    如何避免重复多个CSS类

  11. 11

    如何避免重复多个CSS类

  12. 12

    如何避免JMS Messages类的代码重复?

  13. 13

    避免在python中重复输入类名

  14. 14

    如何避免在节点,sqlite中插入重复记录[knex,objectionJS]

  15. 15

    如何避免在节点,sqlite中插入重复记录[knex,objectionJS]

  16. 16

    头文件中的类声明重复

  17. 17

    如何避免Slick的模型声明冗长和重复

  18. 18

    Gradle从lib中排除Java类,将其替换为自己的类,以避免重复

  19. 19

    JavaScript类,如何在实践中应用“关注分离”和“不要重复自己”(DRY)

  20. 20

    如何避免多个节点进程做重复的事情?

  21. 21

    避免在 Cypher QL 中循环到 json 数组的节点重复

  22. 22

    声明地图时避免重复

  23. 23

    如何避免在Shadow DOM中重复样式?

  24. 24

    如何避免haml模板中的标记重复?

  25. 25

    如何避免在MySQL中插入重复项?

  26. 26

    如何避免XSL转换中的重复?

  27. 27

    如何避免在C ++中重复删除变量?

  28. 28

    如何避免在INSERT INTO wordpress中重复

  29. 29

    如何避免Java中重复的代码?

热门标签

归档