Укажите статический IP-адрес при развертывании профиля в облачном облаке
Я установил новый мастер соли и пытаюсь автоматизировать развертывание новых виртуальных машин со статическими IP-адресами (нет доступных dhcp) из шаблона.
Я могу развернуть виртуальные машины нормально, используя мой шаблон через облачный профиль с определенным там IP-адресом по умолчанию, но я не могу найти способ перезаписать IP-адрес для динамического использования при развертывании, я надеялся передать имя хоста / ip в cli позвоните или через соли-API, чтобы я мог инициировать из другого приложения.
Я пытался перевести IP в состояние динамических данных столба, это нормально конфигурирует имя хоста vm, но я не смог понять, как передать IP в профиль, так как conf профиля не принимает переменные столба.
salt-call state.apply vm-new pillar='{"hostname": "salt-test", "ip": "172.0.0.11"}'
ут-new.sls
{{ pillar['hostname'] }}:
cloud.profile:
- name: {{ pillar['hostname'] }}
- profile: centos7
cloud.profiles.d / centos7.conf
...
devices:
network:
Network adapter 1:
name: 'VM Network'
switch_type: standard
ip: 172.0.0.90
subnet_mask: 255.255.255.0
gateway: [172.0.0.1]
...
Затем я попытался использовать файл карты, но попытка передать данные столпа, похоже, не работает.
# salt-cloud -m cloud.maps.d/centos7.map pillar='{"hostname": 'salt-test', "ip": "172.0.0.11"}'
[ERROR ] Rendering exception occurred: Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'hostname'
[ERROR ] Rendering map cloud.maps.d/centos7.map failed, render error:
Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'hostname'
No nodes defined in this map
centos7.map
centos7:
- {{ pillar['hostname'] }}:
devices:
network:
Network adapter 1:
ip: {{ pillar['ip'] }}
Я потратил некоторое время на копание проблем с документами и github, но пара людей, пытающихся сделать подобные вещи, но жестко запрограммированные IP-адреса в файле карты, решили свою проблему, возможно ли сделать то, что я пытаюсь сделать? Любые советы / указатели о том, где искать дальше?
2 ответа
Я столкнулся с аналогичным требованием, в котором мне нужно было динамически установить некоторые атрибуты экземпляра EC2 (например, имя хоста). По крайней мере, 3 месяца назад с момента написания этой статьи этот сценарий использования был невозможен, поэтому я в итоге создал модуль Salt Exec (например execmodule.provision_instances
), который динамически генерирует файл карты, используя мои предопределенные профили со значениями по умолчанию, и в конечном итоге называется salt.cloud.CloudClient.map_run
с созданным файлом карты.
Это хорошо сработало, вызвав модуль exec (например, salt-call execmodule.provision_instances
). Было бы лучше, если бы мы могли просто передавать столбы вместо указания файла карты.
Примечание. Поскольку эта ветка устарела, карты соляных облаков могут уже поддерживать передачу столбов к прогонам карт, пожалуйста, проверьте.
Я проверил salt.modules.win_ip.set_static_ip
для Windows VMS и это работает. Например, вы можете запустить эту команду на salt master, чтобы установить IP-адрес всех компьютеров Windows:
salt -G 'os_family:Windows' ip.set_static_ip 'Local Area Connection' 10.1.2.3/24 gateway=10.1.2.1
Вы можете прочитать официальный документ здесь.