Укажите статический 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

Вы можете прочитать официальный документ здесь.

Другие вопросы по тегам