lpic303 Puppet 02

前回に引き続きPuppetです。

インストール後からもう1度進めたいと思いますが、前回の疑問点をさらっと。

PuppetはSSL通信が基本なのでサーバー側での署名が必要になるのですが、/etc/sysconfig/network で設定しているホスト名以外のもので認識してしまうという事があるようだ。
署名していれば通信はできるんだけど・・・

なんか腑に落ちない!

という事で、どうしてそうなるのか調べてみた。

調べてみたと言っても、自力とは言えないのだが・・・(´・ω・`)

参考サイト
YAMAGUCHI::weblog
hostnameに翻弄された日

やまぐちさんのウェブを参照したところ、rc.dで読み込んでいるスクリプトが怪しく grep で引っ張ってみたら犯人はZabbixが生成したrc.d以下のスクリプトでした。

もう使っていなかったのでZabbixはアンインストールしてみると、rc.dのスクリプトもなくなったのですが、Puppetサーバーで証明書をCleanして、もう1度認証をするとまた以前のZabbixほにゃららなホスト名で署名される・・・。

なんでやねーん。という事で、Puppetという名の付くものは全て削除(ちゃんと確認してから)して、アンインストールもしました。
んで、いまここ! という状態である。

 

まずインストールが完了した!としましょう

/etc/puppet/puppet.conf

agent 側のディレクティブに Puppet server を記述

server = secure

テストの為に、Puppetサーバー側でもAgentを起動、PuppetクライアントでもAgentを起動しています。

 

別サーバーのクライアント側からの通信は上手くいきました。

# puppet agent -t --verbose --server secure
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml

しかし、Puppetサーバー側のAgentからエラーがでました。原因は前とおなじくHostnameが一致しないというものです。

まだ悪夢は終わってはいなかった!!

Error: Could not retrieve catalog; skipping run
Error: Could not send report: Server hostname 'secure' did not match server certificate; expected one of secure.zabbix

グーグル師匠を探し回っても答えがでないと途方にくれてしまう。

どこからこのホストネームが読み込まれているのか。

[root@secure]# hostname -A
secure
[root@secure]# hostname -i
192.168.0.1
[root@secure]# hostname -s
secure
[root@secure]# hostname -f
secure
[root@secure]# hostname -v
gethostname()=`secure'
secure

どこかからか読み込まれているのです。

 

これを読んだあなた。
どうか真相を暴いてください。
それだけが私の望みです。

と思っていたら見つかった!!
読み込まれている訳ではいなくて、そうなるように設定していたようだ。
まさかのところにその答えはあった。

/etc/resolv.conf:search zabbix

なるほどね!

 

# puppet agent -t --verbose --server secure
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for secure
Info: Applying configuration version '1415058653'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.01 seconds

サクッといきました!

さっきのクライアント側のテスト結果とちょっと表示が違うんじゃない?というのはクライアント側はまだ署名していないのだ。署名をすれば大丈夫です。

resolve.conf のsearchで何故ドメインとして認識されていたのかも何となくわかったので、良かったとしよう。

あー、スッキリした。

 

ではでは、簡単なマニフェストを作成して動かしてまみます。

# cat /etc/puppet/manifests/site.pp
file { '/tmp/hello.txt':
        content => 'hello puppet world',
}

まずはPuppetサーバ側で、サーバとAgentの両方で試してみます。

# puppet apply /etc/puppet/manifests/site.pp --noop
Notice: Compiled catalog for secure in environment production in 0.11 seconds
Notice: /Stage[main]/Main/File[/tmp/hello.txt]/content: current_value {md5}19ee62e0c6b5f00aaf9b02280c0dad66, should be {md5}2f9a7210e7b5ef6bd4e455907a9df94f (noop)
# cat /tmp/hello.txt
hello puppet

# rm /tmp/hello.txt
rm: remove 通常ファイル `/tmp/hello.txt'? y
# puppet agent -t --verbose
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for secure
Info: Applying configuration version '1415059431'

# cat /tmp/hello.txt
hello puppet world

続いて離れている方のクライアント側のAgentで。

# puppet agent -t --verbose
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for centos
Info: Applying configuration version '1415059431'
Notice: /Stage[main]/Main/File[/tmp/hello.txt]/content:
--- /tmp/hello.txt      2014-11-03 13:10:54.634000062 +0900
+++ /tmp/puppet-file20141104-15251-aqk21m-0     2014-11-04 09:05:55.109999955 +0900
@@ -1 +1 @@
-hello puppet
\ No newline at end of file
+hello puppet world
\ No newline at end of file

Info: Computing checksum on file /tmp/hello.txt
Info: /Stage[main]/Main/File[/tmp/hello.txt]: Filebucketed /tmp/hello.txt to puppet with sum 19ee62e0c6b5f00aaf9b02280c0dad66
Notice: /Stage[main]/Main/File[/tmp/hello.txt]/content: content changed '{md5}19ee62e0c6b5f00aaf9b02280c0dad66' to '{md5}2f9a7210e7b5ef6bd4e455907a9df94f'
Notice: Finished catalog run in 0.05 seconds
[root@centos]# cat /tmp/hello.txt
hello puppet world#

両方とも上手くいきました。これでやっとマニフェストに進めます。

マニフェストの記述を見ていると、なんとなくDockerを思い出しますね。
またDockerか!

でもDockerFileを見ていても、インスコ後やっとけスクリプトに似ているなぁと思ったので、似てて当然ぞなもし。

何か作ろうかなぁとネット上のサンプルを見ながら、マニフェストの構成を頭に入れていってるのだけれど、vagrant というやつと連携しているものばっかりで参考にならん。
そしてaptが多い!

vagrant をちょっと見たらまたもやDockerだ。
何を調べていってもDockerが出てくるってどういうことよ~。

そういう時代なのだなあ。

 

運用方法ですが、マニフェストを更新したとして、Puppetを起動しておけば勝手に更新されていくので、管理されているAgentの入ったサーバーはマニフェストに書いてある通りの状態になり、管理しているバージョンになっているっていう事が可能です。

いろいろと連携しているようですし、基本的な記述形式を覚えたらvagrantとかも一緒に見ていくのがいいかもしれませんね。vagrantはまだ全くさわっていないので、また今度です。

これで4章、5章と完了しました。

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *