首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >傀儡代理守护进程未读取事实(EC2,cloud-init)

傀儡代理守护进程未读取事实(EC2,cloud-init)
EN

Stack Overflow用户
提问于 2013-02-15 04:15:07
回答 3查看 2K关注 0票数 0

我使用puppet从facter中读取一个事实,并在此基础上对我的模块应用不同的配置。

问题:

傀儡特工没有看到这个事实。以交互方式运行puppet agent --test的效果与预期一致。即使是从脚本中以非交互方式运行它,似乎也能正常工作。只有代理本身搞砸了。

进程:

我正在EC2上部署一个基于Ubuntu的应用程序栈。使用userdata (#cloud-config),我在/etc/ environment中设置了一个环境变量:

代码语言:javascript
复制
export FACTER_tl_role=development

然后立即在#cloud-config中,我获取/etc/environment。只有在那时,我才apt-get安装puppet (我不再使用package: puppet来消除#cloud-config步骤序列中的歧义)

一旦实例启动,我确认事实是可用的:运行facter tl_role返回“开发”。然后我检查/var/log/syslog,很明显puppet代理没有看到这个事实-我之所以知道这一点,是因为它无法编译目录,并且没有任何东西(空白)可以让我根据这个事实看到变量集的值。

但是,以交互方式运行puppet agent --test可以很好地编译和运行目录。即使从#cloud-config脚本(在安装puppet之后立即运行)也能正常运行。

我如何将此事实提供给傀儡代理?重新启动代理服务没有任何区别,它仍然不知道自定义事实。重启实例也没有区别。

下面是一些代码:

EC2用户数据:

代码语言:javascript
复制
#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

主要木偶清单:

代码语言:javascript
复制
# /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}

然后,我看到了$sitedomain应该出现的故障,因此似乎没有设置$tl_role。

有什么想法吗?这让我的大脑都要爆炸了..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-10 00:23:04

另一个简单的选择是将一个事实放入一个外部事实中。

将文件放入/etc/facter/facts.d/*相当简单,您可以使用文本文件、yaml json或可执行文件来完成此操作。

http://docs.puppetlabs.com/guides/custom_facts.html#external-facts

*这是在开源木偶上,在unix-y机器上。请参阅完整文档的链接。

票数 5
EN

Stack Overflow用户

发布于 2013-03-20 22:39:21

“谢谢你,”克里斯托弗说。这可能是一个很好的解决方案,我将测试它,并可能从我目前可怕的黑客攻击转移到它。我在Puppet Users Google Group中得到的答案是,我不应该假设Puppet代理进程将具有一个登录shell的环境,并且当它由Puppet代理运行时,也将具有此环境。

下面是我解决这个问题的方法(诚然,使用暴力):

代码语言:javascript
复制
runcmd:
- echo 'export FACTER_tl_role=development' >> /etc/environment
- . /etc/environment
- apt-get install puppet
- service puppet stop
- sed -i '/init-functions/a\. \/etc\/environment' /etc/init.d/puppet
- puppet agent --test
- service puppet start

正如您所看到的,在安装Puppet之后,我停止了代理,并在/etc/init.d/puppet中添加一行到source /etc/environment。然后我启动代理。不理想..。但是它起作用了!

票数 3
EN

Stack Overflow用户

发布于 2013-02-27 07:02:36

我认为. /etc/environment不会像cloud-init执行runcmd那样正常工作。两种可能的解决方案:

  • 使用傀儡代理命令导出变量:

export FACTER_tl_role=development && puppet agent --test

如果这不起作用:

  • 只需将命令放入用户数据脚本中,并将它们连接在一起作为“多部分输入”(如cloud-init docs).

中所述

第二种解决方案将命令作为适当的shell脚本执行,并且很可能会修复该问题。但是,如果第一种方法有效,那么使用你所拥有的就更容易了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14883253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档