Chefを使用して新しい仮想マシンを管理しようとしています。私は専用のChefサーバーを使用しており、このすべての作業を別のワークステーションvmから実行しています。
私が現在行っている方法は、ベースvmイメージのクローンを作成し、knife bootstrapを使用してChefをインストールし、vmを一貫性のある状態にすることです。
Vmの環境または実行リストを指定できます。環境内の特定の設定を上書きできます。テスト環境の「overrides」ブロックに chef-client 間隔があり、テスト中に60ごとにクライアントを実行するように設定されているため、毎回手動でchef-clientを実行する必要はありません。 。
たとえば、私のワークフローは次のとおりです。
vmテンプレートのクローンを作成し、vmを起動します
ホスト名を手動で設定し(/ etc/hostnameと/ etc/hostsを更新)、再起動します
初期レシピでノードをブートストラップします
ナイフbootstrap chef-test1 -r'recipe [ntp]、recipe [chef-client] '
新しい環境を反映するようにノードを編集します
私が抱えている問題は、ノードごとの属性の設定です。 hostname クックブックを使用してノードのホスト名を設定したいのですが、これをロールに設定すると、各サーバーで新しいロールを作成する必要があります。しかし、bootstrapを実行してこのロールを含めると、エラーが発生します。
chef-test1 * log[Please set the set_fqdn attribute to desired hostname] action write[2013-12-09T16:26:56-07:00] WARN: Please set the set_fqdn attribute to desired hostname
そのレシピなしでbootstrapで、ノードを編集して「set_fqdn」属性を設定しようとすると、属性を保存できません。例:次のjson:
{
"name": "chef-test1",
"set_fqdn": "chef-test1.local.fqdn",
"chef_environment": "test-dev1",
"normal": {
"tags": [
]
},
"run_list": [
"recipe[ntp]",
"recipe[chef-client]",
"recipe[hostname]"
]
}
エディターを終了すると、knifeは次のように指示します。
Node not updated, skipping node save
Chef guiでこの属性を編集しようとしましたが、属性が保存されません。
私は見つけました この男 /etc/chef/chef.jsonでjsonを作成していて、基本的に私が期待することをしていますが、/ etc/chef /chef.jsonがどのように入るのかわかりませんplay(新しいノードごとに更新しますか?私はchef-soloを使用していないので、おそらくそれが私の混乱です)。
このメールスレッド によると、ナイフノード編集でデフォルトの属性をオーバーライドすることはできませんが、「set_fqdn」はデフォルトではありません。ノードごとに役割を作成することは避けたいので、ホスト名クックブックを使用して、次のようにホスト名を手動で設定する必要性を軽減できると思います。
ナイフbootstrap saucy64 -r'recipe [ntp]、recipe [chef-client]、recipe [hostname] '--json' "{set_fqdn": "chef-test1.local.tld" 、 "chef_client":{"interval": "600"} '
ナイフbootstrap Fedora19 -r'recipe [ntp]、recipe [chef-client]、recipe [hostname] '--json' "{set_fqdn": "chef-test2.local.tld" 、 "chef_client":{"interval": "60"} '
私は援助に感謝します。
いくつかの問題があります。
knife node edit
の間、属性をfqdnなどの隣の最上位属性として設定することはできません。normal
の下に配置する必要があります。これは、default
とoverride
の間の階層です。 属性の優先順位 を参照してくださいknife node edit
を使用するとにおいがします。私はむしろこれをしたくありません(ホスト名には問題ないかもしれませんが、他のすべての場合、バージョン管理のそのような変更を追跡することは不可能です)。代わりに、hostname
クックブックを実行してみてください。chef.json
ファイルへの属性の書き込みも私見では避けてください。あなたの論理はあなたの料理本の中にあるべきですbase
、chef-client
、ホスト名など)を含むntp
ロール/クックブックなどが必要です。-E myenv
の間に環境を直接設定することもできます(しかし、はい、なぜこれが文書化されていないのか疑問に思います)-N NAME
または--node-name NAME
。bootstrap node、I wrote one これは元のchef-hostnameのフォークであるときに定義されたnode.nameに基づいてホスト名を設定するレシピはどうですか?クックブック。
これは機能します:
knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}'
(knife help bootstrap
ヘルプも読んでいます)
このstackoverflowの回答 同様の構文を使用します。
編集:まあ、ほとんど、これは2つのノードエントリを作成します。 -Nパラメーターを使用してノード名を指定する必要があります。
knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}' -N chef-test2
knife bootstrap 192.168.15.43 --run-list 'recipe[hostname],recipe[ntp],recipe[chef-client]' --json-attributes '{"set_fqdn": "chef-test2"}' --node-name chef-test2