Support Manila actions in Mistral

Adds manila actions into the available list of actions for mistral

Change-Id: Ic0a3c24f72d91a8a87ffcf81db763058bcbf8566
Closes-Bug: #1783291
This commit is contained in:
Jose Castro Leon 2018-07-24 12:00:47 +02:00
parent 8806b5b7d8
commit a2756a34c2
9 changed files with 246 additions and 1 deletions

View File

@ -116,6 +116,7 @@ python-ironic-inspector-client==1.5.0
python-ironicclient==2.3.0 python-ironicclient==2.3.0
python-keystoneclient==3.8.0 python-keystoneclient==3.8.0
python-magnumclient==2.1.0 python-magnumclient==2.1.0
python-manilaclient==1.23.0
python-mimeparse==1.6.0 python-mimeparse==1.6.0
python-mistralclient==3.1.0 python-mistralclient==3.1.0
python-muranoclient==0.8.2 python-muranoclient==0.8.2

View File

@ -21,7 +21,7 @@ SUPPORTED_MODULES = [
'Nova', 'Glance', 'Keystone', 'Heat', 'Neutron', 'Cinder', 'Nova', 'Glance', 'Keystone', 'Heat', 'Neutron', 'Cinder',
'Trove', 'Ironic', 'Baremetal Introspection', 'Swift', 'SwiftService', 'Trove', 'Ironic', 'Baremetal Introspection', 'Swift', 'SwiftService',
'Zaqar', 'Barbican', 'Mistral', 'Designate', 'Magnum', 'Murano', 'Tacker', 'Zaqar', 'Barbican', 'Mistral', 'Designate', 'Magnum', 'Murano', 'Tacker',
'Aodh', 'Gnocchi', 'Glare', 'Vitrage', 'Senlin', 'Zun', 'Qinling' 'Aodh', 'Gnocchi', 'Glare', 'Vitrage', 'Senlin', 'Zun', 'Qinling', 'Manila'
] ]

View File

@ -60,6 +60,9 @@ heatclient = _try_import('heatclient.client')
ironic_inspector_client = _try_import('ironic_inspector_client.v1') ironic_inspector_client = _try_import('ironic_inspector_client.v1')
ironicclient = _try_import('ironicclient.v1.client') ironicclient = _try_import('ironicclient.v1.client')
keystoneclient = _try_import('keystoneclient.v3.client') keystoneclient = _try_import('keystoneclient.v3.client')
manila = _try_import('manilaclient')
manilaclient = _try_import('manilaclient.client')
manila_api_versions = _try_import('manilaclient.api_versions')
magnumclient = _try_import('magnumclient.v1.client') magnumclient = _try_import('magnumclient.v1.client')
mistralclient = _try_import('mistralclient.api.v2.client') mistralclient = _try_import('mistralclient.api.v2.client')
muranoclient = _try_import('muranoclient.v1.client') muranoclient = _try_import('muranoclient.v1.client')
@ -998,3 +1001,45 @@ class QinlingAction(base.OpenStackAction):
endpoint_override="http://127.0.0.1:7070/", endpoint_override="http://127.0.0.1:7070/",
session=session session=session
) )
class ManilaAction(base.OpenStackAction):
_service_type = 'sharev2'
@classmethod
def _get_client_class(cls):
return manilaclient.Client
def _create_client(self, context):
LOG.debug("Manila action security context: %s", context)
manila_endpoint = self.get_service_endpoint()
session_and_auth = self.get_session_and_auth(context)
temp_client = self._get_client_class()(
manila.API_MAX_VERSION,
service_catalog_url=manila_endpoint.url,
session=session_and_auth['auth']
)
discovered_version = manila_api_versions.discover_version(
temp_client,
manila.API_MAX_VERSION
)
client = self._get_client_class()(
discovered_version,
service_catalog_url=manila_endpoint.url,
session=session_and_auth['session']
)
return client
@classmethod
def _get_fake_client(cls):
return cls._get_client_class()(
manila.API_MAX_VERSION,
input_auth_token='token',
service_catalog_url='http://127.0.0.1:8786')

View File

