#2 Gabriel (cc'd) may be able to help. One thing that might help is to run the 
tests with --failfast which will terminate the tests after the first failure. 
You can also change the console log level to debug (from info) in 
local_settings.py 
(https://github.com/openstack/horizon/blob/master/openstack-dashboard/local/local_settings.py.example#L78).

#3 What kind of data does the multi-select need to display? If you have 
multiple columns of data then you should use the DataTable component in 
horizon/horizon/tables/ 
(https://github.com/openstack/horizon/blob/master/horizon/horizon/tables/base.py#L583)
 otherwise maybe just the usual Django multi-select widget 
(https://docs.djangoproject.com/en/dev/ref/forms/widgets/#selectmultiple).

#4 You should not submit a review until the tests pass, however, you can push 
your changes up to a horizon clone on Github which will make it easier for 
other folks to help debug the broken tests.

On Feb 16, 2012, at 1:21 PM, Michael J Fork wrote:

> I have implemented most of the the request below to "use the os-create-server 
> API extension in nova to specify the set and order of NICs that are to be 
> created on a server,"  allowing the set to be specified, but not the order.  
> The ordering was left off because I could not find a suitable Django control 
> (just using forms.MultipleChoiceField now).  The flow works great when the 
> tenant has networks defined and one or more are selected.  However, before 
> committing, I have a few issues I need help with. 
> 
> The command to invoke the create (change was to add nics=nics): 
> 
>     return Server(novaclient(request).servers.create( 
>             name, image, flavor, userdata=user_data, 
>             security_groups=security_groups, 
>             key_name=key_name, block_device_mapping=block_device_mapping, 
>             nics=nics, min_count=instance_count), request) 
> 
> 1) If no networks are selected (either because the tenant does not have one 
> defined or they chose not to select) the flow errors out with 
> 
> (nova.rpc): TRACE: Traceback (most recent call last): 
> (nova.rpc): TRACE:   File "/opt/stack/nova/nova/rpc/amqp.py", line 249, in 
> _process_data 
> (nova.rpc): TRACE:     rval = node_func(context=ctxt, **node_args) 
> (nova.rpc): TRACE:   File "/opt/stack/nova/nova/network/quantum/manager.py", 
> line 363, in allocate_for_instance 
> (nova.rpc): TRACE:     instance_type_id, host) 
> (nova.rpc): TRACE:   File "/opt/stack/nova/nova/network/quantum/manager.py", 
> line 481, in get_instance_nw_info 
> (nova.rpc): TRACE:     network['uuid']), 
> (nova.rpc): TRACE:   File 
> "/opt/stack/nova/nova/network/quantum/quantum_connection.py", line 68, in 
> get_network_name 
> (nova.rpc): TRACE:     net = self.client.show_network_details(network_id, 
> tenant=tenant_id) 
> (nova.rpc): TRACE:   File "/opt/stack/nova/nova/network/quantum/client.py", 
> line 83, in with_params 
> (nova.rpc): TRACE:     ret = self.func(instance, *args) 
> (nova.rpc): TRACE:   File "/opt/stack/nova/nova/network/quantum/client.py", 
> line 244, in show_network_details 
> (nova.rpc): TRACE:     return self.do_request("GET", self.network_path % 
> (network)) 
> (nova.rpc): TRACE:   File "/opt/stack/nova/nova/network/quantum/client.py", 
> line 151, in do_request 
> (nova.rpc): TRACE:     raise Exception(_("Tenant ID not set")) 
> (nova.rpc): TRACE: Exception: Tenant ID not set 
> (nova.rpc): TRACE: 
> 
> 2) The unit tests I added to 
> horizon/horizon/dashboards/nova/images_and_snapshots/images/tests.py  will 
> not run properly.  There are a few errors, but I believe this is the root 
> cause: 
> 
> ====================================================================== 
> ERROR: test_launch_post 
> (horizon.dashboards.nova.images_and_snapshots.images.tests.ImageViewTests) 
> ---------------------------------------------------------------------- 
> Traceback (most recent call last): 
>   File 
> "/home/mjfork/workspace.git/horizon/horizon/horizon/dashboards/nova/images_and_snapshots/images/tests.py",
>  line 80, in test_launch_post 
>     networks = self.networks 
> AttributeError: 'ImageViewTests' object has no attribute 'networks' 
> 
> The added tests were patterned after existing code, e.g. using 
> security_group_list and security_groups in same file, but I am not able to 
> find where "security_groups" is defined. 
> 
> 3) Is there a Django control that allows multi-selection + ordering that 
> should be used? 
> 
> 4) Should the changes be pushed as-is and let code review flush these out? 
> 
> Thanks. 
> 
> Michael
> 
> -------------------------------------------------
> Michael Fork
> Cloud Architect, Emerging Solutions
> IBM Systems & Technology Group 
> 
> 
> 
> From:        Dan Wendlandt <d...@nicira.com> 
> To:        Tres Henry <t...@treshenry.net> 
> Cc:        netstack@lists.launchpad.net, Devin Carlen 
> <devin.car...@nebula.com>, Michael J Fork/Rochester/IBM@IBMUS 
> Date:        01/31/2012 01:41 PM 
> Subject:        Re: [Netstack] updating quantum in horizon 
> 
> 
> 
> Hi Tres,
> 
> Thanks for sending this out.  I'm excited that we have a couple people
> interested in fixing things up here!  CC'd is Michael Fork, who also
> mentioned that he is interested in working on this.
> 
> I will start out with a caveat that all of these comments are targeted
> at making Horizon work well with Quantum + the Quantum Manager code in
> Nova.  The original Quantum + Horizon code was written back in diablo,
> prior to much of the work on Quantum Manager, and thus targeted a more
> manual model where the user explicitly created + attached ports,
> rather than having QuantumManager do that automatically.  It also was
> a model that was not integrated with IP Address management at all.
> Given that things seem to have been broken with Quantum + Horizon for
> a while, I am assuming that no one has been seriously using the code
> in this form, and thus we can move to a model that uses QuantumManager
> without worrying about the old model.  If anyone wants to step forward
> and support the old model, we'll have to figure out how the two
> approaches should co-exist.  Otherwise, I would just push for a model
> where QuantumManager is the primary mode of use for Quantum + Horizon.
> 
> One error prevents a lot of the code from even working in the first
> place, so we should probably tackle that first.  Oddly, it seems to be
> an issue with the vif-extension in Nova.
> 
> When trying to view the detail page of an individual network does not
> work.  I get this error:
> 
> Error: Unable to get network details: The server has either erred or
> is incapable of performing the requested operation.
> 
> Underneath the covers, I see the exception:
> 
> [Tue Jan 31 09:53:29 2012] [error]
> ERROR:horizon.dashboards.nova.networks.views:Unable to get network
> details.
> [Tue Jan 31 09:53:29 2012] [error] Traceback (most recent call last):
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/horizon/horizon/horizon/dashboards/nova/networks/views.py",
> line 102, in detail
> [Tue Jan 31 09:53:29 2012] [error]     network['ports'] =
> _get_port_states(request, network_id)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/horizon/horizon/horizon/dashboards/nova/networks/views.py",
> line 143, in _get_port_states
> [Tue Jan 31 09:53:29 2012] [error]     vifs = api.get_vif_ids(request)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/horizon/horizon/horizon/api/quantum.py", line 118, in
> get_vif_ids
> [Tue Jan 31 09:53:29 2012] [error]     instance_vifs =
> nova.virtual_interfaces_list(request, id)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/horizon/horizon/horizon/api/nova.py", line 398, in
> virtual_interfaces_list
> [Tue Jan 31 09:53:29 2012] [error]     return
> novaclient(request).virtual_interfaces.list(instance_id)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/python-novaclient/novaclient/v1_1/virtual_interfaces.py",
> line 33, in list
> [Tue Jan 31 09:53:29 2012] [error]     'virtual_interfaces')
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/python-novaclient/novaclient/base.py", line 69, in _list
> [Tue Jan 31 09:53:29 2012] [error]     resp, body = self.api.client.get(url)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/python-novaclient/novaclient/client.py", line 130, in get
> [Tue Jan 31 09:53:29 2012] [error]     return self._cs_request(url,
> 'GET', **kwargs)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/python-novaclient/novaclient/client.py", line 118, in
> _cs_request
> [Tue Jan 31 09:53:29 2012] [error]     **kwargs)
> [Tue Jan 31 09:53:29 2012] [error]   File
> "/opt/stack/python-novaclient/novaclient/client.py", line 101, in
> request
> [Tue Jan 31 09:53:29 2012] [error]     raise
> exceptions.from_response(resp, body)
> [Tue Jan 31 09:53:29 2012] [error] ClientException: The server has
> either erred or is incapable of performing the requested operation.
> (HTTP 50
> 
> This is because dashboard is trying to build up a dictionary mapping
> from server-id to interface-id using the os-virtual-interfaces
> extension for nova.  But that extension isn't working.  My best guess
> is that this is because of the shift from using ids to uuids within
> Nova API calls, but I'm not 100% sure.
> 
> If you work around that issue by commenting out the vif-id related
> code in network/views.py, you can get the ports page to come up, and
> you can more-or-less see the current state of things.
> 
> Here are some other suggestions for items to look at:
> 
> - on the network detail page, we can get rid of the "create-ports",
> "attach", and "detach", and "delete" buttons as well and any
> associated dialogs, as Quantum Manager actually does all of the port
> creation/attaching/detaching/deletion on behalf of the user.  Leaving
> the bottom to put the port in "admin down" or "admin up" state makes
> sense.
> - We should add a row to the table to show the operational status of a
> port, as this is very useful for understanding if the port is working.
> This is only supported in v1.1 of the API, but the dashboard can have
> a slot for it, and show N/A if it is not available.
> - We should also hide the "create  new network" button on the main
> networks page.  This is a longer discussion, but until we can create
> not only a quantum network but also an IPAM subnet (e.g., via
> melange), we can't actually create networks that are used by Quantum
> Manager in nova.  Fixing this will be an important next step.  With
> this in mind, deleting the network also should not be possible via the
> dashboard.
> - on the "network" page, we should get rid of the notion of
> "available" and "used" ports, as with Quantum Manager, all ports that
> are created are in use, since they are automatically created/destroyed
> by Quantum Manager.
> - On the networks page, I would probably not show the UUID as the main
> name of the network.  Similar to the "instances + volumes" page, I
> should show the name of the network, with the UUID only shown on a
> details page for that network.
> 
> Another big thing that I would like to add is the ability to use the
> os-create-server API extension in nova to specify the set and order of
> NICs that are to be created on a server (by default, a server gets all
> NICs associated with the current project, as well as a NIC on any
> "global" network created by the service provider for use by all
> tenants).  This is the same capability that is already exposed with
> the --nic option in python-novaclient.   (note: quantum manager
> currently only specifies setting the network-id, it does not support
> selecting a particular IP address for that NIC, even though an IP
> address is specified in the API extension schema).  Given that Horizon
> already uses the python-novaclient library, leveraging this in Horizon
> should be pretty straightforward.
> 
> Ok, that was a lot of ideas :)  One last point is how to setup an
> environment to develop and test all of this.
> 
> Here are instructions for running devstack with Quantum, which is what
> I use:  http://wiki.openstack.org/QuantumDevstack
> 
> With devstack, the useful Horizon code is mainly in:
> - /opt/stack/horizon/horizon/horizon/dashboards/nova/networks  :
> fetches data for network pages
> - /opt/stack/horizon/horizon/horizon/api  : contains libraries for
> talking to nova + quantum.
> 
> I also have a script, pasted below, that I use to setup some
> interesting networks + hosts across two users "demo1" and "demo2".
> After stack.sh completes, I run this script, which is much faster than
> setting things up manually.
> 
> Would be great to have people volunteer to create bugs and work on any
> of the above issues.  Let me know how I can help out!
> 
> Dan
> 
> 
> 
> DEMO1_ID=`keystone-manage -c /opt/stack/keystone/etc/keystone.conf
> tenant list | grep demo1 | awk '{ print $1 }'`
> DEMO2_ID=`keystone-manage -c /opt/stack/keystone/etc/keystone.conf
> tenant list | grep demo2 | awk '{ print $1 }'`
> 
> nova-manage --flagfile=/opt/stack/nova/bin/nova.conf  network create
> --label=demo1-net1 --fixed_range_v4=11.0.0.0/24 --project_id=$DEMO1_ID
> --priority=1
> nova-manage --flagfile=/opt/stack/nova/bin/nova.conf  network create
> --label=demo1-net2 --fixed_range_v4=12.0.0.0/24 --project_id=$DEMO1_ID
> --priority=2
> nova-manage --flagfile=/opt/stack/nova/bin/nova.conf  network create
> --label=demo2-net1 --fixed_range_v4=13.0.0.0/24 --project_id=$DEMO2_ID
> --priority=1
> nova-manage --flagfile=/opt/stack/nova/bin/nova.conf  network create
> --label=demo2-net2 --fixed_range_v4=14.0.0.0/24 --project_id=$DEMO2_ID
> --priority=2
> 
> TENANT=demo1
> . openrc
> 
> IMAGE_UUID=`nova image-list | grep ACTIVE | awk '{ print $2 }'`
> echo "Image ID: $IMAGE_UUID"
> 
> nova boot --flavor 1 --image $IMAGE_UUID demo1-test1 > /dev/null
> nova boot --flavor 1 --image $IMAGE_UUID demo1-test2 > /dev/null
> 
> TENANT=demo2
> . openrc
> 
> nova boot --flavor 1 --image $IMAGE_UUID demo2-test1 > /dev/null
> 
> DEMO2_NET1_UUID=`nova-manage --flagfile=/opt/stack/nova/bin/nova.conf
> network quantum_list | grep "13.0.0.0/24" | awk '{print$1}'`
> 
> nova boot --flavor 1 --image $IMAGE_UUID --nic net-id=$DEMO2_NET1_UUID
> demo2-test2 > /dev/null
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> On Tue, Jan 24, 2012 at 3:02 PM, Tres Henry <t...@treshenry.net> wrote:
> > Yo! Looks like Quantum support in Horizon has been languishing a bit. The
> > good news is that we have a much better story for extensibility now (versus
> > the mess you had to deal with for the first cut of the Quantum UI) including
> > encapsulated dashboards/panels and support for some common controls like a
> > fancy new datatable that makes wiring up a table view with actions trivial.
> > The quantum UI has already been moved to a panel
> > (https://github.com/openstack/horizon/tree/master/horizon/horizon/dashboards/nova/networks)
> > and we have done some of the work to convert Quantum's tables to the new
> > table component (https://review.openstack.org/3336). However, that review
> > still needs some work (unit test failures and pep8 issues).
> >
> > From what I understand there are essentially three areas that need
> > eyeballs/work:
> >
> > 1) Horizon API needs to be updated to support new python-quantumclient (Joe
> > has a review open: https://review.openstack.org/3375)
> > 2) Pull request 3336 needs to be finished to bring the network UI inline
> > with the rest of Horizon
> > 3) Recent changes in Quantum need to be reflected in the UI
> >
> > On #2 it would be great if we could get some help from the Quantum team. I'm
> > not really sure of the scope on #3 but would be good to get some blueprints
> > and/or cases in Horizon's launchpad to provide some visibility into what
> > needs to be updated/added to the UI.
> >
> > Thoughts?
> >
> >
> >
> > --
> > Mailing list: https://launchpad.net/~netstack
> > Post to     : netstack@lists.launchpad.net
> > Unsubscribe : https://launchpad.net/~netstack
> > More help   : https://help.launchpad.net/ListHelp
> >
> 
> 
> 
> -- 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Dan Wendlandt
> Nicira Networks: www.nicira.com
> twitter: danwendlandt
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> 

-- 
Mailing list: https://launchpad.net/~netstack
Post to     : netstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~netstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to