Dear quantum statckers,
When I was at the vmware quantum workshop (it is a perfect one), I
observed it is very unfriendly for a user to use many commands to know
about one router information.
These un-friendlinesses are:
1. quantum router-list
it just lists the network-id of external gateway information. For admin
to know the gw_port, he has to type in:
quantum port-list -- --device_id=<router-id> and
device_owner=network:router_gateway
of course we can add another convenient command:
quantum router-interface-show router_id
with this change,
quantum router-list can show more about gw port besides the network-id,
for example gw_port_id
after that, to show the gwport, admin can use normal command:
quantum port-show gw-port-id
2. quantum router-show router-id
As a show command of a router, we should show every thing of the router
here. (of course according to the user's role)
This include the interfaces, external gateway information among the
current simple ones.
Admin is also a person, he should hate to remember many other commands,
even if they are so-called convenient ones.
With the fully-fledged, true show command, admin's life will be easier (
we cannot assume admin is just admining quantum)
gongysh@gongysh-laptop:~$ quantum router-show
3d7229c6-2594-425e-8551-665817ecbb99
+-----------------------+----------------------------------------------------------------------+
| Field | Value |
+-----------------------+----------------------------------------------------------------------+
| admin_state_up | True |
| external_gateway_info | { |
| | "network_id":
"900a24a6-ae02-4000-a010-81a5c2045a20", |
| | "gw_port":
{ |
| | "status":
"ACTIVE", |
| | "name":
"", |
| | "admin_state_up":
true, |
| | "network_id":
"900a24a6-ae02-4000-a010-81a5c2045a20", |
| | "tenant_id":
"", |
| | "device_owner":
"network:router_gateway", |
| | "mac_address":
"fa:16:3e:87:4c:ef", |
| | "id":
"ec340103-2810-41f1-afb5-0fdcefd56681", |
| | "device_id":
"3d7229c6-2594-425e-8551-665817ecbb99" |
| |
} |
| | } |
| id | 3d7229c6-2594-425e-8551-665817ecbb99 |
| interface_ports | { |
| | "status":
"ACTIVE", |
| | "name":
"", |
| | "admin_state_up":
true, |
| | "network_id":
"723c5d8e-6e66-4f7c-ad89-8ed58468fe30", |
| | "tenant_id":
"b7445f221cda4f4a8ac7db6b218b1339", |
| | "device_owner":
"network:router_interface", |
| | "mac_address":
"fa:16:3e:2b:63:f0", |
| | "fixed_ips":
[ |
| |
{ |
| | "subnet_id":
"5d1a4f3d-2264-4011-98cd-772513b2a1f9", |
| | "ip_address":
"20.0.1.1" |
| |
} |
| |
], |
| | "id":
"968e6944-a2b3-4d05-9e7c-020392f40eaf", |
| | "device_id":
"3d7229c6-2594-425e-8551-665817ecbb99" |
| | } |
| | { |
| | "status":
"ACTIVE", |
| | "name":
"", |
| | "admin_state_up":
true, |
| | "network_id":
"a9843ef2-3446-4d71-91f9-588f8418a180", |
| | "tenant_id":
"b7445f221cda4f4a8ac7db6b218b1339", |
| | "device_owner":
"network:router_interface", |
| | "mac_address":
"fa:16:3e:46:99:89", |
| | "fixed_ips":
[ |
| |
{ |
| | "subnet_id":
"4c459b17-6185-4451-9f1e-996ee0232bc2", |
| | "ip_address":
"10.0.1.1" |
| |
} |
| |
], |
| | "id":
"a61f9820-276b-460c-8372-62c5a1b3d488", |
| | "device_id":
"3d7229c6-2594-425e-8551-665817ecbb99" |
| | } |
| name | router1 |
| status | ACTIVE |
| tenant_id | b7445f221cda4f4a8ac7db6b218b1339 |
+-----------------------+----------------------------------------------------------------------+
solution to your concerns:
1. API back compatibility:
I only add more information, so just as Salvatore said, it is not super
bad. It is back compatible.
But I should have put this change under more flash lights.
2. for breaking policy or security, I suggest to add admin check in the
code:
so if context.is_admin(), I will put the gw_port into router result.
3. for only gw_port_id or entire gw_port
I prefer to entire gw_port. with gw_port, client side (cli or l3agent)
does not need to fetch the gw_port again if it needs it. current l3agent
will fetch it again.
4. of course, if you are not satisfied with my solution to add more into
API, we can do it totally on client command side.
That means client command quantum router-show will run one more time to
get the gw_port information just as current l3agent does so that it can
do true show.
any ideas?
Yong Sheng Gong
On 11/02/2012 06:40 AM, Salvatore Orlando wrote:
HI,
I am becoming aware of this patch just now, and I would like to thank
Dan for raising the issue.
Bug 1069782 was initially filed for adding convenience client-side
commands for retrieving router interfaces, and I believe it was not
supposed to have any server side change.
In general we should avoid being 'trigger-happy' with changes on the
tenant-facing API, even when the change appears totally reasonable and
improves the API. Keeping that in mind, this particular change won't
break backward compatibility, so it's not super-bad. However, it will
break the default policy engine rules - or, to be more precise, it
will circumvent the policy engine. Indeed it won't matter what is the
policy for ports on external network, you'll end up showing some
details about it. You might argue that this is something that needs to
be addressed in the policy engine, and I would agree with you.
Dan proposes two solution which I believe are dictated by a "safety
first" approach. They both seem reasonable to me. The client-side
option looks cleaner but less efficient, where the admin-only option
would be more efficient, and still safe (although I might have some
reservation if the admin-only constraint becomes hard coded).
Salvatore
On 1 November 2012 22:11, Dan Wendlandt <[email protected]
<mailto:[email protected]>> wrote:
Hi team,
I have two concerns with the commit below, one general, one specific.
First off, the general concern: this change changes our
tenant-facing API, but it seems that there was no real public
discussion or notification of this change. Our tenant-facing
APIs, including extensions, must be stable, consistent, and
documented. I would argue that changes to the API should be part
of blueprints, which will trigger a discussion about API
consistency, documentation, etc.
Second, the specific one: I want to explain the reasoning why this
field was not included in the original version of the L3 API, and
why my current thinking is that it probably should not be added.
The model we were going with for L3 routers is that the details
of the gateway are abstracted from the tenant. In particular, the
port used to "hold" the IP allocation for gateway and floating-ip
ports are not visible to a common tenant and should not be
manipulated directly. They are only visible to an admin user. As
a result, I would argue that include the gw port info in the JSON
that is visible to all tenants doesn't really make sense. We
could consider adding it as an admin only attribute (similar to
how the provider network attributes are included in a network, but
only for admins), though this info is already available to admin
users if they search for ports that have the
device_owner=<router-id> and device_owner=network:router_gateway .
We could even has the CLI do this as part of the router-show
command, if the user was an admin.
I think we can have a technical discussions about the second
issue, but my most major concern is actually the first issue in
that we need have a more deliberate process when it comes to
making changes to tenant-facing APIs.
Dan
p.s. if we end up deciding to make the change to the API, I would
also argue that the field be named something like gw_port_id,
rather than gw_port, as we try to maintain consistency that UUID
fields end with _id. This is where Salvatore and the API police
come into play :P
---------- Forwarded message ----------
From: *OpenStack Hudson* <[email protected]
<mailto:[email protected]>>
Date: Thu, Nov 1, 2012 at 2:40 AM
Subject: [Bug 1069782] Re: quantum router-show should return
interfaces too
To: [email protected] <mailto:[email protected]>
Reviewed: https://review.openstack.org/15101
Committed:
http://github.com/openstack/quantum/commit/c1c19b11792e8e220b11466051739ea5b4279a7a
Submitter: Jenkins
Branch: master
commit c1c19b11792e8e220b11466051739ea5b4279a7a
Author: gongysh <[email protected] <mailto:[email protected]>>
Date: Wed Oct 31 22:01:35 2012 +0800
Put gw_port into router dict result.
Bug #1069782
We put gw_port into router dict result so that client can get more
information for the result router.
Change-Id: I54cec8a71441a9370c7ba95767a92190bf1c9c21
** Changed in: quantum
Status: In Progress => Fix Committed
--
You received this bug notification because you are a member of
Netstack
Core Developers, which is subscribed to quantum.
https://bugs.launchpad.net/bugs/1069782
Title:
quantum router-show should return interfaces too
Status in Python client library for Quantum:
In Progress
Status in OpenStack Quantum (virtual network service):
Fix Committed
Bug description:
interfaces and external_gateway_info are two arms of a router,
so we should be able to show interface information too.
quantum router-show myrouter1
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| external_gateway_info | |
| id | c508d501-8019-4e12-b332-fd19ac3be79e |
| name | myrouter1 |
| status | ACTIVE |
| tenant_id | b7445f221cda4f4a8ac7db6b218b1339 |
+-----------------------+--------------------------------------+
To manage notifications about this bug go to:
https://bugs.launchpad.net/python-quantumclient/+bug/1069782/+subscriptions
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dan Wendlandt
Nicira, Inc: www.nicira.com <http://www.nicira.com>
twitter: danwendlandt
~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
Mailing list: https://launchpad.net/~quantum-core
<https://launchpad.net/%7Equantum-core>
Post to : [email protected]
<mailto:[email protected]>
Unsubscribe : https://launchpad.net/~quantum-core
<https://launchpad.net/%7Equantum-core>
More help : https://help.launchpad.net/ListHelp
--
Mailing list: https://launchpad.net/~quantum-core
Post to : [email protected]
Unsubscribe : https://launchpad.net/~quantum-core
More help : https://help.launchpad.net/ListHelp