我有一个模块清单,假设它名为work.pp
.我has_work
在 中添加了一个自定义事实/lib/facter/work.rb
。当我运行puppet agent -t
并检查时facter -p has_work
,事实具有适当的价值。但是,在我的work.pp
文件中,我有这样的条件:
if ($has_work) { $create_file = true }
然后基于$create_file
我有这样的事情:
if ($create_file) {
file {
"create file":
path => "/path/to/file.ini",
alias => "/path/to/file.ini",
ensure => file,
owner => devops,
mode => "0644",
}
然而,尽管这$has_work
是真的,但客户端上没有创建任何文件。
我试图弄清楚为什么会这样。任何帮助表示赞赏。谢谢!
答案1
不确定你的语法是否正确,或者粘贴错误,我建议使用PDK进行开发。因此,请在模块中尝试以下操作,让我们称之为example
:
$ tree example
├── manifests
│ └── init.pp
└── examples
└── init.pp
$ cat manifests/init.pp
class example {
if ($create_file) {
file { "/path/to/file.ini":
alias => "/path/to/file.ini",
ensure => file,
owner => "devops",
mode => "0644",
}
}
}
$ cat examples/init.pp
include example
使用以下命令测试您的代码:
puppet apply examples/init.pp --noop
另外,如果您从 Puppet Console UI(在 Puppet Enterprise 中)进行测试,请检查您的图表以查看您的资源是否正在受到管理。
要知道,从编码风格的角度来看,if clause
不鼓励使用,因为不同的执行所管理的资源数量会有所不同。我想知道这是否if
是为了:
- 我不想管理
.ini
vs - 我不想更改/创建该
.ini
文件,因为它已经创建并且可能已被手动修改。
如果是第二个,您可能需要使用file_line
(请参阅文档)
答案2
我解决了这个问题,问题是节点分类器正在转储空白目录。我删除了转储它的代码,现在它可以工作了。