layout | lang | title |
---|---|---|
page-ja |
ja |
Subcommands |
各サブコマンドで指定できるオプションはknife zero SUBCOMMAND --help
で確認できます。
knife zero bootstrap [SSH_USER@]FQDN (options)
リモートNodeの初期化を行います、次の機能をもちます。
- NodeにChef-Clientをインストールする。
- コンフィグ(client.rb)ファイルを設置または更新する。
- Chef-Clientを実行する。
- 任意のAttribute(JSON)、run-listを指定可能。
- スキップ可能。
オプションから指定したAttributesはNormal属性として永続扱いになります。
Chef本体のknife bootstrap
からオプションを引き継いでいます。本体のバージョンにより、使えるオプションは変動します。
Knife-Zeroで追加したオプションと、よく聞かれるオプションは次の通りです。
--converge/--no-converge
- Bootstrapコマンド実行時に、Chef-Clientを実行するかしないか切り替えます。
- Bootstrap済みのNodeには、
client.rb
のみ書き換えることができます。
-N, --node-name NAME
(ChefCore)- Bootstrapするノードに任意の名前を付与します。
- Searchクエリし易い名前をつけることができます。
-j JSON_ATTRIBS, --json-attributes
(ChefCore)- JSON文字列をNodeのAttributeとして与えます。
--json-attribute-file FILE
--json-attributes
とすることは一緒ですが、こちらはJSONファイルを指定します。- 文字列とファイルを同時に指定することはできません。
--remote-chef-zero-port
- リモートNodeでポートフォワードに使用するポートです。 (デフォルト: 18889)
- 18889が他のサービスで使用されている場合に指定します。
-r, --run-list RUN_LIST
(ChefCore)- Bootstrap時に実行するレシピのランリストです。
--sudo
(ChefCore)- リモートNodeでChef-Clientの実行にsudoを使います。
-W, --why-run
- Chef-Clientの実行をWhy-Runモードで行います。
- Chefのインストール、設定変更までは実際に行われます。
--appendix-config PATH
- リモートノードの
client.rb
の最後に指定したファイルの内容を追加します。
- リモートノードの
--[no-]overwrite
- 既に同名のノードオブジェクトが存在する場合、強制上書きするかを指定します。
- デフォルトはfalseで、上書きするかどうかを訪ねます。
--alter-project PROJECT
- リモートノードで使用するChef Infra Client互換のプロジェクト名です。
chef
,cinc
の2つから選択。
その他についてはknife zero bootstrap --help
を参照してください。
到達性と名前のパターン。
# ノードが解決可能なホスト名を持つ
$ 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...
knife zero converge QUERY (options)
BootstrapおよびChef-Client実行済み(Node情報収集ずみ)のNodeに対して、Chef-Clientを再度実行します。
対象Nodeはクエリ結果で絞込みます。クエリの書式はknife searchのSEARCH_QUERY
と同一です。
Chef本体のknife ssh
のほぼすべてと、chef-client
から一部のオプションを引き継いでいます。本体のバージョンにより、使えるオプションは変動します。
Knife-Zeroで追加したオプションと、よく聞かれるオプションは次の通りです。
-a, --attribute ATTR
(ChefCore)- SSHの接続先として用いるattributeを指定します。
- デフォルトで使用されるホスト名(FQDNおよびName)が接続先として利用できない場合に使用します。
- なお、Knife-ZeroでBootstrapしたNodeでは、使用したホスト/IPアドレスを
knife_zero.host
として再利用できます。
-C, --concurrency NUM
(ChefCore)- 対象が複数台ある際に、並行して実行する数を指定します。
--remote-chef-zero-port
- リモートNodeでポートフォワードに使用するポートです。 (デフォルト: 18889)
- 18889が他のサービスで使用されている場合に指定します。
-W, --why-run
- Chef-Clientの実行をWhy-Runモードで行います。
-o, --override-runlist RunlistItem,RunlistItem
- Nodeのランリストを上書き指定します。
- このオプションを指定した場合、ローカルのNodeオブジェクトを更新しません。
--sudo/--no-sudo
- リモートNodeでChef-Clientの実行にsudoを使います。
--splay SECONDS
(Chef-Client)- Chef-Client実行前にランダムで待ちを入れます。
--skip-cookbook-sync
- Cookbookの同期フェーズをスキップして、(過去に)Node側に同期したものを使います。
- 単純にスキップするだけなので、例えば初回実行では指定してもエラーとなります。
--client-version [latest|VERSION]
- リモートNodeでChef-Clientを実行する前に、任意のバージョンに変更します。
- この処理ではOmnibus-chefに含まれるRubyを使います。
-j, --json-attributes JSON_ATTRIBS
- 一度だけ有効なAttributesのJSONをURL形式で指定します。
- JSONはワークステーションが取得し、SSH経由でリモートノードに転送します。
- スキーマを指定しない場合ローカルファイルパスが対象です。
- Nodeオブジェクト(ローカルのJSONファイル)を更新しないために、
--override-runlist
との併用を必須にしてあります。
--chef-license ACCEPTANCE
--client-version
オプションと併用します。- ACCEPTANCE は 'accept', 'accept-no-persist', または 'accept-silent' から選択。
- リモートのChef Infra Client を、15以降のバージョンに更新する際に使用します。
--alter-project PROJECT
- リモートノードで使用するChef Infra Client互換のプロジェクト名です。
chef
,cinc
の2つから選択。
# すべての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
で好きなコマンドを流してくればよいです。
knife zero apply QUERY (options)
(※1.12.0で追加)
BootstrapおよびChef-Client実行済み(Node情報収集ずみ)のNodeに対して、スポットで任意のレシピをChef-Applyで実行します。
対象Nodeはクエリ結果で絞込みます。クエリの書式はknife searchのSEARCH_QUERY
と同一です。
レシピはChef-Applyに標準入力から渡されます。
Chef本体のknife ssh
、およびzero converge
からオプションを引き継いでいます。本体のバージョンにより、使えるオプションは変動します。
zero apply
で使用する主なオプションは次の通りです。
-a, --attribute ATTR
(ChefCore)- SSHの接続先として用いるattributeを指定します。
- デフォルトで使用されるホスト名(FQDNおよびName)が接続先として利用できない場合に使用します。
- なお、Knife-ZeroでBootstrapしたNodeでは、使用したホスト/IPアドレスを
knife_zero.host
として再利用できます。
-r, --recipe Recipe String or @filename
- レシピの文字列または、@付きでファイル名を渡します。
-j, --json-attributes JSON_ATTRIBS
- 追加するAttributeのJSONファイルかURLを指定します。
- 対象探索の起点はリモートノードです。
-C, --concurrency NUM
(ChefCore)- 対象が複数台ある際に、並行して実行する数を指定します。
-W, --why-run
- Chef-Applyの実行をWhy-Runモードで行います。
--sudo/--no-sudo
- リモートNodeでChef-Applyの実行にsudoを使います。
--client-version [latest|VERSION]
- リモートNodeでChef-Applyを実行する前に、任意のバージョンに変更します。
- この処理ではOmnibus-chefに含まれるRubyを使います。
zero apply
コマンド作成時のChef(12.6.0)では、chef-applyはChef-ServerからNodeオブジェクトをロードする手段がありません。
あくまで限定的な利用に留め、ChefRepoの情報が必要ならばconverge
の--override-runlist
を利用しましょう。
# すべての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
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"