我正在学习傀儡,我遇到了一个非常基本的问题。为了简单起见,我使用木偶伪造模块而不是任何自定义编写的模块。以下是我使用版本的方法:
木偶服务器:5.1.3
傀儡代理人:5.3.2
puppetlabs-java:2.1.0
当我安装puppetlabs-java模块时,我正在使用--modulepath /etc/puppetlabs/code/modules/
。
我目前已将我的代理配置为指向我的puppet服务器和我名为example
的环境。
环境目前看起来像这样:
├── environment.conf
├── hiera.yaml
├── manifests
│ └── init.pp
└── modules
└── java.pp
我没有对environment.conf
和hiera.yaml
做任何事情,它们目前是默认设置。我的init.pp
包含:
node 'node1' {
}
node 'node2' {
}
我的java.pp包含:
class { 'java':
distribution => 'jre',
}
我的问题有两个问题。如果我将java.pp放在manifest文件夹中,它会将java应用于两个节点,无论我是否在任一节点中调出include java
。如果我将include java
放在任一节点上,那么它可以正常工作,一个节点将获得java而另一个节点不会,但它似乎不尊重我在java.pp
中的任何设置。如何使用node1
文件中的自定义设置仅将{java}安装到java.pp
?
答案 0 :(得分:1)
如果我将java.pp放在manifest文件夹中,它会将java应用于两个节点,无论我是否在任一节点中调出
include java
。
是。目录构建器处理每个节点的环境manifests
目录中的每个清单文件。您的java.pp
文件包含类java
的顶级范围声明,因此如果该文件由目录构建器处理,则它将包括类' java'在目标节点的清单中。
如果我将
include java
放在任一节点上,那么它可以正常工作,一个节点将获得java而另一个节点不会,但它似乎不尊重我在java.pp中的任何设置
不,它不会。 include java
(或class { 'java': ... }
)声明类java
,从而指示目录构建器将该类包含在目标节点的目录中。这两种形式或多或少是替代方案,两者都将使目录构建器在环境的模块路径中查找类java
的定义。您的java.pp
没有在该搜索中找到正确的名称或正确的位置,这很好,因为它实际上并不包含所需的定义。
要自定义类参数,您应立即使用external data和automatic data binding开始。这不是将值绑定到类参数的唯一方式,但它是您应该更喜欢的机制,尤其是在跨模块边界声明类时。
关于Hiera详细信息,为此目的的非常基本的Hiera配置可能包含以下部分:
示例/ hiera.yaml 强>
# example/hiera.yaml
---
version: 5
defaults:
datadir: data
data_hash: yaml_data
hierarchy:
- name: "Common data"
path: "common.yaml"
示例/数据/ common.yaml 强>
---
java::distribution: jre
"示例"在这些文件名中将是您的同名环境的主目录。顺便提一下,请注意,尽管可以为每个模块添加新的层次结构级别,但这并不常见。使用映射到正在配置的机器的分层分类的层次结构更为典型;在上面的命名预期这样的安排,其中只有一个类别。
更新模块数据后,您可能会发现需要使主设备使其环境缓存过期。一种方法是重启服务。