在Hiera yaml文件中输入的正确语法

时间:2014-07-01 18:21:14

标签: yaml puppet hiera

目标是为传递给定义的资源类型的参数提供默认值。我已经使用使用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)。每个类的不同之处在于源repo的URL,存储要克隆或获取的本地repo的目录以及要签出的版本标记。

这是我的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

而不是" nil",我应该看到" C:/ Program Files(x86)/git/bin/sh.exe"。有什么问题?

1 个答案:

答案 0 :(得分:0)

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

在hiera.yaml中,我指的是错误的datadir !!!

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

我纠正的hiera.yaml:

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