とりあえず Get startedの最初がworkstationをインストールするなので
macにそれをインストールした。新しくmacを購入したときも、まずは最初にこのchef workstationをインストールすることになる。
https://downloads.chef.io/chef-workstation/ に行って
をダウンロードしてインストールしました。dmgは140Mほどありました。実際のインストールサイズは500Mくらいありましたので
結構なサイズです。
最初Getting Startedの通りに実行しるとエラーにぶちあたりました。
Net::HTTPServerException: 412 "Precondition Failed"
となにやら、不穏な。serverとの通信なのかなーと思いましたが、結局はfolder構成でした。もう少し適切なエラーを吐いてほしいと思いました。
(py37new) 0508 16:03 ~/project/chef/cheいぇえlf-mymac > chef-client --local-mode --override-runlist first_cookbok [2020-05-08T16:03:44+09:00] WARN: No config file found or specified on command line. Using command line options instead. [2020-05-08T16:03:44+09:00] WARN: No cookbooks directory found at or above current directory. Assuming ~/project/chef/chef-mymac. Starting Chef Infra Client, version 15.8.23 [2020-05-08T16:03:57+09:00] WARN: Run List override has been provided. [2020-05-08T16:03:57+09:00] WARN: Original Run List: [] [2020-05-08T16:03:57+09:00] WARN: Overridden Run List: [recipe[first_cookbok]] resolving cookbooks for run list: ["first_cookbok"] ================================================================================ Error Resolving Cookbooks for Run List: ================================================================================ Missing Cookbooks: ------------------ No such cookbook: first_cookbok Expanded Run List: ------------------ * first_cookbok System Info: ------------ chef_version=15.8.23 platform=mac_os_x platform_version=10.15.3 ruby=ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin17] program_name=/usr/local/bin/chef-client executable=/opt/chef-workstation/bin/chef-client Running handlers: [2020-05-08T16:03:57+09:00] ERROR: Running exception handlers Running handlers complete [2020-05-08T16:03:57+09:00] ERROR: Exception handlers complete Chef Infra Client failed. 0 resources updated in 13 seconds [2020-05-08T16:03:57+09:00] FATAL: Stacktrace dumped to ~/.chef/local-mode-cache/cache/chef-stacktrace.out [2020-05-08T16:03:57+09:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report [2020-05-08T16:03:57+09:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed"
cookbookのテンプレを直接、プロジェクトフォルダー直下においていたのが間違いで、cookbooksの下に置かないといけない
ようでした。一回やったと想ったのですが、うまく行かず。repository全体をgenerateしてくれるコマンドはないかと
調べてから、やり直しました。
できた exampleをchef-clientで実行することが
(py37new) 0508 17:10 ~/project/chef/chef-mymac > chef-client --local-mode --override-runlist example [2020-05-08T17:11:15+09:00] WARN: No config file found or specified on command line. Using command line options instead. Starting Chef Infra Client, version 15.8.23 [2020-05-08T17:11:29+09:00] WARN: Run List override has been provided. [2020-05-08T17:11:29+09:00] WARN: Original Run List: [] [2020-05-08T17:11:29+09:00] WARN: Overridden Run List: [recipe[example]] resolving cookbooks for run list: ["example"] Synchronizing Cookbooks: - example (1.0.0) Installing Cookbook Gems: Compiling Cookbooks... Converging 1 resources Recipe: example::default * log[Welcome to Chef Infra Client, Sam Doe!] action write [2020-05-08T17:11:29+09:00] WARN: Skipping final node save because override_runlist was given Running handlers: Running handlers complete Chef Infra Client finished, 1/1 resources updated in 13 seconds
次は
チュートリアルにもどって
~/project/chef/chef-mymac > chef generate cookbook cookbooks/first_cookbook
default.rbいじって、そしてこう!
chef-client --local-mode --override-runlist first_cookbook
手始めに、
scalaenvをインストールする手順をchefで書きたいと思います。
git clone git://github.com/scalaenv/scalaenv.git ~/.scalaenv echo 'export PATH="${HOME}/.scalaenv/bin:${PATH}"' >> ~/.bash_profile echo 'eval "$(scalaenv init -)"' >> ~/.bash_profile
上記の3行を実行するスクリプトchefで書きたいと思います。
その場合は何のリソースを使ったらいいかと言う考え方をしますねリソースっていうのは、
fileとかbashとかexecuteとかpackageとかいろいろあります。
bash 'test' do code <<-EOH MYBASHRC=~/MISO git clone git://github.com/scalaenv/scalaenv.git ~/MISOSOUP echo 'export PATH="${HOME}/.scalaenv/bin:${PATH}"' >> ${MYBASHRC} echo 'eval "$(scalaenv init -)"' >> ${MYBASHRC} EOH end
また、brewもpublishされているcookbook
https://supermarket.chef.io/cookbooks/homebrew
から探すことができましたので、標準ではサポートされていない様々なリソースがスーパーマーケットから探すことができます。
新しくファイルを作成したい場合はtemplate resourceを使う
templateはEmbedded Ruby (ERB) templateを使っているので
構文などはそれに従います。例えば、参考までにこちら
要は
<% ... %> とか <%= ... %>
を使うわけです。
基本的な文法はhttps://docs.chef.io/ruby/をみて大体の理解をつけます
後 package %w( とか
よく見かけてchefが嫌いなりかけましたが、これはrubyの文法です(参考)
というか全てrubyの文法なので、困ったらruby関連でであの検索するのが無難だ。
基本attributesはnodeは特定のマシン・ホストの状態を表します。静的に出てくれしてもいいし、ohaiに吐いてもらったりしてnode変数(辞書)が構築されます
data_bagsはJSONで表現されていて、で検索のAPIがあってそれのために使われたりまぁまたレシピの中にロードして編集を参照したりできる。
splunk_installer splunk_package do url node['splunk']['upgrade']["#{url_type}_url"] end
適当にnodeって言う話を使ってるようだけど、この変数はattributeとかroleとか設定ファイルとかいろんなところで
設定できる
ohaiによって勝手に設定されるものもある
attributeでの設定例は
default['miso']['soup'] = "Miso Soup" default['food']['favorite'] = "I love #{node['miso']['soup']}"
とすると変数はnodeと言う変数によってアクセス可能です
node['miso']['soup']
つまり、nodeという変数はいろいろな場所で設定可能だし、最終的にohaiによって勝手に設定される可能性だって
あるし、レシピとかにはそれを想定してnodeって書きまくっていいいのです。
ダブルクウォートの中での#はルビー編集の展開です
以上です
参照参考
ruby %Wとか https://qiita.com/mogulla3/items/46bb876391be07921743
基本的な文法はhttps://docs.chef.io/ruby/