2017-01-02 7 views
0

パペットマスターからパペットクライアントにシェルスクリプトをコピーしようとしています。パペットマスターからパペットエージェントにシェルスクリプトをコピーし、パペットエージェントで実行します。

これは人形のマスターに私のシェルスクリプトです:

cat /etc/puppetlabs/code/environments/production/modules/mymodule/mybash.sh 
echo hi hello 

私も/home/myserver/mybash.shで同じシェルスクリプトをコピーしました。

これは人形のマスターに私のsite.ppファイルです:これは人形エージェントから出力され

cat /etc/puppetlabs/code/environments/production/manifests/site.pp 

notify{"Message : I am a message from puppet master": } 

class myfile { 
    file { '/home/myserver/mybash.sh': 
    mode => '0755', 
    owner => 'root', 
    source => 'puppet:///modules/mymodule/mybash.sh', 
    notify => Exec['run_my_script'], 
    } 
    exec { 'run_my_script': 
    command => '/home/npatel/mybash.sh', 
    } 
} 
notify{"Message : new msg test": } 

myclient:~$ sudo /opt/puppetlabs/bin/puppet agent --test 
Info: Using configured environment 'production' 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Caching catalog for myclient.test.com 
Info: Applying configuration version '1483393652' 
Notice: Message : I am a message from puppet master 
Notice: /Stage[main]/Main/Notify[Message : I am a message from puppet master]/message: defined 'message' as 'Message : I am a message from puppet master' 
Notice: Message : new msg test 
Notice: /Stage[main]/Main/Notify[Message : new msg test]/message: defined 'message' as 'Message : new msg test' 
Notice: Applied catalog in 0.20 seconds 

notify{"Message :を持つ行だけが人形エージェント上で実行なっているように見えますそれらの間の線ではありません。

ファイルセクションに記載されているように/home/my-clientパスにコピーされていますが、ファイルがコピーされるかどうかを確認するログもありません。

ソース値が不足しましたか?

答えて

2

パペットでは、クラスを定義してもそれを自動的に構成に含めるわけではなく、単に宣言することができます。クラスを定義することは、Ruby、Python、Cのような言語で関数を定義するのと同様です。この関数は呼び出されたときにのみ有効です。同様に、Puppetクラス定義は、宣言するまでは何の効果もありません。

実際にクラスを使用する場合は、include関数を使用して宣言できます。これは、Puppetにクラスを評価し、クラス内で宣言されているすべてのリソースを管理するように指示します。

includeの機能の他に、というリソースのようなclass {'myfile':}の構文を使用できます。

あなたがクラスを宣言したいのであれば、あなたのコードでは、あなたはこのような何かする必要があると思います:

/etc/puppetlabs/code/environments/production/manifests/site.pp

notify{"Message : I am a message from puppet master": } 

class myfile { 
    file { "/home/myserver/mybash.sh": 
    mode => '0755', 
    owner => 'root', 
    source => 'puppet:///modules/mymodule/mybash.sh', 
    notify => Exec['run_my_script'], 
    } 
    exec { 'run_my_script': 
    command => '/home/npatel/mybash.sh', 
    } 
} 

include myfile 
notify{"Message : new msg test": } 

私はまた、あなたのsite.ppファイルにそのクラスを含め、直接マニフェストモジュールにあなたのクラスのコードを置くことをお勧めします:

/etc/puppetlabs/code/environments/production/modules/mymodule/init.pp

class myfile { 
    file { "/home/myserver/mybash.sh": 
    mode => '0755', 
    owner => 'root', 
    source => 'puppet:///modules/mymodule/mybash.sh', 
    notify => Exec['run_my_script'], 
    } 
    exec { 'run_my_script': 
    command => '/home/npatel/mybash.sh', 
    } 
} 

そして、あなたのsite.ppでクラスを宣言します

node default { 
    include myclass 
} 
+1

が鮮明な答えをあなたにピーターをありがとう!私はこの問題を解決することができました。 –

関連する問題