- サーバの静的な状態を管理すること = インストールされているミドルウェアや設定等
- puppet
- chef
- ansible
- 宣言的「何をしたいかであって、どうするかではない」
- 具体的なコマンドを書くわけでは無い
- 抽象化「貴方の代わりに面倒を見てくれる」
- 具体的なコマンドは勝手にやってくれる
- 冪当性「必要な時だけ実行する」
- 収束化「放っておけばどうにかなる」
- 途中で手を出さなくても良い
- 冪当性、収束化 -> いらないんでは?
- 冪当性 = 状態が不定なので実行が必要かを判断する = Immutableだと不定では無い
- 収束化 = 不定な状態を一定の状態に収束させる = Immutableだと不定では無い
- -> もっとシンプルに出来るんでは?
- -> Immutableなんだから、手動でイメージ作っとけばいいんじゃない?
- -> でも再現可能な手順は残しておきたい
- 手順書でもいいけど、実行可能なコードのほうがいいよね
- シェルスクリプトやDockerfileでどうよ
- Dockerfile = コマンドを羅列している = シェルスクリプトと同じ
- 抽象化はしたい = やっぱり構成管理ツールは必要
- ツール自体はよりシンプルで良い(冪当性、収束化は不要
とりあえず作ってみたサンプル的なもの
configspecよりシンプルに記述
- 実行形式の差異
- OS/ディストロの違い これらを吸収してくれるフレームワーク
require ’specinfra’
include SpecInfra::Helper::DetectOS
include SpecInfra::Helper::Exec
backend.install ‘apache2’
require ’specinfra’
require ’net/ssh'
include SpecInfra::Helper::DetectOS
include SpecInfra::Helper::SSH
SpecInfra.configuration.ssh
= Net::SSH.start(‘example.com’, ‘root’, {{})
backend.install ‘apache2’
require ’specinfra’
include SpecInfra::Helper::ubuntu
include SpecInfra::Helper::Dockerfile
backend.from ‘ubuntu’
backend.install ‘apache’
require ’specinfra’
include SpecInfra::Helper::ubuntu
include SpecInfra::Helper::ShellScript
backend.install ‘apache’
- serverspecを使っていれば気にしなくていい領域だった = ので整備されていない
- serverspec = テストするためのものなので、それようの機能は充実している = 構成管理用はいまいちたりてない
- serverspecとの切り分け