有没有办法让节点共享一组通用模块,然后向它们添加特定模块?

时间:2016-07-06 17:42:38

标签: module nodes puppet

有没有办法让节点共享一组通用模块,然后向它们添加特定模块?

在我的配置中,所有节点都有基本配置,但其中一些节点具有特定模块。

在这些通用模块中,无论使用什么模块,所有配置都完全相同,因此" easy" path只需将它们添加到主清单中的每个节点即可。

硬编码将是这样的:

node default{
    include module 1
    include module 2
    include module 3
    include module 4
}

node 'www.example1.com'{
    include module 1
    include module 2
    include module 3
    include module 4

    include module 5
    include module 6
}

node 'www.example2.com'{
    include module 1
    include module 2
    include module 3
    include module 4

    include module 7
    include module 8
}
[...]

正如您所看到的,它非常重复且效率低下,主要是因为我会添加几个节点和模块。

有没有办法只用Puppet来完成这个?

1 个答案:

答案 0 :(得分:3)

  

有没有办法让节点共享一组通用模块,然后向它们添加特定模块?

是的,有几种方法。在Puppet 4之前还有更多,但我会坚持不知道保质期有限的机制。

一般有三种可能性:

  1. 不是为每个节点声明每个特定模块,而是定义聚合公共模块组的类,并在节点上声明那些

  2. 外部化要应用于节点的类,并通过Hiera数组合并查找加载它们。然后,您将获得Hiera的所有好处,以共享数据。有一个标准功能使这很容易:hiera_include()

  3. 使用ENC [帮助]对节点进行分类。在ENC的源语言中使用您想要的任何机制来对类进行分组并将组分配给节点。

  4. The Roles& @MattSchuchard在他的评论中引用的配置文件模式是类型(1)中流行且强大的方法,你一定要仔细研究它。但是,对于您的示例代码来说,这将是过度的;我可能会改写这样的例子(一种更简单的类型1方法):

    class default_modules {
        include module 1
        include module 2
        include module 3
        include module 4
    }
    
    node default{
        include default_modules
    }
    
    node 'www.example1.com'{
        include default_modules
    
        include module 5
        include module 6
    }
    
    node 'www.example2.com'{
        include default_modules
    
        include module 7
        include module 8
    }
    [...]