私たちの cfengine セットアップでは、ホストのグループで構成されるクラスを定義したいと思っています。短い名前が一意でない 4 部構成のホスト名を持つホストがたくさんあります。ホスト名にドットを使用しないというドキュメントを繰り返し読みましたが、場合によっては、xxx_yyy_domain_com を使用するとうまくいくようです。
ロール ファイルで、一連のマシンを含む配列をネームサーバーとして定義します。
bundle agent tfn_roles {
vars:
# DNS servers
"dns_servers" slist => {
"hetzner8", # ns-frk
"ubiquity1", # ns-lax
"ns_ubi3_domain_org",
"vps001_dfw_domain_org", # ns-dfw
"tagadab2", # ns-lcy
"atlantic1", # ns-mco
};
そして bind9.cf promise ファイルで:
bundle agent service_bind9 {
meta:
"tags" slist => { "autorun" };
classes:
"dns_servers" or => { "@(tfn_roles.dns_servers)" };
そのクラスの一連の約束は、アンダースコア付きの FQDN を持つ 2 つのホストに対して正しく実行されるようです。
ただし、同じロール ファイル内に、文字列のみで定義される別のクラスがあります。
# Server running the daily tasks - should only be one.
"daily_tasks_server" string => "vps007_dfw_domain_org";
次に、毎日のタスクの約束ファイルで:
bundle agent service_daily_tasks {
meta:
"tags" slist => { "autorun" };
classes:
"daily_task_server" expression => "$(tfn_roles.daily_tasks_server)";
そして、これはうまくいかないようです。
誰かがその理由とその回避方法を説明できますか? 代わりに言う必要がありますか:
"daily_task_server" or => "$(tfn_roles.daily_tasks_server)";
もしそうなら、なぜですか?いくつかの基本的な cfengine 構文規則を誤解していますか??
更新:いいえ、上記の変更を行ってもまだ機能しません。
(ちなみに、私はすでにCFEngine の Host group を読んでいます。Zamboni氏の本を読まなければならないなどとは言わないでください。時間があればいつか読みたいと思っていますが...)