Puppet:类排序/包含-总是错误的顺序

Puppet:类排序/包含-总是错误的顺序,puppet,Puppet,我读了很多关于使用容器(iam使用puppet 6)排序puppet类的文章。但有一种情况对我来说仍然不起作用。也许我的英语不够好,我错过了一些东西。也许有人知道我做错了什么 我有一个安装puppetserver的配置文件(profile::puppetserver)。这个概要文件有三个子类,我在profile::puppetserver 类配置文件::puppetserver( ) { 包含配置文件::puppetserver::安装 包含配置文件::puppetserver::配置 包含配置

我读了很多关于使用容器(iam使用puppet 6)排序puppet类的文章。但有一种情况对我来说仍然不起作用。也许我的英语不够好,我错过了一些东西。也许有人知道我做错了什么

我有一个安装puppetserver的配置文件(
profile::puppetserver
)。这个概要文件有三个子类,我在
profile::puppetserver

类配置文件::puppetserver(
) {
包含配置文件::puppetserver::安装
包含配置文件::puppetserver::配置
包含配置文件::puppetserver::防火墙
}
这对我来说很好。现在我想扩展此配置文件并安装
PuppetDB
。为此,我从以下位置使用
puppetdb
模块:

因此,我要做的是添加
profile::puppetserver::puppetdb
和包含到
profile::puppetserver

class profile::puppetserver::puppetdb(
) {
#配置puppetdb及其底层数据库
类{'puppetdb':}
#将Puppet主机配置为使用puppetdb
类{'puppetdb::master::config':}
}
  • 当我首先设置我的
    puppetserver
    并在其后面添加
    profile::puppetserver::puppetdb
    时,
    puppetdb
    安装完毕,一切正常

  • 如果我直接用
    contain
    添加它,并一次设置所有内容,它就会崩溃。这是因为
    puppetdb
    模块是在我的主服务器安装期间随机安装的(还有
    postgresql
    服务器等等)。结果是my
    puppetserver
    没有运行,my
    puppetdb
    没有生成本地
    ssl
    证书,服务也没有启动

  • 我首先尝试的是:

    我直接在我的
    profile::puppetserver::puppetdb
    中安装了
    puppetdb
    包,并使用所需的标志。当我一次提供所有资源时,它就起作用了

    class profile::puppetserver::puppetdb(
    ) {
    包{'puppetdb':
    确保=>已安装,
    require=>Class['profile::puppetserver::config']
    }
    }
    
    所以我想我可以在上面的代码中做同样的事情:

    class profile::puppetserver::puppetdb(
    ) {
    #配置puppetdb及其底层数据库
    类{'puppetdb':
    require=>Class['profile::puppetserver::config']
    }
    #将Puppet主机配置为使用puppetdb
    类{'puppetdb::master::config':
    require=>Class['profile::puppetserver::config']
    }
    }
    
    但这不起作用

    所以我读了关于木偶类包含和按链排序的内容。所以我在我的
    profile::puppetserver

    类配置文件::puppetserver(
    ) {
    包含配置文件::puppetserver::安装
    包含配置文件::puppetserver::配置
    包含配置文件::puppetserver::防火墙
    包含配置文件::puppetserver::puppetdb
    类['profile::puppetserver::install']->
    类['profile::puppetserver::config']->
    类['profile::puppetserver::firewall']->
    类['profile::puppetserver::puppetdb']
    }
    
    但它仍然没有任何效果。。。在安装、配置、防火墙步骤中的“puppetserver配置”过程中,他仍然开始安装
    postgresql
    puppetdb

    我必须如何编写排序,即我在
    profile::puppetserver::puppetdb
    中调用的
    puppetdb
    模块中的所有内容仅在其余的配置步骤完成后才开始

    我真的不明白。我想这可能与以下事实有关:我从
    profile::puppetserver::puppetdb
    中的
    puppetdb
    模块中声明类,而不是直接从
    资源类型中声明类。因为当我使用带有Require标志的
    包资源类型
    时,它似乎可以工作。但我真的不知道该怎么处理。我想一定有办法的

    我想这可能与我宣布的事实有关 的内部puppetdb模块中的类 profile::puppetserver::puppetdb,而不是直接的资源类型。 因为当我使用带有Require标志的包资源类型时,它 似乎有效

    确实如此

    资源通过直接声明它们的类或定义的类型实例进行排序,并根据直接应用于它们的排序参数和指令进行排序

    因为类可以在不同的位置多次声明,所以对它们来说,排序更加复杂。您演示的类似资源的类声明(您确实应该尽可能避免)并不意味着声明类的任何特定顺序。通过
    函数进行的声明也不包括在内

    通过
    require
    函数的类声明在声明的类上相对于声明的类或定义的类型放置单端排序约束,通过
    contain
    函数的声明放置双端排序约束,类似于应用于所有资源声明的约束。链接箭头和排序元参数可以在类上放置额外的排序约束

    但我真的不知道该怎么处理。我想一定有办法的

    您的最后一个示例显示了在
    profile::puppetserver
    级别强制执行排序的可行方法,但其有效性取决于其
    包含的每个类对它们自己声明的任何类采用相同的方法,至少在第三级类必须受第二级类顺序约束的情况下。这似乎是你跌倒的地方

    还要注意的是,尽管确实需要对某些事物进行相对排序,但尝试对所有资源强制执行显式的总排序是没有必要的,也没有多大用处的。尽可能用最轻的手工作,只放置t