datchの日記

気がついたら社会人。気になる技術的なことについて少しずつ書いていけたらと思っております。

Vagrant の仕組み上で Puppet をシンプルに導入しようとした話

そろそろミドルウェアだけでなく、ソフトウェア開発の方にも手を出そうと思い、学んだPuppetをVagrant上で利用したら以外と面倒だったのでメモ.

環境



A list of base boxes for Vagrant - Vagrantbox.es から入手した CentOS7 のデフォルト環境.

VagrantでPuppetを動作させるためには



PuppetがゲストOSにインストールされている必要がある。
となると、PuppetでゲストOSの起動時には必要な構成が出来上がっていて欲しいのに

  1. Puppetでプロビジョニングせず(正確にはできなくて)にゲストOSを起動
  2. ゲストOSにアクセス
  3. Puppetをインストール
  4. ゲストOSを抜ける
  5. Puppetでプロビジョニングを行う

という上記のような面倒な工程を踏まなければならない。
環境構築に関してはPuppetに完全に委譲したいのに、Puppetを動作させるための環境構築が必要という工程が入って手間。

Vagrantの起動時にPuppetを動作させる手段



自分が把握しているところでは以下の通り。
他にもあるようなら教えて欲しいです。

  1. Vagrantのbox作成機能で、Puppetを実行できる構成のboxファイルを用意する
  2. Puppetのプロビジョニング実行前に、コマンドラインプロビジョニングでPuppetを実行できる状態にする
  3. petems/vagrant-puppet-install · GitHub を使う
それぞれのメリット

1. Boxファイルさえ用意してしまえば良い
2. 同じコマンドが使用できれば、どのようなゲストOSにも適応できる.
3. 2をラップして様々なゲストOSで動作させられるような工夫が凝らされており、今後機能が拡張される可能性がある.

それぞれのデメリット

1. ゲストOSのバージョンを変更するたびにBoxファイルを作成しなければならない.
2. 冪等性が担保できず、ゲストOSによってコマンドが異なる可能性がある(i.e. yum, apt-getなど). シェルスクリプトの質によって、利便性が変わる.
3. エラーの調査など、元のソースコードの調査が必要になる.


と、こんなところな気がするんだけど、シェルスクリプトへの理解向上と.3の手法がエラーで詰まって調査が手間だったので.2の手法で頑張ってみる.

Puppetをコマンドでインストールする



今回はCentOSを使用しているので、yumを使用してpuppetをインストールを行っていきたい.
ただし、デフォルトではpuppetはyumレポジトリには含まれていない.
そこで、今回はPuppetlabsに公開されているrpmをインストールすることで、yumでpuppetを参照可能にする.

$ rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-11.noarch.rpm

このrpmhttps://yum.puppetlabs.com/ いかに公開されているので、自分のOSとバージョンに合うものを使用してほしい.
これで、puppetのインストールが可能になるので、上を参考にして以下のようにVagrantfileに記述する.

  config.vm.provision "shell", inline: <<-SHELL
    rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-11.noarch.rpm
    sudo yum install -y puppet
  SHELL

  config.vm.provision "puppet" do |puppet|
    # うえのコマンドによりpuppeがインストールされているので、puppetのプロビジョニングが正常に行える
  end

最後に



本当ならvagrant-puppet-installのvagrantプラグインを使えると、puppet自体のバージョン管理やOSによるコマンドの違いを意識する必要もなくなるのだけど、今回はとりあえず応急処置ということで。