cinc-client をつかいたい

Chef Infra Clientの初回実行時や、バージョンアップのたびにライセンスに同意するオプションを付けるのが面倒な場合、リモートノードではコミュニティビルドパッケージ版のCnic-Clientを使うこともできます。

https://gitlab.com/cinc-project/client

この情報は2019年10月時点のもので、Cnicパッケージプロジェクトは始まったばかりです。配布の方法など現状とちがっているかもしれません。

cnic-clientchef-clientからエントリーポイントと設定ディレクトリを/etc/chefから/etc/cincに変更しただけのパッケージです。
そのため、下記2箇所をsymlinkでつないでしまえば、knife-zeroからみて全くおなじように扱うことができます。

bootstrap時からcinc-clientを使用する場合

bootstrapにはもともと便利なオプションが用意されているので、それを使うだけでcnicをインストールすることができます。

パッケージは http://downloads.cinc.sh で配布されています。

もともとのChef Infra Clientのようにディストリビューションを自動判定するインストーラーがまだ無いので、パッケージを自分で指定するとよいでしょう。

以下はUbuntu 16.04のノードをbootstrapするサンプルです。

$ knife zero bootstrap ${YOUR_NODE_IP} \
  --sudo \
  -N my-ubuntu16 \
  --bootstrap-preinstall-command "sudo ln -sf /usr/bin/cinc-client /usr/bin/chef-client && sudo mkdir -p /etc/cinc && sudo ln -sf /etc/cinc /etc/chef" \
  --bootstrap-install-command "wget http://downloads.cinc.sh/files/stable/cinc/ubuntu/16.04/cinc_15.3.14-1_amd64.deb && sudo dpkg -i cinc_15.3.14-1_amd64.deb && rm -f cinc_15.3.14-1_amd64.deb"

問題なく適用できました。

$ knife node show my-ubuntu16
Node Name:   my-ubuntu16
Environment: _default
FQDN:        ubuntu-xenial
IP:          xx.xx.xx.xx
Run List:    
Roles:       
Recipes:     
Platform:    ubuntu 16.04
Tags:        

このbootstrap設定を設定ファイル(knife.rbconfig.rb)に永続化する場合、次のように書いておくことができます。

knife[:bootstrap_preinstall_command] = 'sudo ln -sf /usr/bin/cinc-client /usr/bin/chef-client && sudo mkdir -p /etc/cinc && sudo ln -sf /etc/cinc /etc/chef'
CINC_VERSON = ENV['CINC_VERSON'] || '15.3.14-1'
knife[:bootstrap_install_command] = "wget http://downloads.cinc.sh/files/stable/cinc/ubuntu/16.04/cinc_#{CINC_VERSON}_amd64.deb && sudo dpkg -i cinc_#{CINC_VERSON}_amd64.deb"

cnic-clientのバージョンを変更する

knife sshで任意のパッケージを入れたらよいです。

$ knife ssh "name:my-ubuntu16" "wget http://downloads.cinc.sh/files/stable/cinc/ubuntu/16.04/cinc_15.3.14-1_amd64.deb && sudo dpkg -i cinc_15.3.14-1_amd64.deb && rm -f cinc_15.3.14-1_amd64.deb"

すでにChef Infra Clientが稼働しているノードをCincに入れ替える

まずknife sshでChef Infra Clientを削除します。

$ knife ssh "name:my-ubuntu16" "sudo dpkg -r chef"
(Reading database ... 72883 files and directories currently installed.)
xxx.xxx.xxx.xxx Removing chef (15.3.14-1) ...

/etc/chefは残っているので、再利用しましょう。リンクの貼り方がbootstrapと少し違いますね。

$ knife ssh "name:my-ubuntu16" "sudo ln -sf /usr/bin/cinc-client /usr/bin/chef-client && sudo ln -sf /etc/chef /etc/cinc"

最後にバージョン変更とおなじように任意のパッケージを入れましょう

$ knife ssh "name:my-ubuntu16" "wget -nv http://downloads.cinc.sh/files/stable/cinc/ubuntu/16.04/cinc_15.3.14-1_amd64.deb && sudo dpkg -i cinc_15.3.14-1_amd64.deb && rm -f cinc_15.3.14-1_amd64.deb"

...

xxx.xxx.xxx.xxx Thank you for installing cinc, the community build based on Chef!

動作確認のため、knife zero convergeをしてみましょう。

$ knife zero converge "name:my-ubuntu16"
xxx.xxx.xxx.xxx Starting Cinc Client, version 15.3.14

...

xxx.xxx.xxx.xxx  Cinc Client finished, x/xxx resources updated in xx seconds
Fork me on GitHub