これは、Chef Fast Startチュートリアルで推奨されている方法です。
knife ssh name:mynode -a ipaddress -x ubuntu -i mycredentials.pem "Sudo chef-client"
これは本当に不器用です。本当に良い方法はありませんか、それとも実際の本番環境ではとにかくノードを自動更新するという考えですか?
それはあなたが物事を最初に始める方法とほとんど同じですが、それは一度だけ実行する必要があります。 chef-clientの最初の実行は、通常、chef-clientデーモンをinit.dサービスとして有効にして起動します。
本当にもっとエレガントにしたいなら、knife-sshを使わずに直接sshを実行することができます:
ssh ubuntu@ipadddress -i mycredentials.pem Sudo chef-client
それはおそらく高速です。knife-sshはChefサーバーに対して検索を行い、検索語に一致するノードをフェッチします(この場合はname:dynode
)。IPアドレスがわかっている場合は、厳密に行う必要はありません。
knife sshを使用して、特定のロールまたはレシピを含むすべてのボックスでchef-clientを実行できます。
knife ssh "role:web" "Sudo chef-client" -x ubuntu --Sudo
または、EC2を使用している場合:
knife ssh "role:web" "Sudo chef-client" -x ubuntu -a ec2.public_hostname
Ansibleを使用して、chef-clientをデプロイおよび実行できます。
$ ansible -i hosts all -a 'chef-client'
ansibleはpipで簡単にインストールできます:
pip install ansible
インベントリファイル(この例では「hosts」という名前)は次のようになります。
[all] Host1.example.com ansible_user=root Host2.example.com ansible_user=root Host3.example.com ansibel_user=root
(「all」は、この例の構成ファイルのグループ化の名前です。これは任意であり、何でもかまいません。インベントリファイルには、[web_wervers]、[database_servers]、[chef_servers]などの他のグループ化も含めることができます。 、など)
もう一度、すべてをまとめます:
> ansible -i hosts all -a 'chef-client'
または多分:
> ansible -i hosts all -a 'systemctl status'
Chefクライアントにコマンドをディスパッチするには、sshの下線を使用する必要があるのは残念です。
すべてのchefクライアントはchefサーバーとの安全な接続をセットアップしているようですが、chefサーバーはその安全な接続でコマンドマルチプレクサーを提供していないようですが、なぜですか?
Jenkins CIを使用して実行を管理します。 Linuxサーバーがワークステーションとしてセットアップされ、Jenkinsがインストールされています。 bootstrap run_listが変更されたノードです。ブートストラッププロセスはとにかく、最後にchef-clientを実行します。
アドホック実行の場合、Jenkinsジョブはノードのrun_listを変更し、SSHプラグインを使用して目的のノードでchef-clientを実行するためにナイフコマンドを実行します。
Chef Workstationに新しいコマンドchef-run
があります:
chef-run server_name resource_name
存在しない場合はchef-client
をインストールし、指定したリソースまたはクックブックを実行します。