2016-08-26 10 views
1

私は人形のマスターからエージェントに簡単なファイルコピーをしようとしています。人形のマスターからエージェントへのファイルコピーが失敗します

[[email protected]****************** manifests]# cat site.pp 

    file {'/home/ec2-user/my_bash_script.sh': 
    source => "puppet:///modules/mymodule/my_bash_script.sh", 
    mode => '755', 
    } 

エラーを見つけてください。

[[email protected]***********/]# puppet agent -t 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Loading facts 
Info: Caching catalog for ip-10-20-1-137.dev.uberops.net 
Info: Applying configuration version '1472255014' 
Error: /Stage[main]/Main/File[my_bash_script.sh]: Could not evaluate: 
Could not retrieve information from environment production source(s) 
puppet:///modules/mymodule/my_bash_script.sh 
Notice: Finished catalog run in 0.06 seconds 

誰も私がここで何が欠けているか教えてください。

+0

あなたがこれまでに質問してきた質問から、私はあなたが人形3.6-3.8を使用していると仮定しています。本当? –

+0

はい私は人形を使用しています3.8.7 – nadish

答えて

1

Could not retrieve information from environment production source(s) このエラーは、おしゃべりがあなたが気絶したファイルを見つけることができないことを示しています。 提供しているパスとファイルが存在することを再度確認してください。

一般的なファイル構造は、などのようです:

-/etc/puppet -/etc/puppet/manifest/ -/etc/puppet/files -/etc/puppet/modules

あなたはどこか他のセットアップあなたのモジュールディレクトリを(/モジュール/のmymodule /ファイル/あなたのファイル - ここを)持っている場合は、ファイルにあなたのパスは次のようになります; puppet:///modules-directory/modules-name/file-nameすなわちpuppet:///modules/mymodule/your-file-here

2

Puppet> = 3.7以上であるため、自分のモジュールのディレクトリ環境を使用する必要があります。 /etc/puppet/modules/ディレクトリ、または$basemodulepathは、stdlib、lvmなどの宣言されていないが参照される型、関数などを持つ基本モジュール用です。

モジュールを/etc/puppet/modules/からクライアントの適切なディレクトリ環境/etc/puppet/environments/'environment'/modulesに移動して問題を解決してください。

追加情報:

人形エンタープライズ3.8の場合、これは/etc/puppetlabs/puppet/environments/'environment'/modulesになります。 Puppet 4 EnterpriseおよびEnterprise以外の場合は、/etc/puppetlabs/code/environments/'environment'/modulesになります。

本番環境のデフォルトディレクトリ環境では、これは/etc/puppet/environments/production/modulesになります。

+0

この答えでは、私にとって実際にはあまりにも多くのスタイルがあります。基本モジュールのパスは、環境間で共有されるモジュール用です。そのようなモジュールの*性質*は、サイトの要件とポリシーの問題です。そこに格納されているモジュールに、ユーザーマニフェストから参照されるクラスが含まれていても、サイトローカルモジュールがそこに存在してはならない理由は何もありません。確かに、私はすぐに、提案された変更が問題を解決すると予想されるべき理由を見ていない。 –

+0

@JohnBollinger彼の以前の質問は、彼が '/ etc/puppet/modules'にモジュールを持っていたことを示しています。これはディレクトリ環境を必要とするPuppetのバージョンです。 –

+0

私はあなたの意見をまだ見ていません。ディレクトリ環境は、モジュールが環境間で共有されることを排除するものではなく、どのような種類のモジュールを共有できるかに制限を課すものではありません。あなたが記述したような制限は、多くの場合、技術的な制限ではなくポリシーの問題です。 OPのモジュールがすでに '$ basemodulepath'に入っているとしたら、私は彼の問題が動くことによって解決されると信じる理由はありません。 –

1

URL puppet:///modules/mymodule/my_bash_script.shは、該当モジュールパスに対してファイルmymodule/files/my_bash_script.shに相当します。そのファイルは存在し、マスター/ puppetserverプロセスによって読み取り可能でなければなりません。おそらくあなたが現在エラーの種類を生産する最も一般的な問題は、あなたが間違ったディレクトリ内のファイルを入れているファイル名

  • にスペルミスしまし

    • がある
    • 所有権/パーミッション/ ACL/SELinuxのコンテキストとポリシーは、マスターがファイルを読むことを許可していません。
  • 関連する問題