Whimlog

寝るまでが一日

docker-puppet-playground の紹介

docker-puppte-playground をリリースしました

Puppet5 がリリース されたので、docker で遊べる環境を作りました。

github.com

Puppet5 を使って Puppet の入門環境が作れます。 docker の使い方をリハビリするついでに、puppet5 の環境を作ってしまおうと思い作成しました。

できること

使い方は README に全部書きましたが、何ができるかを紹介します。 Standalone mode、librarian-puppet を使った module 管理、Agent/Master mode の3つを体験できます。 Agent/Master モードは docker-compose の機能を活用して、シュッと使えるようにしました。なので、puppetserver の起動を行なうだけで manifests の適用を体験できます。

docker について

Docker のベースイメージも docker hub にアップロードしてあります。 この docker-puppet-playground では、以下の2つのベースイメージを利用しています。

asuforce/puppet, asuforce/puppetserver

つまづいたこと

Puppet 5.0.0 がリリースされた直後にこの PR で作成を始めた所、以下の Puppet module コマンドのバグに遭遇しました。

[PUP-7738] "bundle exec puppet module install" fails on Puppet 5.0.0 - Puppet Tickets

bundler 経由で puppet module install が実行されると失敗するというものでした。 これはグローバルにインストールした librarian-puppet を実行するという方法で回避しました。

現在は、Puppet 5.0.1 がリリースされているためこの問題は修正されました。 docker-puppet-playground もバージョンアップに対応済みです。

まとめ

docker と puppet の基本的な使い方を学ぶにはちょうどいい感じのものになっているので、どちらか勉強してみたい人はぜひ使ってみてください。

Puppet 3 to 4 tips

refs: Puppet 3.x to 4.x: Get upgrade-ready

puppet 3から puppet 4への移行作業の途中で遭遇した tipsを2つ紹介します。

検証環境

refs: Atlas puppetlabs

環境はvagrantで簡単に作成できます。

puppetのバージョンを厳密にしたい場合は以下のようにプロビジョン時にアップデートするようにすると良いと思います。

config.vm.provision "shell", inline: "yum install -y https://yum.puppetlabs.com/el/7/products/x86_64/puppet-3.8.7-1.el7.noarch.rpm"

公式のyumこちらになります。

stringify_facts = true

refs: stringify_facts = true

このオプションはpuppet 4ではfalseになっています。 facterの値が falseと返ってきた場合、文字列の falseで比較できていた部分ができなくなります。 Puppet 4では、 bool値はシングルクオートで囲めないのと facterで返ってくる stringを boolに変換することで対応します。

sample code

-if $::facter == 'false' {
+if str2bool($::facter) == false {

call_function

refs: cannot call 4.x functions from 3.x function ERB templates

hieraの情報をテンプレートファイルから読み出す事があると思います。 その際にfunction_hieraで呼び出していた場合、この関数はpuppet 4では使えないのでcall_functionに置き換える必要があります。

error messega

Detail: hiera() has been converted to 4x API

sample code

- user_data: "<%= scope.function_hiera(['fuga::user_data']) %>"
+ user_data: "<%= scope.call_function('hiera', ['fuga::user_data']) %>"

上記の方法は、puppet 3.8.2以上でないと動きません。3.8.2以下の場合は manifests上で変数を定義するといった方法でこのエラーを回避できます。

まとめ

puppetのバージョンアップ作業はまだ途中なのですが、これらを見つけるのにもとても時間がかかりました。 同じ作業をする方がいれば参考になればと思います!

デザイン変更した

なんとなく前のデザインに飽きたので、シンプルなデザインテンプレートに変えました。 懐かしい感じのブログっぽくなりました。 あと右下のContentsにOld Whimlogを追加しました。 昔にやってたやつです(といっても数えられる程度しか記事がないですが... 思えばトータルでブログを続けている期間は結構あって、小学生の頃にyahooブログを始めた所が一番最初になります。 そのあとFC2、忍者ブログ、楽天tumblrwordpress(順不同)と渡り歩いてきました。 熱意があると長文が書けるタイプっぽいので、これからも楽しいと思ったことを書きたいという小並感で終わります。