Subcommands

各サブコマンドで指定できるオプションはknife zero SUBCOMMAND --helpで確認できます。

zero bootstrap

knife zero bootstrap [SSH_USER@]FQDN (options)

リモートNodeの初期化を行います、次の機能をもちます。

オプションから指定したAttributesはNormal属性として永続扱いになります。

Options(抜粋)

Chef本体のknife bootstrapからオプションを引き継いでいます。本体のバージョンにより、使えるオプションは変動します。

Knife-Zeroで追加したオプションと、よく聞かれるオプションは次の通りです。

その他についてはknife zero bootstrap --helpを参照してください。

Examples

到達性と名前のパターン。

# ノードが解決可能なホスト名を持つ
$ knife zero bootstrap zero.example.com

# 任意の名前を付与
$ knife zero bootstrap zero.example.com --name zero.example.com

# ノードが解決可能なホスト名を持たない
$ knife zero bootstrap 210.152.xxx.xxx --name zero01

# SSHに使用するログイン名がubuntuで、sudoが必要
$ knife zero bootstrap 210.152.xxx.xxx --name zero01 -x ubuntu --sudo

または

$ knife zero bootstrap ubuntu@210.152.xxx.xxx --name zero01 --sudo

初回のChef-Client実行時にNormal Attributeを付与する。

# 文字列として渡す
$ knife zero bootstrap zero.example.com --json-attributes '{"mykey":"myval"}'

# ファイルから読み込む
$ knife zero bootstrap zero.example.com --json-attribute-file tmp/node.json

初回のChef-Client実行時に任意のレシピを実行する。

# 複数要素を持つランリストを指定する
$ knife zero bootstrap zero.example.com --run-list "role[base],recipe[iptables::www]"

# JSONファイルを同時に指定する
$ knife zero bootstrap zero.example.com --run-list "role[base],recipe[iptables::www]" --json-attribute-file tmp/node.json

Bootstrap済みNodeの、client.rbだけを更新。

$ knife zero bootstrap zero.example.com -N zero.example.com --no-converge

複数のNodeをGNU Parallelで同時にBootstrap。

$ parallel -j 5 knife zero bootstrap ::: nodeA nodeB nodeC...

zero converge

knife zero converge QUERY (options)

BootstrapおよびChef-Client実行済み(Node情報収集ずみ)のNodeに対して、Chef-Clientを再度実行します。
対象Nodeはクエリ結果で絞込みます。クエリの書式はknife searchSEARCH_QUERYと同一です。

Options(抜粋)

Chef本体のknife sshのほぼすべてと、chef-clientから一部のオプションを引き継いでいます。本体のバージョンにより、使えるオプションは変動します。

Knife-Zeroで追加したオプションと、よく聞かれるオプションは次の通りです。

Examples

# すべてのNodeをConverge
$ knife zero converge "name:*" --attribute knife_zero.host

# すべてのNodeをConverge、5Nodeずつ並行。
$ knife zero converge "name:*" --attribute knife_zero.host --concurrency 5

# Environment == "production" のNodeをConverge
$ knife zero converge "chef_environment:production" --attribute knife_zero.host

# 任意のランリストを使用する
$ knife zero converge "name:*" --attribute knife_zero.host --override-runlist "role[patch]"

--client-versionの使い方。

# chef-clientを実行する前に、最新バージョンに更新。
$ knife zero converge "name:*" --attribute knife_zero.host --client-version latest

# chef-clientを実行する前に、12.4.3をインストール。
$ knife zero converge "name:*" --attribute knife_zero.host --client-version 12.4.3

# chef-clientはwhy-runで実行し、変更はしない。
$ knife zero converge "name:*" --attribute knife_zero.host --client-version 12.4.3 --why-run

--json-attributesの使い方。

# JSONからAttributesをロードして、一回だけのタスクを実行する。
$ knife zero converge "name:*" --attribute knife_zero.host --json-attributes ./attrs/onetime.json --override-runlist 'role[onetime_task]'

Note:
Chefのオムニバスインストーラを使いたくない場合は--client-versionは役に立ちません。
自前でやるならknife sshで好きなコマンドを流してくればよいです。

zero apply

knife zero apply QUERY (options) (※1.12.0で追加)

BootstrapおよびChef-Client実行済み(Node情報収集ずみ)のNodeに対して、スポットで任意のレシピをChef-Applyで実行します。
対象Nodeはクエリ結果で絞込みます。クエリの書式はknife searchSEARCH_QUERYと同一です。

レシピはChef-Applyに標準入力から渡されます。

Options(抜粋)

Chef本体のknife ssh、およびzero convergeからオプションを引き継いでいます。本体のバージョンにより、使えるオプションは変動します。

zero applyで使用する主なオプションは次の通りです。

zero applyコマンド作成時のChef(12.6.0)では、chef-applyはChef-ServerからNodeオブジェクトをロードする手段がありません。
あくまで限定的な利用に留め、ChefRepoの情報が必要ならばconverge--override-runlistを利用しましょう。

Examples

# すべてのNodeにtmuxパッケージをインストール、文字列から
$ knife zero apply "name:*" -r "package 'tmux'"

# すべてのNodeのtmuxパッケージを更新、5Nodeずつ並行。
$ knife zero apply "name:*" --attribute knife_zero.host --concurrency 5 -r "package 'tmux' do action :upgrade end"

# すべてのNodeにファイルからレシピを実行
$ knife zero apply "name:*" -r @apply/maintenance.rb

zero diagnose

knife.rbから生成される設定を大まかに出力します。特にオプションはありません。 設定内容の確認やバグ報告に使います。

$ knife zero diagnose 
Chef::Config
====================
---
:local_mode: true
:knife_zero: {}
:verbosity: 
:log_location: !ruby/object:IO {}
:config_file: "/Users/sawanoboriyu/github/higanworks/knife-zero_playground/knife.rb"
:color: true
:log_level: :warn
:chef_repo_path: "/Users/sawanoboriyu/github/higanworks/knife-zero_playground"
:chef_server_url: chefzero://localhost:8889
:repo_mode: everything

Knife::Config
====================
---
:verbosity: 0
:color: true
:editor: vim
:disable_editing: false
:format: summary
:remote_chef_zero_port: 
:config_file: "/Users/sawanoboriyu/github/higanworks/knife-zero_playground/knife.rb"

Zero Bootstrap Config
====================
---
:encrypt: false
:ssh_user: root
:run_list: []
:first_boot_attributes: {}
:host_key_verify: true
:remote_chef_zero_port: 
:bootstrap_converge: true

Zero Converge Config
====================
---
:concurrency: 
:manual: false
:ssh_password_ng: false
:host_key_verify: true
:remote_chef_zero_port: 
:use_sudo: true
:override_runlist: 
:config_file: "/Users/sawanoboriyu/github/higanworks/knife-zero_playground/knife.rb"
Fork me on GitHub