diff --git a/contrib/heat_manila/README.md b/contrib/heat_manila/README.md new file mode 100644 index 0000000000..db7331e4b8 --- /dev/null +++ b/contrib/heat_manila/README.md @@ -0,0 +1,18 @@ +Manila plugin for OpenStack Heat +================================ + +This plugin enables using Manila resources in a Heat template. + + +### 1. Install the Manila plugin in Heat + +NOTE: These instructions assume the value of heat.conf plugin_dirs includes the +default directory /usr/lib/heat. + +To install the plugin, from this directory run: + sudo python ./setup.py install + +### 2. Restart heat + +Only the process "heat-engine" needs to be restarted to load the newly installed +plugin. diff --git a/contrib/heat_manila/heat_manila/__init__.py b/contrib/heat_manila/heat_manila/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/contrib/heat_manila/heat_manila/client.py b/contrib/heat_manila/heat_manila/client.py new file mode 100644 index 0000000000..32251096de --- /dev/null +++ b/contrib/heat_manila/heat_manila/client.py @@ -0,0 +1,45 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_utils import importutils + +from heat.engine.clients import client_plugin + +exceptions = importutils.try_import( + 'manilaclient.openstack.common.apiclient.exceptions') +manila_client = importutils.try_import('manilaclient.v1.client') + + +class ManilaClientPlugin(client_plugin.ClientPlugin): + + def _create(self): + endpoint_type = self._get_client_option('manila', 'endpoint_type') + endpoint = self.url_for(service_type='share', + endpoint_type=endpoint_type) + + args = { + 'service_catalog_url': endpoint, + 'input_auth_token': self.auth_token + } + + client = manila_client.Client(**args) + return client + + def is_not_found(self, ex): + return isinstance(ex, exceptions.NotFound) + + def is_over_limit(self, ex): + return isinstance(ex, exceptions.RequestEntityTooLarge) + + def is_conflict(self, ex): + return isinstance(ex, exceptions.Conflict) diff --git a/contrib/heat_manila/requirements.txt b/contrib/heat_manila/requirements.txt new file mode 100644 index 0000000000..ea436e92f2 --- /dev/null +++ b/contrib/heat_manila/requirements.txt @@ -0,0 +1 @@ +python-manilaclient>=1.0.3 \ No newline at end of file diff --git a/contrib/heat_manila/setup.cfg b/contrib/heat_manila/setup.cfg new file mode 100644 index 0000000000..c4eede2512 --- /dev/null +++ b/contrib/heat_manila/setup.cfg @@ -0,0 +1,34 @@ +[metadata] +name = heat-contrib-manila +summary = Heat resources for Manila +description-file = + README.md +author = OpenStack +author-email = openstack-dev@lists.openstack.org +home-page = http://www.openstack.org/ +classifier = + Environment :: OpenStack + Intended Audience :: Information Technology + Intended Audience :: System Administrators + License :: OSI Approved :: Apache Software License + Operating System :: POSIX :: Linux + Programming Language :: Python + Programming Language :: Python :: 2 + Programming Language :: Python :: 2.7 + Programming Language :: Python :: 2.6 + +[files] +packages = + heat_manila + +# Copy to /usr/lib/heat for plugin loading +data_files = + lib/heat/manila = heat_manila/resources/* + +[entry_points] +heat.clients = + manila = heat_manila.client:ManilaClientPlugin + +[global] +setup-hooks = + pbr.hooks.setup_hook diff --git a/contrib/heat_manila/setup.py b/contrib/heat_manila/setup.py new file mode 100644 index 0000000000..62f38a592f --- /dev/null +++ b/contrib/heat_manila/setup.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT +import setuptools + +# In python < 2.7.4, a lazy loading of package `pbr` will break +# setuptools if some other modules registered functions in `atexit`. +# solution from: http://bugs.python.org/issue15881#msg170215 +try: + import multiprocessing # noqa +except ImportError: + pass + +setuptools.setup( + setup_requires=['pbr'], + pbr=True)