On 2/12/2016 12:44 PM, Armando M. wrote:


On 12 February 2016 at 09:15, Matt Riedemann <mrie...@linux.vnet.ibm.com
<mailto:mrie...@linux.vnet.ibm.com>> wrote:

    Forgive me for thinking out loud, but I'm trying to sort out how
    nova would use a microversion in the nova API for the
    get-me-a-network feature recently added to neutron [1] and planned
    to be leveraged in nova (there isn't a spec yet for nova, I'm trying
    to sort this out for a draft).

    Originally I was thinking that a network is required for nova boot,
    so we'd simply check for a microversion and allow not specifying a
    network, easy peasy.

    Turns out you can boot an instance in nova (with neutron as the
    network backend) without a network. All you get is a measly debug
    log message in the compute logs [2]. That's kind of useless though
    and seems silly.


Incidentally, I was checking this out with Horizon, and the dashboard
instance boot workflow doesn't let you proceed without specifying a
network (irrespective of the network backend). So if the user has no
networks, he/she is stuck and has to flip to the CLI. <sarcasm>Nice,
uh</sarcasm>?


    I haven't tested this out yet to confirm, but I suspect that if you
    create a nova instance w/o a network, you can latter try to attach a
    network using the os-attach-interfaces API as long as you either
    provide a network ID *or* there is a public shared network or the
    tenant has a network at that point (nova looks those up if a
    specific network ID isn't provided).


Just to make sure we're on the same page: if you're referring to 'public
shared network' as the devstack's provisioned network called 'public',
that's technically not shared and it represent your floating IP pool. A
user can explicitly boot VM's on it, but that's not to be confused with
a 'shared' provider network.

I was referring to this code:

https://github.com/openstack/nova/blob/30ba0c5eb19a9c9628957ac8e617ae78c0c1fa84/nova/network/neutronv2/api.py#L217-L223


That said, I tried the workflow of booting a vm without networks and
trying to attach an interface without specifying anything and I got a
500 [1]. Error aside, I think it's it would be erroneous to expect the
attach command to accept no networks (and still pick one), when the boot
command doesn't.

[1] http://paste.openstack.org/show/486856/

Cool, yeah, I was totally expecting an IndexError because of the code here:

https://github.com/openstack/nova/blob/30ba0c5eb19a9c9628957ac8e617ae78c0c1fa84/nova/network/neutronv2/api.py#L610



    The high-level plan for get-me-a-network in nova was simply going to
    be if the user tries to boot an instance and doesn't provide a
    network, and there isn't a tenant network or public shared network

    to default to, then nova would call neutron's new
    auto-allocated-topology API to get a network. This, however, is a
    behavior change.


I assume that for you 'public shared network' it's not the public
network as available in DevStack because, because I don't believe that
user can boot VM's on that network automatically.


    So I guess the question now is how do we handle that behavior change
    in the nova API?

    We could add an auto-create-net boolean to the boot server request
    which would only be available in a microversion, then we could check
    that boolean in the compute API when we're doing network validation.

    Today if you don't specify a network and don't have a network
    available, then the validation in the API is basically just quota
    checking that you can get at least one port in your tenant [3]. With
    a flag on a microversion, we could also validate some other things
    about auto-creating a network (if we know that's going to be the
    case once we hit the compute).

    Anyway, this is mostly me getting thoughts out of my head before the
    weekend so I don't forget it and am looking for other ideas here or
    things I might be missing.


John and I just finished talking about this a bit more and I think the
the thought process led us to this conclusion:

 From Horizon, we could provide a 'get-me-a-network' button on the
Networks wizard for the boot workflow. If the user doesn't see any
Networks available he/she can hit the button, see the network being
pre-populated and choose to proceed, instead of going back to the
Network panel and do the entire workflow.

As for Nova, we could introduce a new micro-version that changes the
behavior of nova boot without networks. In this case, if the tenant has
access to no networks, one will be created for him/her and the VM will
boot off of it.

On the other end, if the user does want a VM without nics, he/she should
be explicit about this and specify 'no-nic' boolean, e.g.

   nova boot <instance-name> --flavor <flavor-id> --image <image-id>
--no-nics

John and I think this would be preferable because the output of the
command becomes more predictable: the user doesn't end up having VM's
connected to NICs accidentally if some net-create sneaks underneath.

Yeah, I replied to John's post and I think we're all basically on the same page, it's just a matter of implementation details, but we're in agreement that by default (with the microversion), you're going to get a network allocated if you don't bring one or have one available, unless you explicitly opt out of that with some flag on the request.


Anyhow, food for thought.

Thanks for starting this thread.

Cheers,
Armando


    [1] https://blueprints.launchpad.net/neutron/+spec/get-me-a-network
    [2]
    
https://github.com/openstack/nova/blob/30ba0c5eb19a9c9628957ac8e617ae78c0c1fa84/nova/network/neutronv2/api.py#L594-L595
    [3]
    
https://github.com/openstack/nova/blob/30ba0c5eb19a9c9628957ac8e617ae78c0c1fa84/nova/network/neutronv2/api.py#L1107

    --

    Thanks,

    Matt Riedemann


    __________________________________________________________________________
    OpenStack Development Mailing List (not for usage questions)
    Unsubscribe:
    openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
    <http://openstack-dev-requ...@lists.openstack.org?subject:unsubscribe>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




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


--

Thanks,

Matt Riedemann


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

Reply via email to