Puppet ENC 根据事实选择环境?
Puppet ENC choose environment based on a fact?
我有一个 ENC 设置,用于确定在签入期间节点将放置在哪个环境中。
目前我正在使用外部数据库中的主机名跟踪节点类型。
当节点第一次签入时,我想根据事实确定它应该处于的环境。例如,假设我想使用 OS
事实来确定是否应向新节点发送 windows 或 linux 配置文件。
我似乎只能访问节点主机名,我可能会将其发送到 PuppetDB 以检索事实,但在初始签入正在注册的新节点时情况并非如此人偶服务器。
有人对此有实际的解决方案吗?
我发现如果我直接从我的 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 设置,用于确定在签入期间节点将放置在哪个环境中。
目前我正在使用外部数据库中的主机名跟踪节点类型。
当节点第一次签入时,我想根据事实确定它应该处于的环境。例如,假设我想使用 OS
事实来确定是否应向新节点发送 windows 或 linux 配置文件。
我似乎只能访问节点主机名,我可能会将其发送到 PuppetDB 以检索事实,但在初始签入正在注册的新节点时情况并非如此人偶服务器。
有人对此有实际的解决方案吗?
我发现如果我直接从我的 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'