web-dev-qa-db-ja.com

PuppetENCで複数の/ etc / hostsエントリを定義するにはどうすればよいですか?

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';
}

しかしながら、

  1. ここで実際に何が起こっているのかはすぐにはわかりません。
  2. これに関するドキュメントはどこにも見つかりません。
  3. これらの(似ていない)クラスパラメーター(および上記の#1と#2)のため、これをYAMLに変換する方法もわかりません。

素朴な推測は次のようになります。

'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
3
Chris Tonkinson

広告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
5
mschuett