TL-*_*ene 0 environment-variables puppet amazon-ec2 cloud-init facter
我正在使用puppet从facter中读取一个事实,并基于此我将不同的配置应用于我的模块.
傀儡代理人没有看到这个事实.以puppet agent --test交互方式运行按预期工作.即使从脚本非交互式运行它似乎工作正常.只有代理商本身搞砸了.
我正在EC2上部署基于Ubuntu的应用程序堆栈.使用userdata(#cloud-config),我在/ etc/environment中设置了一个环境变量:
export FACTER_tl_role=development
Run Code Online (Sandbox Code Playgroud)
然后立即在#cloud-config,i source/etc/environment中.只有那时我才得到安装木偶(我放弃了使用包:木偶来消除#cloud-config步骤序列中的歧义)
一旦实例启动,我确认事实是可用的:运行facter tl_role返回"开发".然后检查/ var/log/syslog,显然木偶代理没有看到这个事实 - 我知道这是因为它无法编译目录,并且没有什么(空白)我应该看到它的价值变量集取决于这个事实.
但是,以puppet agent --test交互方式运行编译并运行目录就好了.甚至从#cloud-config脚本(安装puppet后立即运行)也可以正常运行.
如何向傀儡代理人提供此事实?重新启动代理服务没有任何区别,它仍然没有意识到自定义事实.重新启动实例也没有任何区别.
这是一些代码:
EC2用户数据:
#cloud-config
puppet:
conf:
agent:
server: "puppet.foo.bar"
certname: "%i.%f"
report: "true"
runcmd:
- sleep 20
- echo 'export FACTER_tl_role=development' >> /etc/environment
- . /etc/environment
- apt-get install puppet
- puppet agent --test
Run Code Online (Sandbox Code Playgroud)
主要木偶清单:
# /etc/puppet/manifests/site.pp
node default {
case $tl_role {
'development': { $sitedomain = "dev.foo.bar"}
'production': { $sitedomain = "new.foo.bar"}
}
class {"code" : sitedomain => $sitedomain}
class {"apache::site" : sitedomain => $sitedomain}
class {"nodejs::grunt-daemon" : sitedomain => $sitedomain}
Run Code Online (Sandbox Code Playgroud)
然后我看到$ sitedomain应该是的失败,所以$ tl_role似乎没有设置.
有任何想法吗?这让我大脑爆炸了......
小智 5
另一个简单的选择是将事实放入外部事实中.
将文件放入/etc/facter/facts.d/*非常简单,您可以使用文本文件,yaml json或可执行文件来执行此操作.
http://docs.puppetlabs.com/guides/custom_facts.html#external-facts
*那是在开源木偶上,在unix-y机器上.请参阅完整文档的链接.
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |