强制使用hieradata文件?

时间:2018-02-20 21:19:53

标签: puppet

我一直遇到现场配置问题,偶尔设法“丢失”一个或另一个hieradata配置文件。

hiera.yaml中有没有办法声明所有实例都必须有一个匹配一个或多个hiera.yaml条目的文件?

例如,如下所示:

hierarchy:
  - name: "Per-Node Data"
    path: nodes/${trusted.certname}.yaml
    required: true

如果您最终遇到没有正确名称的“节点”文件,傀儡会立即放弃并投诉。

1 个答案:

答案 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文件名,因此您可能需要提出一些像上面那样复杂的内容。