From c09fe87feb8d01254f1654967eacf71b504160d6 Mon Sep 17 00:00:00 2001 From: Mike Perez Date: Thu, 7 Dec 2017 03:38:01 +1100 Subject: [PATCH] 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: If5c0bf2b0dcd7dbb7d316139ecb62a936fd15439 Co-Authored-By: Stephen Finucane --- doc/ext/support_matrix.py | 522 --------- doc/requirements.txt | 1 + doc/source/conf.py | 2 +- doc/source/user/support-matrix.ini | 1663 ++++++++++++++-------------- 4 files changed, 847 insertions(+), 1341 deletions(-) delete mode 100644 doc/ext/support_matrix.py diff --git a/doc/ext/support_matrix.py b/doc/ext/support_matrix.py deleted file mode 100644 index 96e0b379e97c..000000000000 --- a/doc/ext/support_matrix.py +++ /dev/null @@ -1,522 +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 sys - -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=None): - if not cli: - 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 - """ - - # SafeConfigParser was deprecated in Python 3.2 - if sys.version_info >= (3, 2): - 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" % - (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 = list(matrix.targets.keys()) - impls.sort() - 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 = list(matrix.targets.keys()) - impls.sort() - 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') diff --git a/doc/requirements.txt b/doc/requirements.txt index c65578005c33..fc1af5c4c94c 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -4,6 +4,7 @@ sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD sphinxcontrib-actdiag>=0.8.5 # BSD sphinxcontrib-seqdiag>=0.8.4 # BSD +sphinx-feature-classification>=0.2.0 # Apache-2.0 os-api-ref>=1.4.0 # Apache-2.0 openstackdocstheme>=1.19.0 # Apache-2.0 diff --git a/doc/source/conf.py b/doc/source/conf.py index 4325e58ebe8f..a405ab222640 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -38,7 +38,7 @@ extensions = ['sphinx.ext.autodoc', 'openstackdocstheme', 'sphinx.ext.coverage', 'sphinx.ext.graphviz', - 'ext.support_matrix', + 'sphinx_feature_classification.support_matrix', 'oslo_config.sphinxconfiggen', 'oslo_config.sphinxext', 'oslo_policy.sphinxpolicygen', diff --git a/doc/source/user/support-matrix.ini b/doc/source/user/support-matrix.ini index bdd8e07569ea..5af290ed77b3 100644 --- a/doc/source/user/support-matrix.ini +++ b/doc/source/user/support-matrix.ini @@ -47,8 +47,8 @@ # 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 +# The value against each 'driver.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 @@ -57,34 +57,61 @@ # - 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 +# '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 -# -[targets] + # List of driver impls we are going to record info for later # This list only covers drivers that are in the Nova source # tree. Out of tree drivers should maintain their own equivalent # document, and merge it with this when their code merges into # Nova core. -driver-impl-xenserver=XenServer -driver-impl-libvirt-kvm-x86=Libvirt KVM (x86) -driver-impl-libvirt-kvm-aarch64=Libvirt KVM (aarch64) -driver-impl-libvirt-kvm-ppc64=Libvirt KVM (ppc64) -driver-impl-libvirt-kvm-s390x=Libvirt KVM (s390x) -driver-impl-libvirt-qemu-x86=Libvirt QEMU (x86) -driver-impl-libvirt-lxc=Libvirt LXC -driver-impl-libvirt-xen=Libvirt Xen -driver-impl-libvirt-vz-vm=Libvirt Virtuozzo VM -driver-impl-libvirt-vz-ct=Libvirt Virtuozzo CT -driver-impl-vmware=VMware vCenter -driver-impl-hyperv=Hyper-V -driver-impl-ironic=Ironic -driver-impl-powervm=PowerVM + +[driver.xenserver] +title=XenServer + +[driver.libvirt-kvm-x86] +title=Libvirt KVM (x86) + +[driver.libvirt-kvm-aarch64] +title=Libvirt KVM (aarch64) + +[driver.libvirt-kvm-ppc64] +title=XLibvirt KVM (ppc64) + +[driver.libvirt-kvm-s390x] +title=Libvirt KVM (s390x) + +[driver.libvirt-qemu-x86] +title=Libvirt QEMU (x86) + +[driver.libvirt-lxc] +title=Libvirt LXC + +[driver.libvirt-vz-vm] +title=Libvirt Virtuozzo VM + +[driver.libvirt-vz-ct] +title=Libvirt Virtuozzo CT + +[driver.libvirt-xen] +title=Libvirt Xen + +[driver.vmware] +title=VMware vCenter + +[driver.hyperv] +title=Hyper-V + +[driver.ironic] +title=Ironic + +[driver.powervm] +title=PowerVM [operation.attach-volume] title=Attach block volume to instance @@ -98,21 +125,21 @@ notes=The attach volume operation provides a means to hotplug is considered to be more of a pet than cattle. Therefore this operation is not considered to be mandatory to support. cli=nova volume-attach -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=complete -driver-notes-powervm=This is not tested for every CI run. Add a +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=complete +driver-notes.powervm=This is not tested for every CI run. Add a "powervm:volume-check" comment to trigger a CI job running volume tests. [operation.attach-tagged-volume] @@ -121,41 +148,41 @@ status=optional notes=Attach a block device with a tag to an existing server instance. See "Device tags" for more information. cli=nova volume-attach [--tag ] -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.detach-volume] title=Detach block volume from instance status=optional notes=See notes for attach volume operation. cli=nova volume-detach -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=complete -driver-notes-powervm=This is not tested for every CI run. Add a +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=complete +driver-notes.powervm=This is not tested for every CI run. Add a "powervm:volume-check" comment to trigger a CI job running volume tests. [operation.extend-volume] @@ -170,21 +197,21 @@ notes=The extend volume operation provides a means to extend where the instance is considered to be more of a pet than cattle. Therefore this operation is not considered to be mandatory to support. cli=cinder extend -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=unknown -driver-impl-libvirt-kvm-s390x=unknown -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=unknown -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=unknown -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=complete -driver-notes-powervm=This is not tested for every CI run. Add a +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=unknown +driver.libvirt-kvm-s390x=unknown +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=unknown +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=unknown +driver.libvirt-vz-ct=missing +driver.powervm=complete +driver-notes.powervm=This is not tested for every CI run. Add a "powervm:volume-check" comment to trigger a CI job running volume tests. [operation.attach-interface] @@ -198,23 +225,23 @@ notes=The attach interface operation provides a means to hotplug In a cloud model it would be more typical to just spin up a new instance with more interfaces. cli=nova interface-attach -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=partial -driver-notes-hyperv=Works without issue if instance is off. When +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=partial +driver-notes.hyperv=Works without issue if instance is off. When hotplugging, only works if using Windows/Hyper-V Server 2016 and the instance is a Generation 2 VM. -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.attach-tagged-interface] title=Attach tagged virtual network interface to instance @@ -222,43 +249,43 @@ status=optional notes=Attach a virtual network interface with a tag to an existing server instance. See "Device tags" for more information. cli=nova interface-attach [--tag ] -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.detach-interface] title=Detach virtual network interface from instance status=optional notes=See notes for attach-interface operation. cli=nova interface-detach -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-notes-hyperv=Works without issue if instance is off. When +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver-notes.hyperv=Works without issue if instance is off. When hotplugging, only works if using Windows/Hyper-V Server 2016 and the instance is a Generation 2 VM. -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.maintenance-mode] title=Set the host in a maintenance mode @@ -271,20 +298,20 @@ notes=This operation allows a host to be placed into maintenance The driver methods to implement are "host_maintenance_mode" and "set_host_enabled". cli=nova host-update -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=missing -driver-impl-libvirt-kvm-aarch64=missing -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=missing -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=missing +driver.libvirt-kvm-aarch64=missing +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=missing +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.evacuate] title=Evacuate instances from a host @@ -298,20 +325,20 @@ notes=A possible failure scenario in a cloud environment is the outage dropped. That happens in the same way as a rebuild. This is not considered to be a mandatory operation to support. cli=nova evacuate ;nova host-evacuate -driver-impl-xenserver=unknown -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=unknown -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=unknown -driver-impl-libvirt-lxc=unknown -driver-impl-libvirt-xen=unknown -driver-impl-vmware=unknown -driver-impl-hyperv=unknown -driver-impl-ironic=unknown -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=unknown +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=unknown +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=unknown +driver.libvirt-lxc=unknown +driver.libvirt-xen=unknown +driver.vmware=unknown +driver.hyperv=unknown +driver.ironic=unknown +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.rebuild] title=Rebuild instance @@ -322,20 +349,20 @@ notes=A possible use case is additional attributes need to be set 'personalities'. Though this is not considered to be a mandatory operation to support. cli=nova rebuild -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [operation.get-guest-info] title=Guest instance status @@ -345,20 +372,20 @@ notes=Provides realtime information about the power state of the guest tracking changes in guests, this operation is considered mandatory to support. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.get-host-uptime] title=Guest host uptime @@ -366,20 +393,20 @@ status=optional notes=Returns the result of host uptime since power on, it's used to report hypervisor status. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.get-host-ip] title=Guest host ip @@ -387,20 +414,20 @@ status=optional notes=Returns the ip of this host, it's used when doing resize and migration. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.live-migrate] title=Live migrate instance across hosts @@ -417,21 +444,21 @@ notes=Live migration provides a way to move an instance off one built on the container based virtualization. Therefore this operation is not considered mandatory to support. cli=nova live-migration ;nova host-evacuate-live -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=missing -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-notes-vmware=https://bugs.launchpad.net/nova/+bug/1192192 -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=missing +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=missing +driver-notes.vmware=https://bugs.launchpad.net/nova/+bug/1192192 +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [operation.force-live-migration-to-complete] title=Force live migration to complete @@ -447,24 +474,24 @@ 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 until the migration is completed or aborted. cli=nova live-migration-force-complete -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=missing -driver-notes-libvirt-kvm-x86=Requires libvirt>=1.3.3, qemu>=2.5.0 -driver-impl-libvirt-kvm-ppc64=complete -driver-notes-libvirt-kvm-ppc64=Requires libvirt>=1.3.3, qemu>=2.5.0 -driver-impl-libvirt-kvm-s390x=complete -driver-notes-libvirt-kvm-s390x=Requires libvirt>=1.3.3, qemu>=2.5.0 -driver-impl-libvirt-qemu-x86=complete -driver-notes-libvirt-qemu-x86=Requires libvirt>=1.3.3, qemu>=2.5.0 -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=missing +driver-notes.libvirt-kvm-x86=Requires libvirt>=1.3.3, qemu>=2.5.0 +driver.libvirt-kvm-ppc64=complete +driver-notes.libvirt-kvm-ppc64=Requires libvirt>=1.3.3, qemu>=2.5.0 +driver.libvirt-kvm-s390x=complete +driver-notes.libvirt-kvm-s390x=Requires libvirt>=1.3.3, qemu>=2.5.0 +driver.libvirt-qemu-x86=complete +driver-notes.libvirt-qemu-x86=Requires libvirt>=1.3.3, qemu>=2.5.0 +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.launch] title=Launch instance @@ -473,20 +500,20 @@ notes=Importing pre-existing running virtual machines on a host is considered out of scope of the cloud paradigm. Therefore this operation is mandatory to support in drivers. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.pause] title=Stop instance CPUs (pause) @@ -501,20 +528,20 @@ notes=Stopping an instances CPUs can be thought of as roughly implement it. Therefore this operation is considered optional to support in drivers. cli=nova pause -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.reboot] title=Reboot instance @@ -525,20 +552,20 @@ notes=It is reasonable for a guest OS administrator to trigger a reboot can be achieved by a combination of stop+start. Therefore this operation is considered optional. cli=nova reboot -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.rescue] title=Rescue instance @@ -552,20 +579,20 @@ notes=The rescue operation starts an instance in a special thrown away and a new instance created. Therefore this operation is considered optional to support in drivers. cli=nova rescue -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [operation.resize] title=Resize instance @@ -579,42 +606,42 @@ notes=The resize operation allows the user to change a running running instance. Therefore this operation is considered optional to support in drivers. cli=nova resize -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-notes-vz-vm=Resizing Virtuozzo instances implies guest filesystem resize also -driver-impl-libvirt-vz-ct=complete -driver-notes-vz-ct=Resizing Virtuozzo instances implies guest filesystem resize also -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver-notes.vz-vm=Resizing Virtuozzo instances implies guest filesystem resize also +driver.libvirt-vz-ct=complete +driver-notes.vz-ct=Resizing Virtuozzo instances implies guest filesystem resize also +driver.powervm=missing [operation.resume] title=Restore instance status=optional notes=See notes for the suspend operation cli=nova resume -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [operation.set-admin-password] title=Set instance admin password @@ -631,25 +658,25 @@ notes=Provides a mechanism to (re)set the password of the administrator this is just a convenient optimization. Therefore this operation is not considered mandatory for drivers to support. cli=nova set-password -driver-impl-xenserver=complete -driver-notes-xenserver=Requires XenAPI agent on the guest. -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-notes-libvirt-kvm-x86=Requires libvirt>=1.2.16 and hw_qemu_guest_agent. -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=complete -driver-notes-libvirt-qemu-x86=Requires libvirt>=1.2.16 and hw_qemu_guest_agent. -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-notes-libvirt-vz-vm=Requires libvirt>=2.0.0 -driver-impl-libvirt-vz-ct=complete -driver-notes-libvirt-vz-ct=Requires libvirt>=2.0.0 -driver-impl-powervm=missing +driver.xenserver=complete +driver-notes.xenserver=Requires XenAPI agent on the guest. +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver-notes.libvirt-kvm-x86=Requires libvirt>=1.2.16 and hw_qemu_guest_agent. +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=complete +driver-notes.libvirt-qemu-x86=Requires libvirt>=1.2.16 and hw_qemu_guest_agent. +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver-notes.libvirt-vz-vm=Requires libvirt>=2.0.0 +driver.libvirt-vz-ct=complete +driver-notes.libvirt-vz-ct=Requires libvirt>=2.0.0 +driver.powervm=missing [operation.snapshot] title=Save snapshot of instance disk @@ -665,22 +692,22 @@ notes=The snapshot operation allows the current state of the snapshot cannot be assumed. Therefore this operation is not considered mandatory to support. cli=nova image-create -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=partial -driver-notes-libvirt-xen=Only cold snapshots (pause + snapshot) supported -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete -driver-notes-powervm=When using the localdisk disk driver, snapshot is only +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=partial +driver-notes.libvirt-xen=Only cold snapshots (pause + snapshot) supported +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete +driver-notes.powervm=When using the localdisk disk driver, snapshot is only supported if I/O is being hosted by the management partition. If hosting I/O on traditional VIOS, we are limited by the fact that a VSCSI device can't be mapped to two partitions (the VIOS and the management) at once. @@ -704,20 +731,20 @@ notes=Suspending an instance can be thought of as roughly the instance instead of suspending. Therefore this operation is considered optional to support. cli=nova suspend -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [operation.swap-volume] title=Swap block volumes @@ -731,20 +758,20 @@ notes=The swap volume operation is a mechanism for changing a running migration to work in the volume service. This is considered optional to support. cli=nova volume-update -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.terminate] title=Shutdown instance @@ -754,24 +781,24 @@ notes=The ability to terminate a virtual machine is required in avoid indefinitely ongoing billing. Therefore this operation is mandatory to support in drivers. cli=nova delete -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-notes-libvirt-lxc=Fails in latest Ubuntu Trusty kernel +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver-notes.libvirt-lxc=Fails in latest Ubuntu Trusty kernel from security repository (3.13.0-76-generic), but works in upstream 3.13.x kernels as well as default Ubuntu Trusty latest kernel (3.13.0-58-generic). -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.trigger-crash-dump] title=Trigger crash dump @@ -782,40 +809,40 @@ 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 for users. Therefore this operation is considered optional to support. cli=nova trigger-crash-dump -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=complete +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.unpause] title=Resume instance CPUs (unpause) status=optional notes=See notes for the "Stop instance CPUs" operation cli=nova unpause -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [guest.disk.autoconfig] title=Auto configure disk @@ -824,20 +851,20 @@ notes=Partition and resize FS to match the size specified by flavors.root_gb, As this is hypervisor specific feature. Therefore this operation is considered optional to support. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=missing -driver-impl-libvirt-kvm-aarch64=missing -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=missing -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=missing +driver.libvirt-kvm-aarch64=missing +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=missing +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [guest.disk.rate-limit] title=Instance disk I/O limits @@ -849,20 +876,20 @@ notes=The ability to set rate limits on virtual disks allows for of doing fine grained tuning. Therefore this is not considered to be an mandatory configuration to support. cli=nova limits -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [guest.setup.configdrive] title=Config drive support @@ -877,21 +904,21 @@ notes=The config drive provides an information channel into of the guest setup mechanisms is required to be supported by drivers, in order to enable login access. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-notes-libvirt-kvm-aarch64=Requires kernel with proper config (oldest known: Ubuntu 4.13 HWE) -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver-notes.libvirt-kvm-aarch64=Requires kernel with proper config (oldest known: Ubuntu 4.13 HWE) +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=complete [guest.setup.inject.file] title=Inject files into disk image @@ -906,20 +933,20 @@ notes=This allows for the end user to provide data for multiple service or config drive. Therefore this operation is considered optional to support. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [guest.setup.inject.networking] title=Inject guest networking config @@ -935,24 +962,24 @@ notes=This allows for static networking configuration (IP config drive. Therefore this operation is considered optional to support. cli= -driver-impl-xenserver=partial -driver-notes-xenserver=Only for Debian derived guests -driver-impl-libvirt-kvm-x86=partial -driver-notes-libvirt-kvm-x86=Only for Debian derived guests -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=partial -driver-notes-libvirt-qemu-x86=Only for Debian derived guests -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=partial -driver-notes-vmware=requires vmware tools installed -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=partial +driver-notes.xenserver=Only for Debian derived guests +driver.libvirt-kvm-x86=partial +driver-notes.libvirt-kvm-x86=Only for Debian derived guests +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=partial +driver-notes.libvirt-qemu-x86=Only for Debian derived guests +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=partial +driver-notes.vmware=requires vmware tools installed +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [console.rdp] title=Remote desktop over RDP @@ -966,20 +993,20 @@ notes=This allows the administrator to interact with the graphical mandatory, however, a driver is required to support at least one of the listed console access operations. cli=nova get-rdp-console -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=missing -driver-impl-libvirt-kvm-aarch64=missing -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=missing -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=missing +driver.libvirt-kvm-aarch64=missing +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=missing +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [console.serial.log] title=View serial console logs @@ -994,20 +1021,20 @@ notes=This allows the administrator to query the logs of data operation is not mandatory, however, a driver is required to support at least one of the listed console access operations. cli=nova console-log -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [console.serial.interactive] title=Remote interactive serial console @@ -1023,20 +1050,20 @@ notes=This allows the administrator to interact with the serial This feature was introduced in the Juno release with blueprint https://blueprints.launchpad.net/nova/+spec/serial-ports cli=nova get-serial-console -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=unknown -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=unknown -driver-impl-libvirt-lxc=unknown -driver-impl-libvirt-xen=unknown -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=unknown +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=unknown +driver.libvirt-lxc=unknown +driver.libvirt-xen=unknown +driver.vmware=missing +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [console.spice] title=Remote desktop over SPICE @@ -1050,20 +1077,20 @@ notes=This allows the administrator to interact with the graphical mandatory, however, a driver is required to support at least one of the listed console access operations. cli=nova get-spice-console -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [console.vnc] title=Remote desktop over VNC @@ -1077,20 +1104,20 @@ notes=This allows the administrator to interact with the graphical mandatory, however, a driver is required to support at least one of the listed console access operations. cli=nova get-vnc-console -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [storage.block] title=Block storage support @@ -1106,21 +1133,21 @@ notes=Block storage provides instances with direct attached the network. Therefore support for this configuration is not considered mandatory for drivers to support. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=partial -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=complete -driver-notes-powervm=This is not tested for every CI run. Add a +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=partial +driver.libvirt-vz-ct=missing +driver.powervm=complete +driver-notes.powervm=This is not tested for every CI run. Add a "powervm:volume-check" comment to trigger a CI job running volume tests. [storage.block.backend.fibrechannel] @@ -1131,21 +1158,21 @@ notes=To maximise performance of the block storage, it may be desirable technology on the compute hosts. Since this is just a performance optimization of the I/O path it is not considered mandatory to support. cli= -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=complete -driver-notes-powervm=This is not tested for every CI run. Add a +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=complete +driver-notes.powervm=This is not tested for every CI run. Add a "powervm:volume-check" comment to trigger a CI job running volume tests. [storage.block.backend.iscsi] @@ -1159,20 +1186,20 @@ notes=If the driver wishes to support block storage, it is common to block storage, then this is considered mandatory to support, otherwise it is considered optional. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [storage.block.backend.iscsi.auth.chap] title=CHAP authentication for iSCSI @@ -1182,20 +1209,20 @@ notes=If accessing the cinder iSCSI service over an untrusted LAN it protocol. CHAP is the commonly used authentication protocol for iSCSI. This is not considered mandatory to support. (?) cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [storage.image] title=Image storage support @@ -1207,60 +1234,60 @@ 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 a mandatory storage feature to support. cli=nova boot --image -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [networking.firewallrules] title=Network firewall rules status=optional notes=Unclear how this is different from security groups cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [networking.routing] title=Network routing status=optional notes=Unclear what this refers to cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=missing -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=missing +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [networking.securitygroups] title=Network security groups @@ -1273,21 +1300,21 @@ notes=The security groups feature provides a way to define rules superfluous requirement. Therefore this is considered to be an optional configuration to support. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=partial -driver-notes-vmware=This is supported by the Neutron NSX plugins -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=partial +driver-notes.vmware=This is supported by the Neutron NSX plugins +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [networking.topology.flat] title=Flat networking @@ -1297,20 +1324,20 @@ notes=Provide network connectivity to guests using a of the networking configurations is mandatory to support in the drivers. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=complete -driver-impl-ironic=complete -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=complete +driver.ironic=complete +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [networking.topology.vlan] title=VLAN networking @@ -1319,41 +1346,41 @@ notes=Provide network connectivity to guests using VLANs to define the topology when using nova-network. At least one of the networking configurations is mandatory to support in the drivers. cli= -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=complete -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=complete +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=complete +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=complete [operation.uefi-boot] title=uefi boot status=optional notes=This allows users to boot a guest with uefi firmware. cli= -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=missing -driver-impl-libvirt-kvm-s390x=missing -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=partial -driver-notes-ironic=depends on hardware support -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=missing +driver.libvirt-kvm-s390x=missing +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=partial +driver-notes.ironic=depends on hardware support +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.device-tags] title=Device tags @@ -1371,20 +1398,20 @@ notes=This allows users to set tags on virtual devices when creating a Instead, device role tags should be used. Device tags can be applied to virtual network interfaces and block devices. cli=nova boot -driver-impl-xenserver=complete -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=unknown -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=complete -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=unknown -driver-impl-powervm=missing +driver.xenserver=complete +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=unknown +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=complete +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=unknown +driver.powervm=missing [operation.quiesce] title=quiesce @@ -1393,40 +1420,40 @@ notes=Quiesce the specified instance to prepare for snapshots. For libvirt, guest filesystems will be frozen through qemu agent. cli= -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.unquiesce] title=unquiesce status=optional notes=See notes for the quiesce operation cli= -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.multiattach-volume] title=Attach block volume to multiple instances @@ -1438,20 +1465,20 @@ notes=The multiattach volume operation is an extension to Note that for the libvirt driver, this is only supported if qemu<2.10 or libvirt>=3.10. cli=nova volume-attach -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=missing +driver.powervm=missing [operation.trusted-certs] title=Validate image with trusted certificates @@ -1462,20 +1489,20 @@ notes=Since trusted image certification validation is configurable drivers cannot support the feature since it is mostly just plumbing user requests through the virt driver when downloading images. cli=nova boot --trusted-image-certificate-id ... -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=complete -driver-impl-libvirt-kvm-ppc64=complete -driver-impl-libvirt-kvm-s390x=complete -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=complete -driver-impl-libvirt-xen=complete -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=complete -driver-impl-libvirt-vz-ct=complete -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=complete +driver.libvirt-kvm-ppc64=complete +driver.libvirt-kvm-s390x=complete +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=complete +driver.libvirt-xen=complete +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=complete +driver.libvirt-vz-ct=complete +driver.powervm=missing [operation.file-backed-memory] title=File backed memory @@ -1486,17 +1513,17 @@ notes=The file backed memory feature in Openstack allows a Nova node to serve within the libvirt memory backing directory. This is only supported if qemu>2.6 and libivrt>4.0.0 cli= -driver-impl-xenserver=missing -driver-impl-libvirt-kvm-x86=complete -driver-impl-libvirt-kvm-aarch64=unknown -driver-impl-libvirt-kvm-ppc64=unknown -driver-impl-libvirt-kvm-s390x=unknown -driver-impl-libvirt-qemu-x86=complete -driver-impl-libvirt-lxc=missing -driver-impl-libvirt-xen=missing -driver-impl-vmware=missing -driver-impl-hyperv=missing -driver-impl-ironic=missing -driver-impl-libvirt-vz-vm=missing -driver-impl-libvirt-vz-ct=missing -driver-impl-powervm=missing +driver.xenserver=missing +driver.libvirt-kvm-x86=complete +driver.libvirt-kvm-aarch64=unknown +driver.libvirt-kvm-ppc64=unknown +driver.libvirt-kvm-s390x=unknown +driver.libvirt-qemu-x86=complete +driver.libvirt-lxc=missing +driver.libvirt-xen=missing +driver.vmware=missing +driver.hyperv=missing +driver.ironic=missing +driver.libvirt-vz-vm=missing +driver.libvirt-vz-ct=missing +driver.powervm=missing