【问题标题】:Puppet ENC choose environment based on a fact?Puppet ENC 根据事实选择环境?
【发布时间】:2017-06-21 16:03:25
【问题描述】:

我有一个 ENC 设置,用于确定在签入期间将放置节点的环境。

目前我正在使用外部数据库中的主机名跟踪节点类型。

当一个节点第一次签入时,我想根据一个事实来确定它应该处于的环境。例如,假设我想使用OS 事实来确定是否应该向新节点发送 windows 或 linux 配置文件。

似乎我只能访问节点主机名,我可能会将其发送到 PuppetDB 以检索事实,但在向 Puppet 注册的新节点的初始签入时情况并非如此服务器。

有人对此有实际的解决方案吗?

【问题讨论】:

    标签: puppet


    【解决方案1】:

    我发现,如果我直接从我的 ENC 访问 PuppetDB,即使在第一次签入时,我也可以访问我节点的所有事实。

    这是一个使用 python library for PuppetDb 的示例 ENC:

    #!/usr/bin/env python
    
    import sys
    from pypuppetdb import connect
    
    db = connect(host='puppetdb', port=8080, ssl_verify=False, ssl_key=None, ssl_cert=None, timeout=20)
    
    certname = sys.argv[1]
    
    try:
      node = db.node(certname)
      print 'environment: ' + node.fact('os').value
    except:
      print 'environment: default'
    

    【讨论】:

    • 只要它发生在插件同步后和目录前编译。您要将此脚本放在 ENC 目录中的 Puppet Master 上吗?
    • 这是我在/etc/puppetlabs/puppet 文件夹中为我的enc 指定的脚本。我猜事实是在它运行之前上传的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2015-10-27
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多