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

Module 有没有办法让节点共享一组通用的模块,然后向其中添加特定的模块?,module,nodes,puppet,Module,Nodes,Puppet,有没有办法让节点共享一组通用的模块,然后向其中添加特定的模块 在我的配置中,所有节点都有一个基本配置,但其中一些节点有特定的模块 在这些通用模块中,无论是哪个模块,所有配置都是完全相同的,因此“简单”的路径就是将它们添加到主清单中的每个节点 硬编码应该是这样的: node default{ include module 1 include module 2 include module 3 include module 4 } node 'www.example

有没有办法让节点共享一组通用的模块,然后向其中添加特定的模块

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

在这些通用模块中,无论是哪个模块,所有配置都是完全相同的,因此“简单”的路径就是将它们添加到主清单中的每个节点

硬编码应该是这样的:

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 4之前还有很多,但我会坚持使用那些保质期不受限制的机制

一般有三种可能性:

  • 与其为每个节点声明每个特定模块,不如定义聚合通用模块组的类,并在节点上声明这些类

  • 将要应用于节点的类外部化,并通过Hiera数组合并查找加载它们。然后,您将获得Hiera在共享数据方面的所有好处。有一个标准函数可以让这变得非常简单:
    hiera\u include()

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

  • @MattSchuchard在其评论中引用的角色和配置文件模式是一种流行且功能强大的(1)型方法,您应该仔细研究它。然而,对于您的示例代码来说,这可能是过分的;我可以改为这样重写示例(更简单的type-1方法):

    有没有办法让节点共享一组通用的模块,然后向其中添加特定的模块

    是的,有几种方法。在Puppet 4之前还有很多,但我会坚持使用那些保质期不受限制的机制

    一般有三种可能性:

  • 与其为每个节点声明每个特定模块,不如定义聚合通用模块组的类,并在节点上声明这些类

  • 将要应用于节点的类外部化,并通过Hiera数组合并查找加载它们。然后,您将获得Hiera在共享数据方面的所有好处。有一个标准函数可以让这变得非常简单:
    hiera\u include()

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

  • @MattSchuchard在其评论中引用的角色和配置文件模式是一种流行且功能强大的(1)型方法,您应该仔细研究它。然而,对于您的示例代码来说,这可能是过分的;我可以改为这样重写示例(更简单的type-1方法):


    您需要角色和配置文件:您需要角色和配置文件:您还可以将这三者结合起来。我个人将角色和配置文件与利用Facter和CMDB的Hiera ENC一起使用。一切都保持整洁有序,一切都自动进行,不费吹灰之力。我开始使用角色和个人资料。我想它会合适的。谢谢你。你也可以把这三者结合起来。我个人将角色和配置文件与利用Facter和CMDB的Hiera ENC一起使用。一切都保持整洁有序,一切都自动进行,不费吹灰之力。我开始使用角色和个人资料。我想它会合适的。非常感谢。
    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
    }
    [...]