web-dev-qa-db-ja.com

パペットマスターを使用してすべてのマシンにファイルをコピーする方法は?

Puppetmasterをubuntu 11.04にインストールし、puppetをすべてのクライアントにインストールしました。私はすべてのパペットクライアントにパペットマスターを参加させました。パペットマスターからこれらすべてのパペットクライアントにファイルをコピーすることは可能ですか?

例えば:

デスクトップ(Puppetマスター)にdatas.xlsという名前のファイルがあります。このファイルを次の場所(/ home/operator1/Desktop/Backup /)にあるすべてのパペットクライアントにコピーするにはどうすればよいですか?

更新:

  • こんにちは、まだファイルは共有されていません。
  • この行を変更する方法puppet:///modules/module_name/datas.xlsコピーするファイルはこの場所/etc/puppet/modules/mymodule/manifests/datas.xlsにありますか?

クライアントのエラー:(解決済み)

root@testing:~# puppetd --test 
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class Sudo at /etc/puppet/manifests/site.pp:2 on node testing.chn.jd.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

クライアントのエラー2:

root@tme13:~# puppetd --test
err: Could not run Puppet configuration client: Could not retrieve local facts: bad URI(is not URI?): http://169.254.169.254/2008-02-01/meta-data/<HTML><HEAD><TITLE>HTTP access denied</TITLE></HEAD><BODY><img src/

新しいアップデート:

このモジュールをすべてのノードに適用する方法は?ファイルがすべてのノードにコピーされるように。

12
karthick87

Puppetは頭を動かすのにちょっとした怪物なので、例によって学ぶことは悪いことではありません。以下では、モジュールを使用していると仮定しています-そうでない場合、またはモジュールを組み立てる方法についての詳細が必要な場合は、コメントで言ってください。

mymoduleという新しいモジュールを開始するとします。パペットマスターのパペットホームディレクトリ(通常は/etc/puppet)で、モジュールマニフェストとファイルディレクトリを作成する必要があります。

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files

次に、そのディレクトリにinit.ppという名前のファイルを作成し、次のように入力します。

class myfile {
    file { '/home/operator1/Desktop/Backup':
        ensure => directory,
        mode => '0755',
        owner => 'operator1',
        group => 'operator1',
    }

    file { "/home/operator1/Desktop/Backup/datas.xls":
        mode => "0644",
        owner => 'operator1',
        group => 'operator1',
        source => 'puppet:///modules/module_name/datas.xls',
    }
}

次に、datas.xlsファイルをモジュールのfilesディレクトリに配置します-この例ではmodules/mymodule/files/にあります。 ( templates にはtemplatesディレクトリも存在することに注意してください)。

manifests/site.ppファイルで、モジュールをインポートし、次のようにクラスを含める必要があります。

import 'mymodule'

node base {
    include myfile
}

node server1 inherits base {}
node server2 inherits base {
    # extra config here
}

すべてのノードがbaseから継承していることを確認してください。 puppet 0.25では、ノード名に正規表現を使用できます。例:

node server[0-9] inherits base {}

さらに説明が必要な場合は、コメントでお知らせください。

操り人形マスターと会話するためのクライアントのセットアップ

クライアントでは、次のことを行う必要があります。

Sudo apt-get install puppet

次に/etc/default/puppetを編集し、START=noSTART=yesに変更します。

また、/etc/puppet/puppet.confを編集し、[main]セクションに行を追加して、パペットマスターの検索場所を指定します。

server=puppet.mydomain.com

その後、Sudo puppetd --testを使用してテストを実行できます。キーエラーが発生した場合は、Puppetマスターサーバーに進み、クライアントキーに署名する必要があります。正確な名前を確認するには、Sudo puppetca --listを実行してからSudo puppetca --sign server1.mydomain.com(またはlistコマンドで指定されたサーバー名)を実行します。

Sudo service puppet startでパペットサービスを開始すると、すぐに離れます。パペットサービスは1時間ごとに実行されるため、パペットレシピを更新すると、すべてのクライアントも更新されます。

ファイルを削除する

元の質問で、ファイルを削除する方法を知りたいと思いました。 manifests/init.ppを編集して

file { "/home/operator1/Desktop/Backup/datas.xls":
    ensure => absent,
}

その他の便利なヒント

問題がある場合は、いくつかの方法があります。 puppetがインストールされているマシンでは、次を実行して構文を確認できます。

puppet --parseonly --ignoreimport myfile.pp

または--ignoreimportフラグを削除して全体を確認しますが、実際にはエラーではない面白いエラーメッセージが表示される可能性があります。以下を実行することで、puppetクライアントマシンでpuppetをライブで実行することもできます。

Sudo puppetd --test

さまざまな有用な出力が表示され、エラーと警告が異なる色で強調表示されます。さらに詳細が必要な場合は、次を実行できます。

Sudo puppetd --test --debug

しかし、それは一般的に非常に多くの出力を生成するので、通り抜けるのは難しいので、前のステップをすでに試したがスタックしており、すべてが行われていることを確認する必要がある場合にのみ行ってください。

これは、現在仕事で使用しているpuppet 0.25.xに基づいており、Ubuntu 10.04のバージョンでもあることに注意してください。メインセクションのパペットコードは間違いなく機能しますが、パペットの新しいバージョンには出力のデバッグに役立つ新しいフラグがあります。

24
Hamish Downer