はじめに
- あけましておめでとうございます
- 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
を見るようにするとイイ感じ