Chefを含め、最近のMicrosoftはオープンソースソフトウェアに対して非常に友好的になってきました。いろんなOSSとの連携にリソースを注ぎ込んでいます。Chefもその一つで、Chef ClientやWorkstationとしてWindowsが使えるようになってきました。今回はWindows 10でCygwinなどのエミュレータを使わずにWorkstation環境を構築してみます。
1. Chef Development Kit (Chef DK)のインストール
Chef本家サイトのWindows用Chef DKダウンロードサイトからWindows用のChef DKインストーラーをダウンロードします。(317MBくらいのサイズがあります。)ダウンロード後、インストーラーファイルをダブルクリックしてインストールを開始します。ウィザードではライセンス規約に承諾したうえで、基本的にすべてデフォルトのオプションでインストールします。
まずはインストーラーを起動し、「Next」をクリックします。
次に、ライセンスに許諾する旨のチェックボックスをクリックした後、「Next」をクリックします。
次に、インストールするコンポーネントを選択します。ここではデフォルト設定のまま「Next」をクリックします。
最後に、「Install」をクリックしてインストールを開始します。UACによる管理者権限を求められた際は「Yes」と答えるもしくは管理者ユーザーのID/パスワードを入力します。
インストールが完了したら「Finish」をクリックしてインストールを終了します。
2. Chef開発用の環境設定
WindowsではPowerShellを用いてChef Workstation環境を設定します。まず、スタートメニューから「Windows PowerShell」>「Windows PowerShell」をクリックしてPowerShellを開始します。そして、Scriptの実行ポリシーが「RemoteSigned」になっていることを確認します。
PS C:\> Get-ExecutionPolicy RemoteSigned
次に、現在のセッションでChef Workstation用の環境変数を設定するためのコマンドを実行します。
PS C:\> chef shell-init powershell | Invoke-Expression
次回以降PowerShellを起動した際に常に環境変数が設定されるようにするために、プロファイルに各種変数を追加する設定を行います。
if(Test-Path $PROFILE){ chef shell-init powershell | Add-Content $PROFILE } else { New-Item -Force -ItemType File $PROFILE; chef shell-init powershell | Add-Content $PROFILE }
このコマンドでは、プロファイルの実体であるC:\Users\(ユーザー名)\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
に以下のような内容を追記しています。
$env:PATH="C:/opscode/chefdk/bin;C:/Users/(UserName)/AppData/Local/chefdk/gem/ruby/2.1.0/bin;C:/opscode/chefdk/embedded/bin;C:/opscode/chefdk/bin;C:/Users/(UserName)/AppData/Local/chefdk/gem/ruby/2.1.0/bin;C:/opscode/chefdk/embedded/bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Users\(UserName)\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\Skype\Phone\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\opscode\chefdk\bin\;C:\Users\(UserName)\AppData\Local\Microsoft\WindowsApps;;C:\Program Files (x86)\Microsoft VS Code\bin" $env:GEM_ROOT="C:/opscode/chefdk/embedded/lib/ruby/gems/2.1.0" $env:GEM_HOME="C:/Users/(UserName)/AppData/Local/chefdk/gem/ruby/2.1.0" $env:GEM_PATH="C:/Users/(UserName)/AppData/Local/chefdk/gem/ruby/2.1.0;C:/opscode/chefdk/embedded/lib/ruby/gems/2.1.0"
3. GitHub Desktopのインストールと設定
WindowsでもCookbookの管理にはGitを利用するため、GitHub Desktopをインストールします。こちらのサイトからインストーラーをダウンロードします。
ダウンロードが完了すると自動的にアプリケーションが起動しますので、「Skip Setup」をクリックします。
4. Starter Kitの展開とChef Serverとの接続設定
必要なアプリケーションのインストールが完了したら、CentOS7版のChef Workstation構築手順に従って、Chef Starter Kitをダウンロードし、ZIPファイルを展開します。展開するとchef-repo
フォルダが作られるので、C:\Users\(ユーザー名)
配下に移動します。その後、Cookbookを管理できるよう、初期化コマンドを実行します。
PS C:\Users\(ユーザー名)> chef generate app chef-repo Installing Cookbook Gems: Compiling Cookbooks... Recipe: code_generator::app * directory[C:/Users/aniku/chef-repo] action create (up to date) * template[C:/Users/aniku/chef-repo/.kitchen.yml] action create - create new file C:/Users/aniku/chef-repo/.kitchen.yml - update content in file C:/Users/aniku/chef-repo/.kitchen.yml from none to 990d40 (diff output suppressed by config) * directory[C:/Users/aniku/chef-repo/test/integration/default/serverspec] action create - create new directory C:/Users/aniku/chef-repo/test/integration/default/serverspec * directory[C:/Users/aniku/chef-repo/test/integration/helpers/serverspec] action create - create new directory C:/Users/aniku/chef-repo/test/integration/helpers/serverspec * cookbook_file[C:/Users/aniku/chef-repo/test/integration/helpers/serverspec/spec_helper.rb] actio n create_if_missing - create new file C:/Users/aniku/chef-repo/test/integration/helpers/serverspec/spec_helper.rb - update content in file C:/Users/aniku/chef-repo/test/integration/helpers/serverspec/spec_helpe r.rb from none to d85df4 (diff output suppressed by config) * template[C:/Users/aniku/chef-repo/test/integration/default/serverspec/default_spec.rb] action cr eate_if_missing - create new file C:/Users/aniku/chef-repo/test/integration/default/serverspec/default_spec.rb - update content in file C:/Users/aniku/chef-repo/test/integration/default/serverspec/default_sp ec.rb from none to 680eed (diff output suppressed by config) * template[C:/Users/aniku/chef-repo/README.md] action create - update content in file C:/Users/aniku/chef-repo/README.md from 2b98f1 to 89b1cf (diff output suppressed by config) * directory[C:/Users/aniku/chef-repo/cookbooks] action create (up to date) * directory[C:/Users/aniku/chef-repo/cookbooks/chef-repo] action create - create new directory C:/Users/aniku/chef-repo/cookbooks/chef-repo * template[C:/Users/aniku/chef-repo/cookbooks/chef-repo/metadata.rb] action create - create new file C:/Users/aniku/chef-repo/cookbooks/chef-repo/metadata.rb - update content in file C:/Users/aniku/chef-repo/cookbooks/chef-repo/metadata.rb from none to c ca490 (diff output suppressed by config) * cookbook_file[C:/Users/aniku/chef-repo/cookbooks/chef-repo/chefignore] action create - create new file C:/Users/aniku/chef-repo/cookbooks/chef-repo/chefignore - update content in file C:/Users/aniku/chef-repo/cookbooks/chef-repo/chefignore from none to 15 fac5 (diff output suppressed by config) * cookbook_file[C:/Users/aniku/chef-repo/cookbooks/chef-repo/Berksfile] action create - create new file C:/Users/aniku/chef-repo/cookbooks/chef-repo/Berksfile - update content in file C:/Users/aniku/chef-repo/cookbooks/chef-repo/Berksfile from none to 9f0 8dc (diff output suppressed by config) * directory[C:/Users/aniku/chef-repo/cookbooks/chef-repo/recipes] action create - create new directory C:/Users/aniku/chef-repo/cookbooks/chef-repo/recipes * template[C:/Users/aniku/chef-repo/cookbooks/chef-repo/recipes/default.rb] action create - create new file C:/Users/aniku/chef-repo/cookbooks/chef-repo/recipes/default.rb - update content in file C:/Users/aniku/chef-repo/cookbooks/chef-repo/recipes/default.rb from no ne to e5be2c (diff output suppressed by config) * directory[C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/unit/recipes] action create - create new directory C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/unit/recipes * cookbook_file[C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/spec_helper.rb] action create_if _missing - create new file C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/spec_helper.rb - update content in file C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/spec_helper.rb from n one to 587075 (diff output suppressed by config) * template[C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/unit/recipes/default_spec.rb] action create_if_missing - create new file C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/unit/recipes/default_spec.rb - update content in file C:/Users/aniku/chef-repo/cookbooks/chef-repo/spec/unit/recipes/default_ spec.rb from none to 708af0 (diff output suppressed by config)
そして、~\chef-repo\
以下にある.chef
フォルダをGit管理対象外にするよう~\chef-repo\.gitignore
の最終行に.chef
と追記します。
次に、Chef ServerのSSL証明書を信頼するよう設定します。
PS C:\Users\(ユーザー名)> cd .\chef-repo\ PS C:\Users\(ユーザー名)\chef-repo> knife ssl fetch WARNING: Certificates from chefserver will be fetched and placed in your trusted_cert directory (c:\users\(ユーザー名)\chef-repo\.chef\trusted_certs). Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading. Adding certificate for chefserver in c:\users\(ユーザー名)\chef-repo\.chef\trusted_certs/chefserver.crt
以上で、Chef Serverと接続する準備が完了しました。
5. Chef Serverとの接続確認
CentOS7の時と同じknife
コマンドで接続確認を実施します。
PS C:\Users\(ユーザー名)\chef-repo> knife user list chef-admin PS C:\Users\(ユーザー名)\chef-repo> knife client list takanyan-validator
これで、Windows端末からでもChefのCookbook開発や管理ができる環境が整いました。