- 更新日: 2014年8月1日
- Vagrant & Chef
Chef の execute リソースでは command “source /path/to/file” がエラーになる
昨日の Chef CookbookをServerspecテスト駆動で作成(Elasticsearchインストール) | EasyRamble の作業中に一箇所だけはまったエラー。CLASSPATH 環境変数を設定して、それを即座に反映させるために “source /path/to/file” を行おうとした処理の部分です。
execute リソースでは command “source /path/to/file” と書けない
最初 execute リソース中で command “source /path/to/file” と書いていたのですがエラーになりました。まさか、これが原因でエラーになるとは考えてなかったので、少々はまってしまった。
1 2 3 4 |
execute "reflesh_classpath" do command "source /etc/profile.d/mysql-connector-java.sh" not_if "echo $CLASSPATH | grep /usr/share/java/mysql-connector-java.jar" end |
1 2 3 4 5 |
$ vagrant provision ... Error executing action `run` on resource 'execute[reflesh_classpath]' |
何回繰り返してもエラー。
“source /path/to/file” を実行するには bash, ruby, perl など他のリソースを使う
エラー文をヒントにググりまくったところ、Chef の Recipe 中で “source /path/to/file” を実行するには、script ベースのリソース(bash, csh, perl, python, ruby など)を使う必要が有ることが分かりました。以下のページに助けられた。
The execute resource cannot be used to source a file (e.g. command “source filename”). The following example will fail becausesource is not an executable:execute “foo” do
command “source /tmp/foo.sh”
endInstead, use the script resource or one of the script-based resources (bash, csh, perl, python, or ruby). For example:
bash “foo” do
code “source /tmp/foo.sh”
end
ということで、Recipe のコードを bash リソースを使うように変更。
1 2 3 4 5 6 |
bash "reflesh_classpath" do code <<-EOC source /etc/profile.d/mysql-connector-java.sh EOC not_if "echo $CLASSPATH | grep /usr/share/java/mysql-connector-java.jar" end |
これで、問題なく Recipe を適用できました。
- – 参考リンク –
- bash — Chef Docs
- execute — Chef Docs
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
Leave Your Message!