为什么我的所有主机都要在puppetmaster上安装为一台主机定义的包
我是puppet的新手,我正在尝试找出如何让不同的主机安装不同的软件包,但我偶然发现了一个我无法解决的问题。以下是我的清单: My为什么我的所有主机都要在puppetmaster上安装为一台主机定义的包,puppet,Puppet,我是puppet的新手,我正在尝试找出如何让不同的主机安装不同的软件包,但我偶然发现了一个我无法解决的问题。以下是我的清单: Mysite.pp: node default { } node 'debh3' inherits default { } node 'debh4' inherits default { import "db" } node 'master' inherits default { } Mydb.pp: package { 'mysql-server':
site.pp
:
node default {
}
node 'debh3' inherits default {
}
node 'debh4' inherits default {
import "db"
}
node 'master' inherits default {
}
Mydb.pp
:
package { 'mysql-server':
ensure => installed
}
service { 'mysql':
ensure => true,
enable => true,
require => Package['mysql-server']
}
通过此设置,mysql服务器将安装在debh3
上
如果我将“import db
”替换为我的db.pp
中的实际代码,那么mysql服务器
只安装在debh4
上(这是我所追求的行为)
有人知道我做错了什么吗?我已经把它全部放在site.pp
中,以确保没有其他依赖项影响任何东西 进一步挖掘后,我在“导入”文档中找到了以下内容:
导入语句具有以下特征:
他们读取所请求文件的内容,并将其代码添加到顶级范围
在分析清单中的任何其他代码之前,先处理它们
它们不能由条件结构或节点/类定义包含
这些怪癖意味着导入语句在清单中的位置无关紧要
这说明了为什么我所做的是不正确的,为什么它会导致这种行为。至于解决方案,我将研究最佳实践并确定构造清单的“正确”方式。还要注意,import
语句已弃用,即将从Puppet4.0
中删除
您应该将代码移动到模块中。在这种情况下,您需要创建一个db
模块
在/etc/puppet/modules/db/manifests/install.pp
class db::install {
package { 'mysql-server':
ensure => installed
}
}
class db::service {
include db::install
service { 'mysql':
ensure => true,
enable => true,
require => Class['db::install'],
}
}
在/etc/puppet/modules/db/manifests/service.pp
class db::install {
package { 'mysql-server':
ensure => installed
}
}
class db::service {
include db::install
service { 'mysql':
ensure => true,
enable => true,
require => Class['db::install'],
}
}
从节点
块,您可以
include db::install
include db::service
甚至只包括db::service
您可以在一个类中同时使用这两种资源,但最好通过多个类来构造代码。这不是答案-您应该编辑您的问题以包含其他发现。抱歉,我仍在寻找正确的答案,以解释为什么我使用的方法不正确。你回答我的问题比我好得多,所以我认为你的回答是正确的。非常感谢。谢谢你,我正试图确定正确的结构来让它工作,而类看起来就是这样。