ようへいの日々精進XP

よかろうもん

もう 2014 年だけど boxen を独りで使ってみる

はじめに

  • あけましておめでとうございます
  • 2014 年も宜しくお願い致します
  • 昨年末に boxen をいじり始めて疑問が幾つか湧いてきたのでメモ
  • 結局のところ puppet に辿り着いたので puppet についてもメモ

include と class の違い

個別設定な設定を書く manifest を見ると include があったり class があったりで「何が違うんだ...」と悩んだけど以下のように整理出来た。

  • includeinclude した 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::positioninclude する場合には以下のように書く。

include osx::dock::position

この場合にはデフォルトの right が適用されるので boxen --no-fde すると以下のように Dock が右側に表示されるようになる。

f:id:inokara:20140101105359p:plain

class を使って osx::dock::position を再定義したい場合には以下のように書く。

  class { 'osx::dock::position':
    position => 'left'
  }

この状態で boxen --no-fde すると...

f:id:inokara:20140101110607p:plain

おお。


泣く泣く 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 でも処理の中で直接シェルを叩くようなリソース(execexecute)を出来るだけ使わないようにしたいのだけど泣く泣く使う場合にはここを参考にしてちょっとした工夫(既にパッケージがインストール済みだった場合にはインストール処理を行わないなど...)してみたり。


最後に

  • 今年も宜しくお願い致します
  • AppStore で購入済みのアプリケーションを package で管理出来たら嬉しいなと思ったり
  • ん?って思ったら manifest を見るようにするとイイ感じ