Puppetインフラストラクチャの外部Node Classifierを作成していますが、各ノードで/etc/hosts
ファイルを操作する必要があります。以下は(キーが重複しているため)です。無効なYAML:
---
Host:
name: www1.example.com
Host_aliases: www1
ip: 1.2.3.4
Host:
name: www2.example.com
Host_aliases: www2
ip: 1.2.3.5
この関連する回答 が表示されます。これには次のコードがあります。
Host {
# Public IPs - eth0
'front-01': ip => '192.168.1.103';
'front-02': ip => '192.168.1.106';
# Private IPs - eth1
'priv0-0': ip => '192.169.40.201';
'priv0-1': ip => '192.169.40.202';
'priv1-0': ip => '192.169.40.207';
'priv1-1': ip => '192.169.40.208';
# Virtual IPs - eth0:1
'vip-01': ip => '192.169.50.202';
'vip-02': ip => '192.169.50.205';
}
しかしながら、
素朴な推測は次のようになります。
'Host':
'www1':
'ip': 1.2.3.4
'www2':
'ip': 1.2.3.5
しかし、上記の#2のために、私はこれを本番環境で進めることに不安を感じています。私の質問:
この方法でHostクラスを使用するためのドキュメントはどこにありますか?
またはそれを失敗する
ENCを使用して複数の/etc/hosts
エントリを他にどのように管理できますか?
注意:これらの定義は、開発とテストの目的でクラウドサービスAPI上に一時的なマルチノードクラスターをすばやく構成するために使用されているため、DNSベース(または他の代替)ソリューションを検討することをまったく望んでいませんが、/etc/hosts
このように(可能であれば)、可動部品がはるかに少ないはるかに単純なソリューションです。
解決策:参考のためにここに投稿されたのは私の最終的なコードです:
class my_hosts(
$hosts = {
'localhost.localdomain' => {
'ensure' => 'present',
'name' => 'localhost.localdomain',
'Host_aliases' => 'localhost',
'ip' => '127.0.0.1',
},
},
) {
create_resources Host, $hosts
}
そして、私のENCYAMLは次のようになります。
classes:
my_hosts:
hosts:
www1.example.com:
ensure: present
name: www1.example.com
Host_aliases: www1
ip: 10.0.0.101
www2.example.com:
ensure: present
name: www2.example.com
Host_aliases: www2
ip: 10.0.0.102
広告1&2:
Host {
'front-01': ip => '192.168.1.103';
'front-02': ip => '192.168.1.106';
}
は 短縮表記 の
Host { 'front-01':
ip => '192.168.1.103',
}
Host { 'front-02':
ip => '192.168.1.106',
}
広告3:
次のようなYAMLデータエントリがある場合:
custom_hosts:
www1:
ip: 1.2.3.4
www2:
ip: 1.2.3.5
comment: other attributes work also
www3:
name: testserver
ip: 1.2.3.6
それをパペットハッシュにロードして、そこからリソースを作成できます
$custom_hosts = hiera('custom_hosts',{})
create_resources(Host, $custom_hosts)
これにより、次と同じ結果が得られます。
Host { 'www1':
ip => '1.2.3.4',
}
Host { 'www2':
ip => '1.2.3.5',
comment => 'other attributes work also',
}
Host { 'www3':
name => 'testserver',
ip => '1.2.3.6',
}
したがって、これらの行は/ etc/hostsに書き込む必要があります。
1.2.3.4 www1
1.2.3.5 www2 # other attributes work also
1.2.3.6 testserver