group-based-policy-specs/specs/kilo/gbp-refactor-neutron-restfu...

3.8 KiB

Group Based Policy Refactor: Use Neutron RESTful APIs

Launchpad blueprint: https://blueprints.launchpad.net/group-based-policy/+spec/neutron-rest-api-refactor

This blueprint proposes using neutron RESTful APIs in resource mapping driver.

Problem description

The current (Juno) GBP RMD interacts with neutron directly through neutron-plugin calls. This tight coupling prevents GBP from being instantiated as separate process/service.

This blueprint proposes a loose coupling by moving GBP to use the neutron RESTful APIs. More specifically, a neutron RESTful API client wrapper will be implemented, and the neutron internal APIs previously used in GBP will be replaced by calls to this client wrapper.

Proposed change

The proposed change will:

1. Add neutron v2 API module. This module will provide APIs to neutron resources' CRUD operation. This code will be added to: gbpservice/network/neutronv2 This will be similar to how nova is doing it [2]. 2. Refactor resource mapping driver code to replace neutron neutron-plugin calls with the neutron v2 API calls.

Alternative

None.

Data model impact

Re-factoring the resource mapping driver code with the neutron RESTful APIs are invisible to users, therefore should not by itself require structural changes to the data model currently defined in the group based policy.

REST API impact

None.

Security impact

None.

Notifications impact

None.

Other end user impact

None.

Performance Impact

There will be some minimal performance imapct after refactoring as RESTful APIs are used.

Other deployer impact

None.

Developer impact

None.

Implementation

Assignee(s)

Yapeng Wu

Yi Yang

Work Items

  1. Add neutron v2 API module.
  2. In RMD, replace neutron-plugin calls with neutron v2 API calls.

Dependencies

Neutron Python Client (minimum version 2.3.9) and plan to move to later version.

Testing

1. UT for the Neutron Client Wrapper: Additional UT for the Neutron RESTful API wrapper will be provided.

2. UT for the Resource Mapping Driver: In current RMD UT implementation, when a call such as "create_policy_target"[3] is made, the RMD UT is making neutron-plugin call. With the proposed RMD changes, those neutron-plugin calls will get replaced with the ClientWrapping class methods. To get this work in the UT environment, the ClientWraping class methods will be patched with neutron-plugin calls.

Another type calls in current RMD UT implementation are neutron-wsgi calls ( "new*_request") [4]. These calls are implemented in Neutron test framework[5] via WSGI requests. These calls will stay as they are.

3. Long Term Plan When GBP becomes an independent server, the neutron-wsgi calls will being refactored. These refactor can be handled in the spec for the independent server.

Documentation Impact

None

References

[1] http://git.openstack.org/cgit/stackforge/group-based-policy-specs/tree/specs/juno/group-based-policy-abstraction.rst [2] https://github.com/openstack/nova/tree/master/nova/network/neutronv2 [3] https://github.com/stackforge/group-based-policy/blob/master/gbpservice/neutron/tests/unit/services/grouppolicy/test_resource_mapping.py#L317 [4] https://github.com/stackforge/group-based-policy/blob/master/gbpservice/neutron/tests/unit/services/grouppolicy/test_resource_mapping.py#L339 [5] https://github.com/openstack/neutron/blob/master/neutron/tests/unit/test_db_plugin.py#L200-L249