SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所

構成管理ツール「Chef」の一歩進んだ使い方 ―独自のResourceを定義する―

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所 第12回

  • X ポスト
  • このエントリーをはてなブックマークに追加

独自のResourceを定義する

 Chefでは、Light Weight Resources and Providors(LWRP)を使うことで、独自のResourceが定義できます。LWRPは軽量なフレームワークであり、導入も簡単です。

LWRPの構成要素

 LWRPは、ResourceとProviderの2つのコンポーネントで構成されています。下記で詳しく説明します。

Resource

 Resourceはその名のとおり、Recipe内で使用するResourceの定義が可能です。Resourceは3種類のDSLを用いて実装します。

DSL名 説明
actions Resourceで使用可能なactionを定義します。
定義されたactionはrecipe内で指定することができます。
先頭で示したfile Resourceの例では action :create 部分が該当します。
default_action recipe内でactionが指定されなかった場合に実行するデフォルトのactionを指定できます。
attribute recipeで指定することができる独自のパラメータを定義できます。
先頭で示したfile Resourceの例では owner, group, modeがattributeに該当します。

Provider

 Providerでは、Resourceで定義したactionの処理内容をRubyのメソッドのように実装していきます。例えば、先頭で示したfile Resourceではcreateのactionが呼び出された際に、指定されたパスに実際のファイルを作成する処理の内容がProviderに定義されます。

rbenv用のResourceを定義する

 ここからLWRPを使って、rbenvのCookbook内に独自のResourceを定義します。以下のような内容でResourceを定義していきます。

  • 対象OSはCentOS/RHELとUbuntu/Debianとします
    • rbenvのインストールコマンド自体はCentOS/RHELとUbuntu/Debianは同一ですが、パッケージインストールをプラットフォームごとに分割する必要があります
  • Resourceは「rbenv_settings」としてRecipeから呼び出せるようにします
  • 定義するactionは前項目で定義したRecipeと同じくinstall_rbenv,install_rubyの2つとします
  • install_rubyではインストールするRubyのバージョンを必須パラメータとします

 これらを踏まえ、最終的に作成されるディレクトリ構成は下記のようになります。

├── attributes
├── definitions
├── files
│   └── default
├── libraries
├── metadata.rb
├── providers
│   └── settings.rb  ・・・ 今回新規に作成するProvider
├── recipes
│   └── default.rb  ・・・ 動作確認のためのRecipe
├── resources
│   └── settings.rb  ・・・ 今回新規に作成するResource
└── templates
    └── default

Resource定義

 上記に示した条件でResourceを定義します。

resources/settings.rb
actions        :install_rbenv, :install_ruby
default_action :install_rbenv
attribute      :version,       :required => true,  :kind_of => String
attribute      :install_dir,   :default => '/opt', :kind_of => String

 1行目にはこのResourceで使用可能なactionの一覧を定義しています。

 2行目にはRecipe内でaction指定がない場合にinstall_rbenvを実行するようにデフォルトactionを定義しています。

 3行目にはrbenvを使ってインストールするRubyのversionをString型で必須なパラメータとして定義しています。必須パラメータは、Provider内のactionブロックで定義を使っている場合にチェックされます。

 4行目にはrbenvをインストールするディレクトリを定義しています。実行時にinstall_dirを指定しなかった場合は、/optにrbenvをインストールするようにデフォルト値を定義しています。

 今回作成するサンプルのResourceはこれだけで定義できます。attributeでは、その他にもパラメータを使うことが可能です。その他使用可能なパラメータの詳細については、Chefの公式ドキュメントを参照してください。

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
近未来の技術トレンドを先取り! 「Tech-Sketch」出張所連載記事一覧

もっと読む

この記事の著者

秋穂 賢(TIS株式会社)(アキホ スグル)

TIS株式会社 戦略技術センター所属。TIS入社後の4年間、メインフレームを用いた大規模基幹システムのシステム管理や運用業務に従事。その後OSSの世界に飛び込み、推奨OSSミドルウェアスタック「ISHIGAKI Template」の開発やデザイン指向クラウドオーケストレーションソフトウェア「CloudConductor」の開発を経て、現在はOSSサポートビジネス立ち上げに携わっている。また、OSSの活動の一環でJobSchedulerと出会い、日本JobSchedulerユーザ会でも活動をしている。TISでは技術情報をブログ「Tech-Sketch」にて発信中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7767 2014/05/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング