目标是为传递给定义的资源类型的参数提供默认值。我已经使用使用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"。有什么问题?
答案 0 :(得分:0)
在我写这个问题时,我找到了答案。
在hiera.yaml中,我指的是错误的datadir !!!
我指的是我的代码的旧版本,其中定义了一些变量,但未定义其他变量。
我纠正的hiera.yaml:
---
:backends:
- yaml
:yaml:
:datadir: c:/usr/git_type
:hierarchy:
- "git_%{fqdn}"
- "git_%{osfamily}"
- git_common