いいものをつくろう

CTOの日記

chef

chefでmacの設定をかく

投稿日:

とりあえず 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/chef-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 /Users/yeele/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 /Users/yeele/.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で書きたいと思います。

scalaenv

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変数(辞書)が構築されます

nodes

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/

 

-chef

Copyright© CTOの日記 , 2020 All Rights Reserved.