私はファクトからファクトを読み取るためにpuppetを使用しており、それに基づいてモジュールに異なる構成を適用しています。
問題:
人形エージェントはこの事実を見ていません。puppet agent --test
インタラクティブに実行すると、期待どおりに機能します。スクリプトから非対話的に実行する場合でも、正常に機能するようです。エージェント自体だけが台無しになっています。
プロセス:
UbuntuベースのアプリスタックをEC2にデプロイしています。userdata(#cloud-config)を使用して、/ etc/environmentに環境変数を設定します。
export FACTER_tl_role=development
次に、すぐに#cloud-configで、/ etc/environmentをソースします。次に、i apt-get install puppetのみ(#cloud-configステップのシーケンスのあいまいさを排除するためにpackage:puppetの使用をやめました)
インスタンスが起動したら、ファクトが利用可能であることを確認します。実行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
主な人形のマニフェスト:
# /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が設定されていないように見えます。
何か案は?これは私の脳を爆発させています...