はじめに
- あけましておめでとうございます
- 2014 年も宜しくお願い致します
- 昨年末に
boxenをいじり始めて疑問が幾つか湧いてきたのでメモ - 結局のところ
puppetに辿り着いたのでpuppetについてもメモ
include と class の違い
個別設定な設定を書く manifest を見ると include があったり class があったりで「何が違うんだ...」と悩んだけど以下のように整理出来た。
includeはincludeしたclassのデフォルト値が適用されるclassで書けばclassの定義をカスタマイズ出来る
ベースが puppet なので結局は各々の manifest を確認することが一番の解決への近道。但し、自分の日本語が下手すぎるので以下例を示す。(README.md にも同じことが書かれている)
まずは osx::dock::position が定義された manifest はこちら。(一部抜粋)
class osx::dock::position($position = 'right') { include osx::dock boxen::osx_defaults { 'position': domain => 'com.apple.dock', key => 'orientation', type => 'string', value => $position, user => $::boxen_user, notify => Exec['killall Dock']; } }
例えば...osx::dock::position を include する場合には以下のように書く。
include osx::dock::position
この場合にはデフォルトの right が適用されるので boxen --no-fde すると以下のように Dock が右側に表示されるようになる。

class を使って osx::dock::position を再定義したい場合には以下のように書く。
class { 'osx::dock::position':
position => 'left'
}
この状態で boxen --no-fde すると...

おお。
泣く泣く exec リソースを使う
aws-cli を利用したかったので以下のように exec リソースを使って書いた。unless 使って既にインストール済みを判断して exec は実行されないようにする。
exec {
'pip install awscli':
cwd => '/tmp',
path => [ '/bin','/usr/bin','/opt/boxen/homebrew/bin' ],
unless => ['which aws 2>/dev/null']
}
chef でも puppet でも処理の中で直接シェルを叩くようなリソース(exec や execute)を出来るだけ使わないようにしたいのだけど泣く泣く使う場合にはここを参考にしてちょっとした工夫(既にパッケージがインストール済みだった場合にはインストール処理を行わないなど...)してみたり。
最後に
- 今年も宜しくお願い致します
- AppStore で購入済みのアプリケーションを
packageで管理出来たら嬉しいなと思ったり - ん?って思ったら
manifestを見るようにするとイイ感じ