Merge "Migrate API documentations into the Heat tree"
This commit is contained in:
commit
56dae31c7b
0
api-ref/ext/__init__.py
Normal file
0
api-ref/ext/__init__.py
Normal file
377
api-ref/ext/rest_parameters.py
Normal file
377
api-ref/ext/rest_parameters.py
Normal file
@ -0,0 +1,377 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""This provides a sphinx extension able to create the HTML needed
|
||||
for the api-ref website.
|
||||
|
||||
It contains 2 new stanzas.
|
||||
|
||||
.. rest_method:: GET /foo/bar
|
||||
|
||||
Which is designed to be used as the first stanza in a new section to
|
||||
state that section is about that REST method. During processing the
|
||||
rest stanza will be reparented to be before the section in question,
|
||||
and used as a show/hide selector for it's details.
|
||||
|
||||
.. rest_parameters:: file.yaml
|
||||
|
||||
- name1: name_in_file1
|
||||
- name2: name_in_file2
|
||||
- name3: name_in_file3
|
||||
|
||||
Which is designed to build structured tables for either response or
|
||||
request parameters. The stanza takes a value which is a file to lookup
|
||||
details about the parameters in question.
|
||||
|
||||
The contents of the stanza are a yaml list of key / value pairs. The
|
||||
key is the name of the parameter to be shown in the table. The value
|
||||
is the key in the file.yaml where all other metadata about the
|
||||
parameter will be extracted. This allows for reusing parameter
|
||||
definitions widely in API definitions, but still providing for control
|
||||
in both naming and ordering of parameters at every declaration.
|
||||
|
||||
"""
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst.directives.tables import Table
|
||||
from docutils.statemachine import ViewList
|
||||
from sphinx.util.compat import Directive
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
def full_name(cls):
|
||||
return cls.__module__ + '.' + cls.__name__
|
||||
|
||||
|
||||
class rest_method(nodes.Part, nodes.Element):
|
||||
"""rest_method custom node type
|
||||
|
||||
We specify a custom node type for rest_method so that we can
|
||||
accumulate all the data about the rest method, but not render as
|
||||
part of the normal rendering process. This means that we need a
|
||||
renderer for every format we wish to support with this.
|
||||
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class rest_expand_all(nodes.Part, nodes.Element):
|
||||
pass
|
||||
|
||||
|
||||
class RestExpandAllDirective(Directive):
|
||||
has_content = True
|
||||
|
||||
def run(self):
|
||||
return [rest_expand_all()]
|
||||
|
||||
|
||||
class RestMethodDirective(Directive):
|
||||
|
||||
# this enables content in the directive
|
||||
has_content = True
|
||||
|
||||
def run(self):
|
||||
lineno = self.state_machine.abs_line_number()
|
||||
target = nodes.target()
|
||||
section = nodes.section(classes=["detail-control"])
|
||||
# env = self.state.document.settings.env
|
||||
# env.app.info("Parent %s" % self.state.parent.attributes)
|
||||
|
||||
node = rest_method()
|
||||
|
||||
# TODO(sdague): this is a super simplistic parser, should be
|
||||
# more robust.
|
||||
method, sep, url = self.content[0].partition(' ')
|
||||
|
||||
node['method'] = method
|
||||
node['url'] = url
|
||||
node['target'] = self.state.parent.attributes['ids'][0]
|
||||
|
||||
# We need to build a temporary target that we can replace
|
||||
# later in the processing to get the TOC to resolve correctly.
|
||||
temp_target = "%s-selector" % node['target']
|
||||
target = nodes.target(ids=[temp_target])
|
||||
self.state.add_target(temp_target, '', target, lineno)
|
||||
section += node
|
||||
|
||||
return [target, section]
|
||||
|
||||
|
||||
class RestParametersDirective(Table):
|
||||
|
||||
headers = ["Name", "In", "Type", "Description"]
|
||||
|
||||
def yaml_from_file(self, fpath):
|
||||
"""Collect Parameter stanzas from inline + file.
|
||||
|
||||
This allows use to reference an external file for the actual
|
||||
parameter definitions.
|
||||
"""
|
||||
# self.app.info("Fpath: %s" % fpath)
|
||||
try:
|
||||
with open(fpath, 'r') as stream:
|
||||
lookup = yaml.load(stream)
|
||||
except IOError:
|
||||
self.env.warn(
|
||||
self.env.docname,
|
||||
"Parameters file %s not found" % fpath)
|
||||
return
|
||||
except yaml.YAMLError as exc:
|
||||
self.app.warn(exc)
|
||||
raise
|
||||
|
||||
content = "\n".join(self.content)
|
||||
parsed = yaml.load(content)
|
||||
# self.app.info("Params loaded is %s" % parsed)
|
||||
# self.app.info("Lookup table looks like %s" % lookup)
|
||||
new_content = list()
|
||||
for paramlist in parsed:
|
||||
for name, ref in paramlist.items():
|
||||
if ref in lookup:
|
||||
new_content.append((name, lookup[ref]))
|
||||
else:
|
||||
# TODO(sdague): this provides a kind of confusing
|
||||
# error message because env.warn isn't meant to be
|
||||
# used this way, however it does provide a way to
|
||||
# track down where the parameters list is that is
|
||||
# wrong. So it's good enough for now.
|
||||
self.env.warn(
|
||||
"%s:%s " % (
|
||||
self.state_machine.node.source,
|
||||
self.state_machine.node.line),
|
||||
("No field definition for ``%s`` found in ``%s``. "
|
||||
" Skipping." % (ref, fpath)))
|
||||
|
||||
# self.app.info("New content %s" % new_content)
|
||||
self.yaml = new_content
|
||||
|
||||
def run(self):
|
||||
self.env = self.state.document.settings.env
|
||||
self.app = self.env.app
|
||||
|
||||
# Make sure we have some content, which should be yaml that
|
||||
# defines some parameters.
|
||||
if not self.content:
|
||||
error = self.state_machine.reporter.error(
|
||||
'No parameters defined',
|
||||
nodes.literal_block(self.block_text, self.block_text),
|
||||
line=self.lineno)
|
||||
return [error]
|
||||
|
||||
if not len(self.arguments) >= 1:
|
||||
self.state_machine.reporter.error(
|
||||
'No reference file defined',
|
||||
nodes.literal_block(self.block_text, self.block_text),
|
||||
line=self.lineno)
|
||||
return [error]
|
||||
|
||||
# NOTE(sdague): it's important that we pop the arg otherwise
|
||||
# we end up putting the filename as the table caption.
|
||||
rel_fpath, fpath = self.env.relfn2path(self.arguments.pop())
|
||||
self.yaml_file = fpath
|
||||
self.yaml_from_file(self.yaml_file)
|
||||
|
||||
self.max_cols = len(self.headers)
|
||||
# TODO(sdague): it would be good to dynamically set column
|
||||
# widths (or basically make the colwidth thing go away
|
||||
# entirely)
|
||||
self.options['widths'] = (20, 10, 10, 60)
|
||||
self.col_widths = self.get_column_widths(self.max_cols)
|
||||
# Actually convert the yaml
|
||||
title, messages = self.make_title()
|
||||
# self.app.info("Title %s, messages %s" % (title, messages))
|
||||
table_node = self.build_table()
|
||||
self.add_name(table_node)
|
||||
if title:
|
||||
table_node.insert(0, title)
|
||||
return [table_node] + messages
|
||||
|
||||
def get_rows(self, table_data):
|
||||
rows = []
|
||||
groups = []
|
||||
trow = nodes.row()
|
||||
entry = nodes.entry()
|
||||
para = nodes.paragraph(text=unicode(table_data))
|
||||
entry += para
|
||||
trow += entry
|
||||
rows.append(trow)
|
||||
return rows, groups
|
||||
|
||||
# Add a column for a field. In order to have the RST inside
|
||||
# these fields get rendered, we need to use the
|
||||
# ViewList. Note, ViewList expects a list of lines, so chunk
|
||||
# up our content as a list to make it happy.
|
||||
def add_col(self, value):
|
||||
entry = nodes.entry()
|
||||
result = ViewList(value.split('\n'))
|
||||
self.state.nested_parse(result, 0, entry)
|
||||
return entry
|
||||
|
||||
def show_no_yaml_error(self):
|
||||
trow = nodes.row(classes=["no_yaml"])
|
||||
trow += self.add_col("No yaml found %s" % self.yaml_file)
|
||||
trow += self.add_col("")
|
||||
trow += self.add_col("")
|
||||
trow += self.add_col("")
|
||||
return trow
|
||||
|
||||
def collect_rows(self):
|
||||
rows = []
|
||||
groups = []
|
||||
try:
|
||||
# self.app.info("Parsed content is: %s" % self.yaml)
|
||||
for key, values in self.yaml:
|
||||
min_version = values.get('min_version', '')
|
||||
desc = values.get('description', '')
|
||||
classes = []
|
||||
if min_version:
|
||||
desc += ("\n\n**New in version %s**\n" % min_version)
|
||||
min_ver_css_name = ("rp_min_ver_" +
|
||||
str(min_version).replace('.', '_'))
|
||||
classes.append(min_ver_css_name)
|
||||
trow = nodes.row(classes=classes)
|
||||
name = key
|
||||
if values.get('required', False) is False:
|
||||
name += " (Optional)"
|
||||
trow += self.add_col(name)
|
||||
trow += self.add_col(values.get('in'))
|
||||
trow += self.add_col(values.get('type'))
|
||||
trow += self.add_col(desc)
|
||||
rows.append(trow)
|
||||
except AttributeError as exc:
|
||||
if 'key' in locals():
|
||||
self.app.warn("Failure on key: %s, values: %s. %s" %
|
||||
(key, values, exc))
|
||||
else:
|
||||
rows.append(self.show_no_yaml_error())
|
||||
return rows, groups
|
||||
|
||||
def build_table(self):
|
||||
table = nodes.table()
|
||||
tgroup = nodes.tgroup(cols=len(self.headers))
|
||||
table += tgroup
|
||||
|
||||
# TODO(sdague): it would be really nice to figure out how not
|
||||
# to have this stanza, it kind of messes up all of the table
|
||||
# formatting because it doesn't let tables just be the right
|
||||
# size.
|
||||
tgroup.extend(
|
||||
nodes.colspec(colwidth=col_width, colname='c' + str(idx))
|
||||
for idx, col_width in enumerate(self.col_widths)
|
||||
)
|
||||
|
||||
thead = nodes.thead()
|
||||
tgroup += thead
|
||||
|
||||
row_node = nodes.row()
|
||||
thead += row_node
|
||||
row_node.extend(nodes.entry(h, nodes.paragraph(text=h))
|
||||
for h in self.headers)
|
||||
|
||||
tbody = nodes.tbody()
|
||||
tgroup += tbody
|
||||
|
||||
rows, groups = self.collect_rows()
|
||||
tbody.extend(rows)
|
||||
table.extend(groups)
|
||||
|
||||
return table
|
||||
|
||||
|
||||
def rest_method_html(self, node):
|
||||
tmpl = """
|
||||
<div class="row operation-grp">
|
||||
<div class="col-md-1 operation">
|
||||
<a name="%(target)s" class="operation-anchor" href="#%(target)s">
|
||||
<span class="glyphicon glyphicon-link"></span></a>
|
||||
<span class="label label-success">%(method)s</span>
|
||||
</div>
|
||||
<div class="col-md-5">%(url)s</div>
|
||||
<div class="col-md-5">%(desc)s</div>
|
||||
<div class="col-md-1">
|
||||
<button
|
||||
class="btn btn-info btn-sm btn-detail"
|
||||
data-target="#%(target)s-detail"
|
||||
data-toggle="collapse"
|
||||
id="%(target)s-detail-btn"
|
||||
>detail</button>
|
||||
</div>
|
||||
</div>"""
|
||||
|
||||
self.body.append(tmpl % node)
|
||||
raise nodes.SkipNode
|
||||
|
||||
|
||||
def rest_expand_all_html(self, node):
|
||||
tmpl = """
|
||||
<div>
|
||||
<div class=col-md-11></div>
|
||||
<div class=col-md-1>
|
||||
<button id="expand-all"
|
||||
data-toggle="collapse"
|
||||
class="btn btn-info btn-sm btn-expand-all"
|
||||
>Show All</button>
|
||||
</div>
|
||||
</div>"""
|
||||
|
||||
self.body.append(tmpl % node)
|
||||
raise nodes.SkipNode
|
||||
|
||||
|
||||
def resolve_rest_references(app, doctree):
|
||||
for node in doctree.traverse():
|
||||
if isinstance(node, rest_method):
|
||||
rest_node = node
|
||||
rest_method_section = node.parent
|
||||
rest_section = rest_method_section.parent
|
||||
gp = rest_section.parent
|
||||
|
||||
# Added required classes to the top section
|
||||
rest_section.attributes['classes'].append('api-detail')
|
||||
rest_section.attributes['classes'].append('collapse')
|
||||
|
||||
# Pop the title off the collapsed section
|
||||
title = rest_section.children.pop(0)
|
||||
rest_node['desc'] = title.children[0]
|
||||
|
||||
# In order to get the links in the sidebar to be right, we
|
||||
# have to do some id flipping here late in the game. The
|
||||
# rest_method_section has basically had a dummy id up
|
||||
# until this point just to keep it from colliding with
|
||||
# it's parent.
|
||||
rest_section.attributes['ids'][0] = (
|
||||
"%s-detail" % rest_section.attributes['ids'][0])
|
||||
rest_method_section.attributes['ids'][0] = rest_node['target']
|
||||
|
||||
# Pop the overall section into it's grand parent,
|
||||
# right before where the current parent lives
|
||||
idx = gp.children.index(rest_section)
|
||||
rest_section.remove(rest_method_section)
|
||||
gp.insert(idx, rest_method_section)
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.add_node(rest_method,
|
||||
html=(rest_method_html, None))
|
||||
app.add_node(rest_expand_all,
|
||||
html=(rest_expand_all_html, None))
|
||||
app.add_directive('rest_parameters', RestParametersDirective)
|
||||
app.add_directive('rest_method', RestMethodDirective)
|
||||
app.add_directive('rest_expand_all', RestExpandAllDirective)
|
||||
app.add_stylesheet('bootstrap.min.css')
|
||||
app.add_stylesheet('api-site.css')
|
||||
app.add_javascript('bootstrap.min.js')
|
||||
app.add_javascript('api-site.js')
|
||||
app.connect('doctree-read', resolve_rest_references)
|
||||
return {'version': '0.1'}
|
224
api-ref/source/conf.py
Normal file
224
api-ref/source/conf.py
Normal file
@ -0,0 +1,224 @@
|
||||
# -*- 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.
|
||||
#
|
||||
# heat documentation build config file, copied from:
|
||||
# nova 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 subprocess
|
||||
import sys
|
||||
import warnings
|
||||
|
||||
# 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.
|
||||
|
||||
extensions = [
|
||||
'ext.rest_parameters',
|
||||
'oslosphinx',
|
||||
]
|
||||
|
||||
# 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.
|
||||
project = u'Orchestration API Reference'
|
||||
copyright = u'2010-present, OpenStack Foundation'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
from heat.version import version_info
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = version_info.release_string()
|
||||
# The short X.Y version.
|
||||
version = version_info.version_string()
|
||||
|
||||
# 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 = 'sphinx'
|
||||
|
||||
# -- 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 not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
# html_last_updated_fmt = '%b %d, %Y'
|
||||
git_cmd = ["git", "log", "--pretty=format:'%ad, commit %h'", "--date=local",
|
||||
"-n1"]
|
||||
try:
|
||||
html_last_updated_fmt = subprocess.Popen(
|
||||
git_cmd, stdout=subprocess.PIPE).communicate()[0]
|
||||
except Exception:
|
||||
warnings.warn('Cannot get last updated time from git repository. '
|
||||
'Not setting "html_last_updated_fmt".')
|
||||
|
||||
# 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 = 'heatdoc'
|
||||
|
||||
|
||||
# -- 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', 'Heat.tex', u'OpenStack Orchestration 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
|
||||
|
24
api-ref/source/index.rst
Normal file
24
api-ref/source/index.rst
Normal file
@ -0,0 +1,24 @@
|
||||
..
|
||||
Copyright 2010 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.
|
||||
|
||||
==========================
|
||||
Orchestration Service APIs
|
||||
==========================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
v1/index
|
39
api-ref/source/v1/build-info.inc
Normal file
39
api-ref/source/v1/build-info.inc
Normal file
@ -0,0 +1,39 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
==========
|
||||
Build info
|
||||
==========
|
||||
|
||||
|
||||
|
||||
|
||||
Show build information
|
||||
======================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/build_info
|
||||
|
||||
Shows build information for an Orchestration deployment.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/build-info-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
13
api-ref/source/v1/general-info.inc
Normal file
13
api-ref/source/v1/general-info.inc
Normal file
@ -0,0 +1,13 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=======================
|
||||
General API information
|
||||
=======================
|
||||
|
||||
Authenticated calls that target a known URI but that use an HTTP
|
||||
method that the implementation does not support return a ``405
|
||||
Method Not Allowed`` error code. In addition, the HTTP ``OPTIONS``
|
||||
method is supported for each known URI. In both cases, the
|
||||
``Allow`` response header indicates the HTTP methods that are
|
||||
supported for the resource.
|
||||
|
38
api-ref/source/v1/heat-versions.inc
Normal file
38
api-ref/source/v1/heat-versions.inc
Normal file
@ -0,0 +1,38 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
============
|
||||
API versions
|
||||
============
|
||||
|
||||
|
||||
|
||||
|
||||
List versions
|
||||
=============
|
||||
|
||||
.. rest_method:: GET /
|
||||
|
||||
Lists all Orchestration API versions.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/heat-versions-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
32
api-ref/source/v1/index.rst
Normal file
32
api-ref/source/v1/index.rst
Normal file
@ -0,0 +1,32 @@
|
||||
..
|
||||
Copyright 2010 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.
|
||||
|
||||
:tocdepth: 2
|
||||
|
||||
============================
|
||||
Orchestration Service API v1
|
||||
============================
|
||||
|
||||
.. include:: build-info.inc
|
||||
.. include:: general-info.inc
|
||||
.. include:: heat-versions.inc
|
||||
.. include:: service-status.inc
|
||||
.. include:: software-config.inc
|
||||
.. include:: stack-actions.inc
|
||||
.. include:: stack-events.inc
|
||||
.. include:: stack-resources.inc
|
||||
.. include:: stack-templates.inc
|
||||
.. include:: stacks.inc
|
1580
api-ref/source/v1/parameters.yaml
Normal file
1580
api-ref/source/v1/parameters.yaml
Normal file
File diff suppressed because it is too large
Load Diff
8
api-ref/source/v1/samples/build-info-response.json
Normal file
8
api-ref/source/v1/samples/build-info-response.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"api": {
|
||||
"revision": "{api_build_revision}"
|
||||
},
|
||||
"engine": {
|
||||
"revision": "{engine_build_revision}"
|
||||
}
|
||||
}
|
28
api-ref/source/v1/samples/config-create-request.json
Normal file
28
api-ref/source/v1/samples/config-create-request.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "foo",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "bar",
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"group": "script",
|
||||
"name": "a-config-we5zpvyu7b5o",
|
||||
"outputs": [
|
||||
{
|
||||
"type": "String",
|
||||
"name": "result",
|
||||
"error_output": false,
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2",
|
||||
"options": null
|
||||
}
|
32
api-ref/source/v1/samples/config-create-response.json
Normal file
32
api-ref/source/v1/samples/config-create-response.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"software_config": {
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"inputs": [
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "foo",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "bar",
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"group": "script",
|
||||
"name": "a-config-we5zpvyu7b5o",
|
||||
"outputs": [
|
||||
{
|
||||
"type": "String",
|
||||
"name": "result",
|
||||
"error_output": false,
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"options": null,
|
||||
"config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2",
|
||||
"id": "ddee7aca-aa32-4335-8265-d436b20db4f1"
|
||||
}
|
||||
}
|
32
api-ref/source/v1/samples/config-show-response.json
Normal file
32
api-ref/source/v1/samples/config-show-response.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"software_config": {
|
||||
"inputs": [
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "foo",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "bar",
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"group": "script",
|
||||
"name": "a-config-we5zpvyu7b5o",
|
||||
"outputs": [
|
||||
{
|
||||
"type": "String",
|
||||
"name": "result",
|
||||
"error_output": false,
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"id": "ddee7aca-aa32-4335-8265-d436b20db4f1",
|
||||
"config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2",
|
||||
"options": null
|
||||
}
|
||||
}
|
8
api-ref/source/v1/samples/deployment-create-request.json
Normal file
8
api-ref/source/v1/samples/deployment-create-request.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"status": "IN_PROGRESS",
|
||||
"server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd",
|
||||
"stack_user_project_id": "c024bfada67845ddb17d2b0c0be8cd79",
|
||||
"action": "CREATE",
|
||||
"status_reason": "Deploy data available"
|
||||
}
|
14
api-ref/source/v1/samples/deployment-create-response.json
Normal file
14
api-ref/source/v1/samples/deployment-create-response.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"software_deployment": {
|
||||
"status": "IN_PROGRESS",
|
||||
"server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd",
|
||||
"output_values": null,
|
||||
"input_values": null,
|
||||
"action": "CREATE",
|
||||
"status_reason": "Deploy data available",
|
||||
"id": "ef422fa5-719a-419e-a10c-72e3a367b0b8",
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"updated_time": "2015-01-31T15:18:21Z"
|
||||
}
|
||||
}
|
130
api-ref/source/v1/samples/deployment-metadata-response.json
Normal file
130
api-ref/source/v1/samples/deployment-metadata-response.json
Normal file
@ -0,0 +1,130 @@
|
||||
{
|
||||
"metadata": [
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "foo",
|
||||
"value": "fooooo",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "bar",
|
||||
"value": "baaaaa",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_server_id",
|
||||
"value": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"description": "ID of the server being deployed to"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_action",
|
||||
"value": "CREATE",
|
||||
"description": "Name of the current action being deployed"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_stack_id",
|
||||
"value": "a/9bd57090-8954-48ab-bab9-adf9e1ac70fc",
|
||||
"description": "ID of the stack this deployment belongs to"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_resource_name",
|
||||
"value": "deployment",
|
||||
"description": "Name of this deployment resource in the stack"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_signal_id",
|
||||
"value": "http://192.168.20.103:8000/v1/signal/arn%3Aopenstack%3Aheat%3A%3Ae2a84fbdaeb047ae8da4b503f3b69f1f%3Astacks%2Fa%2F9bd57090-8954-48ab-bab9-adf9e1ac70fc%2Fresources%2Fdeployment?Timestamp=2014-03-19T20%3A30%3A59Z&SignatureMethod=HmacSHA256&AWSAccessKeyId=ca3571413e4a49998d580215517b3685&SignatureVersion=2&Signature=w6Iu%2BNbg86mqwSOUf1GLuKPO7KaD82PiGpL4ig9Q1l4%3D",
|
||||
"description": "ID of signal to use for signalling output values"
|
||||
}
|
||||
],
|
||||
"group": "script",
|
||||
"name": "a-config-we5zpvyu7b5o",
|
||||
"outputs": [
|
||||
{
|
||||
"type": "String",
|
||||
"name": "result",
|
||||
"error_output": false,
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"options": null,
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"updated_time": "2015-01-31T15:18:21Z",
|
||||
"config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2",
|
||||
"id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "foo",
|
||||
"value": "fu",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"default": null,
|
||||
"type": "String",
|
||||
"name": "bar",
|
||||
"value": "barmy",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_server_id",
|
||||
"value": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"description": "ID of the server being deployed to"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_action",
|
||||
"value": "CREATE",
|
||||
"description": "Name of the current action being deployed"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_stack_id",
|
||||
"value": "a/9bd57090-8954-48ab-bab9-adf9e1ac70fc",
|
||||
"description": "ID of the stack this deployment belongs to"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_resource_name",
|
||||
"value": "other_deployment",
|
||||
"description": "Name of this deployment resource in the stack"
|
||||
},
|
||||
{
|
||||
"type": "String",
|
||||
"name": "deploy_signal_id",
|
||||
"value": "http://192.168.20.103:8000/v1/signal/arn%3Aopenstack%3Aheat%3A%3Ae2a84fbdaeb047ae8da4b503f3b69f1f%3Astacks%2Fa%2F9bd57090-8954-48ab-bab9-adf9e1ac70fc%2Fresources%2Fother_deployment?Timestamp=2014-03-19T20%3A30%3A59Z&SignatureMethod=HmacSHA256&AWSAccessKeyId=7b761482f8254946bcd3d5ccb36fe939&SignatureVersion=2&Signature=giMfv%2BhrAw6y%2FCMKQIQz2IhO5PkAj5%2BfP5YsL6rul3o%3D",
|
||||
"description": "ID of signal to use for signalling output values"
|
||||
}
|
||||
],
|
||||
"group": "script",
|
||||
"name": "a-config-we5zpvyu7b5o",
|
||||
"outputs": [
|
||||
{
|
||||
"type": "String",
|
||||
"name": "result",
|
||||
"error_output": false,
|
||||
"description": null
|
||||
}
|
||||
],
|
||||
"options": null,
|
||||
"creation_time": "2015-01-31T16:14:13Z",
|
||||
"updated_time": "2015-01-31T16:18:19Z",
|
||||
"config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2",
|
||||
"id": "8da95794-2ad9-4979-8ae5-739ce314c5cd"
|
||||
}
|
||||
]
|
||||
}
|
14
api-ref/source/v1/samples/deployment-show-response.json
Normal file
14
api-ref/source/v1/samples/deployment-show-response.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"software_deployment": {
|
||||
"status": "IN_PROGRESS",
|
||||
"server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"config_id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434",
|
||||
"output_values": null,
|
||||
"input_values": null,
|
||||
"action": "CREATE",
|
||||
"status_reason": "Deploy data available",
|
||||
"id": "06e87bcc-33a2-4bce-aebd-533e698282d3",
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"updated_time": "2015-01-31T15:18:21Z"
|
||||
}
|
||||
}
|
10
api-ref/source/v1/samples/deployment-update-request.json
Normal file
10
api-ref/source/v1/samples/deployment-update-request.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"status": "COMPLETE",
|
||||
"output_values": {
|
||||
"deploy_stdout": "Writing to /tmp/baaaaa\nWritten to /tmp/baaaaa\n",
|
||||
"deploy_stderr": "+ echo Writing to /tmp/baaaaa\n+ echo fooooo\n+ cat /tmp/baaaaa\n+ echo -n The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE\n+ echo Written to /tmp/baaaaa\n+ echo Output to stderr\nOutput to stderr\n",
|
||||
"deploy_status_code": 0,
|
||||
"result": "The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE"
|
||||
},
|
||||
"status_reason": "Outputs received"
|
||||
}
|
19
api-ref/source/v1/samples/deployment-update-response.json
Normal file
19
api-ref/source/v1/samples/deployment-update-response.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"software_deployment": {
|
||||
"status": "COMPLETE",
|
||||
"server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"config_id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434",
|
||||
"output_values": {
|
||||
"deploy_stdout": "Writing to /tmp/baaaaa\nWritten to /tmp/baaaaa\n",
|
||||
"deploy_stderr": "+ echo Writing to /tmp/baaaaa\n+ echo fooooo\n+ cat /tmp/baaaaa\n+ echo -n The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE\n+ echo Written to /tmp/baaaaa\n+ echo Output to stderr\nOutput to stderr\n",
|
||||
"deploy_status_code": 0,
|
||||
"result": "The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE"
|
||||
},
|
||||
"input_values": null,
|
||||
"action": "CREATE",
|
||||
"status_reason": "Outputs received",
|
||||
"id": "06e87bcc-33a2-4bce-aebd-533e698282d3",
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"updated_time": "2015-01-31T15:18:21Z"
|
||||
}
|
||||
}
|
21
api-ref/source/v1/samples/deployments-list-response.json
Normal file
21
api-ref/source/v1/samples/deployments-list-response.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"software_deployments": [
|
||||
{
|
||||
"status": "COMPLETE",
|
||||
"server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
|
||||
"config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd",
|
||||
"output_values": {
|
||||
"deploy_stdout": "Writing to /tmp/barmy\nWritten to /tmp/barmy\n",
|
||||
"deploy_stderr": "+ echo Writing to /tmp/barmy\n+ echo fu\n+ cat /tmp/barmy\n+ echo -n The file /tmp/barmy contains fu for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE\n+ echo Written to /tmp/barmy\n+ echo Output to stderr\nOutput to stderr\n",
|
||||
"deploy_status_code": 0,
|
||||
"result": "The file /tmp/barmy contains fu for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE"
|
||||
},
|
||||
"input_values": null,
|
||||
"action": "CREATE",
|
||||
"status_reason": "Outputs received",
|
||||
"id": "ef422fa5-719a-419e-a10c-72e3a367b0b8",
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"updated_time": "2015-01-31T15:18:21Z"
|
||||
}
|
||||
]
|
||||
}
|
33
api-ref/source/v1/samples/event-show-response.json
Normal file
33
api-ref/source/v1/samples/event-show-response.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"event": {
|
||||
"event_time": "2015-06-25T14:59:53",
|
||||
"id": "8db23e2e-72b2-47a2-9ed9-b52417f56e50",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/56789/resources/random_key_name/events/8db23e2e-72b2-47a2-9ed9-b52417f56e50",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/56789/resources/random_key_name",
|
||||
"rel": "resource"
|
||||
},
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/56789",
|
||||
"rel": "stack"
|
||||
}
|
||||
],
|
||||
"logical_resource_id": "random_key_name",
|
||||
"physical_resource_id": null,
|
||||
"resource_name": "random_key_name",
|
||||
"resource_properties": {
|
||||
"character_classes": null,
|
||||
"character_sequences": null,
|
||||
"length": 8,
|
||||
"salt": null,
|
||||
"sequence": null
|
||||
},
|
||||
"resource_status": "CREATE_IN_PROGRESS",
|
||||
"resource_status_reason": "state changed",
|
||||
"resource_type": "OS::Heat::RandomString"
|
||||
}
|
||||
}
|
50
api-ref/source/v1/samples/events-list-response.json
Normal file
50
api-ref/source/v1/samples/events-list-response.json
Normal file
@ -0,0 +1,50 @@
|
||||
{
|
||||
"events": [
|
||||
{
|
||||
"resource_name": "port",
|
||||
"event_time": "2014-07-23T08:14:47Z",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port/events/474bfdf0-a450-46ec-a78a-0c7faa404073",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port",
|
||||
"rel": "resource"
|
||||
},
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5",
|
||||
"rel": "stack"
|
||||
}
|
||||
],
|
||||
"logical_resource_id": "port",
|
||||
"resource_status": "CREATE_FAILED",
|
||||
"resource_status_reason": "NotFound: Subnet f8a699d0-3537-429e-87a5-6b5a8d0c2bf0 could not be found",
|
||||
"physical_resource_id": null,
|
||||
"id": "474bfdf0-a450-46ec-a78a-0c7faa404073"
|
||||
},
|
||||
{
|
||||
"resource_name": "port",
|
||||
"event_time": "2014-07-23T08:14:47Z",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port/events/66fa95b6-e6f8-4f05-b1af-e828f5aba04c",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port",
|
||||
"rel": "resource"
|
||||
},
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5",
|
||||
"rel": "stack"
|
||||
}
|
||||
],
|
||||
"logical_resource_id": "port",
|
||||
"resource_status": "CREATE_IN_PROGRESS",
|
||||
"resource_status_reason": "state changed",
|
||||
"physical_resource_id": null,
|
||||
"id": "66fa95b6-e6f8-4f05-b1af-e828f5aba04c"
|
||||
}
|
||||
]
|
||||
}
|
14
api-ref/source/v1/samples/heat-versions-response.json
Normal file
14
api-ref/source/v1/samples/heat-versions-response.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"status": "CURRENT",
|
||||
"id": "v1.0",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://23.253.228.211:8000/v1/",
|
||||
"rel": "self"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"metadata": {
|
||||
"some_key": "some_value",
|
||||
"some_other_key": "some_other_value"
|
||||
}
|
||||
}
|
30
api-ref/source/v1/samples/resource-schema-response.json
Normal file
30
api-ref/source/v1/samples/resource-schema-response.json
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
"attributes": {
|
||||
"an_attribute": {
|
||||
"description": "A runtime value of the resource."
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"a_property": {
|
||||
"constraints": [
|
||||
{
|
||||
"description": "Must be between 1 and 255 characters",
|
||||
"length": {
|
||||
"max": 255,
|
||||
"min": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "A resource description.",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"update_allowed": false
|
||||
}
|
||||
},
|
||||
"resource_type": "OS::Heat::AResourceName",
|
||||
"support_status": {
|
||||
"message": "A status message",
|
||||
"status": "SUPPORTED",
|
||||
"version": "2014.1"
|
||||
}
|
||||
}
|
27
api-ref/source/v1/samples/resource-show-response.json
Normal file
27
api-ref/source/v1/samples/resource-show-response.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"resource": {
|
||||
"attributes": {
|
||||
"value": "I9S20uIp"
|
||||
},
|
||||
"creation_time": "2015-06-25T14:59:53",
|
||||
"description": "",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c/resources/random_key_name",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c",
|
||||
"rel": "stack"
|
||||
}
|
||||
],
|
||||
"logical_resource_id": "random_key_name",
|
||||
"physical_resource_id": "mystack-random_key_name-pmjmy5pks735",
|
||||
"required_by": [],
|
||||
"resource_name": "random_key_name",
|
||||
"resource_status": "CREATE_COMPLETE",
|
||||
"resource_status_reason": "state changed",
|
||||
"resource_type": "OS::Heat::RandomString",
|
||||
"updated_time": "2015-06-25T14:59:53"
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
{
|
||||
"HeatTemplateFormatVersion": "2012-12-12",
|
||||
"Outputs": {
|
||||
"private_key": {
|
||||
"Description": "The private key if it has been saved.",
|
||||
"Value": "{\"Fn::GetAtt\": [\"KeyPair\", \"private_key\"]}"
|
||||
},
|
||||
"public_key": {
|
||||
"Description": "The public key.",
|
||||
"Value": "{\"Fn::GetAtt\": [\"KeyPair\", \"public_key\"]}"
|
||||
}
|
||||
},
|
||||
"Parameters": {
|
||||
"name": {
|
||||
"Description": "The name of the key pair.",
|
||||
"Type": "String"
|
||||
},
|
||||
"public_key": {
|
||||
"Description": "The optional public key. This allows users to supply the public key from a pre-existing key pair. If not supplied, a new key pair will be generated.",
|
||||
"Type": "String"
|
||||
},
|
||||
"save_private_key": {
|
||||
"AllowedValues": [
|
||||
true,
|
||||
"true",
|
||||
false,
|
||||
"false"
|
||||
],
|
||||
"Default": false,
|
||||
"Description": "true if the system should remember a generated private key; false otherwise.",
|
||||
"Type": "String"
|
||||
}
|
||||
},
|
||||
"Resources": {
|
||||
"KeyPair": {
|
||||
"Properties": {
|
||||
"name": {
|
||||
"Ref": "name"
|
||||
},
|
||||
"public_key": {
|
||||
"Ref": "public_key"
|
||||
},
|
||||
"save_private_key": {
|
||||
"Ref": "save_private_key"
|
||||
}
|
||||
},
|
||||
"Type": "OS::Nova::KeyPair"
|
||||
}
|
||||
}
|
||||
}
|
61
api-ref/source/v1/samples/resource-types-list-response.json
Normal file
61
api-ref/source/v1/samples/resource-types-list-response.json
Normal file
@ -0,0 +1,61 @@
|
||||
{
|
||||
"resource_types": [
|
||||
"AWS::EC2::Instance",
|
||||
"OS::Heat::ScalingPolicy",
|
||||
"AWS::CloudFormation::Stack",
|
||||
"OS::Keystone::Group",
|
||||
"OS::Glance::Image",
|
||||
"AWS::EC2::Volume",
|
||||
"OS::Heat::SoftwareDeployment",
|
||||
"AWS::AutoScaling::ScalingPolicy",
|
||||
"AWS::EC2::InternetGateway",
|
||||
"OS::Heat::SoftwareDeployments",
|
||||
"AWS::EC2::VolumeAttachment",
|
||||
"AWS::CloudFormation::WaitConditionHandle",
|
||||
"OS::Cinder::VolumeAttachment",
|
||||
"OS::Cinder::EncryptedVolumeType",
|
||||
"OS::Heat::AutoScalingGroup",
|
||||
"OS::Nova::FloatingIP",
|
||||
"OS::Heat::HARestarter",
|
||||
"OS::Keystone::Project",
|
||||
"OS::Keystone::Endpoint",
|
||||
"OS::Heat::InstanceGroup",
|
||||
"AWS::CloudWatch::Alarm",
|
||||
"AWS::AutoScaling::AutoScalingGroup",
|
||||
"OS::Heat::CloudConfig",
|
||||
"OS::Heat::SoftwareComponent",
|
||||
"OS::Cinder::Volume",
|
||||
"OS::Keystone::Service",
|
||||
"OS::Heat::WaitConditionHandle",
|
||||
"OS::Heat::SoftwareConfig",
|
||||
"AWS::CloudFormation::WaitCondition",
|
||||
"OS::Heat::StructuredDeploymentGroup",
|
||||
"OS::Heat::RandomString",
|
||||
"OS::Heat::SoftwareDeploymentGroup",
|
||||
"OS::Nova::KeyPair",
|
||||
"OS::Heat::MultipartMime",
|
||||
"OS::Heat::UpdateWaitConditionHandle",
|
||||
"OS::Nova::Server",
|
||||
"AWS::IAM::AccessKey",
|
||||
"AWS::EC2::SecurityGroup",
|
||||
"AWS::EC2::EIPAssociation",
|
||||
"AWS::EC2::EIP",
|
||||
"OS::Heat::AccessPolicy",
|
||||
"AWS::IAM::User",
|
||||
"OS::Heat::WaitCondition",
|
||||
"OS::Heat::StructuredDeployment",
|
||||
"AWS::RDS::DBInstance",
|
||||
"AWS::AutoScaling::LaunchConfiguration",
|
||||
"OS::Heat::Stack",
|
||||
"OS::Nova::FloatingIPAssociation",
|
||||
"OS::Heat::ResourceGroup",
|
||||
"OS::Heat::StructuredConfig",
|
||||
"OS::Nova::ServerGroup",
|
||||
"OS::Heat::StructuredDeployments",
|
||||
"OS::Keystone::Role",
|
||||
"OS::Keystone::User",
|
||||
"AWS::ElasticLoadBalancing::LoadBalancer",
|
||||
"OS::Nova::Flavor",
|
||||
"OS::Cinder::VolumeType"
|
||||
]
|
||||
}
|
25
api-ref/source/v1/samples/resources-list-response.json
Normal file
25
api-ref/source/v1/samples/resources-list-response.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"resources": [
|
||||
{
|
||||
"creation_time": "2015-06-25T14:59:53",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c/resources/random_key_name",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c",
|
||||
"rel": "stack"
|
||||
}
|
||||
],
|
||||
"logical_resource_id": "random_key_name",
|
||||
"physical_resource_id": "mystack-random_key_name-pmjmy5pks735",
|
||||
"required_by": [],
|
||||
"resource_name": "random_key_name",
|
||||
"resource_status": "CREATE_COMPLETE",
|
||||
"resource_status_reason": "state changed",
|
||||
"resource_type": "OS::Heat::RandomString",
|
||||
"updated_time": "2015-06-25T14:59:53"
|
||||
}
|
||||
]
|
||||
}
|
30
api-ref/source/v1/samples/services-list-response.json
Normal file
30
api-ref/source/v1/samples/services-list-response.json
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
"services": [
|
||||
{
|
||||
"status": "up",
|
||||
"binary": "heat-engine",
|
||||
"report_interval": 60,
|
||||
"engine_id": "9d9242c3-4b9e-45e1-9e74-7615fbf20e5d",
|
||||
"created_at": "2015-02-03T05:55:59.000000",
|
||||
"hostname": "mrkanag",
|
||||
"updated_at": "2015-02-03T05:57:59.000000",
|
||||
"topic": "engine",
|
||||
"host": "engine-1",
|
||||
"deleted_at": null,
|
||||
"id": "e1908f44-42f9-483f-b778-bc814072c33d"
|
||||
},
|
||||
{
|
||||
"status": "down",
|
||||
"binary": "heat-engine",
|
||||
"report_interval": 60,
|
||||
"engine_id": "2d2434bf-adb6-4453-9c6b-b22fb8bd2306",
|
||||
"created_at": "2015-02-03T06:03:14.000000",
|
||||
"hostname": "mrkanag",
|
||||
"updated_at": "2015-02-03T06:09:55.000000",
|
||||
"topic": "engine",
|
||||
"host": "engine",
|
||||
"deleted_at": null,
|
||||
"id": "582b5657-6db7-48ad-8483-0096350faa21"
|
||||
}
|
||||
]
|
||||
}
|
69
api-ref/source/v1/samples/stack-abandon-response.json
Normal file
69
api-ref/source/v1/samples/stack-abandon-response.json
Normal file
@ -0,0 +1,69 @@
|
||||
{
|
||||
"status": "COMPLETE",
|
||||
"name": "g",
|
||||
"dry_run": true,
|
||||
"template": {
|
||||
"outputs": {
|
||||
"instance_ip": {
|
||||
"value": {
|
||||
"str_replace": {
|
||||
"params": {
|
||||
"username": "ec2-user",
|
||||
"hostname": {
|
||||
"get_attr": [
|
||||
"server",
|
||||
"first_address"
|
||||
]
|
||||
}
|
||||
},
|
||||
"template": "ssh username@hostname"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"heat_template_version": "2013-05-23",
|
||||
"resources": {
|
||||
"server": {
|
||||
"type": "OS::Nova::Server",
|
||||
"properties": {
|
||||
"key_name": {
|
||||
"get_param": "key_name"
|
||||
},
|
||||
"image": {
|
||||
"get_param": "image"
|
||||
},
|
||||
"flavor": {
|
||||
"get_param": "flavor"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": {
|
||||
"key_name": {
|
||||
"default": "heat_key",
|
||||
"type": "string"
|
||||
},
|
||||
"image": {
|
||||
"default": "fedora-amd64",
|
||||
"type": "string"
|
||||
},
|
||||
"flavor": {
|
||||
"default": "m1.small",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"action": "CREATE",
|
||||
"id": "16934ca3-40e0-4fb2-a289-a700662ec05a",
|
||||
"resources": {
|
||||
"server": {
|
||||
"status": "COMPLETE",
|
||||
"name": "server",
|
||||
"resource_data": {},
|
||||
"resource_id": "39d5dad7-7d7a-4cc8-bd84-851e9e2ff4ea",
|
||||
"action": "CREATE",
|
||||
"type": "OS::Nova::Server",
|
||||
"metadata": {}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"cancel_update": null
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"check": null
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"resume": null
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"suspend": null
|
||||
}
|
33
api-ref/source/v1/samples/stack-adopt-request.json
Normal file
33
api-ref/source/v1/samples/stack-adopt-request.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"adopt_stack_data": {
|
||||
"action": "CREATE",
|
||||
"id": "bxxxxx4-0xx2-4xx1-axx6-exxxxxxxc",
|
||||
"name": "teststack",
|
||||
"resources": {
|
||||
"MyServer": {
|
||||
"action": "CREATE",
|
||||
"metadata": {},
|
||||
"name": "MyServer",
|
||||
"resource_data": {},
|
||||
"resource_id": "cxxxx3-dxx3-4xx-bxx2-3xxxxxxxxa",
|
||||
"status": "COMPLETE",
|
||||
"type": "OS::Trove::Instance"
|
||||
}
|
||||
},
|
||||
"status": "COMPLETE",
|
||||
"template": {
|
||||
"heat_template_version": "2013-05-23",
|
||||
"resources": {
|
||||
"MyServer": {
|
||||
"type": "OS::Trove::Instance",
|
||||
"properties": {
|
||||
"flavor": "m1.small",
|
||||
"size": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"stack_name": "{stack_name}",
|
||||
"timeout_mins": "{timeout_mins}"
|
||||
}
|
32
api-ref/source/v1/samples/stack-create-request.json
Normal file
32
api-ref/source/v1/samples/stack-create-request.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"files": {},
|
||||
"disable_rollback": true,
|
||||
"parameters": {
|
||||
"flavor": "m1.heat"
|
||||
},
|
||||
"stack_name": "teststack",
|
||||
"template": {
|
||||
"heat_template_version": "2013-05-23",
|
||||
"description": "Simple template to test heat commands",
|
||||
"parameters": {
|
||||
"flavor": {
|
||||
"default": "m1.tiny",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"hello_world": {
|
||||
"type": "OS::Nova::Server",
|
||||
"properties": {
|
||||
"key_name": "heat_key",
|
||||
"flavor": {
|
||||
"get_param": "flavor"
|
||||
},
|
||||
"image": "40be8d1a-3eb9-40de-8abd-43237517384f",
|
||||
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"timeout_mins": 60
|
||||
}
|
11
api-ref/source/v1/samples/stack-create-response.json
Normal file
11
api-ref/source/v1/samples/stack-create-response.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"stack": {
|
||||
"id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/teststack/3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"rel": "self"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
27
api-ref/source/v1/samples/stack-find-response.json
Normal file
27
api-ref/source/v1/samples/stack-find-response.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"stack": {
|
||||
"capabilities": [],
|
||||
"creation_time": "2014-06-04T20:36:12Z",
|
||||
"description": "sample stack",
|
||||
"disable_rollback": true,
|
||||
"id": "5333af0c-cc26-47ee-ac3d-8784cefafbd7",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/simple_stack/5333af0c-cc26-47ee-ac3d-8784cefafbd7",
|
||||
"rel": "self"
|
||||
}
|
||||
],
|
||||
"notification_topics": [],
|
||||
"outputs": [],
|
||||
"parameters": {
|
||||
"OS::stack_id": "5333af0c-cc26-47ee-ac3d-8784cefafbd7",
|
||||
"OS::stack_name": "simple_stack"
|
||||
},
|
||||
"stack_name": "simple_stack",
|
||||
"stack_status": "CREATE_COMPLETE",
|
||||
"stack_status_reason": "Stack CREATE completed successfully",
|
||||
"template_description": "sample stack",
|
||||
"timeout_mins": null,
|
||||
"updated_time": null
|
||||
}
|
||||
}
|
10
api-ref/source/v1/samples/stack-outputs-list-response.json
Normal file
10
api-ref/source/v1/samples/stack-outputs-list-response.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"outputs": [
|
||||
{
|
||||
"output_key": "output name",
|
||||
"output_value": "output value",
|
||||
"description": "output description",
|
||||
"output_error": null
|
||||
}
|
||||
]
|
||||
}
|
168
api-ref/source/v1/samples/stack-preview-response.json
Normal file
168
api-ref/source/v1/samples/stack-preview-response.json
Normal file
@ -0,0 +1,168 @@
|
||||
{
|
||||
"stack": {
|
||||
"capabilities": [],
|
||||
"creation_time": "2015-01-31T15:12:36Z",
|
||||
"description": "HOT template for Nova Server resource.\n",
|
||||
"disable_rollback": true,
|
||||
"id": "None",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.122.102:8004/v1/6e18cc2bdbeb48a5basad2dc499f6804/stacks/test_stack/None",
|
||||
"rel": "self"
|
||||
}
|
||||
],
|
||||
"notification_topics": [],
|
||||
"parameters": {
|
||||
"OS::project_id": "6e18cc2bdbeb48a5basad2dc499f6804",
|
||||
"OS::stack_id": "None",
|
||||
"OS::stack_name": "teststack",
|
||||
"admin_user": "cloud-user",
|
||||
"flavor": "m1.small",
|
||||
"image": "F20-cfg",
|
||||
"key_name": "heat_key",
|
||||
"server_name": "MyServer"
|
||||
},
|
||||
"parent": null,
|
||||
"resources": [
|
||||
{
|
||||
"attributes": {},
|
||||
"description": "",
|
||||
"metadata": {},
|
||||
"physical_resource_id": "",
|
||||
"properties": {
|
||||
"description": "Ping and SSH",
|
||||
"name": "the_sg",
|
||||
"rules": [
|
||||
{
|
||||
"direction": "ingress",
|
||||
"ethertype": "IPv4",
|
||||
"port_range_max": null,
|
||||
"port_range_min": null,
|
||||
"protocol": "icmp",
|
||||
"remote_group_id": null,
|
||||
"remote_ip_prefix": null,
|
||||
"remote_mode": "remote_ip_prefix"
|
||||
},
|
||||
{
|
||||
"direction": "ingress",
|
||||
"ethertype": "IPv4",
|
||||
"port_range_max": 65535,
|
||||
"port_range_min": 1,
|
||||
"protocol": "tcp",
|
||||
"remote_group_id": null,
|
||||
"remote_ip_prefix": null,
|
||||
"remote_mode": "remote_ip_prefix"
|
||||
},
|
||||
{
|
||||
"direction": "ingress",
|
||||
"ethertype": "IPv4",
|
||||
"port_range_max": 65535,
|
||||
"port_range_min": 1,
|
||||
"protocol": "udp",
|
||||
"remote_group_id": null,
|
||||
"remote_ip_prefix": null,
|
||||
"remote_mode": "remote_ip_prefix"
|
||||
}
|
||||
]
|
||||
},
|
||||
"required_by": [
|
||||
"server1"
|
||||
],
|
||||
"resource_action": "INIT",
|
||||
"resource_identity": {
|
||||
"path": "/resources/the_sg_res",
|
||||
"stack_id": "None",
|
||||
"stack_name": "teststack",
|
||||
"tenant": "6e18cc2bdbeb48a5b3cad2dc499f6804"
|
||||
},
|
||||
"resource_name": "the_sg_res",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "OS::Neutron::SecurityGroup",
|
||||
"stack_identity": {
|
||||
"path": "",
|
||||
"stack_id": "None",
|
||||
"stack_name": "teststack",
|
||||
"tenant": "6e18cc2bdbeb48a5b3cad2dc499f6804"
|
||||
},
|
||||
"stack_name": "teststack",
|
||||
"updated_time": "2015-01-31T15:12:36Z"
|
||||
},
|
||||
{
|
||||
"attributes": {
|
||||
"accessIPv4": "",
|
||||
"accessIPv6": "",
|
||||
"addresses": "",
|
||||
"console_urls": "",
|
||||
"first_address": "",
|
||||
"instance_name": "",
|
||||
"name": "MyServer",
|
||||
"networks": "",
|
||||
"show": ""
|
||||
},
|
||||
"description": "",
|
||||
"metadata": {},
|
||||
"physical_resource_id": "",
|
||||
"properties": {
|
||||
"admin_pass": null,
|
||||
"admin_user": "cloud-user",
|
||||
"availability_zone": null,
|
||||
"block_device_mapping": null,
|
||||
"config_drive": null,
|
||||
"diskConfig": null,
|
||||
"flavor": "m1.small",
|
||||
"flavor_update_policy": "RESIZE",
|
||||
"image": "F20-cfg",
|
||||
"image_update_policy": "REPLACE",
|
||||
"key_name": "heat_key",
|
||||
"metadata": {
|
||||
"ha_stack": "None"
|
||||
},
|
||||
"name": "MyServer",
|
||||
"networks": [
|
||||
{
|
||||
"fixed_ip": null,
|
||||
"network": "private",
|
||||
"port": null,
|
||||
"uuid": null
|
||||
}
|
||||
],
|
||||
"personality": {},
|
||||
"reservation_id": null,
|
||||
"scheduler_hints": null,
|
||||
"security_groups": [
|
||||
"None"
|
||||
],
|
||||
"software_config_transport": "POLL_SERVER_CFN",
|
||||
"user_data": "",
|
||||
"user_data_format": "HEAT_CFNTOOLS"
|
||||
},
|
||||
"required_by": [],
|
||||
"resource_action": "INIT",
|
||||
"resource_identity": {
|
||||
"path": "/resources/hello_world",
|
||||
"stack_id": "None",
|
||||
"stack_name": "teststack",
|
||||
"tenant": "6e18cc2bdbeb48a3433cad2dc499sdf32234"
|
||||
},
|
||||
"resource_name": "hello_world",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "OS::Nova::Server",
|
||||
"stack_identity": {
|
||||
"path": "",
|
||||
"stack_id": "None",
|
||||
"stack_name": "teststack",
|
||||
"tenant": "6e18cc2bdbeb48a3433cad2dc499sdf32234"
|
||||
},
|
||||
"stack_name": "teststack",
|
||||
"updated_time": "2015-01-31T15:12:36Z"
|
||||
}
|
||||
],
|
||||
"stack_name": "test_stack",
|
||||
"stack_owner": "admin",
|
||||
"template_description": "HOT template for Nova Server resource.\n",
|
||||
"timeout_mins": null,
|
||||
"updated_time": null
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"output": {
|
||||
"output_key": "output_name",
|
||||
"output_value": "output_value",
|
||||
"description": "output description",
|
||||
"output_error": null
|
||||
}
|
||||
}
|
32
api-ref/source/v1/samples/stack-show-response.json
Normal file
32
api-ref/source/v1/samples/stack-show-response.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"stack": {
|
||||
"capabilities": [],
|
||||
"creation_time": "2014-06-03T20:59:46Z",
|
||||
"description": "sample stack",
|
||||
"disable_rollback": true,
|
||||
"id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/simple_stack/3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"rel": "self"
|
||||
}
|
||||
],
|
||||
"notification_topics": [],
|
||||
"outputs": [],
|
||||
"parameters": {
|
||||
"OS::project_id": "3ab5b02f-a01f-4f95-afa1-e254afc4a435",
|
||||
"OS::stack_id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"OS::stack_name": "simple_stack"
|
||||
},
|
||||
"stack_name": "simple_stack",
|
||||
"stack_owner": "simple_username",
|
||||
"stack_status": "CREATE_COMPLETE",
|
||||
"stack_status_reason": "Stack CREATE completed successfully",
|
||||
"template_description": "sample stack",
|
||||
"stack_user_project_id": "65728b74-cfe7-4f17-9c15-11d4f686e591",
|
||||
"timeout_mins": "",
|
||||
"updated_time": "",
|
||||
"parent": "",
|
||||
"tags": ""
|
||||
}
|
||||
}
|
47
api-ref/source/v1/samples/stack-show-snapshot-response.json
Normal file
47
api-ref/source/v1/samples/stack-show-snapshot-response.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"snapshot": {
|
||||
"id": "7c4e1ef4-bf1b-41ab-a0c8-ce01f4ffdfa1",
|
||||
"name": "vol_snapshot",
|
||||
"status": "COMPLETE",
|
||||
"status_reason": "Stack SNAPSHOT completed successfully",
|
||||
"creation_time": "2015-08-04T20:57:55Z",
|
||||
"data": {
|
||||
"status": "COMPLETE",
|
||||
"name": "stack_vol1",
|
||||
"stack_user_project_id": "fffa11067b1c48129ddfb78fba2bf09f",
|
||||
"environment": {
|
||||
"parameters": {},
|
||||
"resource_registry": {
|
||||
"resources": {}
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"heat_template_version": "2013-05-23",
|
||||
"resources": {
|
||||
"volume": {
|
||||
"type": "OS::Cinder::Volume",
|
||||
"properties": {
|
||||
"size": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"action": "SNAPSHOT",
|
||||
"project_id": "ecdb08032cd042179692a1b148f6565e",
|
||||
"id": "656452c2-e151-40da-8704-c844e69b485c",
|
||||
"resources": {
|
||||
"volume": {
|
||||
"status": "COMPLETE",
|
||||
"name": "volume",
|
||||
"resource_data": {
|
||||
"backup_id": "99108cf8-398f-461b-a043-bdceb7c9f572"
|
||||
},
|
||||
"resource_id": "3ab8cf79-807b-4c40-b743-0655f91e072f",
|
||||
"action": "SNAPSHOT",
|
||||
"type": "OS::Cinder::Volume",
|
||||
"metadata": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
3
api-ref/source/v1/samples/stack-snapshot-request.json
Normal file
3
api-ref/source/v1/samples/stack-snapshot-request.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"name": "vol_snapshot"
|
||||
}
|
8
api-ref/source/v1/samples/stack-snapshot-response.json
Normal file
8
api-ref/source/v1/samples/stack-snapshot-response.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"id": "13c3a4b5-0585-440e-85a4-6f96b20e7a78",
|
||||
"name": "vol_snapshot",
|
||||
"status": "IN_PROGRESS",
|
||||
"status_reason": null,
|
||||
"data": null,
|
||||
"creation_time": "2015-09-01T20:57:55Z"
|
||||
}
|
12
api-ref/source/v1/samples/stack-snapshots-list-response.json
Normal file
12
api-ref/source/v1/samples/stack-snapshots-list-response.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"snapshots": [
|
||||
{
|
||||
"id": "7c4e1ef4-bf1b-41ab-a0c8-ce01f4ffdfa1",
|
||||
"name": "vol_snapshot",
|
||||
"status": "IN_PROGRESS",
|
||||
"status_reason": null,
|
||||
"creation_time": "2015-08-04T20:57:55Z",
|
||||
"data": null
|
||||
}
|
||||
]
|
||||
}
|
67
api-ref/source/v1/samples/stack-update-preview-response.json
Normal file
67
api-ref/source/v1/samples/stack-update-preview-response.json
Normal file
@ -0,0 +1,67 @@
|
||||
{
|
||||
"unchanged": [
|
||||
{
|
||||
"updated_time": "datetime",
|
||||
"resource_name": "",
|
||||
"physical_resource_id": "{resource id or ''}",
|
||||
"resource_action": "CREATE",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "restype",
|
||||
"stack_identity": "{stack_id}",
|
||||
"stack_name": "{stack_name}"
|
||||
}
|
||||
],
|
||||
"updated": [
|
||||
{
|
||||
"updated_time": "datetime",
|
||||
"resource_name": "",
|
||||
"physical_resource_id": "{resource id or ''}",
|
||||
"resource_action": "CREATE",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "restype",
|
||||
"stack_identity": "{stack_id}",
|
||||
"stack_name": "{stack_name}"
|
||||
}
|
||||
],
|
||||
"replaced": [
|
||||
{
|
||||
"updated_time": "datetime",
|
||||
"resource_name": "",
|
||||
"physical_resource_id": "{resource id or ''}",
|
||||
"resource_action": "CREATE",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "restype",
|
||||
"stack_identity": "{stack_id}",
|
||||
"stack_name": "{stack_name}"
|
||||
}
|
||||
],
|
||||
"added": [
|
||||
{
|
||||
"updated_time": "datetime",
|
||||
"resource_name": "",
|
||||
"physical_resource_id": "{resource id or ''}",
|
||||
"resource_action": "CREATE",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "restype",
|
||||
"stack_identity": "{stack_id}",
|
||||
"stack_name": "{stack_name}"
|
||||
}
|
||||
],
|
||||
"deleted": [
|
||||
{
|
||||
"updated_time": "datetime",
|
||||
"resource_name": "",
|
||||
"physical_resource_id": "{resource id or ''}",
|
||||
"resource_action": "CREATE",
|
||||
"resource_status": "COMPLETE",
|
||||
"resource_status_reason": "",
|
||||
"resource_type": "restype",
|
||||
"stack_identity": "{stack_id}",
|
||||
"stack_name": "{stack_name}"
|
||||
}
|
||||
]
|
||||
}
|
28
api-ref/source/v1/samples/stack-update-request.json
Normal file
28
api-ref/source/v1/samples/stack-update-request.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"template": {
|
||||
"heat_template_version": "2013-05-23",
|
||||
"description": "Create a simple stack",
|
||||
"parameters": {
|
||||
"flavor": {
|
||||
"default": "m1.tiny",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"hello_world": {
|
||||
"type": "OS::Nova::Server",
|
||||
"properties": {
|
||||
"key_name": "heat_key",
|
||||
"flavor": {
|
||||
"get_param": "flavor"
|
||||
},
|
||||
"image": "40be8d1a-3eb9-40de-8abd-43237517384f",
|
||||
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": {
|
||||
"flavor": "m1.small"
|
||||
}
|
||||
}
|
20
api-ref/source/v1/samples/stacks-list-response.json
Normal file
20
api-ref/source/v1/samples/stacks-list-response.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"stacks": [
|
||||
{
|
||||
"creation_time": "2014-06-03T20:59:46Z",
|
||||
"description": "sample stack",
|
||||
"id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/simple_stack/3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
||||
"rel": "self"
|
||||
}
|
||||
],
|
||||
"stack_name": "simple_stack",
|
||||
"stack_status": "CREATE_COMPLETE",
|
||||
"stack_status_reason": "Stack CREATE completed successfully",
|
||||
"updated_time": "",
|
||||
"tags": ""
|
||||
}
|
||||
]
|
||||
}
|
28
api-ref/source/v1/samples/template-show-response.json
Normal file
28
api-ref/source/v1/samples/template-show-response.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"description": "Hello world HOT template that just defines a single server. Contains just base features to verify base HOT support.\n",
|
||||
"heat_template_version": "2013-05-23",
|
||||
"outputs": {
|
||||
"foo": {
|
||||
"description": "Show foo parameter value",
|
||||
"value": {
|
||||
"get_param": "foo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": {
|
||||
"foo": {
|
||||
"default": "secret",
|
||||
"description": "Name of an existing key pair to use for the server",
|
||||
"hidden": true,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"random_key_name": {
|
||||
"properties": {
|
||||
"length": 8
|
||||
},
|
||||
"type": "OS::Heat::RandomString"
|
||||
}
|
||||
}
|
||||
}
|
3
api-ref/source/v1/samples/template-validate-request.json
Normal file
3
api-ref/source/v1/samples/template-validate-request.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"template_url": "/PATH_TO_HEAT_TEMPLATES/WordPress_Single_Instance.template"
|
||||
}
|
41
api-ref/source/v1/samples/template-validate-response.json
Normal file
41
api-ref/source/v1/samples/template-validate-response.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"Description": "A template that provides a single server instance.",
|
||||
"Parameters": {
|
||||
"server-size": {
|
||||
"default": "1GB Standard Instance",
|
||||
"description": "Server size",
|
||||
"type": "String",
|
||||
"constraints": [
|
||||
{
|
||||
"allowed_values": [
|
||||
"512MB Standard Instance",
|
||||
"1GB Standard Instance",
|
||||
"4GB Standard Instance",
|
||||
"8GB Standard Instance"
|
||||
],
|
||||
"description": "Must be a valid server size."
|
||||
}
|
||||
]
|
||||
},
|
||||
"key_name": {
|
||||
"description": "Keypair name for SSH access to the server",
|
||||
"required": true,
|
||||
"type": "String"
|
||||
},
|
||||
"server_name": {
|
||||
"default": "My server",
|
||||
"description": "My server",
|
||||
"type": "String"
|
||||
}
|
||||
},
|
||||
"ParameterGroups": [
|
||||
{
|
||||
"label": "Parameter groups",
|
||||
"description": "My parameter groups",
|
||||
"parameters": [
|
||||
"param_name-1",
|
||||
"param_name-2"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
32
api-ref/source/v1/samples/template-versions-response.json
Normal file
32
api-ref/source/v1/samples/template-versions-response.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"template_versions": [
|
||||
{
|
||||
"version": "heat_template_version.2014-10-16",
|
||||
"type": "hot"
|
||||
},
|
||||
{
|
||||
"version": "heat_template_version.2015-04-30",
|
||||
"type": "hot"
|
||||
},
|
||||
{
|
||||
"version": "HeatTemplateFormatVersion.2012-12-12",
|
||||
"type": "cfn"
|
||||
},
|
||||
{
|
||||
"version": "heat_template_version.2015-10-15",
|
||||
"type": "hot"
|
||||
},
|
||||
{
|
||||
"version": "AWSTemplateFormatVersion.2010-09-09",
|
||||
"type": "cfn"
|
||||
},
|
||||
{
|
||||
"version": "heat_template_version.2013-05-23",
|
||||
"type": "hot"
|
||||
},
|
||||
{
|
||||
"version": "heat_template_version.2016-04-08",
|
||||
"type": "hot"
|
||||
}
|
||||
]
|
||||
}
|
67
api-ref/source/v1/service-status.inc
Normal file
67
api-ref/source/v1/service-status.inc
Normal file
@ -0,0 +1,67 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
==============
|
||||
Manage service
|
||||
==============
|
||||
|
||||
|
||||
|
||||
|
||||
Show orchestration engine status
|
||||
================================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/services
|
||||
|
||||
Enables administrative users to view details for all orchestration engines.
|
||||
|
||||
Orchestration engine details include ``engine_id``, topic name,
|
||||
last updated time, health status, and host name.
|
||||
|
||||
Troubleshooting
|
||||
|
||||
- A ``503`` error code indicates that the heat engines are not
|
||||
operational. Run the heat-manage service list command or contact
|
||||
your cloud provider to determine why the heat engines are not
|
||||
operational.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:403,503,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- binary: binary
|
||||
- report_interval: report_interval
|
||||
- created_at: created_at
|
||||
- hostname: hostname
|
||||
- updated_at: updated_at
|
||||
- topic: topic
|
||||
- services: services
|
||||
- deleted_at: deleted_at
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/services-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
416
api-ref/source/v1/software-config.inc
Normal file
416
api-ref/source/v1/software-config.inc
Normal file
@ -0,0 +1,416 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
======================
|
||||
Software configuration
|
||||
======================
|
||||
|
||||
|
||||
|
||||
|
||||
List deployments
|
||||
================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/software_deployments
|
||||
|
||||
Lists all available software deployments.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- server_id: server_id
|
||||
- config_id: config_id
|
||||
- output_values: output_values
|
||||
- creation_time: creation_time
|
||||
- updated_at: updated_at
|
||||
- input_values: input_values
|
||||
- action: action
|
||||
- status_reason: status_reason
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/deployments-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Create deployment
|
||||
=================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/software_deployments
|
||||
|
||||
Creates a software deployment.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- server_id: server_id
|
||||
- config_id: config_id
|
||||
- stack_user_project_id: stack_user_project_id
|
||||
- action: action
|
||||
- status_reason: status_reason
|
||||
- tenant_id: tenant_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/deployment-create-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- server_id: server_id
|
||||
- config_id: config_id
|
||||
- output_values: output_values
|
||||
- creation_time: creation_time
|
||||
- updated_at: updated_at
|
||||
- input_values: input_values
|
||||
- action: action
|
||||
- status_reason: status_reason
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/deployment-create-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Show server configuration metadata
|
||||
==================================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/software_deployments/metadata/{server_id}
|
||||
|
||||
Shows the deployment configuration metadata for a server.
|
||||
|
||||
Use the ``group`` property to specify the configuration hook to
|
||||
which the pass the metadata item.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- server_id: server_id
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/deployment-metadata-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Create configuration
|
||||
====================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/software_configs
|
||||
|
||||
Creates a software configuration.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- inputs: inputs
|
||||
- group: group
|
||||
- name: name
|
||||
- outputs: outputs
|
||||
- config: config
|
||||
- options: options
|
||||
- tenant_id: tenant_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/config-create-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- inputs: inputs
|
||||
- group: group
|
||||
- name: name
|
||||
- outputs: outputs
|
||||
- creation_time: creation_time
|
||||
- config: config
|
||||
- options: options
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/config-create-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Show deployment details
|
||||
=======================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/software_deployments/{deployment_id}
|
||||
|
||||
Shows details for a software deployment.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- deployment_id: deployment_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- server_id: server_id
|
||||
- config_id: config_id
|
||||
- output_values: output_values
|
||||
- creation_time: creation_time
|
||||
- updated_at: updated_at
|
||||
- input_values: input_values
|
||||
- action: action
|
||||
- status_reason: status_reason
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/deployment-show-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Update deployment
|
||||
=================
|
||||
|
||||
.. rest_method:: PUT /v1/{tenant_id}/software_deployments/{deployment_id}
|
||||
|
||||
Updates a software deployment.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- action: action
|
||||
- output_values: output_values
|
||||
- config_id: config_id
|
||||
- status: status
|
||||
- status_reason: status_reason
|
||||
- tenant_id: tenant_id
|
||||
- deployment_id: deployment_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/deployment-update-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- server_id: server_id
|
||||
- config_id: config_id
|
||||
- output_values: output_values
|
||||
- creation_time: creation_time
|
||||
- updated_at: updated_at
|
||||
- input_values: input_values
|
||||
- action: action
|
||||
- status_reason: status_reason
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/deployment-update-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Delete deployment
|
||||
=================
|
||||
|
||||
.. rest_method:: DELETE /v1/{tenant_id}/software_deployments/{deployment_id}
|
||||
|
||||
Deletes a software deployment.
|
||||
|
||||
Error response codes:204,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- deployment_id: deployment_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Show configuration details
|
||||
==========================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/software_configs/{config_id}
|
||||
|
||||
Shows details for a software configuration.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- config_id: config_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- inputs: inputs
|
||||
- group: group
|
||||
- name: name
|
||||
- outputs: outputs
|
||||
- creation_time: creation_time
|
||||
- config: config
|
||||
- options: options
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/config-show-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Delete config
|
||||
=============
|
||||
|
||||
.. rest_method:: DELETE /v1/{tenant_id}/software_configs/{config_id}
|
||||
|
||||
Deletes a software configuration.
|
||||
|
||||
Error response codes:204,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- config_id: config_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
173
api-ref/source/v1/stack-actions.inc
Normal file
173
api-ref/source/v1/stack-actions.inc
Normal file
@ -0,0 +1,173 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=============
|
||||
Stack actions
|
||||
=============
|
||||
|
||||
Performs non-lifecycle operations on the stack. Specify the action
|
||||
in the request body.
|
||||
|
||||
|
||||
Suspend stack
|
||||
=============
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions
|
||||
|
||||
Suspends a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- suspend: suspend
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-action-suspend-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude::
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Resume stack
|
||||
============
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions
|
||||
|
||||
Resumes a suspended stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resume: resume
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-action-resume-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude::
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Cancel stack update
|
||||
===================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions
|
||||
|
||||
Cancels a currently running update of a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- cancel_update: cancel_update
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-action-cancel-update-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude::
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Check stack resources
|
||||
=====================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions
|
||||
|
||||
Checks whether the resources are in expected states for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- check: check
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-action-check-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude::
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
155
api-ref/source/v1/stack-events.inc
Normal file
155
api-ref/source/v1/stack-events.inc
Normal file
@ -0,0 +1,155 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
============
|
||||
Stack events
|
||||
============
|
||||
|
||||
|
||||
|
||||
|
||||
Show event details
|
||||
==================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/events/{event_id}
|
||||
|
||||
Shows details for an event.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- event_id: event_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/event-show-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Find stack events
|
||||
=================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/events
|
||||
|
||||
Finds the canonical URL for the event list of a stack.
|
||||
|
||||
Error response codes:302,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List stack events
|
||||
=================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/events
|
||||
|
||||
Lists events for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- resource_action: resource_action
|
||||
- resource_status: resource_status
|
||||
- resource_name: resource_name
|
||||
- resource_type: resource_type
|
||||
- limit: limit
|
||||
- marker: marker
|
||||
- sort_keys: sort_keys
|
||||
- sort_dir: sort_dir
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/events-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List resource events
|
||||
====================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/events
|
||||
|
||||
Lists events for a stack resource.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- resource_action: resource_action
|
||||
- resource_status: resource_status
|
||||
- resource_type: resource_type
|
||||
- limit: limit
|
||||
- marker: marker
|
||||
- sort_keys: sort_keys
|
||||
- sort_dir: sort_dir
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/events-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
191
api-ref/source/v1/stack-resources.inc
Normal file
191
api-ref/source/v1/stack-resources.inc
Normal file
@ -0,0 +1,191 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
===============
|
||||
Stack resources
|
||||
===============
|
||||
|
||||
|
||||
|
||||
|
||||
Show resource metadata
|
||||
======================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/metadata
|
||||
|
||||
Shows metadata for a resource.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/resource-metadata-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Show resource data
|
||||
==================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}
|
||||
|
||||
Shows data for a resource.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- resource: resource
|
||||
- description: description
|
||||
- logical_resource_id: logical_resource_id
|
||||
- creation_time: creation_time
|
||||
- resource_status: resource_status
|
||||
- updated_time: updated_time
|
||||
- required_by: required_by
|
||||
- resource_status_reason: resource_status_reason
|
||||
- physical_resource_id: physical_resource_id
|
||||
- resource_type: resource_type
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/resource-show-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List resources
|
||||
==============
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources
|
||||
|
||||
Lists resources in a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- nested_depth: nested_depth
|
||||
- with_detail: with_detail
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- description: description
|
||||
- logical_resource_id: logical_resource_id
|
||||
- creation_time: creation_time
|
||||
- resource_status: resource_status
|
||||
- updated_time: updated_time
|
||||
- required_by: required_by
|
||||
- resources: resources
|
||||
- resource_status_reason: resource_status_reason
|
||||
- physical_resource_id: physical_resource_id
|
||||
- resource_type: resource_type
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/resources-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Send a signal to a resource
|
||||
===========================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/signal
|
||||
|
||||
Sends a signal to a resource.
|
||||
|
||||
The contents of the request body depends on the resource to which
|
||||
you send a signal.
|
||||
|
||||
Some resources cannot receive signals. If you send them a signal,
|
||||
they return a 400 error code.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- resource_name: resource_name
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude::
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
300
api-ref/source/v1/stack-templates.inc
Normal file
300
api-ref/source/v1/stack-templates.inc
Normal file
@ -0,0 +1,300 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=========
|
||||
Templates
|
||||
=========
|
||||
|
||||
|
||||
|
||||
|
||||
List resource types
|
||||
===================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/resource_types
|
||||
|
||||
Lists all supported template resource types.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- name: name
|
||||
- version: version
|
||||
- support_status: support_status
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- template_versions: template_versions
|
||||
- type: type
|
||||
- version: version
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/resource-types-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List template versions
|
||||
======================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/template_versions
|
||||
|
||||
Lists all available template versions.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/template-versions-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Validate template
|
||||
=================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/validate
|
||||
|
||||
Validates a template.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- environment: environment
|
||||
- template_url: template_url
|
||||
- template: template
|
||||
- tenant_id: tenant_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/template-validate-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- ParameterGroups: ParameterGroups
|
||||
- Description: Description
|
||||
- Parameters: Parameters
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/template-validate-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Show resource template
|
||||
======================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/resource_types/{type_name}/template
|
||||
|
||||
Shows the template representation for a resource type.
|
||||
|
||||
The returned template contains a single resource type. Each
|
||||
resource property is mapped to a template parameter and each
|
||||
resource attribute is mapped to a template output.
|
||||
|
||||
You can use these templates as a starting place for creating
|
||||
customized, template-based resources or as examples of using the
|
||||
particular resource in another template.
|
||||
|
||||
Use the ``template_type`` query parameter to specify the resource
|
||||
template type. Default type is ``cfn``. The ``hot`` template type
|
||||
is supported. For example:
|
||||
|
||||
::
|
||||
|
||||
/v1/{tenant_id}/resource_types/{type_name}/template?template_type=cfn
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- type_name: type_name
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- Outputs: Outputs
|
||||
- HeatTemplateFormatVersion: HeatTemplateFormatVersion
|
||||
- Resources: Resources
|
||||
- Parameters: Parameters
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/resource-type-template-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Get stack template
|
||||
==================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/template
|
||||
|
||||
Gets a template for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- outputs: outputs
|
||||
- heat_template_version: heat_template_version
|
||||
- description: description
|
||||
- parameters: parameters
|
||||
- resources: resources
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/template-show-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Show resource schema
|
||||
====================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/resource_types/{type_name}
|
||||
|
||||
Shows the interface schema for a resource type.
|
||||
|
||||
A schema describes the properties that can be set on the resource,
|
||||
their types, constraints, descriptions, and default values.
|
||||
Additionally, the response shows the resource attributes and their
|
||||
descriptions.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- type_name: type_name
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- description: description
|
||||
- required: required
|
||||
- update_allowed: update_allowed
|
||||
- support_status: support_status
|
||||
- attributes: attributes
|
||||
- type: type
|
||||
- properties: properties
|
||||
- resource_type: resource_type
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/resource-schema-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
818
api-ref/source/v1/stacks.inc
Normal file
818
api-ref/source/v1/stacks.inc
Normal file
@ -0,0 +1,818 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
======
|
||||
Stacks
|
||||
======
|
||||
|
||||
|
||||
|
||||
|
||||
Abandon stack
|
||||
=============
|
||||
|
||||
.. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/abandon
|
||||
|
||||
Deletes a stack but leaves its resources intact, and returns data that describes the stack and its resources.
|
||||
|
||||
This method can be disabled from the server side. If it is
|
||||
disabled, this call throws an exception.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-abandon-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Show snapshot
|
||||
=============
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}
|
||||
|
||||
Shows details for a snapshot.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- snapshot_id: snapshot_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- name: name
|
||||
- status_reason: status_reason
|
||||
- creation_time: creation_time
|
||||
- snapshot: snapshot
|
||||
- template: template
|
||||
- project_id: project_id
|
||||
- data: data
|
||||
- id: id
|
||||
- resources: resources
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-show-snapshot-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Delete snapshot
|
||||
===============
|
||||
|
||||
.. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}
|
||||
|
||||
Deletes a stack snapshot.
|
||||
|
||||
Error response codes:204,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- snapshot_id: snapshot_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Preview stack
|
||||
=============
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/preview
|
||||
|
||||
Previews a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:500,409,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- files: files
|
||||
- stack_name: stack_name
|
||||
- template_url: template_url
|
||||
- template: template
|
||||
- parameters: parameters
|
||||
- tenant_id: tenant_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-create-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- parent: parent
|
||||
- disable_rollback: disable_rollback
|
||||
- description: description
|
||||
- links: links
|
||||
- stack_name: stack_name
|
||||
- timeout_mins: timeout_mins
|
||||
- creation_time: creation_time
|
||||
- capabilities: capabilities
|
||||
- notification_topics: notification_topics
|
||||
- updated_time: updated_time
|
||||
- stack_owner: stack_owner
|
||||
- stack: stack
|
||||
- parameters: parameters
|
||||
- id: id
|
||||
- resources: resources
|
||||
- template_description: template_description
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-preview-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Restore snapshot
|
||||
================
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}/restore
|
||||
|
||||
Restores a stack snapshot.
|
||||
|
||||
You can restore only active stacks from a snapshot. You must
|
||||
recreate deleted stacks.
|
||||
|
||||
Error response codes:202,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- snapshot_id: snapshot_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List outputs
|
||||
============
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs
|
||||
|
||||
Lists outputs for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- output_value: output_value
|
||||
- output_error: output_error
|
||||
- description: description
|
||||
- output_key: output_key
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-outputs-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Preview stack update
|
||||
====================
|
||||
|
||||
.. rest_method:: PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/preview
|
||||
|
||||
Previews an update for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- files: files
|
||||
- parameters: parameters
|
||||
- tags: tags
|
||||
- environment: environment
|
||||
- template_url: template_url
|
||||
- template: template
|
||||
- timeout_mins: timeout_mins
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-update-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-update-preview-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
Find stack resources
|
||||
====================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/resources
|
||||
|
||||
Finds the canonical URL for a resource list of a stack.
|
||||
|
||||
The canonical URL is returned for only non-deleted stacks. To fetch
|
||||
the resource list for deleted stacks, use the following endpoint:
|
||||
|
||||
::
|
||||
|
||||
/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources
|
||||
|
||||
Error response codes:302,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Show stack details
|
||||
==================
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}
|
||||
|
||||
Shows details for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- parent: parent
|
||||
- updated_time: updated_time
|
||||
- description: description
|
||||
- links: links
|
||||
- stack_status_reason: stack_status_reason
|
||||
- stack_name: stack_name
|
||||
- outputs: outputs
|
||||
- tags: tags
|
||||
- creation_time: creation_time
|
||||
- capabilities: capabilities
|
||||
- notification_topics: notification_topics
|
||||
- timeout_mins: timeout_mins
|
||||
- stack_owner: stack_owner
|
||||
- stack_status: stack_status
|
||||
- stack: stack
|
||||
- parameters: parameters
|
||||
- id: id
|
||||
- stack_user_project_id: stack_user_project_id
|
||||
- template_description: template_description
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-show-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Update stack
|
||||
============
|
||||
|
||||
.. rest_method:: PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id}
|
||||
|
||||
Updates a stack.
|
||||
|
||||
Error response codes:404,202,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- files: files
|
||||
- disable_rollback: disable_rollback
|
||||
- parameters: parameters
|
||||
- tags: tags
|
||||
- environment: environment
|
||||
- template_url: template_url
|
||||
- template: template
|
||||
- timeout_mins: timeout_mins
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-update-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Delete stack
|
||||
============
|
||||
|
||||
.. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}
|
||||
|
||||
Deletes a stack and its snapshots.
|
||||
|
||||
Error response codes:500,404,204,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Show output
|
||||
===========
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs/{output_key}
|
||||
|
||||
Shows details for a stack output.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
- output_key: output_key
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- output_value: output_value
|
||||
- output_error: output_error
|
||||
- description: description
|
||||
- output_key: output_key
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-show-output-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
List stack data
|
||||
===============
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks
|
||||
|
||||
Lists active stacks.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- tenant_id: tenant_id
|
||||
- id: id
|
||||
- status: status
|
||||
- name: name
|
||||
- action: action
|
||||
- tenant: tenant
|
||||
- username: username
|
||||
- owner_id: owner_id
|
||||
- limit: limit
|
||||
- marker: marker
|
||||
- show_deleted: show_deleted
|
||||
- show_nested: show_nested
|
||||
- sort_keys: sort_keys
|
||||
- tags: tags
|
||||
- tags_any: tags_any
|
||||
- not_tags: not_tags
|
||||
- not_tags_any: not_tags_any
|
||||
- sort_dir: sort_dir
|
||||
- global_tenant: global_tenant
|
||||
- with_count: with_count
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- description: description
|
||||
- links: links
|
||||
- stack_status_reason: stack_status_reason
|
||||
- stack_name: stack_name
|
||||
- tags: tags
|
||||
- creation_time: creation_time
|
||||
- updated_time: updated_time
|
||||
- stack_status: stack_status
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stacks-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Create stack
|
||||
============
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks
|
||||
|
||||
Creates a stack.
|
||||
|
||||
Error response codes:201,500,409,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- files: files
|
||||
- disable_rollback: disable_rollback
|
||||
- parameters: parameters
|
||||
- tags: tags
|
||||
- stack_name: stack_name
|
||||
- environment: environment
|
||||
- template_url: template_url
|
||||
- template: template
|
||||
- timeout_mins: timeout_mins
|
||||
- tenant_id: tenant_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-create-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- links: links
|
||||
- stack: stack
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Adopt stack
|
||||
===========
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks
|
||||
|
||||
Creates a stack from existing resources.
|
||||
|
||||
Error response codes:201,500,409,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- files: files
|
||||
- disable_rollback: disable_rollback
|
||||
- parameters: parameters
|
||||
- stack_name: stack_name
|
||||
- adopt_stack_data: adopt_stack_data
|
||||
- environment: environment
|
||||
- timeout_mins: timeout_mins
|
||||
- tenant_id: tenant_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-adopt-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- links: links
|
||||
- stack: stack
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Find stack
|
||||
==========
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}
|
||||
|
||||
Finds the canonical URL for a stack.
|
||||
|
||||
Also works with verbs other than GET , so that you can perform PUT
|
||||
and DELETE operations on a current stack. Set your client to follow
|
||||
redirects. When redirecting, the request method should not change
|
||||
as defined in RFC2626. However, in many clients the default
|
||||
behavior is to change the method to GET when you receive a ``302``
|
||||
response code because this behavior is ubiquitous in web browsers.
|
||||
|
||||
Error response codes:302,404,500,401,400,
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Snapshot stack
|
||||
==============
|
||||
|
||||
.. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots
|
||||
|
||||
Takes a snapshot of all resources in a stack. All snapshots are deleted when the stack is deleted.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- name: name
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/stack-snapshot-request.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- name: name
|
||||
- status_reason: status_reason
|
||||
- creation_time: creation_time
|
||||
- data: data
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-snapshot-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
||||
|
||||
List snapshots
|
||||
==============
|
||||
|
||||
.. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots
|
||||
|
||||
Lists snapshots for a stack.
|
||||
|
||||
|
||||
Normal response codes: 200
|
||||
Error response codes:
|
||||
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- stack_name: stack_name
|
||||
- tenant_id: tenant_id
|
||||
- stack_id: stack_id
|
||||
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- status: status
|
||||
- name: name
|
||||
- status_reason: status_reason
|
||||
- creation_time: creation_time
|
||||
- snapshots: snapshots
|
||||
- data: data
|
||||
- id: id
|
||||
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/stack-snapshots-list-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
|
18
tox.ini
18
tox.ini
@ -54,6 +54,24 @@ deps = -r{toxinidir}/requirements.txt
|
||||
sphinxcontrib-httpdomain
|
||||
commands = python setup.py build_sphinx
|
||||
|
||||
[testenv:api-ref]
|
||||
# This environment is called from CI scripts to test and publish
|
||||
# the API Ref to developer.openstack.org.
|
||||
#
|
||||
# NOTE(sdague): this target does not use constraints because
|
||||
# upstream infra does not yet support it. Once that's fixed, we can
|
||||
# drop the install_command.
|
||||
#
|
||||
# we do not used -W here because we are doing some slightly tricky
|
||||
# things to build a single page document, and as such, we are ok
|
||||
# ignoring the duplicate stanzas warning.
|
||||
whitelist_externals = bash
|
||||
rm
|
||||
install_command = pip install -U --force-reinstall {opts} {packages}
|
||||
commands =
|
||||
rm -rf api-ref/build
|
||||
sphinx-build -b html -d api-ref/build/doctrees api-ref/source api-ref/build/html
|
||||
|
||||
[testenv:genconfig]
|
||||
commands =
|
||||
oslo-config-generator --config-file=config-generator.conf
|
||||
|
Loading…
x
Reference in New Issue
Block a user