@ -1349,5 +1349,173 @@
"webhooks_get": "webhooks.get", "webhooks_get": "webhooks.get",
"webhooks_update": "webhooks.update", "webhooks_update": "webhooks.update",
"webhooks_delete": "webhooks.delete" "webhooks_delete": "webhooks.delete"
},
"manila": {
"_comment": "It uses manilaclient.v2.",
"availability_zones_list": "availability_zones.list",
"limits_get": "limits.get",
"messages_delete": "messages.delete",
"messages_find": "messages.find",
"messages_findall": "messages.findall",
"messages_get": "messages.get",
"messages_list": "messages.list",
"pools_list": "pools.list",
"quota_classes_find": "quota_classes.find",
"quota_classes_findall": "quota_classes.findall",
"quota_classes_get": "quota_classes.get",
"quota_classes_list": "quota_classes.list",
"quota_classes_update": "quota_classes.update",
"quotas_defaults": "quotas.defaults",
"quotas_delete": "quotas.delete",
"quotas_find": "quotas.find",
"quotas_findall": "quotas.findall",
"quotas_get": "quotas.get",
"quotas_list": "quotas.list",
"quotas_update": "quotas.update",
"security_services_create": "security_services.create",
"security_services_delete": "security_services.delete",
"security_services_find": "security_services.find",
"security_services_findall": "security_services.findall",
"security_services_get": "security_services.get",
"security_services_list": "security_services.list",
"security_services_update": "security_services.update",
"services_disable": "services.disable",
"services_enable": "services.enable",
"services_list": "services.list",
"services_server_api_version": "services.server_api_version",
"share_export_locations_find": "share_export_locations.find",
"share_export_locations_findall": "share_export_locations.findall",
"share_export_locations_get": "share_export_locations.get",
"share_export_locations_list": "share_export_locations.list",
"share_group_snapshots_create": "share_group_snapshots.create",
"share_group_snapshots_delete": "share_group_snapshots.delete",
"share_group_snapshots_find": "share_group_snapshots.find",
"share_group_snapshots_findall": "share_group_snapshots.findall",
"share_group_snapshots_get": "share_group_snapshots.get",
"share_group_snapshots_list": "share_group_snapshots.list",
"share_group_snapshots_reset_state": "share_group_snapshots.reset_state",
"share_group_snapshots_update": "share_group_snapshots.update",
"share_group_type_access_add_project_access": "share_group_type_access.add_project_access",
"share_group_type_access_find": "share_group_type_access.find",
"share_group_type_access_findall": "share_group_type_access.findall",
"share_group_type_access_list": "share_group_type_access.list",
"share_group_type_access_remove_project_access": "share_group_type_access.remove_project_access",
"share_group_types_create": "share_group_types.create",
"share_group_types_delete": "share_group_types.delete",
"share_group_types_find": "share_group_types.find",
"share_group_types_findall": "share_group_types.findall",
"share_group_types_get": "share_group_types.get",
"share_group_types_list": "share_group_types.list",
"share_groups_create": "share_groups.create",
"share_groups_delete": "share_groups.delete",
"share_groups_find": "share_groups.find",
"share_groups_findall": "share_groups.findall",
"share_groups_get": "share_groups.get",
"share_groups_list": "share_groups.list",
"share_groups_reset_state": "share_groups.reset_state",
"share_groups_update": "share_groups.update",
"share_instance_export_locations_find": "share_instance_export_locations.find",
"share_instance_export_locations_findall": "share_instance_export_locations.findall",
"share_instance_export_locations_get": "share_instance_export_locations.get",
"share_instance_export_locations_list": "share_instance_export_locations.list",
"share_instances_do_list": "share_instances.do_list",
"share_instances_find": "share_instances.find",
"share_instances_findall": "share_instances.findall",
"share_instances_force_delete": "share_instances.force_delete",
"share_instances_get": "share_instances.get",
"share_instances_list": "share_instances.list",
"share_instances_reset_state": "share_instances.reset_state",
"share_networks_add_security_service": "share_networks.add_security_service",
"share_networks_create": "share_networks.create",
"share_networks_delete": "share_networks.delete",
"share_networks_find": "share_networks.find",
"share_networks_findall": "share_networks.findall",
"share_networks_get": "share_networks.get",
"share_networks_list": "share_networks.list",
"share_networks_remove_security_service": "share_networks.remove_security_service",
"share_networks_update": "share_networks.update",
"share_replicas_create": "share_replicas.create",
"share_replicas_delete": "share_replicas.delete",
"share_replicas_find": "share_replicas.find",
"share_replicas_findall": "share_replicas.findall",
"share_replicas_get": "share_replicas.get",
"share_replicas_list": "share_replicas.list",
"share_replicas_promote": "share_replicas.promote",
"share_replicas_reset_replica_state": "share_replicas.reset_replica_state",
"share_replicas_reset_state": "share_replicas.reset_state",
"share_replicas_resync": "share_replicas.resync",
"share_servers_delete": "share_servers.delete",
"share_servers_details": "share_servers.details",
"share_servers_find": "share_servers.find",
"share_servers_findall": "share_servers.findall",
"share_servers_get": "share_servers.get",
"share_servers_list": "share_servers.list",
"share_snapshot_export_locations_find": "share_snapshot_export_locations.find",
"share_snapshot_export_locations_findall": "share_snapshot_export_locations.findall",
"share_snapshot_export_locations_get": "share_snapshot_export_locations.get",
"share_snapshot_export_locations_list": "share_snapshot_export_locations.list",
"share_snapshot_instance_export_locations_find": "share_snapshot_instance_export_locations.find",
"share_snapshot_instance_export_locations_findall": "share_snapshot_instance_export_locations.findall",
"share_snapshot_instance_export_locations_get": "share_snapshot_instance_export_locations.get",
"share_snapshot_instance_export_locations_list": "share_snapshot_instance_export_locations.list",
"share_snapshot_instances_find": "share_snapshot_instances.find",
"share_snapshot_instances_findall": "share_snapshot_instances.findall",
"share_snapshot_instances_get": "share_snapshot_instances.get",
"share_snapshot_instances_list": "share_snapshot_instances.list",
"share_snapshot_instances_reset_state": "share_snapshot_instances.reset_state",
"share_snapshots_access_list": "share_snapshots.access_list",
"share_snapshots_allow": "share_snapshots.allow",
"share_snapshots_create": "share_snapshots.create",
"share_snapshots_delete": "share_snapshots.delete",
"share_snapshots_deny": "share_snapshots.deny",
"share_snapshots_find": "share_snapshots.find",
"share_snapshots_findall": "share_snapshots.findall",
"share_snapshots_force_delete": "share_snapshots.force_delete",
"share_snapshots_get": "share_snapshots.get",
"share_snapshots_list": "share_snapshots.list",
"share_snapshots_manage": "share_snapshots.manage",
"share_snapshots_reset_state": "share_snapshots.reset_state",
"share_snapshots_unmanage": "share_snapshots.unmanage",
"share_snapshots_update": "share_snapshots.update",
"share_type_access_add_project_access": "share_type_access.add_project_access",
"share_type_access_find": "share_type_access.find",
"share_type_access_findall": "share_type_access.findall",
"share_type_access_list": "share_type_access.list",
"share_type_access_remove_project_access": "share_type_access.remove_project_access",
"share_types_create": "share_types.create",
"share_types_delete": "share_types.delete",
"share_types_find": "share_types.find",
"share_types_findall": "share_types.findall",
"share_types_get": "share_types.get",
"share_types_list": "share_types.list",
"share_types_show": "share_types.show",
"shares_access_list": "shares.access_list",
"shares_allow": "shares.allow",
"shares_create": "shares.create",
"shares_delete": "shares.delete",
"shares_delete_metadata": "shares.delete_metadata",
"shares_deny": "shares.deny",
"shares_do_list": "shares.do_list",
"shares_extend": "shares.extend",
"shares_find": "shares.find",
"shares_findall": "shares.findall",
"shares_force_delete": "shares.force_delete",
"shares_get": "shares.get",
"shares_get_metadata": "shares.get_metadata",
"shares_list": "shares.list",
"shares_list_instances": "shares.list_instances",
"shares_manage": "shares.manage",
"shares_migration_cancel": "shares.migration_cancel",
"shares_migration_complete": "shares.migration_complete",
"shares_migration_get_progress": "shares.migration_get_progress",
"shares_migration_start": "shares.migration_start",
"shares_reset_state": "shares.reset_state",
"shares_reset_task_state": "shares.reset_task_state",
"shares_revert_to_snapshot": "shares.revert_to_snapshot",
"shares_set_metadata": "shares.set_metadata",
"shares_shrink": "shares.shrink",
"shares_unmanage": "shares.unmanage",
"shares_update": "shares.update",
"shares_update_all_metadata": "shares.update_all_metadata"
} }
} }

