Public bug reported: I used the admin tenant to create a network by neutron as follow:
[root@liberty ~(keystone_admin)]# neutron net-create test Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | 08211934-702d-420a-87f7-52b08bd940fa | | mtu | 0 | | name | test | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 22 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | cd1d7694e4aa4585b6ac303f089c56e0 | +---------------------------+--------------------------------------+ Then, I tried to create a RBAC with the object of this network, but did not provide a "target-tenant": [root@liberty ~(keystone_admin)]# neutron rbac-create --type network --action access_as_shared test Request Failed: internal server error while processing your request. Afterwards, I checked the log file where I found this: 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource [req-e089f610-3173-4c7 0-8e96-8b6f07532d9a 7deab8e1735c4da88b4f09010f783c8e cd1d7694e4aa4585b6ac303f089c 56e0 - - -] create failed 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource Traceback (most recent call last): 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/pytho n2.7/site-packages/neutron/api/v2/resource.py", line 83, in resource 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource result = method(re quest=request, **args) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/pytho n2.7/site-packages/neutron/api/v2/base.py", line 408, in create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return self._creat e(request, body, **kwargs) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/pytho n2.7/site-packages/oslo_db/api.py", line 146, in wrapper 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 195, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 136, in wrapper 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 519, in _create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource obj = do_create(body) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 501, in do_create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource request.context, reservation.reservation_id) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 195, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 494, in do_create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return obj_creator(request.context, **kwargs) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/db/rbac_db_mixin.py", line 51, in create_rbac_policy 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource context.session.add(db_entry) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 502, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.rollback() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource compat.reraise(exc_type, exc_value, exc_tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 499, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.commit() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 392, in commit 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self._prepare_impl() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 372, in _prepare_impl 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.session.flush() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2027, in flush 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self._flush(objects) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2145, in _flush 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource transaction.rollback(_capture_exception=True) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource compat.reraise(exc_type, exc_value, exc_tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2109, in _flush 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource flush_context.execute() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource rec.execute(self) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 532, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource uow 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 174, in save_obj 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource mapper, table, insert) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 800, in _emit_insert_statements 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource execute(statement, params) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return meth(self, multiparams, params) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return connection._execute_clauseelement(self, multiparams, params) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource compiled_sql, distilled_params 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource context) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource util.raise_from_cause(newraise, exc_info) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 200, in raise_from_cause 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource reraise(type(exception), exception, tb=exc_tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource context) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/default.py", line 450, in do_execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource cursor.execute(statement, parameters) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.errorhandler(self, exc, value) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource raise errorclass, errorvalue 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource OperationalError: (_mysql_exceptions.OperationalError) (1048, "Column 'target_tenant' cannot be null") [SQL: u'INSERT INTO networkrbacs (tenant_id, id, target_tenant, action, object_id) VALUES (%s, %s, %s, %s, %s)'] [parameters: ('cd1d7694e4aa4585b6ac303f089c56e0', '333a7d46-5b27-4700-ba7d-03cf4ea3a2b1', None, 'access_as_shared', '08211934-702d-420a-87f7-52b08bd940fa')] 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource As the log said, the value of the target_tenant is null. However, this is not mandatory when creating a RBAC according to the code in neutron- client. ** Affects: neutron Importance: Undecided Assignee: Han Chao (hanchao-v) Status: New ** Changed in: neutron Assignee: (unassigned) => Han Chao (hanchao-v) -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1578997 Title: RBAC target-tenant is mandatory when creation Status in neutron: New Bug description: I used the admin tenant to create a network by neutron as follow: [root@liberty ~(keystone_admin)]# neutron net-create test Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | 08211934-702d-420a-87f7-52b08bd940fa | | mtu | 0 | | name | test | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 22 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | cd1d7694e4aa4585b6ac303f089c56e0 | +---------------------------+--------------------------------------+ Then, I tried to create a RBAC with the object of this network, but did not provide a "target-tenant": [root@liberty ~(keystone_admin)]# neutron rbac-create --type network --action access_as_shared test Request Failed: internal server error while processing your request. Afterwards, I checked the log file where I found this: 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource [req-e089f610-3173-4c7 0-8e96-8b6f07532d9a 7deab8e1735c4da88b4f09010f783c8e cd1d7694e4aa4585b6ac303f089c 56e0 - - -] create failed 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource Traceback (most recent call last): 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/pytho n2.7/site-packages/neutron/api/v2/resource.py", line 83, in resource 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource result = method(re quest=request, **args) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/pytho n2.7/site-packages/neutron/api/v2/base.py", line 408, in create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return self._creat e(request, body, **kwargs) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/pytho n2.7/site-packages/oslo_db/api.py", line 146, in wrapper 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 195, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 136, in wrapper 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 519, in _create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource obj = do_create(body) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 501, in do_create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource request.context, reservation.reservation_id) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 195, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 494, in do_create 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return obj_creator(request.context, **kwargs) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/db/rbac_db_mixin.py", line 51, in create_rbac_policy 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource context.session.add(db_entry) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 502, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.rollback() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource compat.reraise(exc_type, exc_value, exc_tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 499, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.commit() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 392, in commit 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self._prepare_impl() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 372, in _prepare_impl 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.session.flush() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2027, in flush 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self._flush(objects) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2145, in _flush 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource transaction.rollback(_capture_exception=True) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__ 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource compat.reraise(exc_type, exc_value, exc_tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2109, in _flush 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource flush_context.execute() 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource rec.execute(self) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 532, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource uow 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 174, in save_obj 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource mapper, table, insert) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 800, in _emit_insert_statements 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource execute(statement, params) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return meth(self, multiparams, params) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource return connection._execute_clauseelement(self, multiparams, params) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource compiled_sql, distilled_params 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource context) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource util.raise_from_cause(newraise, exc_info) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 200, in raise_from_cause 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource reraise(type(exception), exception, tb=exc_tb) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource context) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/default.py", line 450, in do_execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource cursor.execute(statement, parameters) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource self.errorhandler(self, exc, value) 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource raise errorclass, errorvalue 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource OperationalError: (_mysql_exceptions.OperationalError) (1048, "Column 'target_tenant' cannot be null") [SQL: u'INSERT INTO networkrbacs (tenant_id, id, target_tenant, action, object_id) VALUES (%s, %s, %s, %s, %s)'] [parameters: ('cd1d7694e4aa4585b6ac303f089c56e0', '333a7d46-5b27-4700-ba7d-03cf4ea3a2b1', None, 'access_as_shared', '08211934-702d-420a-87f7-52b08bd940fa')] 2016-05-06 16:46:01.549 3739 ERROR neutron.api.v2.resource As the log said, the value of the target_tenant is null. However, this is not mandatory when creating a RBAC according to the code in neutron-client. To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1578997/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp