On 19/04/18 08:59, Harald Jensås wrote:
The problem is getting there using heat ...

The real answer is to make everything explicit - create a Subnet resource and a Port resource and don't allow Neutron/Nova to make any decisions for you that would have the effect of hiding data that you need. However, since that's impractical in this particular case...

a couple of ideas:

a) Use heat's ``external_resource`` to create a port resource,
    and then  a external subnet resource. Then get the data
    from the external resources. We probably would have to make
    it possible for a ``external_resource`` depend on the server
    resource, and verify that these resource have the required
    attributes.

Yeah, I don't know why we don't allow depends_on for resources with external_id. (There's also a bug where we don't recognise dependencies contributed by any functions used in the external_id field, like get_resource or get_attr, even though we allow those functions.) Apparently somebody had a brain explosion at a design summit session that nobody remembers attending, and here we are :D

The difficulty is that the fix should be tied to a template version, but the offending check is in the template-independent part of the code base.

Nevertheless, a workaround is trivial:

  ext_port:
    type: OS::Neutron::Port
    external_id: {get_attr: [<server>, addresses, <net name>, 0, port]}
    metadata:
      do_something_to_add_a_dependency: {get_resource: <server>}

b) Extend attributes of OS::Nova::Server (OS::Neutron::Port as
    well probably) to include the data.

    If we do this we should probably aim to be in parity with
    what is made available to clients getting the configuration
    from dhcp. (mtu, dns_domain, dns_servers, prefixlen,
    gateway_ip, host_routes, ipv6_address_mode, ipv6_ra_mode
    etc.)

This makes sense to me. If we're allowing people to let Nova/Neutron make implicit choices for them then we also need to allow them to see the result.

c) Create a new heat function to read properties of any
    openstack resource, without having to make use of the
    external_resource in heat.

I'm pretty -1 on this, because I think you want to have the same caching behaviour as a resource, not a function. At that point you're just implementing syntactic sugar that makes things _less_ consistent, not to mention the enormous implementation hacks required.

cheers,
Zane.

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to