Как определить несколько записей /etc/hosts с помощью Puppet ENC?
Я пишу классификатор внешних узлов для своей инфраструктуры 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?
NB. Эти определения используются для быстрой настройки переходных многоузловых кластеров в 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
Вы можете загрузить его в хэш куклы, а затем создать ресурсы из него
$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