Add Magnum actions

- Implement MagnumAction class
- Map first actions (baymodels) from Magnum
- Tests

Change-Id: Ib61bee8c3d18e1f6ef8a580e3ec3e5157926f89c
Implements: blueprint add-magnum-action-pack
This commit is contained in:
Marcos Fermin Lobo
2016-06-07 15:23:29 +02:00
parent 9921b8ce6a
commit b0a2fc64b3
5 changed files with 57 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ from ironicclient.v1 import client as ironicclient
from keystoneclient.auth import identity
from keystoneclient import httpclient
from keystoneclient.v3 import client as keystoneclient
from magnumclient.v1 import client as magnumclient
from mistralclient.api.v2 import client as mistralclient
from neutronclient.v2_0 import client as neutronclient
from novaclient import client as novaclient
@@ -606,3 +607,28 @@ class DesignateAction(base.OpenStackAction):
@classmethod
def _get_fake_client(cls):
return cls._client_class()
class MagnumAction(base.OpenStackAction):
_client_class = magnumclient.Client
def _get_client(self):
ctx = context.ctx()
LOG.debug("Magnum action security context: %s" % ctx)
keystone_endpoint = keystone_utils.get_keystone_endpoint_v2()
auth_url = keystone_endpoint.url
magnum_url = keystone_utils.get_endpoint_for_project('magnum').url
return self._client_class(
magnum_url=magnum_url,
auth_token=ctx.auth_token,
project_id=ctx.project_id,
user_id=ctx.user_id,
auth_url=auth_url
)
@classmethod
def _get_fake_client(cls):
return cls._client_class()

View File

@@ -1118,5 +1118,13 @@
"sync_domain": "sync.sync_domain",
"sync_record": "sync.sync_record",
"touch_domain": "touch.domain"
},
"magnum": {
"_comment": "It uses magnumclient.v1.",
"baymodels_create": "baymodels.create",
"baymodels_delete": "baymodels.delete",
"baymodels_get": "baymodels.get",
"baymodels_list": "baymodels.list",
"baymodels_update": "baymodels.update"
}
}

View File

@@ -199,3 +199,15 @@ class OpenStackActionTest(base.BaseTestCase):
self.assertTrue(mocked().domain.get.called)
mocked().domain.get.assert_called_once_with(domain="example.com")
@mock.patch.object(actions.MagnumAction, '_get_client')
def test_magnum_action(self, mocked):
method_name = "baymodels.get"
action_class = actions.MagnumAction
action_class.client_method_name = method_name
params = {'id': '1234-abcd'}
action = action_class(**params)
action.run()
self.assertTrue(mocked().baymodels.get.called)
mocked().baymodels.get.assert_called_once_with(id="1234-abcd")

View File

@@ -30,6 +30,7 @@ python-glanceclient>=2.0.0 # Apache-2.0
python-heatclient>=1.1.0 # Apache-2.0
python-keystoneclient!=1.8.0,!=2.1.0,>=1.7.0 # Apache-2.0
python-mistralclient>=2.0.0 # Apache-2.0
python-magnumclient>=2.0.0 # Apache-2.0
python-neutronclient>=4.2.0 # Apache-2.0
python-novaclient!=2.33.0,>=2.29.0 # Apache-2.0
python-swiftclient>=2.2.0 # Apache-2.0

View File

@@ -31,6 +31,8 @@ from ironicclient.common import base as ironic_base
from ironicclient.v1 import client as ironicclient
from keystoneclient import base as keystone_base
from keystoneclient.v3 import client as keystoneclient
from magnumclient.common import base as magnum_base
from magnumclient.v1 import client as magnumclient
from mistralclient.api import base as mistral_base
from mistralclient.api.v2 import client as mistralclient
from novaclient import base as nova_base
@@ -78,6 +80,7 @@ BASE_MISTRAL_MANAGER = mistral_base.ResourceManager
BASE_TROVE_MANAGER = trove_base.Manager
BASE_IRONIC_MANAGER = ironic_base.Manager
BASE_BARBICAN_MANAGER = barbican_base.BaseEntityManager
BASE_MAGNUM_MANAGER = magnum_base.Manager
def get_parser():
@@ -181,6 +184,10 @@ def get_designate_client(**kwargs):
return designateclient.Client(1)
def get_magnum_client(**kwargs):
return magnumclient.Client()
CLIENTS = {
'nova': get_nova_client,
'heat': get_heat_client,
@@ -192,7 +199,8 @@ CLIENTS = {
'ironic': get_ironic_client,
'barbican': get_barbican_client,
'mistral': get_mistral_client,
'designate': get_designate_client
'designate': get_designate_client,
'magnum': get_magnum_client,
# 'neutron': get_nova_client
# 'baremetal_introspection': ...
# 'swift': ...
@@ -210,6 +218,7 @@ BASE_MANAGERS = {
'barbican': BASE_BARBICAN_MANAGER,
'mistral': BASE_MISTRAL_MANAGER,
'designate': None,
'magnum': BASE_MAGNUM_MANAGER,
# 'neutron': BASE_NOVA_MANAGER
# 'baremetal_introspection': ...
# 'swift': ...