Retire Murano: remove repo content

Murano project is retiring
- https://review.opendev.org/c/openstack/governance/+/919358

this commit remove the content of this project repo

Depends-On: https://review.opendev.org/c/openstack/project-config/+/919359/
Change-Id: Ifef553e4438244b3f356312c5c9787c2cb7d18c2
This commit is contained in:
Ghanshyam Mann 2024-05-10 15:52:52 -07:00
parent c898a310af
commit 1ac6e2bcb2
1006 changed files with 8 additions and 89215 deletions

View File

@ -1,12 +0,0 @@
[run]
branch = True
source = murano
omit =
.tox/*
murano/tests/*
[paths]
source = murano
[report]
ignore_errors = True

61
.gitignore vendored
View File

@ -1,61 +0,0 @@
#swap file
*.swp
#IntelJ Idea
.idea/
#virtualenv
.venv/
#Build results
build/
dist/
*.egg-info/
*.egg
eggs/
.eggs/
develop-eggs/
.tox
AUTHORS
ChangeLog
.testrepository
.coverage
cover
api-ref/build/
!/.stestr.conf
.stestr/
#Python
*.pyc
#Translation build
*.mo
#SQLite Database files
*.sqlite
#Autogenerated Documentation
doc/source/api
doc/source/_static/murano.conf.sample
doc/source/_static/murano.policy.yaml.sample
#Config file for functional tests
murano/tests/functional/engine/config.conf
#Autogenerated sample config file and policy file
etc/murano/murano.conf.sample
etc/murano/murano-cfapi.conf.sample
etc/murano.policy.yaml.sample
#User Config file for Murano
etc/murano/murano.conf
etc/murano/murano-cfapi.conf
etc/murano/logging.conf
# pylint autogenerated support files
tools/lintstack.head.py
tools/pylint_exceptions
# Files created by releasenotes build
releasenotes/build

View File

@ -1,3 +0,0 @@
[DEFAULT]
test_path=${OS_TEST_PATH:-./murano/tests/unit}
top_dir=./

View File

@ -1,128 +0,0 @@
- project:
queue: murano
templates:
- check-requirements
- openstack-cover-jobs
- openstack-python3-jobs
- periodic-stable-jobs
- publish-openstack-docs-pti
- release-notes-jobs-python3
check:
jobs:
- murano-rally-task
- murano-tempest-api
- murano-tempest-cfapi
- murano-grenade
- murano-tempest-api-ipv6-only
gate:
jobs:
- murano-tempest-api
- murano-tempest-api-ipv6-only
- job:
name: murano-rally-task
voting: false
parent: rally-task-murano
irrelevant-files: &murano-irrelevant-files
- ^(test-|)requirements.txt$
- ^setup.cfg$
- ^doc/.*$
- ^.*\.rst$
- ^releasenotes/.*$
- ^murano/tests/.*$
- ^contrib/.*$
- ^tools/.*$
timeout: 7800
vars:
devstack_plugins:
rally-openstack: https://opendev.org/openstack/rally-openstack
rally_task: rally-jobs/task-murano.yaml
required-projects:
- openstack/rally-openstack
- job:
name: murano-tempest-base
parent: devstack-tempest
irrelevant-files: *murano-irrelevant-files
timeout: 7800
required-projects: &base_required_projects
- openstack/heat
- openstack/murano
- openstack/murano-dashboard
- openstack/python-heatclient
- openstack/python-muranoclient
- openstack/tempest
- openstack/murano-tempest-plugin
vars: &base_vars
devstack_plugins:
murano: https://opendev.org/openstack/murano
heat: https://opendev.org/openstack/heat
devstack_services:
tempest: true
s-account: false
s-container: false
s-object: false
s-proxy: false
devstack_localrc:
TEMPEST_PLUGINS: "/opt/stack/murano-tempest-plugin"
KEYSTONE_ADMIN_ENDPOINT: true
tempest_test_regex: application_catalog
tox_envlist: all
- job:
name: murano-tempest-api
parent: murano-tempest-base
- job:
name: murano-tempest-api-ipv6-only
parent: devstack-tempest-ipv6
description: |
Murano devstack tempest tests job for IPv6-only deployment
timeout: 7800
irrelevant-files: *murano-irrelevant-files
required-projects: *base_required_projects
vars: *base_vars
- job:
name: murano-tempest-cfapi
parent: murano-tempest-base
voting: false
vars:
devstack_services:
murano-cfapi: true
tempest_test_regex: service_broker
- job:
name: murano-grenade
parent: grenade
voting: false
irrelevant-files: *murano-irrelevant-files
required-projects:
- opendev.org/openstack/grenade
- opendev.org/openstack/heat
- opendev.org/openstack/murano
- opendev.org/openstack/murano-dashboard
- opendev.org/openstack/python-heatclient
- opendev.org/openstack/python-muranoclient
- opendev.org/openstack/murano-tempest-plugin
- opendev.org/openstack/heat-tempest-plugin
vars:
grenade_localrc:
RUN_HEAT_INTEGRATION_TESTS: False
devstack_plugins:
murano: https://opendev.org/openstack/murano
heat: https://opendev.org/openstack/heat
devstack_services:
tempest: true
s-account: false
s-container: false
s-object: false
s-proxy: false
h-api: true
h-api-cfn: true
h-eng: true
heat: true
tempest_plugins:
- murano-tempest-plugin
tempest_test_regex: ^murano_tempest_tests\.tests\.scenario\.application_catalog\.test_deployment
tox_envlist: all

View File

@ -1,19 +0,0 @@
The source repository for this project can be found at:
https://opendev.org/openstack/murano
Pull requests submitted through GitHub are not monitored.
To start contributing to OpenStack, follow the steps in the contribution guide
to set up and use Gerrit:
https://docs.openstack.org/contributors/code-and-documentation/quick-start.html
Bugs should be filed on Launchpad:
https://bugs.launchpad.net/murano
For more specific information about contributing to this repository, see the
murano contributor guide:
https://docs.openstack.org/murano/latest/contributor/contributing.html

View File

@ -1,15 +0,0 @@
Style Commandments
==================
Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/
Murano Specific Commandments
----------------------------
- [M318] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert
like assertIsNone(A)
- [M322] Method's default argument shouldn't be mutable.
- [M323] Python 3: do not use dict.iteritems.
- [M324] Python 3: do not use dict.iterkeys.
- [M325] Python 3: do not use dict.itervalues.
- [M326] Python 3: do not use basestring.

176
LICENSE
View File

@ -1,176 +0,0 @@
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.

View File

@ -1,42 +1,10 @@
========================
Team and repository tags
========================
This project is no longer maintained.
.. image:: https://governance.openstack.org/tc/badges/murano.svg
:target: https://governance.openstack.org/tc/reference/tags/index.html
The contents of this repository are still available in the Git
source code management system. To see the contents of this
repository before it reached its end of life, please check out the
previous commit with "git checkout HEAD^1".
.. Change things from this point on
Murano
======
Murano Project introduces an application catalog, which allows application
developers and cloud administrators to publish various cloud-ready
applications in a browsable categorised catalog. Cloud users
-- including inexperienced ones -- can then use the catalog to
compose reliable application environments with the push of a button.
Project Resources
-----------------
* `Murano Official Documentation <https://docs.openstack.org/murano/latest/>`_
* Project status, bugs, and blueprints are tracked on
`Launchpad <https://launchpad.net/murano>`_
* Additional resources are linked from the project
`Wiki <https://wiki.openstack.org/wiki/Murano>`_ page
* `Python client <https://opendev.org/openstack/python-muranoclient>`_
License
-------
Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0
Release Notes
-------------
Release Notes may be found here: https://docs.openstack.org/releasenotes/murano
For any further questions, please email
openstack-discuss@lists.openstack.org or join #openstack-dev on
OFTC.

View File

@ -1,208 +0,0 @@
# -*- coding: utf-8 -*-
#
# 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.
#
# murano documentation build configuration file, created by
# sphinx-quickstart on Sat May 1 15:17:47 2010.
#
# This file is execfile()d with the current directory set to
# its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import os
import sys
extensions = [
'os_api_ref',
'openstackdocstheme'
]
html_theme = 'openstackdocs'
html_theme_options = {
"sidebar_mode": "toc",
}
# openstackdocstheme options
openstackdocs_repo_name = 'openstack/murano'
openstackdocs_bug_project = 'murano'
openstackdocs_bug_tag = 'api-ref'
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('../../'))
sys.path.insert(0, os.path.abspath('../'))
sys.path.insert(0, os.path.abspath('./'))
# -- General configuration ----------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#
# source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# General information about the project.
copyright = u'2016-present, OpenStack Foundation'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
# today = ''
# Else, today_fmt is used as the format for a strftime call.
# today_fmt = '%B %d, %Y'
# The reST default role (used for this markup: `text`) to use
# for all documents.
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
add_module_names = False
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'native'
# -- Options for man page output ----------------------------------------------
# Grouping the document tree for man pages.
# List of tuples 'sourcefile', 'target', u'title', u'Authors name', 'manual'
# -- Options for HTML output --------------------------------------------------
# The theme to use for HTML and HTML Help pages. Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
# html_theme_path = ["."]
# html_theme = '_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
# html_additional_pages = {}
# If false, no module index is generated.
# html_use_modindex = True
# If false, no index is generated.
# html_use_index = True
# If true, the index is split into individual pages for each letter.
# html_split_index = False
# If true, links to the reST sources are added to the pages.
# html_show_sourcelink = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
# html_use_opensearch = ''
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
# html_file_suffix = ''
# Output file base name for HTML help builder.
htmlhelp_basename = 'muranodoc'
# -- Options for LaTeX output -------------------------------------------------
# The paper size ('letter' or 'a4').
# latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
# latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
# [howto/manual]).
latex_documents = [
('index', 'Murano.tex', u'OpenStack Application Catalog API Documentation',
u'OpenStack Foundation', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
# latex_use_parts = False
# Additional stuff for the LaTeX preamble.
# latex_preamble = ''
# Documents to append as an appendix to all manuals.
# latex_appendices = []
# If false, no module index is generated.
# latex_use_modindex = True

View File

@ -1,8 +0,0 @@
==================================
OpenStack Application Catalog APIs
==================================
.. toctree::
:maxdepth: 1
v1/index

View File

@ -1,129 +0,0 @@
.. -*- rst -*-
==========================
Actions and Static Actions
==========================
A Murano action is a type of MuranoPL method. The differences between a regular
MuranoPL method are:
* Action is executed on deployed objects.
* Action execution is initiated by API request: you do not have to call the
method manually.
Thus, Murano actions allow performing any operations on objects, like:
* Getting information from the VM, like a config that is generated during the
deployment
* VM rebooting
* Scaling
A list of available actions is formed during the environment deployment.
Following deployment completion, you can call the action asynchronously. Murano
engine generates a task for every action thereby allowing the action status to
be tracked.
Execute action
==============
.. rest_method:: POST /environments/{environment_id}/actions/{action_id}
Execute action on deployed environment.
Request Parameters
-------------------
.. rest_parameters:: parameters.yaml
- environment_id: env_id_url
- action_id: action_id_url
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- task_id: task_id
Response Example
----------------
.. literalinclude:: samples/execute-action-response.json
:language: javascript
Get Action Result
=================
.. rest_method:: GET /environments/{environment_id}/actions/{task_id}
Retrieve action result for action executed on deployed environment.
Request Parameters
-------------------
.. rest_parameters:: parameters.yaml
- environment_id: env_id_url
- task_id: task_id_url
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Execute static action
=====================
.. rest_method:: POST /actions
Execute static action.
Static methods can be called if they are exposed by specifying Scope: Public
in the MuranoPL object and the result of its execution will be returned.
Request Example
---------------
.. literalinclude:: samples/static-action-request.json
:language: javascript
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Response Example
----------------
.. literalinclude:: samples/static-action-response.json
:language: javascript

View File

@ -1,162 +0,0 @@
.. -*- rst -*-
==========
Categories
==========
In Murano, applications can belong to a category or multiple categories.
Administrative users can create and delete categories as well as list
available categories and view details for a particular category.
List categories
===============
.. rest_method:: GET /catalog/categories
Retrieve list of all available categories in the Application Catalog.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- categories: all_categories
- id: category_id
- name: category_name
- updated: updated
- created: created
- package_count: package_count
Response Example
----------------
.. literalinclude:: samples/category-list-response.json
:language: javascript
Show category details
=====================
.. rest_method:: GET /catalog/categories/{category_id}
Show details for a category.
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- category_id: category_id_url
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- id: category_id
- name: category_name
- updated: updated
- created: created
- packages: category_packages
- package_count: package_count
Response Example
----------------
.. literalinclude:: samples/category-show-response.json
:language: javascript
Create Category
===============
.. rest_method:: POST /catalog/categories
Add a new category to the Application Catalog.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- name: category_name
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- id: category_id
- name: category_name
- updated: updated
- created: created
- package_count: package_count
Response Example
----------------
.. literalinclude:: samples/category-create-response.json
:language: javascript
Delete Category
===============
.. rest_method:: DELETE /catalog/categories/{category_id}
Remove an existing category from the Application Catalog.
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- category_id: category_id_url
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404

View File

@ -1,50 +0,0 @@
.. -*- rst -*-
===========
Deployments
===========
Deployments track environments that have been deployed, either successfully
or otherwise. Each deployment contains the following information:
* A "Class: Environment" object (io.murano.Environment) with a name. Each
"Class: Environment" object defines an environment in terms of the deployment
process and groups all Applications and their related infrastructures together.
* An object (or objects) referring to networks that exist.
* A list of Applications (e.g. io.murano.apps.linux.Telnet). Each Application
contains, or otherwise references, anything it requires. The Telnet example
has a property called ``instance`` whose contract states it must be of type
``io.murano.resources.Instance``. In turn, the Instance has properties it
requires (like a ``name``, a ``flavor``, or a keypair name, ``keyname``).
List deployments
================
.. rest_method:: GET /deployments
List deployments for all environments for the current tenant (project).
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- deployments: deployments
Response Example
----------------
.. literalinclude:: samples/deployments-list-response.json
:language: javascript

View File

@ -1,403 +0,0 @@
.. -*- rst -*-
============
Environments
============
An environment is a set of logically connected applications that are grouped
together for easy management. By default, each environment has a single
network for all its applications, and the deployment of the environment is
defined in a single heat stack. Applications in different environments are
always independent from one another.
An environment is a single unit of deployment. This means that you can not only
deploy an environment that contains a single application but an environment
that contains multiple applications.
List environments
=================
.. rest_method:: GET /environments
Get a list of existing Environments
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- all_tenants: all_tenants
- tenant: tenant
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- environments: environments
- status: env_status
- created: created
- updated: updated
- name: env_name
- description_text: env_description
- tenant_id: tenant_id
- version: env_version
- id: env_id
Response Example
----------------
.. literalinclude:: samples/environments-list-response.json
:language: javascript
Create environment
==================
.. rest_method:: POST /environments
Creates an environment.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- name: env_name_request
Request Example
---------------
.. literalinclude:: samples/environment-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- id: env_id
- name: env_name
- description_text: env_description
- created: created
- updated: updated
- tenant_id: tenant_id
- version: env_version
- services: services
- acquired_by: acquired_by
Response Example
----------------
.. literalinclude:: samples/environment-create-response.json
:language: javascript
Rename environment
==================
.. rest_method:: PUT /environments/{env_id}
Renames an environment.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
- name: env_name_update
Request Example
---------------
.. literalinclude:: samples/environment-update-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- id: env_id
- name: env_name
- description_text: env_description
- created: created
- updated: updated
- tenant_id: tenant_id
- version: env_version
- services: services
- acquired_by: acquired_by
Response Example
----------------
.. literalinclude:: samples/environment-update-response.json
:language: javascript
Show environment details
========================
.. rest_method:: GET /environments/{env_id}
Shows details for an environment.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- id: env_id
- name: env_name
- description_text: env_description
- created: created
- updated: updated
- tenant_id: tenant_id
- version: env_version
- services: services
- acquired_by: acquired_by
Response Example
----------------
.. literalinclude:: samples/environment-show-response.json
:language: javascript
Delete environment
==================
.. rest_method:: DELETE /environments/{env_id}
Remove specified Environment.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
- abandon: abandon
Response Parameters
-------------------
This request does not return anything in the response body.
Get environment model
=====================
.. rest_method:: GET /environments/{env_id}/model/{path}
Get an Environment model.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
- path: env_model_path
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- defaultNetworks: env_default_networks
- region: env_region
- regions: regions
- name: env_name
- services: services
- ?: env_model
Response Example
----------------
.. literalinclude:: samples/environments-model-response.json
:language: javascript
Update environment model
========================
.. rest_method:: PATCH /environments/{env_id}/model/
Update an environment model.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 202
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
Request Example
---------------
.. literalinclude:: samples/environment-model-update-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- defaultNetworks: env_default_networks
- region: env_region
- regions: regions
- name: env_name
- services: services
- ?: env_model
Response Example
----------------
.. literalinclude:: samples/environments-model-response.json
:language: javascript
Get environment last status
===========================
.. rest_method:: GET /environments/{env_id}/lastStatus
Get the last status for the environment for each service in the environment.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- lastStatuses: env_last_status
Response Example
----------------
.. literalinclude:: samples/environment-last-status-response.json
:language: javascript

View File

@ -1,15 +0,0 @@
:tocdepth: 2
####################################
OpenStack Application Catalog API v1
####################################
.. rest_expand_all::
.. include:: actions.inc
.. include:: categories.inc
.. include:: deployments.inc
.. include:: environments.inc
.. include:: packages.inc
.. include:: sessions.inc
.. include:: templates.inc

View File

@ -1,488 +0,0 @@
.. -*- rst -*-
========
Packages
========
In Murano, each application, as well as the UI form for application data entry,
is defined by packages.
Package Structure
=================
The structure of the Murano application package is predefined. The application package root folder
should contain the following:
* ``manifest.yaml`` file is the application entry point.
.. note::
The filename is fixed, so do not use any custom names.
* ``Classes`` folder contains MuranoPL class definitions.
* ``Resources`` folder contaisn execution plan templates as well as the
``scripts`` folder with all the files required for an application
deployment located inside it.
* ``UI`` folder contains the dynamic UI YAML definitions.
* ``logo.png`` file (optional) is an image file associated with your
application. The logo appears in the Application Catalog within
Murano Dasboard.
.. note::
There are no special limitations regarding an image filename.
However, if it differs from the default ``logo.png``, specify it
in an application manifest file.
* ``images.lst`` file (optional) contains a list of images required by an
application.
.. note::
A bundle is a collection of packages. In the Community App Catalog, you can
find such bundles as ``container-based-apps``, ``app-servers``, and so on.
The packages in the Application Catalog are sorted by usage.
List Packages
=============
.. rest_method:: GET /v1/catalog/packages
Get a list of packages
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- catalog: catalog
- marker: marker
- limit: limit
- order_by: order_by
- type: pkg_type_query
- category: category
- fqn: fqn
- owned: owned
- id: pkg_id_query
- include_disabled: include_disabled
- search: search
- class_name: class_name
- name: pkg_name_query
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- packages: packages
- updated: updated
- class_definitions: class_definitions
- id: pkg_id
- fully_qualified_name: fully_qualified_name
- is_public: is_public
- name: pkg_name
- type: pkg_type
- supplier: pkg_supplier
- description: description
- author: author
- created: created
- enabled: enabled
- tags: tags
- categories: package_categories
- owner_id: owner_id
Response Example
----------------
.. literalinclude:: samples/packages-list-response.json
:language: javascript
Upload package
==============
.. rest_method:: POST /v1/catalog/packages
Upload a package to the application catalog.
.. note::
Though specifying categories is optional, it is recommended that you
specify at least one. It helps to filter applications in the catalog.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- categories: package_categories
- is_public: is_public
- file: pkg_file
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- updated: updated
- class_definitions: class_definitions
- id: pkg_id
- fully_qualified_name: fully_qualified_name
- is_public: is_public
- name: pkg_name
- type: pkg_type
- supplier: pkg_supplier
- description: description
- author: author
- created: created
- enabled: enabled
- tags: tags
- categories: package_categories
- owner_id: owner_id
Response Example
----------------
.. literalinclude:: samples/package-create-response.json
:language: javascript
Download package
================
.. rest_method:: GET /v1/catalog/packages/{package_id}/download
Download a package.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- package_id: pkg_id_url
Response Parameters
-------------------
This request does not return anything in the response body.
:language: javascript
Show package details
====================
.. rest_method:: GET /v1/catalog/packages/{package_id}
Shows details for a package.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- package_id: pkg_id_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- updated: updated
- class_definitions: class_definitions
- id: pkg_id
- fully_qualified_name: fully_qualified_name
- is_public: is_public
- name: pkg_name
- type: pkg_type
- supplier: pkg_supplier
- description: description
- author: author
- created: created
- enabled: enabled
- tags: tags
- categories: package_categories
- owner_id: owner_id
Response Example
----------------
.. literalinclude:: samples/package-show-response.json
:language: javascript
Update package
==============
.. rest_method:: PATCH /v1/catalog/packages/{package_id}
Update a package.
List of allowed changes::
{ "op": "add", "path": "/tags", "value": [ "foo", "bar" ] }
{ "op": "add", "path": "/categories", "value": [ "foo", "bar" ] }
{ "op": "remove", "path": "/tags" }
{ "op": "remove", "path": "/categories" }
{ "op": "replace", "path": "/tags", "value": ["foo", "bar"] }
{ "op": "replace", "path": "/is_public", "value": true }
{ "op": "replace", "path": "/description",
"value":"New description" }
{ "op": "replace", "path": "/name", "value": "New name" }
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 202
.. rest_status_code:: error status.yaml
- 400
- 403
- 404
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- package_id: pkg_id_url
Request Example
---------------
.. literalinclude:: samples/package-update-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- updated: updated
- class_definitions: class_definitions
- id: pkg_id
- fully_qualified_name: fully_qualified_name
- is_public: is_public
- name: pkg_name
- type: pkg_type
- supplier: pkg_supplier
- description: description
- author: author
- created: created
- enabled: enabled
- tags: tags
- categories: package_categories
- owner_id: owner_id
Response Example
----------------
.. literalinclude:: samples/package-update-response.json
Delete package
==============
.. rest_method:: DELETE /v1/catalog/packages/{package_id}
Remove specified Environment.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- package_id: pkg_id_url
Response Parameters
-------------------
This request does not return anything in the response body.
:language: javascript
Search for packages
===================
.. rest_method:: GET /v1/catalog/packages
Search for packages in application catalog. Non-admins, by default, can view
packages that belong to their project as well as public packages: packages
which belong to other projects but which have been tagged as public by an
admin. Admins can search for packages across all projects.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- filters: pkg_filters
Response Parameters
-------------------
Returns the list of packages matching the search criteria.
Get UI definition
=================
.. rest_method:: GET /v1/catalog/packages/{package_id}/ui
Retrieve UI definition for an application.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- package_id: pkg_id_url
Response Parameters
-------------------
Returns the entire UI definition for the package, if the logo has a
UI definition.
Below is an example of a very basic UI definition::
Version: 2.2
Forms:
- appConfiguration:
fields:
- name: license
type: string
description: Apache License, Version 2.0
hidden: false
required: false
Get logo
========
.. rest_method:: GET /v1/catalog/packages/{package_id}/logo
Retrieve application logo.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- package_id: pkg_id_url
Response Parameters
-------------------
Returns the binary logo data for the package, if the package has a logo.

View File

@ -1,660 +0,0 @@
# variables in header
request_id:
description: |
A unique ID for tracking service request. The request ID associated
with the request by default appears in the service logs.
in: header
required: true
type: UUID
# variables in path
abandon:
description: |
Indicates how to delete environment.
``True`` is used when just database must be cleaned.
``False`` is used if all resources used by environment must be destroyed.
in: path
required: false
default: false
type: boolean
action_id_url:
description: |
The UUID of the action to be executed on the deployed environment.
in: path
required: true
type: string
category_id_url:
description: |
The UUID of the category.
in: path
required: true
type: string
env_id_url:
description: |
The UUID of the environment.
in: path
required: true
type: string
env_model_path:
description: |
Allows to get a specific section of the model, for example
``defaultNetworks``, ``region`` or ``?`` or any of the subsections.
in: path
required: false
type: string
env_name_update:
description: |
A name for the environment. Name must be at least
one non-white space symbol.
in: path
required: true
type: string
pkg_id_url:
description: |
The UUID of the package.
in: path
required: true
type: string
service_id_url:
description:
The UUID of a service belonging to an environment template.
in: path
required: true
type: string
session_id_url:
description: |
The UUID of the session.
in: path
required: true
type: string
task_id_url:
description: |
The UUID of the task associated with an action executed on a deployed
environment.
in: path
required: true
type: string
template_id_url:
description: |
The UUID of the environment template.
in: path
required: true
type: string
template_is_public_url:
description: |
Indicates whether public environment templates are listed or not. The
following options are possible:
- ``True``. Public environments templates from all projects are listed.
- ``False``. Private environments templates from current project are
listed.
- ``empty``. All project templates plus public templates from all projects.
are listed
in: path
required: false
default: false
type: boolean
# variables in query
all_tenants:
description: |
Indicates whether environments from all projects are listed.
``True`` environments from all projects are listed. Admin user required.
``False`` environments only from current project are listed (default like
option unspecified).
in: query
required: false
default: false
type: boolean
catalog:
description: |
If ``false`` (default) - search packages, that current user can edit
(own for non-admin, all for admin). If ``true`` - search packages,
that current user can deploy (i.e. his own + public).
in: query
required: false
default: false
type: boolean
category:
description: |
Allows to filter by categories.
in: query
required: false
type: string
class_name:
description: |
Search only for packages, that use specified class.
in: query
required: false
type: string
fqn:
description: |
Allows to filter by fully qualified name.
in: query
required: false
type: string
include_disabled:
description: |
Include disabled packages in the result.
in: query
required: false
default: false
type: boolean
limit:
description: |
When present the maximum number of results returned will not exceed
the specified value. The typical pattern of limit and marker is to
make an initial limited request and then to use the ID of the last
package from the response as the marker parameter in a
subsequent limited request.
in: query
required: false
type: string
marker:
description: |
A package identifier marker may be specified. When present only
packages which occur after the identifier ID will be listed
in: query
required: false
type: string
order_by:
description: |
Allows to sort packages by ``fqn``, ``name``, ``created``.
Created is default value.
in: query
required: false
type: string
owned:
description: |
Search only from packages owned by current project.
in: query
required: false
default: false
type: boolean
pkg_filters:
description: |
The filters that you want to use to search for packages in the
application catalog. If no filters query parameter is specified, the
application catalog API returns all packages allowed by the policy
settings. By using filters parameter, the API returns only the requested
set of packages that meet the filters. The list of filters includes:
* limit: the maximum number of packages to return
* type: the package type
* id: the package id
* category: the package category
* tag: the package tag
* class_name: the package class name
* fqn: the package fully qualified name
* name: the package name
in: query
required: false
type: string
pkg_id_query:
description: |
Allows to filter by package id.
in: query
required: false
type: string
pkg_name_query:
description: |
Allows to filter by package name.
in: query
required: false
type: string
pkg_type_query:
description: |
Allows to filter package by type, e.g. ``application``, ``library``.
in: query
required: false
type: string
search:
description: |
Gives opportunity to search specified data by all the
package parameters and order packages.
in: query
required: false
type: string
tenant:
description: |
Indicates environments from specified tenant are listed. Admin user required.
in: query
required: false
type: string
# variables in body
acquired_by:
description: |
The session that is currently `deploying` the environment. Returns the
`first` session id that is in ``DEPLOYING`` state for the environment.
in: body
required: true
type: string
all_categories:
description: |
All categories available in the application catalog.
in: body
required: true
type: array
author:
description: |
The author of the package.
in: body
required: true
type: string
category_id:
description: |
The UUID of the category.
in: body
required: true
type: string
category_name:
description: |
The name of the category.
in: body
required: true
type: string
category_packages:
description: |
The list of packages associated with a package. Each package returned
includes its ``id``, ``fully_qualified_name``, and ``name``.
in: body
required: true
type: array
class_definitions:
description: |
The class_definitions of the package.
in: body
required: true
type: array
created:
description: |
The date and time when the resource was created. The date and time stamp
format is `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_:
::
CCYY-MM-DDThh:mm:ss±hh:mm
For example, ``2015-08-27T09:49:58-05:00``.
The ``±hh:mm`` value, if included, is the time zone as an offset
from UTC.
in: body
required: true
type: string
deployments:
description: |
The list of deployments for either the current environment or all
environments for the current tenant (project).
The following APIs control whether deployments by environment or by
project are returned:
* ``/deployments``: Returns all deployments for a project.
* ``/environments/{env_id}/deployments``: Returns all deployments for an
environment in a project.
in: body
required: true
type: array
description:
description: |
The description of the package.
in: body
required: true
type: string
enabled:
description: |
Whether the package is browsed in the Application Catalog.
in: body
required: true
type: boolean
env_default_networks:
description: |
The default networking information of the environment. The information
includes the ``name`` of the network, along with the ``type`` and ``id``
of the network, contained in the ``?`` property.
An example ``defaultNetworks`` object looks like::
"defaultNetworks": {
"environment": {
"internalNetworkName": "net_two",
"?": {
"type": "io.murano.resources.ExistingNeutronNetwork",
"id": "594e94fcfe4c48ef8f9b55edb3b9f177"
}
},
"flat": null
}
in: body
required: true
type: object
env_description:
description: |
The description of the environment.
in: body
required: true
type: string
env_id:
description: |
The UUID of the environment.
in: body
required: true
type: string
env_last_status:
description: |
Shows the most recent status of the environment for each service in the
environment. The response object includes detailed information
by ``service_id``.
in: body
required: true
type: object
env_model:
description: |
The ``?`` section of the environment, containing information about the
environment model, including its ``type``, ``id`` and associated
``metadata``.
in: body
required: true
type: object
env_name:
description: |
A name for the environment. Name must be at least one non-white space
symbol and less than 256 characters long.
in: body
required: true
type: string
env_name_request:
description: |
A name for the environment. Name must be at least
one non-white space symbol.
in: body
required: true
type: string
env_region:
description: |
Current region of the environment.
in: body
required: true
type: string
env_status:
description: |
Current status of the environment. The available statuses are:
* **Ready to configure**. When the environment is new and contains no
components.
* **Ready to deploy**. When the environment contains a component or multiple
components and is ready for deployment.
* **Ready**. When the environment has been successfully deployed.
* **Deploying**. When the deploying is in progress.
* **Deploy FAILURE**. When the deployment finished with errors.
* **Deleting**. When deleting of an environment is in progress.
* **Delete FAILURE**. You can abandon the environment in this case.
in: body
required: true
type: string
env_version:
description: |
Current version.
in: body
required: true
type: int
environments:
description: |
A list of ``environment`` object.
in: body
required: true
type: array
fully_qualified_name:
description: |
The fqn of the package.
in: body
required: true
type: string
is_public:
description: |
Whether the package is shared for other projects.
in: body
required: true
type: boolean
networking:
description: |
Current network of the environment.
in: body
required: true
type: string
owner_id:
description: |
The owner id of the package.
in: body
required: true
type: string
package_categories:
description: |
The categories associated with the package.
in: body
required: true
type: array
package_count:
description: |
The number of packages associated with the category.
in: body
required: true
type: integer
packages:
description: |
A list of ``package`` object.
in: body
required: true
type: array
pkg_file:
description: |
The upload package file.
in: body
required: true
type: object
pkg_id:
description: |
The UUID of the package.
in: body
required: true
type: string
pkg_name:
description: |
The name of the package.
in: body
required: true
type: string
pkg_supplier:
description: |
The supplier info of the package.
in: body
required: true
type: object
pkg_type:
description: |
The type of the package.
in: body
required: true
type: string
regions:
description: |
Detailed region information for the cloud environment.
in: body
required: true
type: object
services:
description: |
A list of ``service`` objects.
in: body
required: true
type: array
session_id:
description: |
The UUID of the session.
in: body
required: true
type: string
session_state:
description: |
The current state of the environment. When a session is first
opened for the environment the state is ``opened``.
in: body
required: true
type: string
session_user_id:
description: |
The UUID of the session owner.
in: body
required: true
type: string
session_version:
description: |
The version of the session. It is tied to the version of the environment,
so that only sessions whose version matches that of the environment can
be deployed.
in: body
required: true
type: integer
tags:
description: |
The tags of the package.
in: body
required: true
type: array
task_id:
description: |
The UUID of the task associated with an action executed on a deployed
environment.
in: body
required: true
type: string
template_description:
description: |
The environment template description.
in: body
required: true
type: string
template_id:
description: |
The UUID of the environment template.
in: body
required: true
type: string
template_is_public:
description: |
Indicates whether an environment template is public or not.
- ``True``. The environment template is public. Can be cloned.
- ``False``. The environment template is private.
in: body
required: true
type: boolean
template_name:
description: |
The name of the environment template. Only alphanumeric characters are
allowed.
in: body
required: true
type: string
template_service:
description: |
Detailed information about the ``service`` to be added to the environment
template. The ``service`` includes virtual resources and application
information. The virtual resources information is specified inside the
``instance`` object property. Application information is specified
inside the body of the ``service`` object.
The ``instance`` object properties include:
- ``assignFloatingIp``. Whether to assign a floating IP to the VM.
- ``keyname``. The key name of a key pair for the VM.
- ``image``. The image to be used to provision the VM.
- ``flavor``. The flavor to be used to provision the VM.
- ``?``. An object which includes the ``type`` of the server.
An example ``instance`` looks like::
{
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
}
In addition, the ``service`` should also include the following:
- ``name``. The ``name`` of the application.
- ``?``. An object that includes the ``type`` and ``id`` of the
application. An example ``type`` is:
"io.murano.resources.LinuxMuranoInstance".
- ``port``: The port to be used by the application. The value must be
greater than 0 and less than 65536 (although formatted as a string).
The entire ``service`` looks like::
{
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
},
"port": "8080"
}
in: body
required: true
type: object
template_services:
description: |
The list of environment template ``service`` objects.
in: body
required: true
type: array
template_version:
description: |
The current version of the environment template.
in: body
required: true
type: integer
templates:
description: |
The list of templates.
in: body
required: true
type: array
tenant_id:
description: |
The UUID of the tenant. A tenant is also known as a project.
in: body
required: true
type: string
updated:
description: |
The date and time when the object was updated. The date and time stamp
format is `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_:
::
CCYY-MM-DDThh:mm:ss±hh:mm
For example, ``2015-08-27T09:49:58-05:00``.
The ``±hh:mm`` value, if included, is the time zone as an offset from UTC.
in: body
required: true
type: string

View File

@ -1,7 +0,0 @@
{
"id": "ce373a477f211e187a55404a662f968",
"name": "category_name",
"created": "2013-11-30T03:23:42Z",
"updated": "2013-11-30T03:23:44Z",
"package_count": 0
}

View File

@ -1,18 +0,0 @@
{
"categories": [
{
"id": "0420045dce7445fabae7e5e61fff9e2f",
"updated": "2014-12-26T13:57:04",
"name": "Web",
"created": "2014-12-26T13:57:04",
"package_count": 1
},
{
"id": "3dd486b1e26f40ac8f35416b63f52042",
"updated": "2014-12-26T13:57:04",
"name": "Databases",
"created": "2014-12-26T13:57:04",
"package_count": 0
}
]
}

View File

@ -1,14 +0,0 @@
{
"id": "b308f7fa8a2f4a5eb419970c827f4466",
"updated": "2015-01-28T17:00:19",
"packages": [
{
"fully_qualified_name": "io.murano.apps.ZabbixServer",
"id": "4dfb566e69e6445fbd4aea5099fe95e9",
"name": "Zabbix Server"
}
],
"name": "Web",
"created": "2015-01-28T17:00:19",
"package_count": 1
}

View File

@ -1,51 +0,0 @@
{
"deployments": [
{
"updated": "2014-05-15T07:24:21",
"environment_id": "744e44812da84e858946f5d817de4f72",
"description": {
"services": [
{
"instance": {
"flavor": "m1.medium",
"image": "cloud-fedora-v3",
"?": {
"type": "io.murano.resources.Instance",
"id": "ef729199-c71e-4a4c-a314-0340e279add8"
},
"name": "xkaduhv7qeg4m7"
},
"name": "teslnet1",
"?": {
"_26411a1861294160833743e45d0eaad9": {
"name": "Telnet"
},
"type": "io.murano.apps.linux.Telnet",
"id": "6e437be2-b5bc-4263-8814-6fd57d6ddbd5"
}
}
],
"defaultNetworks": {
"environment": {
"name": "test2-network",
"?": {
"type": "io.murano.lib.networks.neutron.NewNetwork",
"id": "b6a1d515434047d5b4678a803646d556"
}
},
"flat": null
},
"name": "test2",
"?": {
"type": "io.murano.Environment",
"id": "744e44812da84e858946f5d817de4f72"
}
},
"created": "2014-05-15T07:24:21",
"started": "2014-05-15T07:24:21",
"finished": null,
"state": "running",
"id": "327c81e0e34a4c93ad9b9052ef42b752"
}
]
}

View File

@ -1 +0,0 @@
{"name": "env_name"}

View File

@ -1,12 +0,0 @@
{
"status": "ready",
"updated": "2017-04-27T15:36:02",
"created": "2017-04-27T15:36:02",
"tenant_id": "cca37eef752244d99945a4123f30ff79",
"acquired_by": null,
"services": [],
"version": 0,
"description_text": "",
"id": "a2977db57398401aba5804ef2211a2a3",
"name": "env_name"
}

View File

@ -1,15 +0,0 @@
{
"lastStatuses": {
"66563e45-4d0a-451e-8138-7bc773b0607d": {
"updated": "2017-03-09T07:31:51",
"task_id": "1267d8dfcf2144f9a31f0f033defa0fd",
"level": "info",
"text": "Unable to install ApacheHttpServer on node-1 due to The murano-agent did not respond within 3600 seconds",
"created": "2017-03-09T07:31:51",
"entity_id": "66563e45-4d0a-451e-8138-7bc773b0607d",
"entity": null,
"details": null,
"id": "4f93ae1f73294bf1a58cbc59fffe6238"
}
}
}

View File

@ -1,5 +0,0 @@
[{
"op": "replace",
"path": "/defaultNetworks/flat",
"value": true
}]

View File

@ -1,36 +0,0 @@
{
"status": "ready",
"updated": "2017-04-27T15:36:02",
"created": "2017-04-27T15:36:02",
"tenant_id": "cca37eef752244d99945a4123f30ff79",
"acquired_by": null,
"services": [
{
"instance": {
"flavor": "m1.medium",
"image": "cloud-fedora-v3",
"name": "exgchhv6nbika2",
"ipAddresses": [
"10.0.0.200"
],
"?": {
"type": "io.murano.resources.Instance",
"id": "14cce9d9-aaa1-4f09-84a9-c4bb859edaff"
}
},
"name": "rewt4w56",
"?": {
"status": "ready",
"_26411a1861294160833743e45d0eaad9": {
"name": "Telnet"
},
"type": "io.murano.apps.linux.Telnet",
"id": "446373ef-03b5-4925-b095-6c56568fa518"
}
}
],
"version": 0,
"description_text": "",
"id": "a2977db57398401aba5804ef2211a2a3",
"name": "env_name"
}

View File

@ -1 +0,0 @@
{"name": "env_name_changed"}

View File

@ -1,12 +0,0 @@
{
"status": "ready",
"updated": "2017-04-27T16:01:29",
"created": "2017-04-27T15:33:55",
"tenant_id": "cca37eef752244d99945a4123f30ff79",
"acquired_by": null,
"services": [],
"version": 0,
"description_text": "",
"id": "f199275420ff4e938e0307b0cf68374d",
"name": "env_name_changed"
}

View File

@ -1,24 +0,0 @@
{
"environments": [
{
"status": "ready",
"updated": "2014-05-14T13:02:54",
"networking": {},
"name": "test1",
"created": "2014-05-14T13:02:46",
"tenant_id": "726ed856965f43cc8e565bc991fa76c3",
"version": 0,
"id": "2fa5ab704749444bbeafe7991b412c33"
},
{
"status": "ready",
"updated": "2014-05-14T13:02:55",
"networking": {},
"name": "test2",
"created": "2014-05-14T13:02:51",
"tenant_id": "726ed856965f43cc8e565bc991fa76c3",
"version": 0,
"id": "744e44812da84e858946f5d817de4f72"
}
]
}

View File

@ -1,94 +0,0 @@
{
"defaultNetworks": {
"environment": {
"internalNetworkName": "net_two",
"?": {
"type": "io.murano.resources.ExistingNeutronNetwork",
"id": "594e94fcfe4c48ef8f9b55edb3b9f177"
}
},
"flat": null
},
"region": "RegionTwo",
"name": "new_env",
"regions": {
"": {
"defaultNetworks": {
"environment": {
"autoUplink": true,
"name": "new_env-network",
"externalRouterId": null,
"dnsNameservers": [],
"autogenerateSubnet": true,
"subnetCidr": null,
"openstackId": null,
"?": {
"dependencies": {
"onDestruction": [{
"subscriber": "c80e33dd67a44f489b2f04818b72f404",
"handler": null
}]
},
"type": "io.murano.resources.NeutronNetwork/0.0.0@io.murano",
"id": "e145b50623c04a68956e3e656a0568d3",
"name": null
},
"regionName": "RegionOne"
},
"flat": null
},
"name": "RegionOne",
"?": {
"type": "io.murano.CloudRegion/0.0.0@io.murano",
"id": "c80e33dd67a44f489b2f04818b72f404",
"name": null
}
},
"RegionOne": "c80e33dd67a44f489b2f04818b72f404",
"RegionTwo": {
"defaultNetworks": {
"environment": {
"autoUplink": true,
"name": "new_env-network",
"externalRouterId": "e449bdd5-228c-4747-a925-18cda80fbd6b",
"dnsNameservers": ["8.8.8.8"],
"autogenerateSubnet": true,
"subnetCidr": "10.0.198.0/24",
"openstackId": "00a695c1-60ff-42ec-acb9-b916165413da",
"?": {
"dependencies": {
"onDestruction": [{
"subscriber": "f8cb28d147914850978edb35eca156e1",
"handler": null
}]
},
"type": "io.murano.resources.NeutronNetwork/0.0.0@io.murano",
"id": "72d2c13c600247c98e09e2e3c1cd9d70",
"name": null
},
"regionName": "RegionTwo"
},
"flat": null
},
"name": "RegionTwo",
"?": {
"type": "io.murano.CloudRegion/0.0.0@io.murano",
"id": "f8cb28d147914850978edb35eca156e1",
"name": null
}
}
},
"services": [],
"?": {
"type": "io.murano.Environment/0.0.0@io.murano",
"_actions": {
"f7f22c174070455c9cafc59391402bdc_deploy": {
"enabled": true,
"name": "deploy",
"title": "deploy"
}
},
"id": "f7f22c174070455c9cafc59391402bdc",
"name": null
}
}

View File

@ -1,3 +0,0 @@
{
"task_id": "9e60318629ef47378b583825e7d282b7"
}

View File

@ -1,25 +0,0 @@
{
"class_definitions": [
"com.example.apache.ApacheHttpServer"
],
"description": "The Apache HTTP Server Project is an effort to develop and maintain an\nopen-source HTTP server for modern operating systems including UNIX and\nWindows NT. The goal of this project is to provide a secure, efficient and\nextensible server that provides HTTP services in sync with the current HTTP\nstandards.\nApache httpd has been the most popular web server on the Internet since\nApril 1996, and celebrated its 17th birthday as a project this February.\n",
"tags": [
"HTTP",
"Server",
"WebServer",
"HTML",
"Apache"
],
"updated": "2017-04-06T07:54:40",
"is_public": false,
"id": "10f3e349bca9432abd673319195eed2b",
"categories": [],
"name": "Apache HTTP Server",
"created": "2017-04-06T07:54:40",
"author": "Mirantis, Inc",
"enabled": true,
"supplier": {},
"fully_qualified_name": "com.example.apache.ApacheHttpServer",
"type": "Application",
"owner_id": "c0f6e4cf1bfc48aba587e709b58c9f28"
}

View File

@ -1,25 +0,0 @@
{
"updated": "2017-04-06T08:22:11",
"description": "The Apache HTTP Server Project is an effort to develop and maintain an\nopen-source HTTP server for modern operating systems including UNIX and\nWindows NT. The goal of this project is to provide a secure, efficient and\nextensible server that provides HTTP services in sync with the current HTTP\nstandards.\nApache httpd has been the most popular web server on the Internet since\nApril 1996, and celebrated its 17th birthday as a project this February.\n",
"tags": [
"HTTP",
"Server",
"WebServer",
"HTML",
"Apache"
],
"class_definitions": [
"com.example.apache.ApacheHttpServer"
],
"is_public": false,
"categories": [],
"name": "Apache HTTP Server",
"created": "2017-04-06T08:22:11",
"author": "Mirantis, Inc",
"enabled": true,
"id": "979637f39a7245cebeabc99e6aa01666",
"supplier": {},
"fully_qualified_name": "com.example.apache.ApacheHttpServer",
"type": "Application",
"owner_id": "c0f6e4cf1bfc48aba587e709b58c9f28"
}

View File

@ -1,7 +0,0 @@
[
{
"path": "/is_public",
"value": true,
"op": "replace"
}
]

View File

@ -1,25 +0,0 @@
{
"updated": "2017-04-06T08:28:22",
"description": "The Apache HTTP Server Project is an effort to develop and maintain an\nopen-source HTTP server for modern operating systems including UNIX and\nWindows NT. The goal of this project is to provide a secure, efficient and\nextensible server that provides HTTP services in sync with the current HTTP\nstandards.\nApache httpd has been the most popular web server on the Internet since\nApril 1996, and celebrated its 17th birthday as a project this February.\n",
"tags": [
"HTTP",
"Server",
"WebServer",
"HTML",
"Apache"
],
"class_definitions": [
"com.example.apache.ApacheHttpServer"
],
"is_public": true,
"categories": [],
"name": "Apache HTTP Server",
"created": "2017-04-06T08:22:11",
"author": "Mirantis, Inc",
"enabled": true,
"id": "979637f39a7245cebeabc99e6aa01666",
"supplier": {},
"fully_qualified_name": "com.example.apache.ApacheHttpServer",
"type": "Application",
"owner_id": "c0f6e4cf1bfc48aba587e709b58c9f28"
}

View File

@ -1,127 +0,0 @@
{
"packages": [
{
"updated": "2017-03-30T08:35:03",
"description": "Library of base class to develop scalable Applications with MuranoPL\n",
"tags": [],
"class_definitions": [
"io.murano.applications.tests.TestPoolReplicaProvider",
"io.murano.applications.SingleServerApplication",
"io.murano.applications.tests.TestSoftwareComponent",
"io.murano.applications.SoftwareComponent",
"io.murano.applications.tests.TestEvents",
"io.murano.applications.CloneReplicaProvider",
"io.murano.applications.PoolReplicaProvider",
"io.murano.applications.Event",
"io.murano.applications.SingleServerGroup",
"io.murano.applications.TemplateServerProvider",
"io.murano.applications.MultiServerApplication",
"io.murano.applications.ReplicationGroup",
"io.murano.applications.OpenStackSecurityConfigurable",
"io.murano.applications.Configurable",
"io.murano.applications.tests.TestMockedServerFactory",
"io.murano.applications.tests.TestCompositeReplicaProvider",
"io.murano.applications.tests.TestRoundrobinReplicaProvider",
"io.murano.applications.ServerReplicationGroup",
"io.murano.applications.CompositeReplicaProvider",
"io.murano.applications.tests.TestReplication",
"io.murano.applications.CompositeServerGroup",
"io.murano.applications.RoundrobinReplicaProvider",
"io.murano.applications.ServerGroup",
"io.murano.applications.ServerList",
"io.murano.applications.Installable",
"io.murano.applications.ReplicaProvider",
"io.murano.applications.MultiServerApplicationWithScaling"
],
"is_public": true,
"categories": [],
"name": "Application Development Library",
"created": "2017-03-30T08:35:03",
"author": "Mirantis, Inc.",
"enabled": true,
"id": "b0298c205235410fba047f4af8df0eb0",
"supplier": {},
"fully_qualified_name": "io.murano.applications",
"type": "Library",
"owner_id": "c0f6e4cf1bfc48aba587e709b58c9f28"
},
{
"updated": "2017-03-30T08:35:07",
"description": "Core MuranoPL library\n",
"tags": [
"MuranoPL"
],
"class_definitions": [
"io.murano.Exception",
"io.murano.system.MetadefBrowser",
"io.murano.metadata.forms.Hidden",
"io.murano.system.NeutronSecurityGroupManager",
"io.murano.system.AgentListener",
"io.murano.Environment",
"io.murano.system.SecurityGroupManager",
"io.murano.resources.ConfLangInstance",
"io.murano.resources.HeatSWConfigLinuxInstance",
"io.murano.test.TestFixture",
"io.murano.resources.MetadataAware",
"io.murano.SharedIp",
"io.murano.File",
"io.murano.resources.LinuxUDInstance",
"io.murano.configuration.Linux",
"io.murano.resources.ExistingNeutronNetwork",
"io.murano.resources.LinuxMuranoInstance",
"io.murano.Object",
"io.murano.system.Logger",
"io.murano.metadata.engine.Synchronize",
"io.murano.test.DummyNetwork",
"io.murano.resources.CinderVolume",
"io.murano.metadata.Title",
"io.murano.Project",
"io.murano.system.Resources",
"io.murano.metadata.forms.Section",
"io.murano.resources.Network",
"io.murano.system.MistralClient",
"io.murano.resources.CinderVolumeBackup",
"io.murano.system.NetworkExplorer",
"io.murano.system.DummySecurityGroupManager",
"io.murano.resources.WindowsInstance",
"io.murano.CloudResource",
"io.murano.CloudRegion",
"io.murano.system.Agent",
"io.murano.resources.Instance",
"io.murano.resources.Volume",
"io.murano.system.InstanceNotifier",
"io.murano.metadata.ModelBuilder",
"io.murano.system.HeatStack",
"io.murano.resources.LinuxInstance",
"io.murano.metadata.Description",
"io.murano.metadata.engine.Serialize",
"io.murano.resources.ExistingCinderVolume",
"io.murano.resources.HeatSWConfigInstance",
"io.murano.system.StatusReporter",
"io.murano.Application",
"io.murano.test.TestFixtureWithEnvironment",
"io.murano.system.AwsSecurityGroupManager",
"io.murano.StackTrace",
"io.murano.resources.NovaNetwork",
"io.murano.metadata.forms.Position",
"io.murano.metadata.HelpText",
"io.murano.resources.NeutronNetworkBase",
"io.murano.User",
"io.murano.resources.InstanceAffinityGroup",
"io.murano.resources.NeutronNetwork",
"io.murano.resources.CinderVolumeSnapshot"
],
"is_public": true,
"categories": [],
"name": "Core library",
"created": "2017-03-30T08:35:07",
"author": "murano.io",
"enabled": true,
"id": "5b6c8d7cd0694a7ebb7525ae62357740",
"supplier": {},
"fully_qualified_name": "io.murano",
"type": "Library",
"owner_id": "c0f6e4cf1bfc48aba587e709b58c9f28"
}
]
}

View File

@ -1,8 +0,0 @@
{
"created": "2017-04-06T07:54:40",
"updated": "2017-04-06T07:54:40",
"environment_id": "744e44812da84e858946f5d817de4f72",
"state": "opened",
"version": 0,
"id": "257bef44a9d848daa5b2563779714820"
}

View File

@ -1,9 +0,0 @@
{
"id": "4aecdc2178b9430cbbb8db44fb7ac384",
"environment_id": "4dc8a2e8986fa8fa5bf24dc8a2e8986fa8",
"created": "2013-11-30T03:23:42Z",
"updated": "2013-11-30T03:23:54Z",
"user_id": "d7b501094caf4daab08469663a9e1a2b",
"version": 0,
"state": "deploying"
}

View File

@ -1,5 +0,0 @@
{
"className": "ns.Bar",
"methodName": "staticAction",
"parameters": {"myName": "John"}
}

View File

@ -1 +0,0 @@
"Hello, John"

View File

@ -1,18 +0,0 @@
{
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
},
"port": "8080"
}

View File

@ -1,30 +0,0 @@
{
"updated": "2017-04-26T19:41:58",
"created": "2017-04-26T19:33:10",
"tenant_id": "cca37eef752244d99945a4123f30ff79",
"services": [
{
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
},
"port": "8080"
}
],
"version": 0,
"description_text": "",
"is_public": false,
"id": "64670f5ada0848408734b2985f5cbb92",
"name": "test_application"
}

View File

@ -1,3 +0,0 @@
{
"name": "cloned_env_template_name"
}

View File

@ -1,9 +0,0 @@
{
"updated": "2015-01-26T09:12:51",
"name": "cloned_env_template_name",
"created": "2015-01-26T09:12:51",
"tenant_id": "00000000000000000000000000000001",
"version": 0,
"is_public": false,
"id": "aa9033ca7ce245fca10e38e1c8c4bbf7",
}

View File

@ -1,3 +0,0 @@
{
"name": "environment_name"
}

View File

@ -1,8 +0,0 @@
{
"environment_id": "aa90fadfafca10e38e1c8c4bbf7",
"name": "environment_name",
"created": "2015-01-26T09:12:51",
"tenant_id": "00000000000000000000000000000001",
"version": 0,
"session_id": "adf4dadfaa9033ca7ce245fca10e38e1c8c4bbf7",
}

View File

@ -1,3 +0,0 @@
{
"name": "env_template_name"
}

View File

@ -1,11 +0,0 @@
{
"updated": "2014-05-14T13:02:55",
"networking": {},
"name": "test2",
"created": "2014-05-14T13:02:51",
"tenant_id": "123452452345346345634563456345346",
"version": 0,
"is_public": true,
"description_text": "",
"id": "744e44812da84e858946f5d817de4f72"
}

View File

@ -1,33 +0,0 @@
[
{
"instance":
{
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?":
{
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "tomcat",
"?":
{
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
},
"port": "8080"
},
{
"instance": "ef984a74-29a4-45c0-b1dc-2ab9f075732e",
"password": "XXX",
"name": "mysql",
"?":
{
"type": "io.murano.apps.database.MySQL",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
}
}
]

View File

@ -1,31 +0,0 @@
{
"updated": "2014-05-14T13:02:55",
"networking": {},
"name": "test2",
"created": "2014-05-14T13:02:51",
"tenant_id": "123452452345346345634563456345346",
"services": [
{
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
},
"port": "8080"
}
],
"version": 0,
"is_public": true,
"description_text": "",
"id": "744e44812da84e858946f5d817de4f72"
}

View File

@ -1,18 +0,0 @@
{
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"port": "8080",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
}
}

View File

@ -1,21 +0,0 @@
{
"instance":
{
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?":
{
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"?":
{
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
},
"port": "8080"
}

View File

@ -1,26 +0,0 @@
{
"templates": [
{
"updated": "2014-05-14T13:02:54",
"networking": {},
"name": "test1",
"created": "2014-05-14T13:02:46",
"tenant_id": "726ed856965f43cc8e565bc991fa76c3",
"version": 0,
"is_public": false,
"description_text": "",
"id": "2fa5ab704749444bbeafe7991b412c33"
},
{
"updated": "2014-05-14T13:02:55",
"networking": {},
"name": "test2",
"created": "2014-05-14T13:02:51",
"tenant_id": "123452452345346345634563456345346",
"version": 0,
"is_public": true,
"description_text": "",
"id": "744e44812da84e858946f5d817de4f72"
}
]
}

View File

@ -1,165 +0,0 @@
.. -*- rst -*-
=============================
Environment Configuration API
=============================
Since Murano environments are available for local modification by different
users and from different locations, it's therefore necessary to store local
modifications somewhere. Thus, sessions were created to satisfy this
requirement. After a user adds applications to an environment, a new session
can be created. A session can be deployed only once.
.. note::
Multiple sessions can be opened for one environment simultaneously, but only
one session can be deployed at a time. Only the first session that is deployed
will be deployed, while the other ones will become invalid, no longer
capable of being deploying. Once an environment is in ``deploying`` or
``deleting`` status, a new session for the environment cannot be opened.
Configure Environment / Open Session
====================================
.. rest_method:: POST /environments/{env_id}/configure
Creates a new configuration session for environment ``env_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- created: created
- updated: updated
- environment_id: env_id
- state: session_state
- version: session_version
- id: session_id
Response Example
----------------
.. literalinclude:: samples/session-create-response.json
:language: javascript
Deploy session
==============
.. rest_method:: POST /environments/{env_id}/sessions/{session_id}/deploy
Start deployment of a murano environment session.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
- session_id: session_id_url
Get Session Details
===================
.. rest_method:: GET /environments/{env_id}/sessions/{session_id}
Start deployment of a murano environment session.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
- session_id: session_id_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- id: session_id
- environment_id: env_id
- created: created
- updated: updated
- user_id: session_user_id
- version: session_version
- state: session_state
Response Example
----------------
.. literalinclude:: samples/session-show-response.json
:language: javascript
Delete Session
==============
.. rest_method:: DELETE /environments/{env_id}/sessions/{session_id}
Delete the session ``session_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_id: env_id_url
- session_id: session_id_url

View File

@ -1,62 +0,0 @@
#################
# Success Codes #
#################
200:
default: |
Request was successful.
201:
default: |
Resource was created and is ready to use.
202:
default: |
Request was accepted for processing, but the processing has not been
completed. A 'location' header is included in the response which contains
a link to check the progress of the request.
204:
default: |
The server has fulfilled the request by deleting the resource.
300:
default: |
There are multiple choices for resources. The request has to be more
specific to successfully retrieve one of these resources.
302:
default: |
The response is about a redirection hint. The header of the response
usually contains a 'location' value where requesters can check to track
the real location of the resource.
#################
# Error Codes #
#################
400:
default: |
Some content in the request was invalid.
resource_signal: |
The target resource doesn't support receiving a signal.
401:
default: |
User must authenticate before making a request.
403:
default: |
Policy does not allow current user to do this operation.
404:
default: |
The requested resource could not be found.
405:
default: |
Method is not valid for this endpoint.
409:
default: |
This operation conflicted with another operation on this resource.
duplicate_zone: |
There is already a zone with this name.
500:
default: |
Something went wrong inside the service. This should not happen usually.
If it does happen, it means the server has experienced some serious
problems.
503:
default: |
Service is not available. This is mostly caused by service configuration
errors which prevents the service from successful start up.

View File

@ -1,517 +0,0 @@
.. -*- rst -*-
=====================
Environment Templates
=====================
An environment template specifies a set of virtual resources and application
information that can be deployed on top of OpenStack by translation this
information into an application-ready environment. Environment templates can
be customized, created, deleted and modified by users. Environment templates
can be instantied as many times as the user desires. For example, the user can
have different deployments from the same environment template: one for testing
and another for production.
The workflow for the creation and the instantiation of the environment template
is as follows:
#. Creation of the environment template (including application information)
#. Transformation of the environment template into the environment
(creation of the environment and session and adding applications to the
environment)
#. Deployment of the environment on top of Openstack
Each environment template consists of services, which specify the application
information. Each service includes information about the applications that
will be installed (e.g. Tomcat), including application properties like
the Tomcat port. Additional information pertaining to the virtual server
may be specified, if applicable, such as keyname, flavor, image, etc.
The following is an example of an environment template::
{
"name": "env_template_name",
"services": [
{
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "tomcat",
"port": "8080",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "54cea43d-5970-4c73-b9ac-fea656f3c722"
}
}
]
}
List environment templates
==========================
.. rest_method:: GET /templates
Get a list of environment templates.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- is_public: template_is_public_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- templates: templates
- created: created
- updated: updated
- name: template_name
- tenant_id: tenant_id
- version: template_version
- description_text: template_description
- is_public: template_is_public
- id: template_id
Response Example
----------------
.. literalinclude:: samples/templates-list-response.json
:language: javascript
Create environment template
===========================
.. rest_method:: POST /templates
Create an environment template.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- name: template_name
- is_public: template_is_public
Request Example
---------------
.. literalinclude:: samples/template-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- created: created
- updated: updated
- name: template_name
- tenant_id: tenant_id
- version: template_version
- description_text: template_description
- is_public: template_is_public
- id: template_id
Response Example
----------------
.. literalinclude:: samples/template-create-response.json
:language: javascript
Get environment template details
================================
.. rest_method:: GET /templates/{env_temp_id}
Get details for the environment template ``env_temp_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- created: created
- updated: updated
- name: template_name
- services: template_services
- tenant_id: tenant_id
- version: template_version
- description_text: template_description
- is_public: template_is_public
- id: template_id
Response Example
----------------
.. literalinclude:: samples/template-show-response.json
:language: javascript
Delete environment template
===========================
.. rest_method:: DELETE /templates/{env_temp_id}
Delete the environment template ``env_temp_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
Add application to environment template
=======================================
.. rest_method:: POST /templates/{env_temp_id}/services
Create a new application for environment template ``env_temp_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
- service: template_service
Request Example
---------------
.. literalinclude:: samples/template-add-app-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- updated: updated
- created: created
- tenant_id: tenant_id
- services: template_services
- version: template_version
- description_text: template_description
- is_public: template_is_public
- id: template_id
- name: template_name
Response Example
----------------
.. literalinclude:: samples/template-add-app-response.json
:language: javascript
Delete application from an environment template
===============================================
.. rest_method:: DELETE /templates/{env_temp_id}/services/{service_id}
Delete an application from an environment template.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
- service_id: service_id_url
List application details for environment template
=================================================
.. rest_method:: GET /templates/{env_temp_id}/services
List all the applications for the specified environment template
``env_temp_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
Response Parameters
-------------------
- X-Openstack-Request-Id: request_id
- updated: updated
- created: created
- tenant_id: tenant_id
- services: template_services
- version: template_version
- description_text: template_description
- is_public: template_is_public
- id: template_id
- name: template_name
Response Example
----------------
.. literalinclude:: samples/template-list-apps-response.json
:language: javascript
Update application for an environment template
==============================================
.. rest_method:: PUT /templates/{env_temp_id}/services/{service_id}
Delete an application from an environment template.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
- service_id: service_id_url
- service: template_service
Request Example
---------------
.. literalinclude:: samples/template-update-app-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- service: template_service
Response Example
----------------
.. literalinclude:: samples/template-update-app-response.json
:language: javascript
Create environment from environment template
============================================
.. rest_method:: GET /templates/{env_temp_id}/create-environment
Create an environment from the environment template ``env_temp_id``.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
- name: env_name
Request Example
---------------
.. literalinclude:: samples/template-create-env-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- environment_id: env_id
- name: env_name
- created: created
- tenant_id: tenant_id
- version: env_version
- session_id: session_id
Response Example
----------------
.. literalinclude:: samples/template-create-env-response.json
:language: javascript
Clone environment template
==========================
.. rest_method:: GET /templates/{env_temp_id}/clone
Clones an environment template from one tenant into another.
.. note:
In order to clone an environment template, the template *must* be
public.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- env_temp_id: template_id_url
- name: template_name
Request Example
---------------
.. literalinclude:: samples/template-clone-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- environment_id: env_id
- name: env_name
- created: created
- tenant_id: tenant_id
- version: env_version
- session_id: session_id
Response Example
----------------
.. literalinclude:: samples/template-clone-response.json
:language: javascript

View File

@ -1,157 +0,0 @@
### This config may optionally select a subset of tests to run or skip by
### filling out the 'tests' and 'skips' lists given below. If no tests are
### specified for inclusion then it is assumed all tests are desired. The skips
### set will remove specific tests from the include set. This can be controlled
### using the -t/-s CLI options. Note that the same test ID should not appear
### in both 'tests' and 'skips', this would be nonsensical and is detected by
### Bandit at runtime.
# Available tests:
# B101 : assert_used
# B102 : exec_used
# B103 : set_bad_file_permissions
# B104 : hardcoded_bind_all_interfaces
# B105 : hardcoded_password_string
# B106 : hardcoded_password_funcarg
# B107 : hardcoded_password_default
# B108 : hardcoded_tmp_directory
# B109 : password_config_option_not_marked_secret
# B110 : try_except_pass
# B111 : execute_with_run_as_root_equals_true
# B112 : try_except_continue
# B201 : flask_debug_true
# B301 : pickle
# B302 : marshal
# B303 : md5
# B304 : ciphers
# B305 : cipher_modes
# B306 : mktemp_q
# B307 : eval
# B308 : mark_safe
# B309 : httpsconnection
# B310 : urllib_urlopen
# B311 : random
# B312 : telnetlib
# B313 : xml_bad_cElementTree
# B314 : xml_bad_ElementTree
# B315 : xml_bad_expatreader
# B316 : xml_bad_expatbuilder
# B317 : xml_bad_sax
# B318 : xml_bad_minidom
# B319 : xml_bad_pulldom
# B320 : xml_bad_etree
# B321 : ftplib
# B401 : import_telnetlib
# B402 : import_ftplib
# B403 : import_pickle
# B404 : import_subprocess
# B405 : import_xml_etree
# B406 : import_xml_sax
# B407 : import_xml_expat
# B408 : import_xml_minidom
# B409 : import_xml_pulldom
# B410 : import_lxml
# B411 : import_xmlrpclib
# B412 : import_httpoxy
# B501 : request_with_no_cert_validation
# B502 : ssl_with_bad_version
# B503 : ssl_with_bad_defaults
# B504 : ssl_with_no_version
# B505 : weak_cryptographic_key
# B506 : yaml_load
# B601 : paramiko_calls
# B602 : subprocess_popen_with_shell_equals_true
# B603 : subprocess_without_shell_equals_true
# B604 : any_other_function_with_shell_equals_true
# B605 : start_process_with_a_shell
# B606 : start_process_with_no_shell
# B607 : start_process_with_partial_path
# B608 : hardcoded_sql_expressions
# B609 : linux_commands_wildcard_injection
# B701 : jinja2_autoescape_false
# B702 : use_of_mako_templates
# (optional) list included test IDs here, eg '[B101, B406]':
tests:
# (optional) list skipped test IDs here, eg '[B101, B406]':
skips: [B104]
### (optional) plugin settings - some test plugins require configuration data
### that may be given here, per-plugin. All bandit test plugins have a built in
### set of sensible defaults and these will be used if no configuration is
### provided. It is not necessary to provide settings for every (or any) plugin
### if the defaults are acceptable.
#any_other_function_with_shell_equals_true:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#execute_with_run_as_root_equals_true:
# function_names: [ceilometer.utils.execute, cinder.utils.execute, neutron.agent.linux.utils.execute,
# nova.utils.execute, nova.utils.trycmd]
#hardcoded_tmp_directory:
# tmp_dirs: [/tmp, /var/tmp, /dev/shm]
#linux_commands_wildcard_injection:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#password_config_option_not_marked_secret:
# function_names: [oslo.config.cfg.StrOpt, oslo_config.cfg.StrOpt]
#ssl_with_bad_defaults:
# bad_protocol_versions: [PROTOCOL_SSLv2, SSLv2_METHOD, SSLv23_METHOD, PROTOCOL_SSLv3,
# PROTOCOL_TLSv1, SSLv3_METHOD, TLSv1_METHOD]
#ssl_with_bad_version:
# bad_protocol_versions: [PROTOCOL_SSLv2, SSLv2_METHOD, SSLv23_METHOD, PROTOCOL_SSLv3,
# PROTOCOL_TLSv1, SSLv3_METHOD, TLSv1_METHOD]
#start_process_with_a_shell:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#start_process_with_no_shell:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#start_process_with_partial_path:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#subprocess_popen_with_shell_equals_true:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#subprocess_without_shell_equals_true:
# no_shell: [os.execl, os.execle, os.execlp, os.execlpe, os.execv, os.execve, os.execvp,
# os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe, os.spawnv, os.spawnve,
# os.spawnvp, os.spawnvpe, os.startfile]
# shell: [os.system, os.popen, os.popen2, os.popen3, os.popen4, popen2.popen2, popen2.popen3,
# popen2.popen4, popen2.Popen3, popen2.Popen4, commands.getoutput, commands.getstatusoutput]
# subprocess: [subprocess.Popen, subprocess.call, subprocess.check_call, subprocess.check_output,
# utils.execute, utils.execute_with_timeout]
#try_except_continue: {check_typed_exception: false}
#try_except_pass: {check_typed_exception: false}

View File

@ -1,11 +0,0 @@
# This is a cross-platform list tracking distribution packages needed for install and tests;
# see https://docs.openstack.org/infra/bindep/ for additional information.
libpq-dev [platform:dpkg]
mysql-client [platform:dpkg]
mysql-server [platform:dpkg]
postgresql
postgresql-client [platform:dpkg]
# PDF Docs package dependencies
tex-gyre [platform:dpkg doc]

View File

@ -1 +0,0 @@
This element install Docker on Ubuntu/CentOS

View File

@ -1,16 +0,0 @@
#!/bin/bash
set -eu
if [ -e /etc/lsb-release ]; then
if [ -e /usr/lib/apt/methods/https ]; then
apt-get update
apt-get install apt-transport-https
fi
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo "deb https://get.docker.com/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
apt-get update
apt-get -y install lxc-docker
else
yum -y install docker
fi

View File

@ -1 +0,0 @@
This element installs Kubernetes on Ubuntu/CentOS

View File

@ -1 +0,0 @@
docker

View File

@ -1,62 +0,0 @@
#!/bin/bash
install-packages curl wget linux-libc-dev git gcc libc6-dev bridge-utils haproxy
SVC_ROOT=/opt/bin
ETCD_LATEST_VERSION=$(curl https://github.com/coreos/etcd/releases/latest | awk -F'"' '{ print $2 }' | awk -F'/' '{ print $8 }')
ETCD_LATEST_URL="https://github.com/coreos/etcd/releases/download/${ETCD_LATEST_VERSION}/etcd-${ETCD_LATEST_VERSION}-linux-amd64.tar.gz"
KUBE_LATEST_VERSION=$(curl https://github.com/GoogleCloudPlatform/kubernetes/releases/latest | awk -F'"' '{ print $2 }' | awk -F'/' '{ print $8 }')
KUBE_LATEST_URL="https://github.com/GoogleCloudPlatform/kubernetes/releases/download/${KUBE_LATEST_VERSION}/kubernetes.tar.gz"
mkdir -p ${SVC_ROOT}
pushd ${SVC_ROOT}
# Install latest etcd
wget -O ${SVC_ROOT}/etcd-latest.tar.gz $ETCD_LATEST_URL
tar xzvf ${SVC_ROOT}/etcd-latest.tar.gz
rm -f ${SVC_ROOT}/etcd-latest.tar.gz
mv ${SVC_ROOT}/etcd-${ETCD_LATEST_VERSION}-linux-amd64/etcd ${SVC_ROOT}/
mv ${SVC_ROOT}/etcd-${ETCD_LATEST_VERSION}-linux-amd64/etcdctl ${SVC_ROOT}/
rm -rf ${SVC_ROOT}/etcd-${ETCD_LATEST_VERSION}-linux-amd64
# Install latest kubernetes
wget -O ${SVC_ROOT}/kubernetes-latest.tar.gz $KUBE_LATEST_URL
tar xzvf ${SVC_ROOT}/kubernetes-latest.tar.gz
rm -f ${SVC_ROOT}/kubernetes-latest.tar.gz
tar xzvf ${SVC_ROOT}/kubernetes/server/kubernetes-server-linux-amd64.tar.gz
mv ${SVC_ROOT}/kubernetes ${SVC_ROOT}/kubernetes-latest
cp ${SVC_ROOT}/kubernetes-latest/server/bin/* ${SVC_ROOT}/
rm -rf ${SVC_ROOT}/kubernetes-latest
# Install Go
wget -O go.tar.gz https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
tar xzvf go.tar.gz
mv ${SVC_ROOT}/go /usr/local/go
export PATH=$PATH:/usr/local/go/bin
# Build flannel
git clone https://github.com/coreos/flannel flannel
pushd ${SVC_ROOT}/flannel
${SVC_ROOT}/flannel/build
popd
cp ${SVC_ROOT}/flannel/bin/flanneld ${SVC_ROOT}/flanneld
rm -rf ${SVC_ROOT}/flannel
# Update system PATH
sed -i 's/PATH="/PATH="\/opt\/bin:\/opt\/go\/bin:/g' /etc/environment
wget -O confd https://github.com/kelseyhightower/confd/releases/download/v0.7.1/confd-0.7.1-linux-amd64
mv confd /usr/local/bin/confd
chmod +x /usr/local/bin/confd
mkdir -p /etc/confd/{conf.d,templates}
popd

View File

@ -1,17 +0,0 @@
# Copyright (c) 2015 Mirantis, Inc.
#
# 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 muranoartifact.v1 import package
VERSIONS = [package.MuranoPackage]

View File

@ -1,37 +0,0 @@
# Copyright (c) 2015 Mirantis, Inc.
#
# 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 glance.common.glare import definitions
class MuranoPackage(definitions.ArtifactType):
__endpoint__ = 'murano'
type = definitions.String(allowed_values=['Application', 'Library'],
required=True,
mutable=False)
author = definitions.String(required=False, mutable=False)
display_name = definitions.String(required=True, mutable=True)
enabled = definitions.Boolean(default=True)
categories = definitions.Array(default=[], mutable=True)
class_definitions = definitions.Array(unique=True, default=[],
mutable=False)
inherits = definitions.Dict(default={}, properties=definitions.Array(),
mutable=False)
keywords = definitions.Array(default=[], mutable=True)
logo = definitions.BinaryObject()
archive = definitions.BinaryObject()
ui_definition = definitions.BinaryObject()

View File

@ -1,21 +0,0 @@
[metadata]
name = murano_artifact_plugin
description = An artifact plugin for murano packages
author = Alexander Tivelkov
author-email = openstack-discuss@lists.openstack.org
python-requires = >=3.6
classifier =
Development Status :: 3 - Alpha
License :: OSI Approved :: Apache Software License
Programming Language :: Python
Programming Language :: Python :: Implementation :: CPython
Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: 3
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Intended Audience :: Developers
Environment :: Console
[entry_points]
glance.artifacts.types =
MuranoPackage = muranoartifact:VERSIONS

View File

@ -1,20 +0,0 @@
# Copyright 2011-2012 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)

View File

@ -1,18 +0,0 @@
Namespaces:
=: com.paul
std: io.murano
res: io.murano.resources
Name: EncryptionDemo
Extends: std:Application
Properties:
my_password:
Contract: $.string()
Methods:
deploy:
Body:
- $reporter: $this.find(std:Environment).reporter
- $reporter.report($this, decryptData($.my_password))

View File

@ -1,10 +0,0 @@
Application:
?:
type: com.paul.EncryptionDemo
my_password: encryptData($.instanceConfiguration.my_password)
Forms:
- instanceConfiguration:
fields:
- name: my_password
type: string

View File

@ -1,6 +0,0 @@
FullName: com.paul.EncryptionDemo
Type: Application
Description: Simple app to demonstrate Murano encryption
Author: Paul Bourke
Classes:
com.paul.EncryptionDemo: EncryptionDemo.yaml

View File

@ -1,175 +0,0 @@
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.

View File

@ -1,49 +0,0 @@
Murano Plugin for Cloudify
~~~~~~~~~~~~~~~~~~~~~~~~~~
Cloudify is a TOSCA-based open-source cloud orchestration engine by GigaSpaces
Technologies.
This plugin extends Murano with support of Cloudify TOSCA package format.
TOSCA packages can be deployed on Cloudify Manager deployed at configurable
location.
Plugin registers `Cloudify.TOSCA/1.0` format identifier.
Installation
------------
Installation of the plugin is done using any of Python package management
tools. The most simple way is by saying `pip install .` from the plugin's
directory (or `pip install -e .` for development)
Also location of Cloudify Manager (engine server) must be configured
in murano config file. This is done in `[cloudify]` section of murano.conf
via cloudify_manager setting. For example:
.. code-block:: ini
[cloudify]
cloudify_manager = 10.10.1.10
Murano engine must be restarted after installation of the plugin.
Requirements
------------
All Cloudify TOSCA application require `org.getcloudify.murano` library package
to be present in Murano catalog. The package can be found in
`cloudify_applications_library` subfolder.
Demo application
----------------
There is a demo application that can be used to test the plugin.
It is located in `nodecellar_example_application` subfolder. Follow
instructions at `nodecellar_example_application/README.rst` to build
the demo package.

View File

@ -1,73 +0,0 @@
# 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:
=: org.getcloudify.murano
std: io.murano
csys: io.murano.extensions.cloudify
Name: CloudifyApplication
Extends: std:Application
Methods:
.init:
Body:
- $._client: new(csys:CloudifyClient, app => $this)
- $._environment: $.find(std:Environment).require()
describe:
updateOutputs:
Arguments:
- outputs:
Contract:
$.string().notNull(): $
deploy:
Body:
- If: not $.getAttr(deployed, false)
Then:
- $info: $.describe()
- $._environment.reporter.report($this, 'Checking for TOSCA package')
- $._client.publishBlueprint($info.entryPoint)
- $._client.createDeployment($info.inputs)
- $._environment.reporter.report($this, 'Waiting for deployment initialization')
- $._client.waitDeploymentReady()
- $._environment.reporter.report($this, 'Installing {0}'.format(name($this)))
- $._client.executeWorkflow(install)
- $outputs: $._client.waitDeploymentReady()
- For: outputName
In: $outputs.keys()
Do:
- $output: $outputs[$outputName]
- $._environment.reporter.report($this, $output)
- $label: $output.get(description, $outputName)
- $value: $output.value
- $msg: '{0}: {1}'
- $._environment.reporter.report($this, $msg.format($label, $value))
- $.updateOutputs($outputs)
- $._environment.reporter.report($this, 'Installation complete')
- $.setAttr(deployed, true)
.destroy:
Body:
- If: $.getAttr(deployed, false)
Then:
- $info: $.describe()
- $._client.waitDeploymentReady()
- $._environment.reporter.report($this, 'Uninstalling {0}'.format(name($this)))
- $._client.executeWorkflow(uninstall)
- $._client.waitDeploymentReady()
- $._client.deleteDeployment()
- $._environment.reporter.report($this, 'Uninstallation complete')
- $.setAttr(deployed, false)

View File

@ -1,32 +0,0 @@
# 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.
Format: MuranoPL/1.2
Type: Library
FullName: org.getcloudify.murano
Name: Cloudify applications
Description: >
Cloudify Murano integration support library
Author: Trammell
Tags:
- Cloudify
Classes:
org.getcloudify.murano.CloudifyApplication: CloudifyApplication.yaml
Require:
io.murano.plugins.cloudify: 0

View File

@ -1,21 +0,0 @@
# 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_config import cfg
def init_config(conf):
opts = [
cfg.StrOpt('cloudify_manager', required=True)
]
conf.register_opts(opts, group='cloudify')
return conf.cloudify

View File

@ -1,88 +0,0 @@
# 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 threading
import time
import cloudify_rest_client
import cloudify_rest_client.exceptions as cloudify_exceptions
from murano.dsl import dsl
from oslo_config import cfg as config
from yaql.language import specs
from yaql.language import yaqltypes
import cfg
CONF = config.CONF
archive_upload_lock = threading.Lock()
class CloudifyClient(object):
@specs.parameter('app', dsl.MuranoObjectParameter('io.murano.Application'))
def __init__(self, app):
cloudify_manager = self.CONF.cloudify_manager
self._client = cloudify_rest_client.CloudifyClient(cloudify_manager)
self._blueprint_id = '{0}-{1}'.format(app.type.name, app.type.version)
self._deployment_id = app.id
self._application_package = app.package
@specs.parameter('entry_point', yaqltypes.String())
def publish_blueprint(self, entry_point):
global archive_upload_lock
if self._check_blueprint_exists():
return
path = self._application_package.get_resource(entry_point)
with archive_upload_lock:
try:
self._client.blueprints.upload(
path, self._blueprint_id)
except cloudify_exceptions.CloudifyClientError as e:
if e.status_code != 409:
raise
def _check_blueprint_exists(self):
try:
self._client.blueprints.get(self._blueprint_id)
return True
except cloudify_exceptions.CloudifyClientError as e:
if e.status_code == 404:
return False
raise
@specs.parameter('parameters', dict)
def create_deployment(self, parameters=None):
self._client.deployments.create(
self._blueprint_id, self._deployment_id, parameters)
def delete_deployment(self):
self._client.deployments.delete(self._deployment_id)
def wait_deployment_ready(self):
while True:
executions = self._client.executions.list(self._deployment_id)
if any(t.status in ('pending', 'started') for t in executions):
time.sleep(3)
else:
deployment = self._client.deployments.get(self._deployment_id)
return deployment.outputs
@specs.parameter('name', yaqltypes.String())
@specs.parameter('parameters', dict)
def execute_workflow(self, name, parameters=None):
self._client.executions.start(self._deployment_id, name, parameters)
@classmethod
def init_plugin(cls):
cls.CONF = cfg.init_config(CONF)

View File

@ -1,186 +0,0 @@
# 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 yaml
from murano.common.helpers import path
from murano.packages import exceptions
from murano.packages import package_base
RESOURCES_DIR_NAME = 'Resources/'
class YAQL(object):
def __init__(self, expr):
self.expr = expr
class Dumper(yaml.SafeDumper):
pass
def yaql_representer(dumper, data):
return dumper.represent_scalar(u'!yaql', data.expr)
Dumper.add_representer(YAQL, yaql_representer)
class CloudifyToscaPackage(package_base.PackageBase):
def __init__(self, format_name, runtime_version, source_directory,
manifest):
super(CloudifyToscaPackage, self).__init__(
format_name, runtime_version, source_directory, manifest)
self._entry_point = manifest.get('EntryPoint', 'main.yaml')
self._generated_class = None
self._generated_ui = None
@property
def classes(self):
return self.full_name,
@property
def requirements(self):
return {
'org.getcloudify.murano': '0'
}
@property
def ui(self):
if not self._generated_ui:
self._generated_ui = self._generate_ui()
return self._generated_ui
def get_class(self, name):
if name != self.full_name:
raise exceptions.PackageClassLoadError(
name, 'Class not defined in this package')
if not self._generated_class:
self._generated_class = self._generate_class()
return self._generated_class, '<generated code>'
def _generate_class(self):
inputs, outputs = self._get_inputs_outputs()
class_code = {
'Name': self.full_name,
'Extends': 'org.getcloudify.murano.CloudifyApplication',
'Properties': self._generate_properties(inputs, outputs),
'Methods': {
'describe': self._generate_describe_method(inputs),
'updateOutputs': self._generate_update_outputs_method(outputs)
}
}
return yaml.dump(class_code, Dumper=Dumper, default_style='"')
@staticmethod
def _generate_properties(inputs, outputs):
contracts = {}
for name, value in inputs.items():
prop = {
'Contract': YAQL('$.string().notNull()'),
'Usage': 'In'
}
if 'default' in value:
prop['Default'] = value['default']
contracts[name] = prop
for name in outputs.keys():
contracts[name] = {
'Contract': YAQL('$.string()'),
'Usage': 'Out'
}
return contracts
def _generate_describe_method(self, inputs):
input_values = {
name: YAQL('$.' + name)
for name in inputs.keys()
}
return {
'Body': [{
'Return': {
'entryPoint': self._entry_point,
'inputs': input_values
}
}]
}
@staticmethod
def _generate_update_outputs_method(outputs):
assignments = [
{YAQL('$.' + name): YAQL('$outputs.get({0})'.format(name))}
for name in outputs.keys()
]
return {
'Arguments': [{
'outputs': {
'Contract': {
YAQL('$.string().notNull()'): YAQL('$')
}
}
}],
'Body': assignments
}
def _get_inputs_outputs(self):
entry_point_path = path.secure_join(
self.source_directory, RESOURCES_DIR_NAME, self._entry_point)
with open(entry_point_path) as blueprint:
data = yaml.safe_load(blueprint)
return data.get('inputs') or {}, data.get('outputs') or {}
def _generate_application_ui_section(self, inputs, package_name=None,
package_version=None):
section = {
key: YAQL(
'$.appConfiguration.' + key) for key in inputs.keys()
}
section.update({
'?': {
'type': self.full_name
}
})
if package_name:
section['?']['package'] = package_name
if package_version:
section['?']['classVersion'] = package_version
return section
@staticmethod
def _generate_form_ui_section(inputs):
fields = [
{
'name': key,
'label': key.title().replace('_', ' '),
'type': 'string',
'required': True,
'description': value.get('description', key)
} for key, value in inputs.items()
]
return [{
'appConfiguration': {
'fields': fields
}
}]
def _generate_ui(self):
inputs, outputs = self._get_inputs_outputs()
ui = {
'Version': '2.2',
'Application': self._generate_application_ui_section(
inputs, self.full_name, str(self.version)),
'Forms': self._generate_form_ui_section(inputs)
}
return yaml.dump(ui, Dumper=Dumper, default_style='"')

View File

@ -1,175 +0,0 @@
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.

View File

@ -1,18 +0,0 @@
Nodecellar Example Application
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Nodecellar is an example application with a Node front end and Mongo
database backend.
To test this application with the Murano Cloudify plugin, the following steps need to
be executed:
`git clone https://github.com/cloudify-cosmo/cloudify-nodecellar-example.git Resources`
`cd Resources`
`git checkout tags/3.2.1`
After the above steps are completed, the packages need to be zipped and uploaded to
the Murano catalog as normally done for Murano applications.
You can follow instructions from `here <http://getcloudify.org/guide/3.2/quickstart.html>`_
to quickly bring up the environment for the application.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,28 +0,0 @@
# 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.
Format: Cloudify.TOSCA/1.0
Type: Application
FullName: org.getcloudify.muranoapps.examples.NodeCellar
EntryPoint: singlehost-blueprint.yaml
Name: Node Cellar sample app
Description: >
A sample application built with Backbone.js, Twitter Bootstrap,
Node.js, Express, and MongoDB
Author: Trammell
Tags:
- TOSCA
- Cloudify
- Sample

View File

@ -1 +0,0 @@
cloudify-rest-client>=3.2

View File

@ -1,16 +0,0 @@
[metadata]
name = io.murano.plugins.cloudify
description = Murano-Cloudify integration plugin
summary = Plugin to deploy Tosca packages via Cloudify Manager with Murano
author = Trammell
author-email = trammell@gigaspaces.com
[files]
packages = murano_cloudify_plugin
[entry_points]
io.murano.plugins.packages =
Cloudify.TOSCA/1.0 = murano_cloudify_plugin.cloudify_tosca_package:CloudifyToscaPackage
io.murano.extensions =
cloudify.CloudifyClient = murano_cloudify_plugin.cloudify_client:CloudifyClient

View File

@ -1,20 +0,0 @@
# Copyright 2011-2012 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)

View File

@ -1,175 +0,0 @@
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.

View File

@ -1,90 +0,0 @@
# 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:
=: com.intel.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)
- $bayStatus: $._magnum.getBayStatus($bayId)
- If: $bayStatus = "CREATE_FAILED"
Then:
- $msg: 'Magnum bay create failed'
- $._environment.reporter.report_error($this, $msg)
- Throw: MagnumBayCreateFailed
Message: $msg
- $msg: format('Magnum bay {0} is created', $.name)
- $._environment.reporter.report($this, $msg)

View File

@ -1,131 +0,0 @@
# 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:
=: com.intel.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)

View File

@ -1,212 +0,0 @@
# 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: com.intel.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: com.intel.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 <KEY1=VALUE1,KEY2=VALUE2...>.
- 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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -1,26 +0,0 @@
# 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.
Format: 1.0
Type: Application
FullName: com.intel.magnum.plugin.MagnumBayApp
Name: Magnum App
Description: |
App to deploy Kubernetes cluster using Magnum
Author: 'Intel, Inc'
Tags: [Magnum, Kubernetes, Docker]
Classes:
com.intel.magnum.plugin.MagnumBaymodel: MagnumBaymodel.yaml
com.intel.magnum.plugin.MagnumBayApp: MagnumBayApp.yaml
Require:
murano.plugins.magnum:

View File

@ -1,92 +0,0 @@
# Copyright (c) 2016 Intel, Inc.
#
# 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 cfg
import time
from magnumclient import client
from murano.common import auth_utils
from murano.dsl import session_local_storage
from oslo_config import cfg as config
from magnumclient import exceptions
CONF = config.CONF
class MagnumClient(object):
def __init__(self, this, region_name=None):
self._region_name = region_name
self._owner = this.find_owner('io.murano.Environment')
@property
def _client(self):
region = self._region_name or (
None if self._owner is None else self._owner['region'])
return self._create_magnum_client(region)
@classmethod
def init_plugin(cls):
cls.CONF = cfg.init_config(CONF)
def _wait_on_status(self, bays, bay_id, wait_status, finish_status):
while True:
# sleep 1s to wait bay status changes, this will be useful for
# the first time we wait for the status, to avoid another 30s
time.sleep(1)
status = bays.get(bay_id).status
if status in wait_status:
time.sleep(30)
elif status in finish_status:
break
else:
raise RuntimeError("Unexpected Status: {}".format(status))
@staticmethod
@session_local_storage.execution_session_memoize
def _create_magnum_client(region):
session = auth_utils.get_token_client_session(conf=CONF)
params = auth_utils.get_session_client_parameters(
service_type='container-infra', region=region, conf=CONF,
session=session)
return client.Client(**params)
def create_baymodel(self, args):
baymodel = self._client.baymodels.create(**args)
return baymodel.uuid
def delete_baymodel(self, baymodel_id):
self._client.baymodels.delete(baymodel_id)
def get_bay_status(self, bay_id):
bays = self._client.bays
bay = bays.get(bay_id)
return bay.status
def create_bay(self, args):
bays = self._client.bays
bay = bays.create(**args)
self._wait_on_status(bays, bay.uuid, [None, "CREATE_IN_PROGRESS"],
["CREATE_COMPLETE", "CREATE_FAILED"])
return bay.uuid
def delete_bay(self, bay_id):
bays = self._client.bays
bays.delete(bay_id)
try:
self._wait_on_status(bays, bay_id, ["CREATE_COMPLETE",
"DELETE_IN_PROGRESS", "CREATE_FAILED"],
["DELETE_COMPLETE"])
except exceptions.NotFound:
pass

View File

@ -1,24 +0,0 @@
# Copyright (c) 2016 Intel, Inc.
#
# 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_config import cfg
def init_config(conf):
opts = [
cfg.IntOpt('api_version', default=2),
cfg.StrOpt('endpoint_type', default='publicURL')
]
conf.register_opts(opts, group="magnum")
return conf.magnum

View File

@ -1 +0,0 @@
python-magnumclient>=3.0.0 # Apache-2.0

View File

@ -1,15 +0,0 @@
[metadata]
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

View File

@ -1,20 +0,0 @@
# 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)

View File

@ -1,40 +0,0 @@
Namespaces:
=: io.murano.apps.example.plugin
std: io.murano
res: io.murano.resources
sys: io.murano.system
Name: DemoApp
Extends: std:Application
Properties:
name:
Contract: $.string().notNull()
instance:
Contract: $.class(res:Instance).notNull()
Methods:
initialize:
Body:
- $._environment: $.find(std:Environment).require()
deploy:
Body:
- If: not $.getAttr(deployed, false)
Then:
- $._environment.reporter.report($this, 'Creating VM ')
- $securityGroupIngress:
- ToPort: 22
FromPort: 22
IpProtocol: tcp
External: true
- $._environment.securityGroupManager.addGroupIngress($securityGroupIngress)
- $.instance.deploy()
- $resources: new(sys:Resources)
- $._environment.reporter.report($this, 'Test VM is installed')
- $.host: $.instance.ipAddresses[0]
- $.user: 'root'
- $.setAttr(deployed, true)

View File

@ -1,15 +0,0 @@
Namespaces:
=: io.murano.apps.example.plugin
res: io.murano.resources
Name: DemoInstance
Extends:
- res:LinuxMuranoInstance
- ImageValidatorMixin
Methods:
deploy:
Body:
- $.validateImage()
- $.super($.deploy())

View File

@ -1,38 +0,0 @@
Namespaces:
=: io.murano.apps.example.plugin
res: io.murano.resources
std: io.murano
Name: ImageValidatorMixin
Extends:
- res:Instance
Properties:
requiredType:
Contract: $.string().notNull()
Methods:
validateImage:
Body:
- $environment: $.find(std:Environment).require()
- Try:
- $glance: new('io.murano.extensions.mirantis.example.Glance', $environment)
Catch:
With: 'murano.dsl.exceptions.NoPackageForClassFound'
Do:
Throw: PluginNotFoundException
Message: 'Plugin for interaction with Glance is not installed'
- $glanceImage: $glance.getById($.image)
- If: $glanceImage = null
Then:
Throw: ImageNotFoundException
Message: 'Image with specified Id was not found'
- If: $glanceImage.meta = null
Then:
Throw: InvalidImageException
Message: 'Image does not contain Murano metadata tag'
- If: $glanceImage.meta.type != $.requiredType
Then:
Throw: InvalidImageException
Message: 'Image has unappropriate Murano type'

Some files were not shown because too many files have changed in this diff Show More