web-dev-qa-db-ja.com

chef-clientをリモートで実行するよりエレガントな方法はありますか?

これは、Chef Fast Startチュートリアルで推奨されている方法です。

knife ssh name:mynode -a ipaddress  -x ubuntu -i mycredentials.pem "Sudo chef-client"

これは本当に不器用です。本当に良い方法はありませんか、それとも実際の本番環境ではとにかくノードを自動更新するという考えですか?

21
Steve Bennett

それはあなたが物事を最初に始める方法とほとんど同じですが、それは一度だけ実行する必要があります。 chef-clientの最初の実行は、通常、chef-clientデーモンをinit.dサービスとして有効にして起動します。

本当にもっとエレガントにしたいなら、knife-sshを使わずに直接sshを実行することができます:

ssh ubuntu@ipadddress -i mycredentials.pem Sudo chef-client

それはおそらく高速です。knife-sshはChefサーバーに対して検索を行い、検索語に一致するノードをフェッチします(この場合はname:dynode)。IPアドレスがわかっている場合は、厳密に行う必要はありません。

10
Tim Potter

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 
12
user157553

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'

3
Greg Jones

Chefクライアントにコマンドをディスパッチするには、sshの下線を使用する必要があるのは残念です。

すべてのchefクライアントはchefサーバーとの安全な接続をセットアップしているようですが、chefサーバーはその安全な接続でコマンドマルチプレクサーを提供していないようですが、なぜですか?

0
osexp2003

Jenkins CIを使用して実行を管理します。 Linuxサーバーがワークステーションとしてセットアップされ、Jenkinsがインストールされています。 bootstrap run_listが変更されたノードです。ブートストラッププロセスはとにかく、最後にchef-clientを実行します。

アドホック実行の場合、Jenkinsジョブはノードのrun_listを変更し、SSHプラグインを使用して目的のノードでchef-clientを実行するためにナイフコマンドを実行します。

0
Anil Wavde

Chef Workstationに新しいコマンドchef-runがあります:

chef-run server_name resource_name

存在しない場合はchef-clientをインストールし、指定したリソースまたはクックブックを実行します。

チュートリアル: https://learn.chef.io/modules/try-chef-infra#/

0
sekrett