1

目标是为传递给已定义资源类型的参数提供默认值。我已经使用使用 Hiera 的自动默认过程成功地为类参数提供了默认值,但是这种机制不适用于已定义的类型。

这是我在定义的类型中调用 Hiera 的方式:

define git_down(
    $local_repo_dir = undef,
    $remote_repo_url = undef,
    $version = undef,
    $shell = hiera("git_down::shell"),
    $path = hiera("git_down::path"),
    $date_format = hiera("git_down::date_format", '%Y-%m-%d %H:%M:%S')
) {
... More puppet code for type definition...
}

我的想法是创建对键入类名称的某些参数具有正常自动默认值的类(因此在类文件中完成,未显示),但使其他参数对于该类型的所有用户都具有相同的默认值,而与类无关。上述类型是为了允许更新 GIT 存储库。它需要是一个类型而不是一个类,因为我需要从多个 GIT 存储库中获取文件,并且类是单例的,而类型可能有多个实例。每个声明“git_down”实例的类都应该期望在同一个地方找到 git 可执行文件(git_down::path 和 git_down::shell)。每个类的不同之处在于源代码库的 URL、存储要克隆或获取的本地代码库的目录以及要签出的版本标记。

这是我的 Hiera.yaml 的样子:

---
:backends: 
  - yaml
:yaml:
  :datadir: c:/temp/usr
:hierarchy:
  - "git_%{fqdn}"
  - "git_%{osfamily}"
  - git_common

(注意:我在这里没有使用 ::fqdn 和 ::osfamily,因为独立的 Hiera 命令行工具无法识别它们。当我一切正常时,我可能会添加双冒号。)

我没有特定于机器的 YAML 文件(基于 fqdn,完全限定域名),因此它应该查看我的 osfamily 特定文件,即 git_windows.yaml:

---
# Default class parameters for when ::osfamily is "windows"
git_checkout::local_repo_dir: c:/usr/git_test_5
git_checkout::remote_repo_url: file:///c/usr/git_test
git_checkout::version: v11.0.7.81
git_down::shell: 'C:/Program Files (x86)/git/bin/sh.exe'
git_down::path: '/bin:/C/Program Files (x86)/git/bin'
git_down::date_format: '%Y-%m-%d %H:%M:%S'

我以这种方式测试了我的 Hiera:

1)使用命令行facter创建一个包含我所有事实的YAML事实文件(运行Hiera时需要):

facter -y > ..\facts.yaml

2) 使用命令行 Hiera 查看它是否识别我的变量:

hiera -d -c ..\hiera.yaml -y ..\facts.yaml git_down::shell

Hiera 输出以下内容:

c:\usr\git_type\manifests>hiera.bat -d -c ..\hiera.yaml -y ..\facts.yaml git_down::shell
DEBUG: 2014-07-01 14:17:46 -0400: Hiera YAML backend starting
DEBUG: 2014-07-01 14:17:46 -0400: Looking up git_down::shell in YAML backend
DEBUG: 2014-07-01 14:17:46 -0400: Looking for data source git_usb-pctbspaul.ef.com
DEBUG: 2014-07-01 14:17:46 -0400: Cannot find datafile c:/usr/git_type/git_usb-pctbspaul.ef.com.yaml, skipping
DEBUG: 2014-07-01 14:17:46 -0400: Looking for data source git_windows
DEBUG: 2014-07-01 14:17:46 -0400: Found git_down::shell in git_windows
nil

我应该看到“C:/Program Files (x86)/git/bin/sh.exe”,而不是“nil”。怎么了?

4

1 回答 1

0

在我写这个问题的时候,我找到了答案。

在 hiera.yaml 中,我指向了错误的数据目录!!!

我指的是旧版本的代码,其中定义了一些变量,但未定义其他变量。

我更正后的 hiera.yaml:

---
:backends: 
  - yaml
:yaml:
  :datadir: c:/usr/git_type
:hierarchy:
  - "git_%{fqdn}"
  - "git_%{osfamily}"
  - git_common
于 2014-07-01T18:23:39.163 回答