我是木偶的新手,我正在试图弄清楚如何让不同的主机安装不同的软件包,但我偶然发现了一个我无法弄清楚的问题。这些是我的体现:
我的site.pp
:
node default {
}
node 'debh3' inherits default {
}
node 'debh4' inherits default {
import "db"
}
node 'master' inherits default {
}
我的db.pp
:
package { 'mysql-server':
ensure => installed
}
service { 'mysql':
ensure => true,
enable => true,
require => Package['mysql-server']
}
通过此设置,mysql-server
上正在安装debh3
。
如果我将“import db
”替换为db.pp
内的实际代码,则mysql-server
仅安装在debh4
上(这是我之后的行为) )。
有没有人知道我在这里做错了什么?我已将其全部放在site.pp
中以确保没有其他依赖项影响任何内容。
答案 0 :(得分:1)
另请注意,import
语句已弃用,即将从Puppet 4.0
中删除。
您应该将代码移至模块。在这种情况下,您要创建一个db
模块。
在/etc/puppet/modules/db/manifests/install.pp
class db::install {
package { 'mysql-server':
ensure => installed
}
}
in /etc/puppet/modules/db/manifests/service.pp
class db::service {
include db::install
service { 'mysql':
ensure => true,
enable => true,
require => Class['db::install'],
}
}
从node
块开始,您可以
include db::install
include db::service
甚至只包括db::service
。
您可以在一个类中同时拥有这两种资源,但通过多个类构建代码是一种很好的做法。
答案 1 :(得分:0)
进一步挖掘后,我在" import" https://docs.puppetlabs.com/puppet/latest/reference/lang_import.html上的文档:
导入语句具有以下特征:
他们阅读所请求文件的内容并将其代码添加到顶级范围
在解析清单中的任何其他代码之前处理它们
条件结构或节点/类定义
不能包含它们这些怪癖意味着清单中import语句的位置无关紧要。
这就说明了为什么我所做的不正确以及为什么会导致这种行为。至于解决方案,我将研究最佳实践并确定"正确"构建我的清单的方法。