View File

@ -48,6 +48,7 @@ MODULE_MAPPING = {
'barbican': ['barbican.orders_list', actions.BarbicanAction], 'barbican': ['barbican.orders_list', actions.BarbicanAction],
'mistral': ['mistral.workflows_get', actions.MistralAction], 'mistral': ['mistral.workflows_get', actions.MistralAction],
'designate': ['designate.domains_list', actions.DesignateAction], 'designate': ['designate.domains_list', actions.DesignateAction],
'manila': ['manila.shares_list', actions.ManilaAction],
'magnum': ['magnum.bays_list', actions.MagnumAction], 'magnum': ['magnum.bays_list', actions.MagnumAction],
'murano': ['murano.deployments_list', actions.MuranoAction], 'murano': ['murano.deployments_list', actions.MuranoAction],
'tacker': ['tacker.list_vims', actions.TackerAction], 'tacker': ['tacker.list_vims', actions.TackerAction],

View File

@ -389,6 +389,19 @@ class OpenStackActionTest(base.BaseTestCase):
self.assertTrue(mocked().runtimes.get.called) self.assertTrue(mocked().runtimes.get.called)
mocked().runtimes.get.assert_called_once_with(id="1234-abcd") mocked().runtimes.get.assert_called_once_with(id="1234-abcd")
@mock.patch.object(actions.ManilaAction, '_get_client')
def test_manila_action(self, mocked):
mock_ctx = mock.Mock()
method_name = "shares.get"
action_class = actions.ManilaAction
action_class.client_method_name = method_name
params = {'share': '1234-abcd'}
action = action_class(**params)
action.run(mock_ctx)
self.assertTrue(mocked().shares.get.called)
mocked().shares.get.assert_called_once_with(share="1234-abcd")
class TestImport(base.BaseTestCase): class TestImport(base.BaseTestCase):
@mock.patch.object(importutils, 'try_import') @mock.patch.object(importutils, 'try_import')

View File

@ -0,0 +1,4 @@
---
features:
- |
Add Mistral actions for Openstack Manila, the fileshare management service.

View File

@ -38,6 +38,7 @@ python-glareclient>=0.3.0 # Apache-2.0
python-heatclient>=1.10.0 # Apache-2.0 python-heatclient>=1.10.0 # Apache-2.0
python-keystoneclient>=3.8.0 # Apache-2.0 python-keystoneclient>=3.8.0 # Apache-2.0
python-mistralclient!=3.2.0,>=3.1.0 # Apache-2.0 python-mistralclient!=3.2.0,>=3.1.0 # Apache-2.0
python-manilaclient>=1.23.0 # Apache-2.0
python-magnumclient>=2.1.0 # Apache-2.0 python-magnumclient>=2.1.0 # Apache-2.0
python-muranoclient>=0.8.2 # Apache-2.0 python-muranoclient>=0.8.2 # Apache-2.0
python-neutronclient>=6.7.0 # Apache-2.0 python-neutronclient>=6.7.0 # Apache-2.0

View File

@ -37,6 +37,8 @@ from keystoneclient import base as keystone_base
from keystoneclient.v3 import client as keystoneclient from keystoneclient.v3 import client as keystoneclient
from magnumclient.common import base as magnum_base from magnumclient.common import base as magnum_base
from magnumclient.v1 import client as magnumclient from magnumclient.v1 import client as magnumclient
from manilaclient import base as manila_base
from manilaclient.v2 import client as manilaclient
from mistralclient.api import base as mistral_base from mistralclient.api import base as mistral_base
from mistralclient.api.v2 import client as mistralclient from mistralclient.api.v2 import client as mistralclient
from muranoclient.common import base as murano_base from muranoclient.common import base as murano_base
@ -88,6 +90,7 @@ BASE_MISTRAL_MANAGER = mistral_base.ResourceManager
BASE_TROVE_MANAGER = trove_base.Manager BASE_TROVE_MANAGER = trove_base.Manager
BASE_IRONIC_MANAGER = ironic_base.Manager BASE_IRONIC_MANAGER = ironic_base.Manager
BASE_BARBICAN_MANAGER = barbican_base.BaseEntityManager BASE_BARBICAN_MANAGER = barbican_base.BaseEntityManager
BASE_MANILA_MANAGER = manila_base.Manager
BASE_MAGNUM_MANAGER = magnum_base.Manager BASE_MAGNUM_MANAGER = magnum_base.Manager
BASE_MURANO_MANAGER = murano_base.Manager BASE_MURANO_MANAGER = murano_base.Manager
BASE_AODH_MANAGER = aodh_base.Manager BASE_AODH_MANAGER = aodh_base.Manager
@ -211,6 +214,13 @@ def get_glare_client(**kwargs):
return glareclient.Client('') return glareclient.Client('')
def get_manila_client(**kwargs):
return manilaclient.Client(
input_auth_token='token',
service_catalog_url='http://127.0.0.1:8786'
)
CLIENTS = { CLIENTS = {
'nova': get_nova_client, 'nova': get_nova_client,
'heat': get_heat_client, 'heat': get_heat_client,
@ -227,6 +237,7 @@ CLIENTS = {
'aodh': get_aodh_client, 'aodh': get_aodh_client,
'gnocchi': get_gnocchi_client, 'gnocchi': get_gnocchi_client,
'glare': get_glare_client, 'glare': get_glare_client,
'manila': get_manila_client,
# 'neutron': get_nova_client # 'neutron': get_nova_client
# 'baremetal_introspection': ... # 'baremetal_introspection': ...
# 'swift': ... # 'swift': ...
@ -248,6 +259,7 @@ BASE_MANAGERS = {
'aodh': BASE_AODH_MANAGER, 'aodh': BASE_AODH_MANAGER,
'gnocchi': BASE_GNOCCHI_MANAGER, 'gnocchi': BASE_GNOCCHI_MANAGER,
'glare': None, 'glare': None,
'manila': BASE_MANILA_MANAGER,
# 'neutron': BASE_NOVA_MANAGER # 'neutron': BASE_NOVA_MANAGER
# 'baremetal_introspection': ... # 'baremetal_introspection': ...
# 'swift': ... # 'swift': ...