Как использовать условие для создания ресурса с помощью шаблона heat

#if-statement #openstack #openstack-heat

#if-statement #openstack #openstack-heat

Вопрос:

 heat_template_version: 2017-02-24
......
......
......
conditions:
    port_security_enabled:
        equals:
            - { get_param: port_security_enabled }
            - "true"

resources:
    port:
        type: OS::Neutron::Port
        properties:
            admin_state_up: true
            network_id: { get_param: internal_net }
            port_security_enabled: { get_param: port_security_enabled }
            security_groups: { get_param: security_group }

  

Я хочу создать условие, поэтому, если я установлю «port_security_enabled = false», группа безопасности не будет применяться в port.properties . Если я установлю «port_security_enabled = true», тогда будет применена группа безопасности.

Пожалуйста, помогите мне

Ответ №1:

Это может работать нормально:

 security_groups: {if: [port_security_enabled, [{get_resource: security_group}], []]}
  

Комментарии:

1. Я уже пробовал это, но есть проблема, если условие равно false, тогда значение «группа безопасности» будет пустым. Затем этот стек показывает ошибку

Ответ №2:

Я нашел решение.

Я создал два порта, 1 из которых имеет группу безопасности, а другой — без группы безопасности.

 
conditions:

    port_security_disable: {equals : [{get_param: port_security_enabled}, "disabled"]}

resources:
    port1:
        type: OS::Neutron::Port
        properties:
            admin_state_up: true
            network_id: { get_param: internal_net }
            security_groups:
                - { get_param: security_group }
    port2:
        type: OS::Neutron::Port
        properties:
            admin_state_up: true
            network_id: { get_param: internal_net }
            port_security_enabled: false

    instance_floatingip:
        type: OS::Neutron::FloatingIP
        properties:
            floating_network_id: { get_param: public_network_id }
            port_id: {if: ["port_security_disable", { get_resource: port2 }, { get_resource: port1 } ]}

    instance:
        properties:
            networks:
                - port: {if: ["port_security_disable", { get_resource: port2 }, { get_resource: port1 } ]}
  

Я знаю, что это становится сложным. но я не нашел ни одного простого решения.