我一直遇到现场配置问题,偶尔设法“丢失”一个或另一个hieradata配置文件。
hiera.yaml中有没有办法声明所有实例都必须有一个匹配一个或多个hiera.yaml条目的文件?
例如,如下所示:
hierarchy:
- name: "Per-Node Data"
path: nodes/${trusted.certname}.yaml
required: true
如果您最终遇到没有正确名称的“节点”文件,傀儡会立即放弃并投诉。
答案 0 :(得分:0)
我不知道这是一个很好的解决方案,但我想出了一个想法:
将一个名为$ node_filename的密钥读入Puppet类,例如
Database.database().reference().child("Time report").observeSingleEvent(of: .value) { (snapshot) in
print(snapshot)
var item = [String: Any]
if let snapshots = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshots {
print(snap)
item = snap as! [String: Any]
// do something to save the info - I use datasources
PageDataSource.sharedInstance.items.append(item)
completion(nil)
} else {
completion(NSError(domain: "Error reading Snapshots", code: 99, userInfo: nil))
}
}
然后在common.yaml中放置默认值:
class profile::base (
String $node_filename,
...
) {
if ($node_filename == 'not found') {
fail("Did not find a node Hiera file for this node ${trusted['certname']}")
}
...
}
然后在节点中的每个文件中:
---
profile::base::node_filename: not found
这当然会导致一些重复和维护负担,您可以使用Rspec确保每个节点YAML文件都有一个与其文件名匹配的密钥,例如
---
profile::base::node_filename: web01.example.com
据我所知,没有内置机制可以向Puppet报告显示找到数据的实际Hiera文件名,因此您可能需要提出一些像上面那样复杂的内容。