Replace support matrix ext with common library
The code to generate a support matrix has been pulled into a common library. Using this instead of duplicating code in various projects that need it. Change-Id: If01e440225fec2206e934ae7b0c6c2dce1266eab Co-Authored-By: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
committed by
Stephen Finucane
parent
b0256a71b2
commit
124e52062a
@@ -1,518 +0,0 @@
|
|||||||
# Copyright (C) 2014 Red Hat, Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""
|
|
||||||
This provides a sphinx extension able to render the source/support-matrix.ini
|
|
||||||
file into the developer documentation.
|
|
||||||
|
|
||||||
It is used via a single directive in the .rst file
|
|
||||||
|
|
||||||
.. support_matrix::
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
import six
|
|
||||||
from six.moves import configparser
|
|
||||||
|
|
||||||
from docutils import nodes
|
|
||||||
from docutils.parsers import rst
|
|
||||||
|
|
||||||
|
|
||||||
class SupportMatrix(object):
|
|
||||||
"""Represents the entire support matrix for Nova virt drivers
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
# List of SupportMatrixFeature instances, describing
|
|
||||||
# all the features present in Nova virt drivers
|
|
||||||
self.features = []
|
|
||||||
|
|
||||||
# Dict of (name, SupportMatrixTarget) enumerating
|
|
||||||
# all the hypervisor drivers that have data recorded
|
|
||||||
# for them in self.features. The 'name' dict key is
|
|
||||||
# the value from the SupportMatrixTarget.key attribute
|
|
||||||
self.targets = {}
|
|
||||||
|
|
||||||
|
|
||||||
class SupportMatrixFeature(object):
|
|
||||||
|
|
||||||
STATUS_MANDATORY = "mandatory"
|
|
||||||
STATUS_CHOICE = "choice"
|
|
||||||
STATUS_CONDITION = "condition"
|
|
||||||
STATUS_OPTIONAL = "optional"
|
|
||||||
|
|
||||||
STATUS_ALL = [STATUS_MANDATORY, STATUS_CHOICE,
|
|
||||||
STATUS_CONDITION, STATUS_OPTIONAL]
|
|
||||||
|
|
||||||
def __init__(self, key, title, status=STATUS_OPTIONAL,
|
|
||||||
group=None, notes=None, cli=[]):
|
|
||||||
# A unique key (eg 'foo.bar.wizz') to identify the feature
|
|
||||||
self.key = key
|
|
||||||
# A human friendly short title for the feature
|
|
||||||
self.title = title
|
|
||||||
# One of the status constants
|
|
||||||
self.status = status
|
|
||||||
# Detail string if status was choice/condition
|
|
||||||
self.group = group
|
|
||||||
# Arbitrarily long string describing the feature in detail
|
|
||||||
self.notes = notes
|
|
||||||
# Dict of (name, SupportMatrixImplementation) detailing
|
|
||||||
# the implementation for each hypervisor driver. The
|
|
||||||
# 'name' dict key is the value from SupportMatrixTarget.key
|
|
||||||
# for the hypervisor in question
|
|
||||||
self.implementations = {}
|
|
||||||
# A list of CLI commands which are related to that feature
|
|
||||||
self.cli = cli
|
|
||||||
|
|
||||||
|
|
||||||
class SupportMatrixImplementation(object):
|
|
||||||
|
|
||||||
STATUS_COMPLETE = "complete"
|
|
||||||
STATUS_PARTIAL = "partial"
|
|
||||||
STATUS_MISSING = "missing"
|
|
||||||
STATUS_UKNOWN = "unknown"
|
|
||||||
|
|
||||||
STATUS_ALL = [STATUS_COMPLETE, STATUS_PARTIAL, STATUS_MISSING,
|
|
||||||
STATUS_UKNOWN]
|
|
||||||
|
|
||||||
def __init__(self, status=STATUS_MISSING, notes=None):
|
|
||||||
# One of the status constants detailing the implementation
|
|
||||||
# level
|
|
||||||
self.status = status
|
|
||||||
# Arbitrary string describing any caveats of the implementation.
|
|
||||||
# Mandatory if status is 'partial', optional otherwise.
|
|
||||||
self.notes = notes
|
|
||||||
|
|
||||||
|
|
||||||
class SupportMatrixTarget(object):
|
|
||||||
|
|
||||||
def __init__(self, key, title, driver, hypervisor=None, architecture=None):
|
|
||||||
""":param key: Unique identifier for the hypervisor driver
|
|
||||||
:param title: Human friendly name of the hypervisor
|
|
||||||
:param driver: Name of the Nova driver
|
|
||||||
:param hypervisor: (optional) Name of the hypervisor, if many
|
|
||||||
:param architecture: (optional) Name of the architecture, if many
|
|
||||||
"""
|
|
||||||
self.key = key
|
|
||||||
self.title = title
|
|
||||||
self.driver = driver
|
|
||||||
self.hypervisor = hypervisor
|
|
||||||
self.architecture = architecture
|
|
||||||
|
|
||||||
|
|
||||||
class SupportMatrixDirective(rst.Directive):
|
|
||||||
|
|
||||||
# The argument is the filename, e.g. support-matrix.ini
|
|
||||||
required_arguments = 1
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
matrix = self._load_support_matrix()
|
|
||||||
return self._build_markup(matrix)
|
|
||||||
|
|
||||||
def _load_support_matrix(self):
|
|
||||||
"""Reads the support-matrix.ini file and populates an instance
|
|
||||||
of the SupportMatrix class with all the data.
|
|
||||||
|
|
||||||
:returns: SupportMatrix instance
|
|
||||||
"""
|
|
||||||
if six.PY3:
|
|
||||||
cfg = configparser.ConfigParser()
|
|
||||||
else:
|
|
||||||
cfg = configparser.SafeConfigParser()
|
|
||||||
env = self.state.document.settings.env
|
|
||||||
fname = self.arguments[0]
|
|
||||||
rel_fpath, fpath = env.relfn2path(fname)
|
|
||||||
with open(fpath) as fp:
|
|
||||||
cfg.readfp(fp)
|
|
||||||
|
|
||||||
# This ensures that the docs are rebuilt whenever the
|
|
||||||
# .ini file changes
|
|
||||||
env.note_dependency(rel_fpath)
|
|
||||||
|
|
||||||
matrix = SupportMatrix()
|
|
||||||
matrix.targets = self._get_targets(cfg)
|
|
||||||
matrix.features = self._get_features(cfg, matrix.targets)
|
|
||||||
|
|
||||||
return matrix
|
|
||||||
|
|
||||||
def _get_targets(self, cfg):
|
|
||||||
# The 'targets' section is special - it lists all the
|
|
||||||
# hypervisors that this file records data for
|
|
||||||
|
|
||||||
targets = {}
|
|
||||||
|
|
||||||
for item in cfg.options("targets"):
|
|
||||||
if not item.startswith("driver-impl-"):
|
|
||||||
continue
|
|
||||||
|
|
||||||
# The driver string will optionally contain
|
|
||||||
# a hypervisor and architecture qualifier
|
|
||||||
# so we expect between 1 and 3 components
|
|
||||||
# in the name
|
|
||||||
key = item[12:]
|
|
||||||
title = cfg.get("targets", item)
|
|
||||||
name = key.split("-")
|
|
||||||
if len(name) == 1:
|
|
||||||
target = SupportMatrixTarget(key,
|
|
||||||
title,
|
|
||||||
name[0])
|
|
||||||
elif len(name) == 2:
|
|
||||||
target = SupportMatrixTarget(key,
|
|
||||||
title,
|
|
||||||
name[0],
|
|
||||||
name[1])
|
|
||||||
elif len(name) == 3:
|
|
||||||
target = SupportMatrixTarget(key,
|
|
||||||
title,
|
|
||||||
name[0],
|
|
||||||
name[1],
|
|
||||||
name[2])
|
|
||||||
else:
|
|
||||||
raise Exception("'%s' field is malformed in '[%s]' section" %
|
|
||||||
(item, "DEFAULT"))
|
|
||||||
|
|
||||||
targets[key] = target
|
|
||||||
|
|
||||||
return targets
|
|
||||||
|
|
||||||
def _get_features(self, cfg, targets):
|
|
||||||
# All sections except 'targets' describe some feature of
|
|
||||||
# the Nova hypervisor driver implementation
|
|
||||||
|
|
||||||
features = []
|
|
||||||
|
|
||||||
for section in cfg.sections():
|
|
||||||
if section == "targets":
|
|
||||||
continue
|
|
||||||
if not cfg.has_option(section, "title"):
|
|
||||||
raise Exception(
|
|
||||||
"'title' field missing in '[%s]' section" % section)
|
|
||||||
|
|
||||||
title = cfg.get(section, "title")
|
|
||||||
|
|
||||||
status = SupportMatrixFeature.STATUS_OPTIONAL
|
|
||||||
if cfg.has_option(section, "status"):
|
|
||||||
# The value is a string "status(group)" where
|
|
||||||
# the 'group' part is optional
|
|
||||||
status = cfg.get(section, "status")
|
|
||||||
offset = status.find("(")
|
|
||||||
group = None
|
|
||||||
if offset != -1:
|
|
||||||
group = status[offset + 1:-1]
|
|
||||||
status = status[0:offset]
|
|
||||||
|
|
||||||
if status not in SupportMatrixFeature.STATUS_ALL:
|
|
||||||
raise Exception(
|
|
||||||
"'status' field value '%s' in ['%s']"
|
|
||||||
"section must be %s" %
|
|
||||||
(status, section,
|
|
||||||
",".join(SupportMatrixFeature.STATUS_ALL)))
|
|
||||||
|
|
||||||
notes = None
|
|
||||||
if cfg.has_option(section, "notes"):
|
|
||||||
notes = cfg.get(section, "notes")
|
|
||||||
cli = []
|
|
||||||
if cfg.has_option(section, "cli"):
|
|
||||||
cli = cfg.get(section, "cli")
|
|
||||||
feature = SupportMatrixFeature(section,
|
|
||||||
title,
|
|
||||||
status,
|
|
||||||
group,
|
|
||||||
notes,
|
|
||||||
cli)
|
|
||||||
|
|
||||||
# Now we've got the basic feature details, we must process
|
|
||||||
# the hypervisor driver implementation for each feature
|
|
||||||
for item in cfg.options(section):
|
|
||||||
if not item.startswith("driver-impl-"):
|
|
||||||
continue
|
|
||||||
|
|
||||||
key = item[12:]
|
|
||||||
if key not in targets:
|
|
||||||
raise Exception(
|
|
||||||
"Driver impl '%s' in '[%s]' not declared" %
|
|
||||||
(item, section))
|
|
||||||
|
|
||||||
status = cfg.get(section, item)
|
|
||||||
if status not in SupportMatrixImplementation.STATUS_ALL:
|
|
||||||
raise Exception(
|
|
||||||
"'%s' value '%s' in '[%s]' section must be %s" %
|
|
||||||
(item, status, section,
|
|
||||||
",".join(SupportMatrixImplementation.STATUS_ALL)))
|
|
||||||
|
|
||||||
noteskey = "driver-notes-" + item[12:]
|
|
||||||
notes = None
|
|
||||||
if cfg.has_option(section, noteskey):
|
|
||||||
notes = cfg.get(section, noteskey)
|
|
||||||
|
|
||||||
target = targets[key]
|
|
||||||
impl = SupportMatrixImplementation(status,
|
|
||||||
notes)
|
|
||||||
feature.implementations[target.key] = impl
|
|
||||||
|
|
||||||
for key in targets:
|
|
||||||
if key not in feature.implementations:
|
|
||||||
raise Exception("'%s' missing in '[%s]' section" %
|
|
||||||
(target.key, section))
|
|
||||||
|
|
||||||
features.append(feature)
|
|
||||||
|
|
||||||
return features
|
|
||||||
|
|
||||||
def _build_markup(self, matrix):
|
|
||||||
"""Constructs the docutils content for the support matrix
|
|
||||||
"""
|
|
||||||
content = []
|
|
||||||
self._build_summary(matrix, content)
|
|
||||||
self._build_details(matrix, content)
|
|
||||||
self._build_notes(content)
|
|
||||||
return content
|
|
||||||
|
|
||||||
def _build_summary(self, matrix, content):
|
|
||||||
"""Constructs the docutils content for the summary of
|
|
||||||
the support matrix.
|
|
||||||
|
|
||||||
The summary consists of a giant table, with one row
|
|
||||||
for each feature, and a column for each hypervisor
|
|
||||||
driver. It provides an 'at a glance' summary of the
|
|
||||||
status of each driver
|
|
||||||
"""
|
|
||||||
|
|
||||||
summarytitle = nodes.subtitle(text="Summary")
|
|
||||||
summary = nodes.table()
|
|
||||||
cols = len(matrix.targets.keys())
|
|
||||||
cols += 2
|
|
||||||
summarygroup = nodes.tgroup(cols=cols)
|
|
||||||
summarybody = nodes.tbody()
|
|
||||||
summaryhead = nodes.thead()
|
|
||||||
|
|
||||||
for i in range(cols):
|
|
||||||
summarygroup.append(nodes.colspec(colwidth=1))
|
|
||||||
summarygroup.append(summaryhead)
|
|
||||||
summarygroup.append(summarybody)
|
|
||||||
summary.append(summarygroup)
|
|
||||||
content.append(summarytitle)
|
|
||||||
content.append(summary)
|
|
||||||
|
|
||||||
# This sets up all the column headers - two fixed
|
|
||||||
# columns for feature name & status
|
|
||||||
header = nodes.row()
|
|
||||||
blank = nodes.entry()
|
|
||||||
blank.append(nodes.emphasis(text="Feature"))
|
|
||||||
header.append(blank)
|
|
||||||
blank = nodes.entry()
|
|
||||||
blank.append(nodes.emphasis(text="Status"))
|
|
||||||
header.append(blank)
|
|
||||||
summaryhead.append(header)
|
|
||||||
|
|
||||||
# then one column for each hypervisor driver
|
|
||||||
impls = matrix.targets.keys()
|
|
||||||
sorted(impls)
|
|
||||||
for key in impls:
|
|
||||||
target = matrix.targets[key]
|
|
||||||
implcol = nodes.entry()
|
|
||||||
header.append(implcol)
|
|
||||||
implcol.append(nodes.strong(text=target.title))
|
|
||||||
|
|
||||||
# We now produce the body of the table, one row for
|
|
||||||
# each feature to report on
|
|
||||||
for feature in matrix.features:
|
|
||||||
item = nodes.row()
|
|
||||||
|
|
||||||
# the hyperlink target name linking to details
|
|
||||||
id = re.sub("[^a-zA-Z0-9_]", "_",
|
|
||||||
feature.key)
|
|
||||||
|
|
||||||
# first the to fixed columns for title/status
|
|
||||||
keycol = nodes.entry()
|
|
||||||
item.append(keycol)
|
|
||||||
keyref = nodes.reference(refid=id)
|
|
||||||
keytxt = nodes.inline()
|
|
||||||
keycol.append(keytxt)
|
|
||||||
keytxt.append(keyref)
|
|
||||||
keyref.append(nodes.strong(text=feature.title))
|
|
||||||
|
|
||||||
statuscol = nodes.entry()
|
|
||||||
item.append(statuscol)
|
|
||||||
statuscol.append(nodes.inline(
|
|
||||||
text=feature.status,
|
|
||||||
classes=["sp_feature_" + feature.status]))
|
|
||||||
|
|
||||||
# and then one column for each hypervisor driver
|
|
||||||
impls = matrix.targets.keys()
|
|
||||||
sorted(impls)
|
|
||||||
for key in impls:
|
|
||||||
target = matrix.targets[key]
|
|
||||||
impl = feature.implementations[key]
|
|
||||||
implcol = nodes.entry()
|
|
||||||
item.append(implcol)
|
|
||||||
|
|
||||||
id = re.sub("[^a-zA-Z0-9_]", "_",
|
|
||||||
feature.key + "_" + key)
|
|
||||||
|
|
||||||
implref = nodes.reference(refid=id)
|
|
||||||
impltxt = nodes.inline()
|
|
||||||
implcol.append(impltxt)
|
|
||||||
impltxt.append(implref)
|
|
||||||
|
|
||||||
status = ""
|
|
||||||
if impl.status == SupportMatrixImplementation.STATUS_COMPLETE:
|
|
||||||
status = u"\u2714"
|
|
||||||
elif impl.status == SupportMatrixImplementation.STATUS_MISSING:
|
|
||||||
status = u"\u2716"
|
|
||||||
elif impl.status == SupportMatrixImplementation.STATUS_PARTIAL:
|
|
||||||
status = u"\u2714"
|
|
||||||
elif impl.status == SupportMatrixImplementation.STATUS_UKNOWN:
|
|
||||||
status = u"?"
|
|
||||||
|
|
||||||
implref.append(nodes.literal(
|
|
||||||
text=status,
|
|
||||||
classes=["sp_impl_summary", "sp_impl_" + impl.status]))
|
|
||||||
|
|
||||||
summarybody.append(item)
|
|
||||||
|
|
||||||
def _build_details(self, matrix, content):
|
|
||||||
"""Constructs the docutils content for the details of
|
|
||||||
the support matrix.
|
|
||||||
|
|
||||||
This is generated as a bullet list of features.
|
|
||||||
Against each feature we provide the description of
|
|
||||||
the feature and then the details of the hypervisor
|
|
||||||
impls, with any driver specific notes that exist
|
|
||||||
"""
|
|
||||||
|
|
||||||
detailstitle = nodes.subtitle(text="Details")
|
|
||||||
details = nodes.bullet_list()
|
|
||||||
|
|
||||||
content.append(detailstitle)
|
|
||||||
content.append(details)
|
|
||||||
|
|
||||||
# One list entry for each feature we're reporting on
|
|
||||||
for feature in matrix.features:
|
|
||||||
item = nodes.list_item()
|
|
||||||
|
|
||||||
status = feature.status
|
|
||||||
if feature.group is not None:
|
|
||||||
status += "(" + feature.group + ")"
|
|
||||||
|
|
||||||
# The hypervisor target name linked from summary table
|
|
||||||
id = re.sub("[^a-zA-Z0-9_]", "_",
|
|
||||||
feature.key)
|
|
||||||
|
|
||||||
# Highlight the feature title name
|
|
||||||
item.append(nodes.strong(text=feature.title,
|
|
||||||
ids=[id]))
|
|
||||||
|
|
||||||
para = nodes.paragraph()
|
|
||||||
para.append(nodes.strong(text="Status: " + status + ". "))
|
|
||||||
if feature.notes is not None:
|
|
||||||
para.append(nodes.inline(text=feature.notes))
|
|
||||||
item.append(para)
|
|
||||||
|
|
||||||
if feature.cli:
|
|
||||||
item.append(self._create_cli_paragraph(feature))
|
|
||||||
|
|
||||||
para_divers = nodes.paragraph()
|
|
||||||
para_divers.append(nodes.strong(text="drivers:"))
|
|
||||||
# A sub-list giving details of each hypervisor target
|
|
||||||
impls = nodes.bullet_list()
|
|
||||||
for key in feature.implementations:
|
|
||||||
target = matrix.targets[key]
|
|
||||||
impl = feature.implementations[key]
|
|
||||||
subitem = nodes.list_item()
|
|
||||||
|
|
||||||
id = re.sub("[^a-zA-Z0-9_]", "_",
|
|
||||||
feature.key + "_" + key)
|
|
||||||
subitem += [
|
|
||||||
nodes.strong(text=target.title + ": "),
|
|
||||||
nodes.literal(text=impl.status,
|
|
||||||
classes=["sp_impl_" + impl.status],
|
|
||||||
ids=[id]),
|
|
||||||
]
|
|
||||||
if impl.notes is not None:
|
|
||||||
subitem.append(self._create_notes_paragraph(impl.notes))
|
|
||||||
impls.append(subitem)
|
|
||||||
|
|
||||||
para_divers.append(impls)
|
|
||||||
item.append(para_divers)
|
|
||||||
details.append(item)
|
|
||||||
|
|
||||||
def _build_notes(self, content):
|
|
||||||
"""Constructs a list of notes content for the support matrix.
|
|
||||||
|
|
||||||
This is generated as a bullet list.
|
|
||||||
"""
|
|
||||||
notestitle = nodes.subtitle(text="Notes")
|
|
||||||
notes = nodes.bullet_list()
|
|
||||||
|
|
||||||
content.append(notestitle)
|
|
||||||
content.append(notes)
|
|
||||||
|
|
||||||
NOTES = [
|
|
||||||
"Virtuozzo was formerly named Parallels in this document"
|
|
||||||
]
|
|
||||||
|
|
||||||
for note in NOTES:
|
|
||||||
item = nodes.list_item()
|
|
||||||
item.append(nodes.strong(text=note))
|
|
||||||
notes.append(item)
|
|
||||||
|
|
||||||
def _create_cli_paragraph(self, feature):
|
|
||||||
''' Create a paragraph which represents the CLI commands of the feature
|
|
||||||
|
|
||||||
The paragraph will have a bullet list of CLI commands.
|
|
||||||
'''
|
|
||||||
para = nodes.paragraph()
|
|
||||||
para.append(nodes.strong(text="CLI commands:"))
|
|
||||||
commands = nodes.bullet_list()
|
|
||||||
for c in feature.cli.split(";"):
|
|
||||||
cli_command = nodes.list_item()
|
|
||||||
cli_command += nodes.literal(text=c, classes=["sp_cli"])
|
|
||||||
commands.append(cli_command)
|
|
||||||
para.append(commands)
|
|
||||||
return para
|
|
||||||
|
|
||||||
def _create_notes_paragraph(self, notes):
|
|
||||||
""" Constructs a paragraph which represents the implementation notes
|
|
||||||
|
|
||||||
The paragraph consists of text and clickable URL nodes if links were
|
|
||||||
given in the notes.
|
|
||||||
"""
|
|
||||||
para = nodes.paragraph()
|
|
||||||
# links could start with http:// or https://
|
|
||||||
link_idxs = [m.start() for m in re.finditer('https?://', notes)]
|
|
||||||
start_idx = 0
|
|
||||||
for link_idx in link_idxs:
|
|
||||||
# assume the notes start with text (could be empty)
|
|
||||||
para.append(nodes.inline(text=notes[start_idx:link_idx]))
|
|
||||||
# create a URL node until the next text or the end of the notes
|
|
||||||
link_end_idx = notes.find(" ", link_idx)
|
|
||||||
if link_end_idx == -1:
|
|
||||||
# In case the notes end with a link without a blank
|
|
||||||
link_end_idx = len(notes)
|
|
||||||
uri = notes[link_idx:link_end_idx + 1]
|
|
||||||
para.append(nodes.reference("", uri, refuri=uri))
|
|
||||||
start_idx = link_end_idx + 1
|
|
||||||
|
|
||||||
# get all text after the last link (could be empty) or all of the
|
|
||||||
# text if no link was given
|
|
||||||
para.append(nodes.inline(text=notes[start_idx:]))
|
|
||||||
return para
|
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
|
||||||
app.add_directive('support_matrix', SupportMatrixDirective)
|
|
||||||
app.add_stylesheet('support-matrix.css')
|
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
sphinx!=1.6.6,!=1.6.7,>=1.6.5 # BSD
|
sphinx!=1.6.6,!=1.6.7,>=1.6.5 # BSD
|
||||||
openstackdocstheme>=1.19.0 # Apache-2.0
|
openstackdocstheme>=1.19.0 # Apache-2.0
|
||||||
|
sphinx-feature-classification>=0.2.0 # Apache-2.0
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ sys.path.insert(0, os.path.abspath('../'))
|
|||||||
extensions = [
|
extensions = [
|
||||||
'sphinx.ext.autodoc',
|
'sphinx.ext.autodoc',
|
||||||
'openstackdocstheme',
|
'openstackdocstheme',
|
||||||
'ext.support_matrix'
|
'sphinx_feature_classification.support_matrix'
|
||||||
]
|
]
|
||||||
|
|
||||||
# The suffix of source filenames.
|
# The suffix of source filenames.
|
||||||
|
|||||||
@@ -11,65 +11,12 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#
|
|
||||||
#
|
# For information about the format of this file, refer to the documentation
|
||||||
#
|
# for sphinx-feature-classification:
|
||||||
# =========================================
|
|
||||||
# Nova Hypervisor Feature Capability Matrix
|
[driver.powervm]
|
||||||
# =========================================
|
title=PowerVM
|
||||||
#
|
|
||||||
# This obsoletes the information previously at
|
|
||||||
#
|
|
||||||
# https://wiki.openstack.org/wiki/HypervisorSupportMatrix
|
|
||||||
#
|
|
||||||
# This file contains a specification of what feature capabilities each
|
|
||||||
# hypervisor driver in Nova is able to support. Feature capabilities include
|
|
||||||
# what API operations are supported, what storage / networking features can be
|
|
||||||
# used and what aspects of the guest machine can be configured. The capabilities
|
|
||||||
# can be considered to be structured into nested groups, but in this file they
|
|
||||||
# have been flattened for ease of representation. The section names represent
|
|
||||||
# the group structure. At the top level there are the following groups defined
|
|
||||||
#
|
|
||||||
# - operation - public API operations
|
|
||||||
# - storage - host storage configuration options
|
|
||||||
# - networking - host networking configuration options
|
|
||||||
# - guest - guest hardware configuration options
|
|
||||||
#
|
|
||||||
# When considering which capabilities should be marked as mandatory,
|
|
||||||
# consider the general guiding principles listed in the support-matrix.rst
|
|
||||||
# file
|
|
||||||
#
|
|
||||||
# The 'status' field takes possible values
|
|
||||||
#
|
|
||||||
# - mandatory - unconditionally required to be implemented
|
|
||||||
# - optional - optional to support, nice to have
|
|
||||||
# - choice(group) - at least one of the options within the named group
|
|
||||||
# must be implemented
|
|
||||||
# - conditional(cond) - required, if the referenced condition is met.
|
|
||||||
#
|
|
||||||
# The value against each 'driver-impl-XXXX' entry refers to the level
|
|
||||||
# of the implementation of the feature in that driver
|
|
||||||
#
|
|
||||||
# - complete - fully implemented, expected to work at all times
|
|
||||||
# - partial - implemented, but with caveats about when it will work
|
|
||||||
# eg some configurations or hardware or guest OS may not
|
|
||||||
# support it
|
|
||||||
# - missing - not implemented at all
|
|
||||||
#
|
|
||||||
# In the case of the driver being marked as 'partial', then
|
|
||||||
# 'driver-notes-XXX' entry should be used to explain the caveats
|
|
||||||
# around the implementation.
|
|
||||||
#
|
|
||||||
# The 'cli' field takes a list of nova client commands, separated by semicolon.
|
|
||||||
# These CLi commands are related to that feature.
|
|
||||||
# Example:
|
|
||||||
# cli=nova list;nova show <server>
|
|
||||||
#
|
|
||||||
[targets]
|
|
||||||
# List of driver impls we are going to record info for later
|
|
||||||
# This list only covers the PowerVM driver. Please see the equivalent
|
|
||||||
# document in the Nova tree for information on in-tree hypervisors.
|
|
||||||
driver-impl-powervm=PowerVM
|
|
||||||
|
|
||||||
[operation.attach-volume]
|
[operation.attach-volume]
|
||||||
title=Attach block volume to instance
|
title=Attach block volume to instance
|
||||||
@@ -83,7 +30,7 @@ notes=The attach volume operation provides a means to hotplug
|
|||||||
is considered to be more of a pet than cattle. Therefore
|
is considered to be more of a pet than cattle. Therefore
|
||||||
this operation is not considered to be mandatory to support.
|
this operation is not considered to be mandatory to support.
|
||||||
cli=nova volume-attach <server> <volume>
|
cli=nova volume-attach <server> <volume>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.attach-tagged-volume]
|
[operation.attach-tagged-volume]
|
||||||
title=Attach tagged block device to instance
|
title=Attach tagged block device to instance
|
||||||
@@ -91,14 +38,14 @@ status=optional
|
|||||||
notes=Attach a block device with a tag to an existing server instance. See
|
notes=Attach a block device with a tag to an existing server instance. See
|
||||||
"Device tags" for more information.
|
"Device tags" for more information.
|
||||||
cli=nova volume-attach <server> <volume> [--tag <tag>]
|
cli=nova volume-attach <server> <volume> [--tag <tag>]
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.detach-volume]
|
[operation.detach-volume]
|
||||||
title=Detach block volume from instance
|
title=Detach block volume from instance
|
||||||
status=optional
|
status=optional
|
||||||
notes=See notes for attach volume operation.
|
notes=See notes for attach volume operation.
|
||||||
cli=nova volume-detach <server> <volume>
|
cli=nova volume-detach <server> <volume>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.extend-volume]
|
[operation.extend-volume]
|
||||||
title=Extend block volume attached to instance
|
title=Extend block volume attached to instance
|
||||||
@@ -112,8 +59,8 @@ notes=The extend volume operation provides a means to extend
|
|||||||
where the instance is considered to be more of a pet than cattle.
|
where the instance is considered to be more of a pet than cattle.
|
||||||
Therefore this operation is not considered to be mandatory to support.
|
Therefore this operation is not considered to be mandatory to support.
|
||||||
cli=cinder extend <volume> <new_size>
|
cli=cinder extend <volume> <new_size>
|
||||||
driver-impl-powervm=partial
|
driver.powervm=partial
|
||||||
driver-notes-powervm=Not supported for rbd volumes.
|
driver-notes.powervm=Not supported for rbd volumes.
|
||||||
|
|
||||||
[operation.attach-interface]
|
[operation.attach-interface]
|
||||||
title=Attach virtual network interface to instance
|
title=Attach virtual network interface to instance
|
||||||
@@ -126,7 +73,7 @@ notes=The attach interface operation provides a means to hotplug
|
|||||||
In a cloud model it would be more typical to just spin up a
|
In a cloud model it would be more typical to just spin up a
|
||||||
new instance with more interfaces.
|
new instance with more interfaces.
|
||||||
cli=nova interface-attach <server>
|
cli=nova interface-attach <server>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.attach-tagged-interface]
|
[operation.attach-tagged-interface]
|
||||||
title=Attach tagged virtual network interface to instance
|
title=Attach tagged virtual network interface to instance
|
||||||
@@ -134,14 +81,14 @@ status=optional
|
|||||||
notes=Attach a virtual network interface with a tag to an existing
|
notes=Attach a virtual network interface with a tag to an existing
|
||||||
server instance. See "Device tags" for more information.
|
server instance. See "Device tags" for more information.
|
||||||
cli=nova interface-attach <server> [--tag <tag>]
|
cli=nova interface-attach <server> [--tag <tag>]
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.detach-interface]
|
[operation.detach-interface]
|
||||||
title=Detach virtual network interface from instance
|
title=Detach virtual network interface from instance
|
||||||
status=optional
|
status=optional
|
||||||
notes=See notes for attach-interface operation.
|
notes=See notes for attach-interface operation.
|
||||||
cli=nova interface-detach <server> <port_id>
|
cli=nova interface-detach <server> <port_id>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.maintenance-mode]
|
[operation.maintenance-mode]
|
||||||
title=Set the host in a maintenance mode
|
title=Set the host in a maintenance mode
|
||||||
@@ -154,7 +101,7 @@ notes=This operation allows a host to be placed into maintenance
|
|||||||
The driver methods to implement are "host_maintenance_mode" and
|
The driver methods to implement are "host_maintenance_mode" and
|
||||||
"set_host_enabled".
|
"set_host_enabled".
|
||||||
cli=nova host-update <host>
|
cli=nova host-update <host>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.evacuate]
|
[operation.evacuate]
|
||||||
title=Evacuate instances from a host
|
title=Evacuate instances from a host
|
||||||
@@ -168,7 +115,7 @@ notes=A possible failure scenario in a cloud environment is the outage
|
|||||||
dropped. That happens in the same way as a rebuild.
|
dropped. That happens in the same way as a rebuild.
|
||||||
This is not considered to be a mandatory operation to support.
|
This is not considered to be a mandatory operation to support.
|
||||||
cli=nova evacuate <server>;nova host-evacuate <host>
|
cli=nova evacuate <server>;nova host-evacuate <host>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.rebuild]
|
[operation.rebuild]
|
||||||
title=Rebuild instance
|
title=Rebuild instance
|
||||||
@@ -179,7 +126,7 @@ notes=A possible use case is additional attributes need to be set
|
|||||||
'personalities'. Though this is not considered to be a mandatory
|
'personalities'. Though this is not considered to be a mandatory
|
||||||
operation to support.
|
operation to support.
|
||||||
cli=nova rebuild <server> <image>
|
cli=nova rebuild <server> <image>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.get-guest-info]
|
[operation.get-guest-info]
|
||||||
title=Guest instance status
|
title=Guest instance status
|
||||||
@@ -189,7 +136,7 @@ notes=Provides realtime information about the power state of the guest
|
|||||||
tracking changes in guests, this operation is considered mandatory to
|
tracking changes in guests, this operation is considered mandatory to
|
||||||
support.
|
support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.get-host-uptime]
|
[operation.get-host-uptime]
|
||||||
title=Guest host uptime
|
title=Guest host uptime
|
||||||
@@ -197,7 +144,7 @@ status=optional
|
|||||||
notes=Returns the result of host uptime since power on,
|
notes=Returns the result of host uptime since power on,
|
||||||
it's used to report hypervisor status.
|
it's used to report hypervisor status.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.get-host-ip]
|
[operation.get-host-ip]
|
||||||
title=Guest host ip
|
title=Guest host ip
|
||||||
@@ -205,7 +152,7 @@ status=optional
|
|||||||
notes=Returns the ip of this host, it's used when doing
|
notes=Returns the ip of this host, it's used when doing
|
||||||
resize and migration.
|
resize and migration.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.live-migrate]
|
[operation.live-migrate]
|
||||||
title=Live migrate instance across hosts
|
title=Live migrate instance across hosts
|
||||||
@@ -222,7 +169,7 @@ notes=Live migration provides a way to move an instance off one
|
|||||||
built on the container based virtualization. Therefore this
|
built on the container based virtualization. Therefore this
|
||||||
operation is not considered mandatory to support.
|
operation is not considered mandatory to support.
|
||||||
cli=nova live-migration <server>;nova host-evacuate-live <host>
|
cli=nova live-migration <server>;nova host-evacuate-live <host>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.force-live-migration-to-complete]
|
[operation.force-live-migration-to-complete]
|
||||||
title=Force live migration to complete
|
title=Force live migration to complete
|
||||||
@@ -238,7 +185,7 @@ notes=Live migration provides a way to move a running instance to another
|
|||||||
a switch to post-copy mode. Otherwise the instance will be suspended
|
a switch to post-copy mode. Otherwise the instance will be suspended
|
||||||
until the migration is completed or aborted.
|
until the migration is completed or aborted.
|
||||||
cli=nova live-migration-force-complete <server> <migration>
|
cli=nova live-migration-force-complete <server> <migration>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.launch]
|
[operation.launch]
|
||||||
title=Launch instance
|
title=Launch instance
|
||||||
@@ -247,7 +194,7 @@ notes=Importing pre-existing running virtual machines on a host is
|
|||||||
considered out of scope of the cloud paradigm. Therefore this
|
considered out of scope of the cloud paradigm. Therefore this
|
||||||
operation is mandatory to support in drivers.
|
operation is mandatory to support in drivers.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.pause]
|
[operation.pause]
|
||||||
title=Stop instance CPUs (pause)
|
title=Stop instance CPUs (pause)
|
||||||
@@ -262,7 +209,7 @@ notes=Stopping an instances CPUs can be thought of as roughly
|
|||||||
implement it. Therefore this operation is considered optional
|
implement it. Therefore this operation is considered optional
|
||||||
to support in drivers.
|
to support in drivers.
|
||||||
cli=nova pause <server>
|
cli=nova pause <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.reboot]
|
[operation.reboot]
|
||||||
title=Reboot instance
|
title=Reboot instance
|
||||||
@@ -273,7 +220,7 @@ notes=It is reasonable for a guest OS administrator to trigger a
|
|||||||
reboot can be achieved by a combination of stop+start. Therefore
|
reboot can be achieved by a combination of stop+start. Therefore
|
||||||
this operation is considered optional.
|
this operation is considered optional.
|
||||||
cli=nova reboot <server>
|
cli=nova reboot <server>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.rescue]
|
[operation.rescue]
|
||||||
title=Rescue instance
|
title=Rescue instance
|
||||||
@@ -287,7 +234,7 @@ notes=The rescue operation starts an instance in a special
|
|||||||
thrown away and a new instance created. Therefore this
|
thrown away and a new instance created. Therefore this
|
||||||
operation is considered optional to support in drivers.
|
operation is considered optional to support in drivers.
|
||||||
cli=nova rescue <server>
|
cli=nova rescue <server>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.resize]
|
[operation.resize]
|
||||||
title=Resize instance
|
title=Resize instance
|
||||||
@@ -301,14 +248,14 @@ notes=The resize operation allows the user to change a running
|
|||||||
running instance. Therefore this operation is considered
|
running instance. Therefore this operation is considered
|
||||||
optional to support in drivers.
|
optional to support in drivers.
|
||||||
cli=nova resize <server> <flavor>
|
cli=nova resize <server> <flavor>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.resume]
|
[operation.resume]
|
||||||
title=Restore instance
|
title=Restore instance
|
||||||
status=optional
|
status=optional
|
||||||
notes=See notes for the suspend operation
|
notes=See notes for the suspend operation
|
||||||
cli=nova resume <server>
|
cli=nova resume <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.set-admin-password]
|
[operation.set-admin-password]
|
||||||
title=Set instance admin password
|
title=Set instance admin password
|
||||||
@@ -325,7 +272,7 @@ notes=Provides a mechanism to (re)set the password of the administrator
|
|||||||
this is just a convenient optimization. Therefore this operation is
|
this is just a convenient optimization. Therefore this operation is
|
||||||
not considered mandatory for drivers to support.
|
not considered mandatory for drivers to support.
|
||||||
cli=nova set-password <server>
|
cli=nova set-password <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.snapshot]
|
[operation.snapshot]
|
||||||
title=Save snapshot of instance disk
|
title=Save snapshot of instance disk
|
||||||
@@ -341,7 +288,7 @@ notes=The snapshot operation allows the current state of the
|
|||||||
snapshot cannot be assumed. Therefore this operation is not
|
snapshot cannot be assumed. Therefore this operation is not
|
||||||
considered mandatory to support.
|
considered mandatory to support.
|
||||||
cli=nova image-create <server> <name>
|
cli=nova image-create <server> <name>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.suspend]
|
[operation.suspend]
|
||||||
title=Suspend instance
|
title=Suspend instance
|
||||||
@@ -362,7 +309,7 @@ notes=Suspending an instance can be thought of as roughly
|
|||||||
the instance instead of suspending. Therefore this operation
|
the instance instead of suspending. Therefore this operation
|
||||||
is considered optional to support.
|
is considered optional to support.
|
||||||
cli=nova suspend <server>
|
cli=nova suspend <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.swap-volume]
|
[operation.swap-volume]
|
||||||
title=Swap block volumes
|
title=Swap block volumes
|
||||||
@@ -376,7 +323,7 @@ notes=The swap volume operation is a mechanism for changing a running
|
|||||||
migration to work in the volume service. This is considered optional to
|
migration to work in the volume service. This is considered optional to
|
||||||
support.
|
support.
|
||||||
cli=nova volume-update <server> <attachment> <volume>
|
cli=nova volume-update <server> <attachment> <volume>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.terminate]
|
[operation.terminate]
|
||||||
title=Shutdown instance
|
title=Shutdown instance
|
||||||
@@ -386,7 +333,7 @@ notes=The ability to terminate a virtual machine is required in
|
|||||||
avoid indefinitely ongoing billing. Therefore this operation
|
avoid indefinitely ongoing billing. Therefore this operation
|
||||||
is mandatory to support in drivers.
|
is mandatory to support in drivers.
|
||||||
cli=nova delete <server>
|
cli=nova delete <server>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.trigger-crash-dump]
|
[operation.trigger-crash-dump]
|
||||||
title=Trigger crash dump
|
title=Trigger crash dump
|
||||||
@@ -397,14 +344,14 @@ notes=The trigger crash dump operation is a mechanism for triggering
|
|||||||
a means to dump the production memory image as a dump file which is useful
|
a means to dump the production memory image as a dump file which is useful
|
||||||
for users. Therefore this operation is considered optional to support.
|
for users. Therefore this operation is considered optional to support.
|
||||||
cli=nova trigger-crash-dump <server>
|
cli=nova trigger-crash-dump <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.unpause]
|
[operation.unpause]
|
||||||
title=Resume instance CPUs (unpause)
|
title=Resume instance CPUs (unpause)
|
||||||
status=optional
|
status=optional
|
||||||
notes=See notes for the "Stop instance CPUs" operation
|
notes=See notes for the "Stop instance CPUs" operation
|
||||||
cli=nova unpause <server>
|
cli=nova unpause <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[guest.disk.autoconfig]
|
[guest.disk.autoconfig]
|
||||||
title=Auto configure disk
|
title=Auto configure disk
|
||||||
@@ -413,7 +360,7 @@ notes=Partition and resize FS to match the size specified by
|
|||||||
flavors.root_gb, As this is hypervisor specific feature.
|
flavors.root_gb, As this is hypervisor specific feature.
|
||||||
Therefore this operation is considered optional to support.
|
Therefore this operation is considered optional to support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[guest.disk.rate-limit]
|
[guest.disk.rate-limit]
|
||||||
title=Instance disk I/O limits
|
title=Instance disk I/O limits
|
||||||
@@ -425,7 +372,7 @@ notes=The ability to set rate limits on virtual disks allows for
|
|||||||
of doing fine grained tuning. Therefore this is not considered
|
of doing fine grained tuning. Therefore this is not considered
|
||||||
to be an mandatory configuration to support.
|
to be an mandatory configuration to support.
|
||||||
cli=nova limits
|
cli=nova limits
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[guest.setup.configdrive]
|
[guest.setup.configdrive]
|
||||||
title=Config drive support
|
title=Config drive support
|
||||||
@@ -440,7 +387,7 @@ notes=The config drive provides an information channel into
|
|||||||
of the guest setup mechanisms is required to be supported by
|
of the guest setup mechanisms is required to be supported by
|
||||||
drivers, in order to enable login access.
|
drivers, in order to enable login access.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[guest.setup.inject.file]
|
[guest.setup.inject.file]
|
||||||
title=Inject files into disk image
|
title=Inject files into disk image
|
||||||
@@ -455,7 +402,7 @@ notes=This allows for the end user to provide data for multiple
|
|||||||
service or config drive. Therefore this operation is considered
|
service or config drive. Therefore this operation is considered
|
||||||
optional to support.
|
optional to support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[guest.setup.inject.networking]
|
[guest.setup.inject.networking]
|
||||||
title=Inject guest networking config
|
title=Inject guest networking config
|
||||||
@@ -471,7 +418,7 @@ notes=This allows for static networking configuration (IP
|
|||||||
config drive. Therefore this operation is considered optional
|
config drive. Therefore this operation is considered optional
|
||||||
to support.
|
to support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[console.rdp]
|
[console.rdp]
|
||||||
title=Remote desktop over RDP
|
title=Remote desktop over RDP
|
||||||
@@ -485,7 +432,7 @@ notes=This allows the administrator to interact with the graphical
|
|||||||
mandatory, however, a driver is required to support at least one
|
mandatory, however, a driver is required to support at least one
|
||||||
of the listed console access operations.
|
of the listed console access operations.
|
||||||
cli=nova get-rdp-console <server> <console-type>
|
cli=nova get-rdp-console <server> <console-type>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[console.serial.log]
|
[console.serial.log]
|
||||||
title=View serial console logs
|
title=View serial console logs
|
||||||
@@ -500,7 +447,7 @@ notes=This allows the administrator to query the logs of data
|
|||||||
operation is not mandatory, however, a driver is required to
|
operation is not mandatory, however, a driver is required to
|
||||||
support at least one of the listed console access operations.
|
support at least one of the listed console access operations.
|
||||||
cli=nova console-log <server>
|
cli=nova console-log <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[console.serial.interactive]
|
[console.serial.interactive]
|
||||||
title=Remote interactive serial console
|
title=Remote interactive serial console
|
||||||
@@ -516,7 +463,7 @@ notes=This allows the administrator to interact with the serial
|
|||||||
This feature was introduced in the Juno release with blueprint
|
This feature was introduced in the Juno release with blueprint
|
||||||
https://blueprints.launchpad.net/nova/+spec/serial-ports
|
https://blueprints.launchpad.net/nova/+spec/serial-ports
|
||||||
cli=nova get-serial-console <server>
|
cli=nova get-serial-console <server>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[console.spice]
|
[console.spice]
|
||||||
title=Remote desktop over SPICE
|
title=Remote desktop over SPICE
|
||||||
@@ -530,7 +477,7 @@ notes=This allows the administrator to interact with the graphical
|
|||||||
mandatory, however, a driver is required to support at least one
|
mandatory, however, a driver is required to support at least one
|
||||||
of the listed console access operations.
|
of the listed console access operations.
|
||||||
cli=nova get-spice-console <server> <console-type>
|
cli=nova get-spice-console <server> <console-type>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[console.vnc]
|
[console.vnc]
|
||||||
title=Remote desktop over VNC
|
title=Remote desktop over VNC
|
||||||
@@ -544,7 +491,7 @@ notes=This allows the administrator to interact with the graphical
|
|||||||
mandatory, however, a driver is required to support at least one
|
mandatory, however, a driver is required to support at least one
|
||||||
of the listed console access operations.
|
of the listed console access operations.
|
||||||
cli=nova get-vnc-console <server> <console-type>
|
cli=nova get-vnc-console <server> <console-type>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[storage.block]
|
[storage.block]
|
||||||
title=Block storage support
|
title=Block storage support
|
||||||
@@ -560,7 +507,7 @@ notes=Block storage provides instances with direct attached
|
|||||||
the network. Therefore support for this configuration is not
|
the network. Therefore support for this configuration is not
|
||||||
considered mandatory for drivers to support.
|
considered mandatory for drivers to support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[storage.block.backend.fibrechannel]
|
[storage.block.backend.fibrechannel]
|
||||||
title=Block storage over fibre channel
|
title=Block storage over fibre channel
|
||||||
@@ -570,7 +517,7 @@ notes=To maximise performance of the block storage, it may be desirable
|
|||||||
technology on the compute hosts. Since this is just a performance
|
technology on the compute hosts. Since this is just a performance
|
||||||
optimization of the I/O path it is not considered mandatory to support.
|
optimization of the I/O path it is not considered mandatory to support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[storage.block.backend.iscsi]
|
[storage.block.backend.iscsi]
|
||||||
title=Block storage over iSCSI
|
title=Block storage over iSCSI
|
||||||
@@ -583,7 +530,7 @@ notes=If the driver wishes to support block storage, it is common to
|
|||||||
block storage, then this is considered mandatory to support, otherwise
|
block storage, then this is considered mandatory to support, otherwise
|
||||||
it is considered optional.
|
it is considered optional.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[storage.block.backend.iscsi.auth.chap]
|
[storage.block.backend.iscsi.auth.chap]
|
||||||
title=CHAP authentication for iSCSI
|
title=CHAP authentication for iSCSI
|
||||||
@@ -593,7 +540,7 @@ notes=If accessing the cinder iSCSI service over an untrusted LAN it
|
|||||||
protocol. CHAP is the commonly used authentication protocol for
|
protocol. CHAP is the commonly used authentication protocol for
|
||||||
iSCSI. This is not considered mandatory to support. (?)
|
iSCSI. This is not considered mandatory to support. (?)
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[storage.image]
|
[storage.image]
|
||||||
title=Image storage support
|
title=Image storage support
|
||||||
@@ -605,21 +552,21 @@ notes=This refers to the ability to boot an instance from an image
|
|||||||
on external PXE servers is out of scope. Therefore this is considered
|
on external PXE servers is out of scope. Therefore this is considered
|
||||||
a mandatory storage feature to support.
|
a mandatory storage feature to support.
|
||||||
cli=nova boot --image <image> <name>
|
cli=nova boot --image <image> <name>
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[networking.firewallrules]
|
[networking.firewallrules]
|
||||||
title=Network firewall rules
|
title=Network firewall rules
|
||||||
status=optional
|
status=optional
|
||||||
notes=Unclear how this is different from security groups
|
notes=Unclear how this is different from security groups
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[networking.routing]
|
[networking.routing]
|
||||||
title=Network routing
|
title=Network routing
|
||||||
status=optional
|
status=optional
|
||||||
notes=Unclear what this refers to
|
notes=Unclear what this refers to
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[networking.securitygroups]
|
[networking.securitygroups]
|
||||||
title=Network security groups
|
title=Network security groups
|
||||||
@@ -632,7 +579,7 @@ notes=The security groups feature provides a way to define rules
|
|||||||
superfluous requirement. Therefore this is considered to be an
|
superfluous requirement. Therefore this is considered to be an
|
||||||
optional configuration to support.
|
optional configuration to support.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[networking.topology.flat]
|
[networking.topology.flat]
|
||||||
title=Flat networking
|
title=Flat networking
|
||||||
@@ -642,7 +589,7 @@ notes=Provide network connectivity to guests using a
|
|||||||
of the networking configurations is mandatory to
|
of the networking configurations is mandatory to
|
||||||
support in the drivers.
|
support in the drivers.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[networking.topology.vlan]
|
[networking.topology.vlan]
|
||||||
title=VLAN networking
|
title=VLAN networking
|
||||||
@@ -651,14 +598,14 @@ notes=Provide network connectivity to guests using VLANs to define the
|
|||||||
topology when using nova-network. At least one of the networking
|
topology when using nova-network. At least one of the networking
|
||||||
configurations is mandatory to support in the drivers.
|
configurations is mandatory to support in the drivers.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=complete
|
driver.powervm=complete
|
||||||
|
|
||||||
[operation.uefi-boot]
|
[operation.uefi-boot]
|
||||||
title=uefi boot
|
title=uefi boot
|
||||||
status=optional
|
status=optional
|
||||||
notes=This allows users to boot a guest with uefi firmware.
|
notes=This allows users to boot a guest with uefi firmware.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.device-tags]
|
[operation.device-tags]
|
||||||
title=Device tags
|
title=Device tags
|
||||||
@@ -676,7 +623,7 @@ notes=This allows users to set tags on virtual devices when creating a
|
|||||||
Instead, device role tags should be used. Device tags can be
|
Instead, device role tags should be used. Device tags can be
|
||||||
applied to virtual network interfaces and block devices.
|
applied to virtual network interfaces and block devices.
|
||||||
cli=nova boot
|
cli=nova boot
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.quiesce]
|
[operation.quiesce]
|
||||||
title=quiesce
|
title=quiesce
|
||||||
@@ -685,14 +632,14 @@ notes=Quiesce the specified instance to prepare for snapshots.
|
|||||||
For libvirt, guest filesystems will be frozen through qemu
|
For libvirt, guest filesystems will be frozen through qemu
|
||||||
agent.
|
agent.
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.unquiesce]
|
[operation.unquiesce]
|
||||||
title=unquiesce
|
title=unquiesce
|
||||||
status=optional
|
status=optional
|
||||||
notes=See notes for the quiesce operation
|
notes=See notes for the quiesce operation
|
||||||
cli=
|
cli=
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|
||||||
[operation.multiattach-volume]
|
[operation.multiattach-volume]
|
||||||
title=Attach block volume to multiple instances
|
title=Attach block volume to multiple instances
|
||||||
@@ -704,4 +651,4 @@ notes=The multiattach volume operation is an extension to
|
|||||||
Note that for the libvirt driver, this is only supported
|
Note that for the libvirt driver, this is only supported
|
||||||
if qemu<2.10 or libvirt>=3.10.
|
if qemu<2.10 or libvirt>=3.10.
|
||||||
cli=nova volume-attach <server> <volume>
|
cli=nova volume-attach <server> <volume>
|
||||||
driver-impl-powervm=missing
|
driver.powervm=missing
|
||||||
|
|||||||
Reference in New Issue
Block a user