WP-CLIアドベントカレンダーの4日目です。
昨日は @tecking さんの「レンタルサーバに『WP-CLI』をサクっと入れるシェルスクリプト作ってみたよ」でした。
てわけで、今回の僕の記事はインフラ自動化フレームワーク Chef用の wp-cli レシピについて解説します。
Chef ってなんなの?って人はおググりください。
要するにインフラの構成管理を自動化するためのツールです。
wp-cli のインストールは通常公式サイトにもあるように github で公開されているリポジトリから wp-cli.phar を取ってきて実行権限を与え、パスが通っているところに置いてあげます。
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar $ chmod +x wp-cli.phar $ sudo mv wp-cli.phar /usr/local/bin/wp
ただ、これだと wp-cli のアップデートがあった時に再度手動でダウンロードして置き換えてあげないといけません。
めんどくせーですよね。
そんなわけで Chef の登場です。この github リポジトリを clone して適切にアップデートできるようにレシピを書いてあげましょう。
まず、僕の書いたレシピを置きますね。
これで /usr/share/wp-cli に wp-cli/builds を clone して、その中の phar/wp-cli.phar に実行権限を与え、/usr/local/bin/wp にシンボリックリンクを貼ってくれます。
すでに /usr/share/wp-cli に clone されている場合は git pull してきて最新の状態にしてくれるので、このレシピを走らせれば常に最新の wp-cli が使用できます。
attributes/wpcli.rb
default[:wpcli][:dir] = '/usr/share/wp-cli' default[:wpcli][:link] = '/usr/local/bin/wp'
recipes/wpcli.rb
# install wp-cli git node[:wpcli][:dir] do repository "git://github.com/wp-cli/builds.git" # revision 'master' end bin = ::File.join(node[:wpcli][:dir], 'phar', 'wp-cli.phar') file bin do mode '0755' action :create only_if { ::File.exists?(bin) } end link node[:wpcli][:link] do to bin end
attributes/wpcli.rb では、wp-cli/builds リポジトリを保存しておく場所 ( default[:wpcli][:dir] )と、wp-cli.phar のシンボリックリンクを作成する先 ( default[:wpcli][:link] )が記述されています。
では、recipes/wpcli.rb を上から見てみましょう。
git リポジトリを更新しているのは 2-5 行目です。
chef の git リソースを使用しています。これは git のリモートリポジトリと同期を取り、更新を検出してくれるため execute リソースで git コマンドを実行するよりも便利で簡単です。
実際、2-5 行目の記述だけで /usr/share/wp-cli ( node[:wpcli][:dir] ) が無かった場合、リモートリポジトリ git://github.com/wp-cli/builds.git から git clone
し、あった場合は git pull origin master
してくれます。
次に /usr/share/wp-cli/phar/wp-cli.phar に対して実行権限 ( 0755 )を設定しているのが 7-12 行目です。
7行目では、ファイルのパスを組み立て、8-12行目で chef の file リソースにより、ファイルが有った場合はパーミションを 0755 に変更しています。
最後に /usr/share/wp-cli/phar/wp-cli.phar のシンボリックリンクとして /usr/local/bin/wp ( node[:wpcli][:link] ) を作成しているのが 14-16 行目です。
これだけでいつでも最新版の wp-cli が使えますね。
それでは、良い wp-cli ライフを!
というわけで WP-CLI Advent Calendar 2014 4日目を終わります。
金曜日の日直は @shinichiN さんです、よろしくー