Puppet:Class 排序/遏制 - 总是错误的顺序
Puppet: Class Ordering / Containment - always wrong order
我阅读了很多有关订购带有容器的木偶 classes 的文章(我使用的是 Puppet 6)。但在一种情况下它仍然对我不起作用。也许我的英语不够好,我错过了一些东西。也许有人知道我做错了什么。
我有安装 puppetserver 的配置文件 (profile::puppetserver
)。此配置文件有三个子class,我包含 profile::puppetserver
class profile::puppetserver(
) {
contain profile::puppetserver::install
contain profile::puppetserver::config
contain profile::puppetserver::firewall
}
这对我来说很好。现在我想扩展这个配置文件并安装 PuppetDB
。为此,我使用 puppet forge:
中的 puppetdb
模块
所以我所做的是将 profile::puppetserver::puppetdb
和包含添加到 profile::puppetserver
class profile::puppetserver::puppetdb(
) {
# Configure puppetdb and its underlying database
class { 'puppetdb': }
# Configure the Puppet master to use puppetdb
class { 'puppetdb::master::config': }
}
当我先配置 puppetserver
并在其后添加 profile::puppetserver::puppetdb
时,puppetdb
安装并且一切正常。
如果我直接使用 contain
添加它并立即配置所有内容,它会崩溃。这是因为 puppetdb
模块是在我的 主服务器 安装期间随机安装的(还有 postgresql
服务器等)。结果是我的 puppetserver
不是 运行,我的 puppetdb
没有生成本地 ssl
证书,服务也没有启动。
我首先尝试的是:
我直接在 profile::puppetserver::puppetdb
中安装了 puppetdb
软件包并使用了所需的标志。当我一次配置时它有效。
class profile::puppetserver::puppetdb (
) {
Package { 'puppetdb':
ensure => installed,
require => Class['profile::puppetserver::config']
}
}
所以我想我可以在上面的代码中做同样的事情:
class profile::puppetserver::puppetdb(
) {
# Configure puppetdb and its underlying database
class { 'puppetdb':
require => Class['profile::puppetserver::config']
}
# Configure the Puppet master to use puppetdb
class { 'puppetdb::master::config':
require => Class['profile::puppetserver::config']
}
}
但这不起作用...
所以我读到了关于傀儡 class 的控制和链条排序。所以我在 profile::puppetserver
中做了这个
class profile::puppetserver(
) {
contain profile::puppetserver::install
contain profile::puppetserver::config
contain profile::puppetserver::firewall
contain profile::puppetserver::puppetdb
Class['profile::puppetserver::install'] ->
Class['profile::puppetserver::config'] ->
Class['profile::puppetserver::firewall'] ->
Class['profile::puppetserver::puppetdb']
}
但它仍然没有任何效果...在我的 "puppetserver provisioning" 安装、配置、防火墙步骤中,他仍然开始安装 postgresql
和 puppetdb
软件包。
我必须如何编写顺序,我在 profile::puppetserver::puppetdb
中调用的 puppetdb
模块中的所有内容仅在其余配置步骤完成后才开始?
我真的不明白。我认为这可能与以下事实有关,即我从 profile::puppetserver::puppetdb
内部的 puppetdb
模块而不是直接 Resource Type
声明 classes。因为当我将 Package Resource Type
与 Require Flag 一起使用时,它似乎有效。但我真的不知道该如何处理。我想一定有办法还是?
I think maybe it haves something to do with the fact, that i declare
classes from the puppetdb module inside of
profile::puppetserver::puppetdb and not the directly Resource Type.
Because when i use the Package Resource Type with the Require Flag, it
seems to work.
确实如此。
资源使用 class 或直接声明它们的定义类型实例进行排序,以及根据直接应用于它们的排序参数和说明进行排序。
因为classes可以声明多次,在不同的地方,排序对他们来说比较复杂。像您演示的类似资源的 class 声明(您确实应该尽可能避免)并不意味着声明的 class 有任何特定的顺序。通过 include
函数的声明也不行。
通过 require
函数的 Class 声明相对于声明的 class 或定义的类型在声明的 class 上放置单端排序约束,并且声明通过contain
函数放置了一个类似于应用于所有资源声明的双端排序约束。链接箭头和排序元参数可以对 classes 设置额外的排序约束。
But i really dont know how to handle this. I think there must be a way or?
您的最后一个示例显示了一种在 profile::puppetserver
级别强制执行排序的可行方法,但其有效性取决于其 contain
ed class 中的每个采用相同方法的人对于他们自己声明的任何 classes,至少在那些第三级 classes 必须受第二级 classes 的顺序约束的地方。这似乎是你跌倒的地方。
另请注意,虽然确实需要对某些事物进行相对于其他事物的排序,但尝试对所有资源强制执行明确的总体排序没有必要或没有多大用处。尽可能用最轻的手工作,只放置那些有用的排序约束。
我阅读了很多有关订购带有容器的木偶 classes 的文章(我使用的是 Puppet 6)。但在一种情况下它仍然对我不起作用。也许我的英语不够好,我错过了一些东西。也许有人知道我做错了什么。
我有安装 puppetserver 的配置文件 (profile::puppetserver
)。此配置文件有三个子class,我包含 profile::puppetserver
class profile::puppetserver(
) {
contain profile::puppetserver::install
contain profile::puppetserver::config
contain profile::puppetserver::firewall
}
这对我来说很好。现在我想扩展这个配置文件并安装 PuppetDB
。为此,我使用 puppet forge:
puppetdb
模块
所以我所做的是将 profile::puppetserver::puppetdb
和包含添加到 profile::puppetserver
class profile::puppetserver::puppetdb(
) {
# Configure puppetdb and its underlying database
class { 'puppetdb': }
# Configure the Puppet master to use puppetdb
class { 'puppetdb::master::config': }
}
当我先配置
puppetserver
并在其后添加profile::puppetserver::puppetdb
时,puppetdb
安装并且一切正常。如果我直接使用
contain
添加它并立即配置所有内容,它会崩溃。这是因为puppetdb
模块是在我的 主服务器 安装期间随机安装的(还有postgresql
服务器等)。结果是我的puppetserver
不是 运行,我的puppetdb
没有生成本地ssl
证书,服务也没有启动。
我首先尝试的是:
我直接在 profile::puppetserver::puppetdb
中安装了 puppetdb
软件包并使用了所需的标志。当我一次配置时它有效。
class profile::puppetserver::puppetdb (
) {
Package { 'puppetdb':
ensure => installed,
require => Class['profile::puppetserver::config']
}
}
所以我想我可以在上面的代码中做同样的事情:
class profile::puppetserver::puppetdb(
) {
# Configure puppetdb and its underlying database
class { 'puppetdb':
require => Class['profile::puppetserver::config']
}
# Configure the Puppet master to use puppetdb
class { 'puppetdb::master::config':
require => Class['profile::puppetserver::config']
}
}
但这不起作用...
所以我读到了关于傀儡 class 的控制和链条排序。所以我在 profile::puppetserver
class profile::puppetserver(
) {
contain profile::puppetserver::install
contain profile::puppetserver::config
contain profile::puppetserver::firewall
contain profile::puppetserver::puppetdb
Class['profile::puppetserver::install'] ->
Class['profile::puppetserver::config'] ->
Class['profile::puppetserver::firewall'] ->
Class['profile::puppetserver::puppetdb']
}
但它仍然没有任何效果...在我的 "puppetserver provisioning" 安装、配置、防火墙步骤中,他仍然开始安装 postgresql
和 puppetdb
软件包。
我必须如何编写顺序,我在 profile::puppetserver::puppetdb
中调用的 puppetdb
模块中的所有内容仅在其余配置步骤完成后才开始?
我真的不明白。我认为这可能与以下事实有关,即我从 profile::puppetserver::puppetdb
内部的 puppetdb
模块而不是直接 Resource Type
声明 classes。因为当我将 Package Resource Type
与 Require Flag 一起使用时,它似乎有效。但我真的不知道该如何处理。我想一定有办法还是?
I think maybe it haves something to do with the fact, that i declare classes from the puppetdb module inside of profile::puppetserver::puppetdb and not the directly Resource Type. Because when i use the Package Resource Type with the Require Flag, it seems to work.
确实如此。
资源使用 class 或直接声明它们的定义类型实例进行排序,以及根据直接应用于它们的排序参数和说明进行排序。
因为classes可以声明多次,在不同的地方,排序对他们来说比较复杂。像您演示的类似资源的 class 声明(您确实应该尽可能避免)并不意味着声明的 class 有任何特定的顺序。通过 include
函数的声明也不行。
require
函数的 Class 声明相对于声明的 class 或定义的类型在声明的 class 上放置单端排序约束,并且声明通过contain
函数放置了一个类似于应用于所有资源声明的双端排序约束。链接箭头和排序元参数可以对 classes 设置额外的排序约束。
But i really dont know how to handle this. I think there must be a way or?
您的最后一个示例显示了一种在 profile::puppetserver
级别强制执行排序的可行方法,但其有效性取决于其 contain
ed class 中的每个采用相同方法的人对于他们自己声明的任何 classes,至少在那些第三级 classes 必须受第二级 classes 的顺序约束的地方。这似乎是你跌倒的地方。
另请注意,虽然确实需要对某些事物进行相对于其他事物的排序,但尝试对所有资源强制执行明确的总体排序没有必要或没有多大用处。尽可能用最轻的手工作,只放置那些有用的排序约束。