agent/master型では証明書の不整合トラブルが発生することがあります。これはホスト名が同じでも鍵データは毎回作っているため、agent側を再インストールした場合はmaster側で保管している鍵データと不整合を起こしてしまいます。
今回のような検証だとmaster側を再インストールする場合もあるかもしれませんが、その場合もagent側が保管しているmasterの鍵データと不整合を起こします。不整合を起こした場合は保管している鍵データを削除するしかありません。
agent側を再インストールした場合は、master側の鍵データを削除しないと接続できません。master側で以下のコマンドラインのように鍵データを削除します。
# puppet cert list --all + "agent" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx: + "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx: # puppet cert clean agent ←削除したいagentのホスト名(--allで全て削除可能) Notice: Revoked certificate with serial 6 Notice: Removing file Puppet::SSL::Certificate agent at '/var/lib/puppet/ssl/ca/signed/agent.pem' Notice: Removing file Puppet::SSL::Certificate agent at '/var/lib/puppet/ssl/certs/agent.pem' # puppet cert list --all + "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
master側を再インストールして再構築し直した場合、「Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key.」というエラーでagent側の鍵データを削除しないと接続できないことがあるでしょう。
agent側の鍵データは以下のコマンドラインのように削除します。
# rm -rf /var/lib/puppet/ssl/*
これでもエラーが解消しない場合は、前述のmaster側の鍵データ削除手順も併せて実行してみてください。
せっかくPuppetが動くようになったのですから、実際に何か作業をさせてみましょう。連載第1回の「環境構築自動化の手順と評価検証、Puppetの基礎知識」で紹介しましたが、Puppetの作業はPuppet言語と呼ばれる言語で記述し、これをマニフェストと呼びます。
マニフェストについては次回詳しく説明しますので、ここではシンプルにファイルを一つだけ作るマニフェストを作ってみましょう。
agent/master型のPuppetではmaster側にあるsite.ppファイル(/etc/puppet/manifests/site.pp)がagent側で実行されるマニフェストファイルになりますので、以下の内容をmaster側のsite.ppファイル(/etc/puppet/manifests/site.pp)に記述してください。
file { '/tmp/hello.txt': content => 'hello puppet', }
このマニフェストはtmpディレクトリ(/tmp)にhello.txtというファイル名で「hello puppet」という中身のテキストファイルを作成します。プログラミング経験のある方には“content”の末尾にあるカンマがタイプミスに見えるかもしれませんが、間違いではありませんので、その通り記述してください。
保存したらテストしてみましょう。puppet applyコマンドを使うと、引数で指定したマニフェストを実行できます。Chefだとchef-applyに似ているコマンドです。--noopオプションを付加すると、マニフェスト実行はしますが、実際にシステムへの変更はしない“ドライラン”になります。
それでは、master側で以下のようなコマンドラインを実行してテストしてみましょう。
# puppet apply /etc/puppet/manifests/site.pp --noop Notice: Compiled catalog for builder in environment production in 0.04 seconds Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: current_value absent, should be file (noop) Notice: Class[Main]: Would have triggered 'refresh' from 1 events Notice: Stage[main]: Would have triggered 'refresh' from 1 events Notice: Finished catalog run in 0.02 seconds
「Warning: Could not retrieve fact fqdn」という警告が出るかもしれませんが無視して構いません。もし、何かしらエラーが出た場合は記述内容をよく見直してください。問題なければ--noopオプションを外して実際にファイルを作成してみましょう。
# puppet apply /etc/puppet/manifests/site.pp Notice: Compiled catalog for builder in environment production in 0.04 seconds Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: defined content as '{md5}19ee62e0c6b5f00aaf9b02280c0dad66' Notice: Finished catalog run in 0.03 seconds # ls -l /tmp/hello.txt -rw-r--r-- 1 root root 12 8月 7 16:59 2014 /tmp/hello.txt # cat /tmp/hello.txt hello puppet
作成されましたね。今はmaster側でしたが、同じことをagent側でもできるようになっています。それではagent側でも実行してみましょう。agent側で以下のコマンドラインのように実行します。
# puppet agent -t --verbose Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for agent Info: Applying configuration version '1407398971' Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: defined content as '{md5}19ee62e0c6b5f00aaf9b02280c0dad66' Notice: Finished catalog run in 0.02 seconds # ls -l /tmp/hello.txt -rw-r--r--. 1 root root 12 8月 7 17:09 2014 /tmp/hello.txt # cat /tmp/hello.txt hello puppet
agent側でも同じようにファイルが作成されましたね。
次回はHTTPサーバーのセットアップを例にマニフェストの作り方を詳しく説明します。お楽しみに。
R子 う〜ん、う〜ん(悩)
K男 どうしたのかな?
R子 何回やっても「certificate verify failed」って出ちゃって動かないんです……(泣)
K男 ちゃんと説明した通りにセットアップしたかな?
R子 はい、新しいサーバーを開梱してすぐOSをインストールして、そのままPuppetを入れたのですが……。
K男 開梱してすぐOSインストールしてPuppet? インストールした後にNTPで時間合わせた?
R子 ……あ(汗)
K男 あれだけ時間合わせろと注意したのに! 人の話をちゃんと聞け〜!(おこ)
R子 ご、ごめんなさ〜い(泣)
実機を使う場合、agent/master型では時間の合わせ忘れによるエラーが多いので注意しましょう。
菅原亮(すがはら りょう)
所属:NTT OSSセンタ シニア・エキスパート
1973年生まれ。10歳の時にプログラミングに目覚める。
1994年にFM-TOWNS上でLinuxを使い始めて以来、仕事趣味問わずOSSシステムを構築するようになる。
2012年よりOSSシステムの構築自動化に取り組み始め、昔の苦労を懐かしみつつ自動化の普及促進に取り組んでいる。
個人ではNTSyslog日本語対応版など主にWindows用アプリを手掛ける。趣味は家庭菜園と料理の手動構築で愛車はシルビア。
Copyright © ITmedia, Inc. All Rights Reserved.