From b87dbb4e96c49e783e9a1e6363efba34a970ed3c Mon Sep 17 00:00:00 2001 From: Madhuri Kumari Date: Tue, 19 Jan 2016 01:03:17 +0530 Subject: [PATCH] App to deploy Magnum Bay. This app uses python-magnumclient to deploy a Magnum Bay. This bay can any of Kubernetes, Swarm and Mesos. Change-Id: Ifa8ad6142c86c416fb7cbadc07d548061c18f79b Partially-Implements: blueprint magnum-murano-rationalization --- contrib/plugins/magnum_plugin/LICENSE | 175 +++++++++++++++ .../Classes/MagnumBayApp.yaml | 83 +++++++ .../Classes/MagnumBaymodel.yaml | 131 +++++++++++ .../io.murano.apps.MagnumApp/UI/ui.yaml | 212 ++++++++++++++++++ .../io.murano.apps.MagnumApp/logo.png | Bin 0 -> 8767 bytes .../io.murano.apps.MagnumApp/manifest.yaml | 26 +++ .../magnum_plugin/magnum_plugin/__init__.py | 84 +++++++ .../magnum_plugin/magnum_plugin/cfg.py | 24 ++ .../plugins/magnum_plugin/requirements.txt | 1 + contrib/plugins/magnum_plugin/setup.cfg | 16 ++ contrib/plugins/magnum_plugin/setup.py | 20 ++ .../notes/magnum-plugin-f372caac83d2cd78.yaml | 4 + 12 files changed, 776 insertions(+) create mode 100644 contrib/plugins/magnum_plugin/LICENSE create mode 100644 contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBayApp.yaml create mode 100644 contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBaymodel.yaml create mode 100644 contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/UI/ui.yaml create mode 100644 contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/logo.png create mode 100644 contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/manifest.yaml create mode 100644 contrib/plugins/magnum_plugin/magnum_plugin/__init__.py create mode 100644 contrib/plugins/magnum_plugin/magnum_plugin/cfg.py create mode 100644 contrib/plugins/magnum_plugin/requirements.txt create mode 100644 contrib/plugins/magnum_plugin/setup.cfg create mode 100644 contrib/plugins/magnum_plugin/setup.py create mode 100644 releasenotes/notes/magnum-plugin-f372caac83d2cd78.yaml diff --git a/contrib/plugins/magnum_plugin/LICENSE b/contrib/plugins/magnum_plugin/LICENSE new file mode 100644 index 00000000..67db8588 --- /dev/null +++ b/contrib/plugins/magnum_plugin/LICENSE @@ -0,0 +1,175 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBayApp.yaml b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBayApp.yaml new file mode 100644 index 00000000..3d0b3b28 --- /dev/null +++ b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBayApp.yaml @@ -0,0 +1,83 @@ +# 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. + +Namespaces: + =: io.murano.apps.magnum.plugin + std: io.murano + +Name: MagnumBayApp + +Extends: std:Application + +Properties: + name: + Contract: $.string().notNull() + + baymodel: + Contract: $.class(MagnumBaymodel).notNull() + + nodeCount: + Contract: $.int().check($ > 0) + + masterCount: + Contract: $.int().check($ > 0) + + discoveryUrl: + Contract: $.string() + + timeout: + Contract: $.int().check($ >= 0) + + +Methods: + .init: + Body: + - $._environment: $.find(std:Environment).require() + - Try: + - $._magnum: new('io.murano.extensions.mirantis.magnum.Magnum', $._environment) + Catch: + With: 'murano.dsl.exceptions.NoPackageForClassFound' + Do: + Throw: PluginNotFoundException + Message: 'Plugin for interaction with Magnum is not installed' + + .destroy: + Body: + - $bayId: $.getAttr(bayId, null) + - $._magnum.deleteBay($bayId) + - $msg: format('Magnum bay {0} is deleted', $.name) + - $._environment.reporter.report($this, $msg) + - $.baymodel.delete() + + deploy: + Body: + - $baymodelId: $.baymodel.create() + - $msg: format('Creating Magnum bay {0}', $.name) + - $._environment.reporter.report($this, $msg) + - $params: + name: $.name + baymodel_id: $baymodelId + node_count: $.nodeCount + master_count: $.masterCount + discovery_url: $.discoveryUrl + bay_create_timeout: $.timeout + - Try: + - $bayId: $._magnum.createBay($params) + Catch: + - As: e + Do: + - $formatString: 'Error: {0}' + - $._environment.reporter.report_error($, $formatString.format($e.message)) + - Rethrow: + - $.setAttr(bayId, $bayId) + - $msg: format('Magnum bay {0} is created', $.name) + - $._environment.reporter.report($this, $msg) diff --git a/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBaymodel.yaml b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBaymodel.yaml new file mode 100644 index 00000000..eeb6089c --- /dev/null +++ b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/Classes/MagnumBaymodel.yaml @@ -0,0 +1,131 @@ +# 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. + +Namespaces: + =: io.murano.apps.magnum.plugin + std: io.murano + +Name: MagnumBaymodel + +Properties: + name: + Contract: $.string().notNull() + + imageId: + Contract: $.string().notNull() + + flavorId: + Contract: $.string() + + masterFlavorId: + Contract: $.string() + + keypairId: + Contract: $.string().notNull() + + externalNetworkId: + Contract: $.string().notNull() + + fixedNetwork: + Contract: $.string() + + coe: + Contract: $.string().notNull().check($ in list(kubernetes, swarm, mesos)) + + dnsNameServer: + Contract: $.string() + + dockerVolumeSize: + Contract: $.string() + + labels: + Contract: $.string() + + httpProxy: + Contract: $.string() + + httpsProxy: + Contract: $.string() + + noProxy: + Contract: $.string() + + networkDriver: + Contract: $.string() + + volumeDriver: + Contract: $.string() + + tlsDisabled: + Contract: $.bool() + + public: + Contract: $.bool() + + registryEnabled: + Contract: $.bool() + +Methods: + .init: + Body: + - $._environment: $.find(std:Environment).require() + - Try: + - $._magnum: new('io.murano.extensions.mirantis.magnum.Magnum', $._environment) + Catch: + With: 'murano.dsl.exceptions.NoPackageForClassFound' + Do: + Throw: PluginNotFoundException + Message: 'Plugin for interaction with Magnum is not installed' + + create: + Body: + - $msg: format('Creating Magnum baymodel {0}', $.name) + - $._environment.reporter.report($this, $msg) + - $params: + name: $.name + image_id: $.imageId + keypair_id: $.keypairId + external_network_id: $.externalNetworkId + coe: $.coe + flavor_id: $.flavorId + master_flavor_id: $.masterFlavorId + fixed_network: $.fixedNetwork + dns_nameserver: $.dnsNameServer + network_driver: $.networkDriver + docker_volume_size: $.dockerVolumeSize + labels: $.labels + http_proxy: $.httpProxy + https_proxy: $.httpsProxy + no_proxy: $.noProxy + volume_driver: $.volumeDriver + tls_disabled: $.tlsDisabled + public: $.public + registry_enabled: $.registryEnabled + - Try: + - $baymodelId: $._magnum.createBaymodel($params) + Catch: + - As: e + Do: + - $formatString: 'Error: {0}' + - $._environment.reporter.report_error($, $formatString.format($e.message)) + - Rethrow: + - $.setAttr(baymodelId, $baymodeId) + - $msg: format('Magnum baymodel is created {0}', $.name) + - $._environment.reporter.report($this, $msg) + - Return: $baymodelId + + delete: + Body: + - $baymodelId: $.getAttr(baymodelId, null) + - $._magnum.deleteBaymodel($baymodelId) + - $msg: format('Magnum baymodel {0} is deleted', $.name) + - $._environment.reporter.report($this, $msg) diff --git a/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/UI/ui.yaml b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/UI/ui.yaml new file mode 100644 index 00000000..751a1a59 --- /dev/null +++ b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/UI/ui.yaml @@ -0,0 +1,212 @@ +# 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. + +Version: 2 + +Templates: + baymodel: + ?: + type: io.murano.apps.magnum.plugin.MagnumBaymodel + name: $.baymodelConfiguration.name + imageId: $.baymodelConfiguration.imageId + keypairId: $.baymodelConfiguration.keyPair + externalNetworkId: $.baymodelConfiguration.externalNetworkId + coe: $.baymodelConfiguration.coe + flavorId: $.baymodelConfiguration.flavorId.norm() + masterFlavorId: $.baymodelConfiguration.masterFlavorId.norm() + networkDriver: $.baymodelConfiguration.networkDriver.norm() + fixedNetwork: $.baymodelConfiguration.fixedNetwork.norm() + dnsNameServer: $.baymodelConfiguration.dnsNameServer.norm() + dockerVolumeSize: $.baymodelConfiguration.dockerVolumeSize + labels: $.baymodelConfiguration.labels.norm() + volumeDriver: $.baymodelConfiguration.volumeDriver.norm() + httpProxy: $.baymodelConfiguration.httpProxy.norm() + httpsProxy: $.baymodelConfiguration.httpsProxy.norm() + noProxy: $.baymodelConfiguration.noProxy.norm() + tlsDisabled: $.baymodelConfiguration.tlsDisabled + public: $.baymodelConfiguration.public + registryEnabled: $.baymodelConfiguration.registryEnabled + +Application: + ?: + type: io.murano.apps.magnum.plugin.MagnumBayApp + name: $.appConfiguration.name + nodeCount: $.appConfiguration.nodeCount + masterCount: $.appConfiguration.masterCount + discoveryUrl: $.appConfiguration.discoveryUrl.norm() + timeout: $.appConfiguration.timeout + baymodel: $baymodel + +Forms: + - appConfiguration: + fields: + - name: name + type: string + label: Bay Name + description: >- + Enter a desired name for the application. Just A-Z, a-z, 0-9. + - name: nodeCount + type: integer + label: Node Count + initial: 1 + required: false + description: >- + Enter desired no. of node counts. This node count specifies no. of + minion node created in bay. + - name: masterCount + type: integer + label: Master Node Count + initial: 1 + required: false + description: >- + Enter desired no. of master node counts. This master node count specifies + no. of master node created in bay. + - name: discoveryUrl + type: string + label: Discovery URL + required: false + description: >- + Specifies custom discovery url for node discovery. + - name: timeout + type: integer + label: Timeout + initial: 0 + required: false + description: >- + The timeout for bay creation in minutes. Set to 0 for no timeout. + The default is no timeout. + + - baymodelConfiguration: + fields: + - name: name + type: string + label: Baymodel Name + description: >- + Enter a desired name for the application. Just A-Z, a-z, 0-9. + - name: imageId + type: image + imageType: linux + label: Instance Image + initial: linux + description: >- + Select a valid image for the application. Image should already be prepared and + registered in glance. + - name: keyPair + type: keypair + label: Key Pair + description: >- + Select a Key Pair to control access to instances. You can login to + instances using this KeyPair after the deployment of application. + - name: externalNetworkId + type: string + label: External Network + description: >- + Select an External Network to assign IPs to bay nodes. + - name: coe + type: string + label: Container Orchestration Engine + initial: kubernetes + description: >- + Select Container Orchestration Engine type to be created. + - name: flavorId + type: flavor + label: Bay Flavor + required: false + description: >- + Specify the nova flavor id to use when launching the bay. + - name: masterFlavorId + type: flavor + label: Master Flavor + required: false + description: >- + Specify the nova flavor id to use when launching the master node of + the bay. + - name: networkDriver + type: string + label: Network Driver + initial: flannel + required: false + description: >- + Specify the network driver name for instantiating container + networks. + - name: fixedNetwork + type: string + label: Fixed Network + required: false + description: >- + Specify the private Neutron network name to connect to this bay. + - name: dnsNameServer + type: string + label: DNS Name Server + initial: 8.8.8.8 + required: false + description: >- + Specify the DNS nameserver to use for this bay. + - name: dockerVolumeSize + type: integer + label: Docker Volume Size + required: false + description: >- + Specify the number of size in GB for the docker volume to use. + - name: labels + type: string + label: Labels + required: false + description: >- + Arbitrary labels in the form of key=value pairs to associate + with a bay. Specify in format . + - name: volumeDriver + type: string + label: Volume Driver + required: false + description: >- + Specify the volume driver name for instantiating container + volume. + - name: httpProxy + type: string + label: HTTP Proxy + required: false + description: >- + Specify the http_proxy address to use for nodes in bay. + - name: httpsProxy + type: string + label: HTTPS Proxy + required: false + description: >- + Specify the https_proxy address to use for nodes in bay. + - name: noProxy + type: string + label: No Proxy + required: false + description: >- + Specify the no_proxy address to use for nodes in bay. + - name: tlsDisabled + type: boolean + label: TLS Disabled + required: false + initial: false + description: >- + Specify true to disable TLS in the bay. + - name: public + type: boolean + label: Public + required: false + initial: false + description: >- + Specify true to make bay public. + - name: registryEnabled + type: boolean + label: Registry Enabled + required: false + initial: false + description: >- + Specify true to enable docker registry in the bay. diff --git a/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/logo.png b/contrib/plugins/magnum_plugin/magnum-app/io.murano.apps.MagnumApp/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bf09f0df5a73d20b61642f44e607adae06c386fd GIT binary patch literal 8767 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 pgP=1.1.0 diff --git a/contrib/plugins/magnum_plugin/setup.cfg b/contrib/plugins/magnum_plugin/setup.cfg new file mode 100644 index 00000000..27197d0b --- /dev/null +++ b/contrib/plugins/magnum_plugin/setup.cfg @@ -0,0 +1,16 @@ +[metadata] +version = 1.0 +name = murano.plugins.magnum +description = Plugin to deploy a Magnum Bay to run docker containers on it. +summary = This plugin uses python-magnumclient to deploy a Magnum Bay. You can + deploy any of Kubernetes, Swarm and Mesos cluster with it. Just specify + 'coe' to deploy cluster of your choice and run containers on it. +author = Madhuri Kumari +author-email = madhuri.kumari@intel.com + +[files] +packages = magnum_plugin + +[entry_points] +io.murano.extensions = + mirantis.magnum.Magnum = magnum_plugin:MagnumClient diff --git a/contrib/plugins/magnum_plugin/setup.py b/contrib/plugins/magnum_plugin/setup.py new file mode 100644 index 00000000..25b837ae --- /dev/null +++ b/contrib/plugins/magnum_plugin/setup.py @@ -0,0 +1,20 @@ +# Copyright 2016-2017 OpenStack Foundation +# All Rights Reserved. +# +# 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. + +import setuptools + +# all other params will be taken from setup.cfg +setuptools.setup(packages=setuptools.find_packages(), + setup_requires=['pbr'], pbr=True) diff --git a/releasenotes/notes/magnum-plugin-f372caac83d2cd78.yaml b/releasenotes/notes/magnum-plugin-f372caac83d2cd78.yaml new file mode 100644 index 00000000..1994f36c --- /dev/null +++ b/releasenotes/notes/magnum-plugin-f372caac83d2cd78.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added magnum plugin to murano, that allows creating/deleting + of magnum baymodels and bays from MuranoPL