プレイヤーズ・ハイ

 雑多な日記

Chef 小ネタ その一

Chef Server の構築と運用についてブログを書こうと思っているものの、中々まとまって時間が取れないため、小ネタを 2 つほど紹介します。

knife-opc について

knife の設定を正しく終えている Chef Workstation 環境で knife opc コマンドが使えずに困っていた。 具体的には以下のとおり。

$ knife opc user list
ERROR: You authenticated successfully to https://CHEF_SERVER_NAME/organizations/CHEF_ORG_NAME as CHEF_ADMIN_NAME but you are not authorized for this action
Response:  missing read permission

knife.rb に chef_server_url も chef_server_root も正しく指定しているのに、だ。

以下を読むと分かるのだが、

chef/knife-opc https://github.com/chef/knife-opc

knife opc コマンド実行時は、pivotal という Chef Client 名で認証するようだ。

よって sudo chef gem install knife-opc しておいて、以下のコマンドで目的を達成できた。

$ sudo knife opc user list --key /etc/opscode/pivotal.pem --user pivotal

だが、上記のドキュメントにも書いてあるのだが、chef-server-ctl コマンドが knife opc コマンドの管理者としてのアクションのラッパーになっており、こちらを使用するのが推奨されている。 上記コマンドと同じことをしたいなら、以下のようにする。

$ sudo chef-server-ctl user-list

レシピにおける not_if "grep ..." の書き方

シェルでは以下のように grep できるとする。

$ grep 'export PATH="/opt/chefdk/embedded/bin:$PATH"' ~/.bash_profile
export PATH="/opt/chefdk/embedded/bin:$PATH"

ところがこれを bash resource のガード条件として以下のように not_if で書くと syntax error になる(syntax error, unexpected tLABEL)。

not_if "grep 'export PATH="/opt/chefdk/embedded/bin:$PATH"' ~/.bash_profile

解消法は、単純に、ダブルクォーテーションをエスケープするだけ。

not_if "grep 'export PATH=\"/opt/chefdk/embedded/bin:$PATH\"' ~/.bash_profile

Chef活用ガイド コードではじめる構成管理

Chef活用ガイド コードではじめる構成管理

  • 作者: 澤登亨彦,樋口大輔,クリエーションライン株式会社
  • 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
  • 発売日: 2014/04/25
  • メディア: 大型本
  • この商品を含むブログ (1件) を見る

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code