木偶环境中的节点特定设置

时间:2017-10-11 15:00:52

标签: puppet

我正在学习傀儡,我遇到了一个非常基本的问题。为了简单起见,我使用木偶伪造模块而不是任何自定义编写的模块。以下是我使用版本的方法:

木偶服务器: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.confhiera.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

1 个答案:

答案 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 dataautomatic 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

"示例"在这些文件名中将是您的同名环境的主目录。顺便提一下,请注意,尽管可以为每个模块添加新的层次结构级别,但这并不常见。使用映射到正在配置的机器的分层分类的层次结构更为典型;在上面的命名预期这样的安排,其中只有一个类别。

更新模块数据后,您可能会发现需要使主设备使其环境缓存过期。一种方法是重启服务。