我正在为我的 Puppet 基础架构编写外部节点分类器,并且需要/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 - 我也不清楚如何将其转换为 YAML。
一个简单的猜测是:
'host':
'www1':
'ip': 1.2.3.4
'www2':
'ip': 1.2.3.5
但是由于上述第 2 点,我不太愿意在生产中继续使用这种方法。我的问题是:
在哪里可以找到有关以这种方式使用主机类的文档?
或者失败了
我还可以用什么其他方式来管理/etc/hosts
ENC 中的多个条目?
注意:这些定义用于在云服务 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
}
然后我的 ENC YAML 看起来像这样:
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
广告 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
你可以将其加载到 Puppet 哈希中,然后从中创建资源
$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