Add cutoff_score to next.json, update script

We recently added a field in Schema 1.4 to record a
"cutoff_score".[1]  The field reflects the minimum score that a
Capability needs to achieve for a given Guideline in order to
warrant inclusion.  The current draft Guideline, however, hasn't yet
 been updated to include a cutoff score.

This patch adds a cutoff_score field to next.json and sets it to
a preliminary vale of 74 (which is indicative of the score we've
used in the past as a cutoff, but which can be changed by the
DefCore Committee any time between now and when the Guideline goes to
the Board for approval before it becomes binding).  The patch also
updates the tabulate_scores.py script to read the cutoff_score from the
JSON document and adds an asterisk (*) to lines in the scoring file whose
totals meet or exceed the cutoff as a visual indicator of which
Capabilities have scored highly enough to warrant inclusion in the
Guideline.  Verbage in the header of the scoring.txt file has also been
updated to reflect the meaning of the indicator.

The patch also adds the cutoff_score field to the 2016.01 document,
where it was inadvertently left off since the field was only added
to the schema in close proximity to the document being finalized for
Board approval.

[1] https://review.openstack.org/#/c/224868/

Change-Id: I73d08baae13f373c955ff94640fac43109125886
This commit is contained in:
Mark T. Voelker 2016-04-14 23:16:18 -04:00
parent 1acbbb2006
commit fbd9c0dccc
5 changed files with 153 additions and 130 deletions

View File

@ -4,6 +4,7 @@
"reference": "https://git.openstack.org/cgit/openstack/defcore/schema/1.3.rst",
"source": "http://git.openstack.org/cgit/openstack/defcore/",
"status": "approved",
"cutoff_score": "74",
"target_approval": "2016-01-27",
"replaces": "2015.07",
"releases": ["juno", "kilo", "liberty"],

View File

@ -4,6 +4,7 @@
"reference": "https://git.openstack.org/cgit/openstack/defcore/schema/1.3.rst",
"source": "http://git.openstack.org/cgit/openstack/defcore/",
"status": "draft",
"cutoff_score": "74",
"target_approval": "2016-08-23",
"replaces": "2016.01",
"releases": ["kilo", "liberty", "mitaka"],

View File

@ -13,34 +13,43 @@ Capability Name: [Widely Deployed,Used By Tools,Used by Clients],
[TC Future Direction, Complete, Stable],
[Discoverable, Doc'd, Core in Last Release],
[Foundational, Atomic, Proximity],
[Non-Admin]
[Non-Admin] [Total]
Possible scores: 0, 1, ? (not scored yet or needs discussion)
The Total score is calculated by multiplying the score for each
Criteria by the weight assigned to that Criteria in the Guideline
JSON file. It is not necessary to calculate the score by hand:
use the tabulate_scores.py script found in this directory. The
script will also append an asterisk (*) to the end of the line if
the total score is greater than or equal to the cutoff_score listed
in the Guideline JSON file, indicating that the Capability
has scored high enough to merit inclusion in the Guideline.
Networking
----------
network-floating-ips-associate: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]
network-floating-ips-create: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]
network-floating-ips-update: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]
network-floating-ips-delete: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]
network-l2-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l2-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l2-external: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l2-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l2-port: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l2-show: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l2-update: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l3-add: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-floating-ips-associate: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]*
network-floating-ips-create: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]*
network-floating-ips-update: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]*
network-floating-ips-delete: [1,1,1] [1,1,1] [0,1,0] [0,1,1] [1] [74]*
network-l2-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l2-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l2-external: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l2-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l2-port: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l2-show: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l2-update: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l3-add: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l3-convert: [0,0,0] [1,0,0] [0,0,0] [0,0,0] [1] [11]
network-l3-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l3-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l3-router: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l3-show: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l3-update: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-security-groups-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-security-groups-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-security-groups-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-security-groups-show: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
network-l3-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l3-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l3-router: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l3-show: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-l3-update: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-security-groups-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-security-groups-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-security-groups-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-security-groups-show: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
network-extensions-provider-add: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [0] [0]
network-extensions-provider-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [0] [0]
network-extensions-provider-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [0] [0]
@ -103,7 +112,7 @@ Notes:
Compute
-------
compute-list-api-versions: [1,0,0] [1,1,1] [1,1,0] [1,1,1] [1] [75]
compute-list-api-versions: [1,0,0] [1,1,1] [1,1,0] [1,1,1] [1] [75]*
Notes:
* There has been some discussion that this capability is not widely
@ -157,13 +166,13 @@ images-v1-shared-images-get: [0,1,1] [0,1,1] [0,1,0] [1,0,1] [1] [58]
images-v1-shared-images-remove: [0,1,1] [0,1,1] [0,1,0] [1,0,1] [1] [58]
images-v1-update: [0,1,1] [0,1,1] [0,1,0] [1,0,1] [1] [58]
images-v2-remove: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-update: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-share: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-import: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-list: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-delete: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-get: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]
images-v2-remove: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
images-v2-update: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
images-v2-share: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
images-v2-import: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
images-v2-list: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
images-v2-delete: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
images-v2-get: [1,0,1] [1,1,1] [1,1,0] [1,0,1] [1] [79]*
Notes:
* Image creation is captured under the register operation.
@ -173,28 +182,28 @@ Notes:
Volume
----------
volumes-v2-create-delete: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
volumes-v2-attach-detach: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
volumes-v2-snapshot-create-delete: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
volumes-v2-get: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
volumes-v2-list: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
volumes-v2-update: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
volumes-v2-copy-image-to-volume: [1,0,0] [1,1,1] [1,1,1] [1,1,1] [1] [84]
volumes-v2-clone: [1,0,1] [1,1,1] [1,1,1] [1,1,1] [1] [94]
volumes-v2-qos: [1,0,1] [1,1,1] [1,1,1] [1,1,0] [1] [86]
volumes-v2-availability-zones: [1,0,0] [1,1,1] [1,1,1] [1,1,0] [1] [76]
volumes-v2-create-delete: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
volumes-v2-attach-detach: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
volumes-v2-snapshot-create-delete: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
volumes-v2-get: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
volumes-v2-list: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
volumes-v2-update: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
volumes-v2-copy-image-to-volume: [1,0,0] [1,1,1] [1,1,1] [1,1,1] [1] [84]*
volumes-v2-clone: [1,0,1] [1,1,1] [1,1,1] [1,1,1] [1] [94]*
volumes-v2-qos: [1,0,1] [1,1,1] [1,1,1] [1,1,0] [1] [86]*
volumes-v2-availability-zones: [1,0,0] [1,1,1] [1,1,1] [1,1,0] [1] [76]*
volumes-v2-extensions: [1,0,0] [0,1,1] [1,1,1] [1,0,0] [1] [59]
volumes-v2-metadata: [1,0,1] [1,1,1] [1,1,1] [1,1,0] [1] [86]
volumes-v2-transfer: [1,0,0] [1,1,1] [1,1,1] [1,1,0] [1] [76]
volumes-v2-reserve: [1,0,0] [1,1,1] [1,1,1] [1,1,0] [1] [76]
volumes-v2-readonly: [1,0,1] [1,1,1] [1,1,1] [1,1,0] [1] [86]
volumes-v2-extend: [1,0,1] [1,1,1] [1,1,0] [1,1,0] [1] [77]
volumes-v2-upload: [1,0,1] [1,1,1] [1,1,0] [1,1,0] [1] [77]
volumes-v2-metadata: [1,0,1] [1,1,1] [1,1,1] [1,1,0] [1] [86]*
volumes-v2-transfer: [1,0,0] [1,1,1] [1,1,1] [1,1,0] [1] [76]*
volumes-v2-reserve: [1,0,0] [1,1,1] [1,1,1] [1,1,0] [1] [76]*
volumes-v2-readonly: [1,0,1] [1,1,1] [1,1,1] [1,1,0] [1] [86]*
volumes-v2-extend: [1,0,1] [1,1,1] [1,1,0] [1,1,0] [1] [77]*
volumes-v2-upload: [1,0,1] [1,1,1] [1,1,0] [1,1,0] [1] [77]*
Identity
--------
identity-v3-api-discovery: [1,0,1] [1,1,1] [1,1,0] [1,1,1] [1] [85]
identity-v3-catalog: [1,0,1] [1,1,1] [1,1,0] [1,1,1] [1] [85]
identity-v3-api-discovery: [1,0,1] [1,1,1] [1,1,0] [1,1,1] [1] [85]*
identity-v3-catalog: [1,0,1] [1,1,1] [1,1,0] [1,1,1] [1] [85]*
identity-v3-list-projects: [1,0,1] [1,1,1] [1,1,0] [0,1,0] [1] [68]
identity-v3-list-groups: [1,0,1] [1,1,1] [1,1,0] [0,1,0] [1] [68]
@ -216,19 +225,19 @@ Notes:
Object Store
------------
objectstore-object-copy: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-object-create: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-object-delete: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-object-get: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-object-put: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-object-upload: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-object-versioned: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
objectstore-temp-url-get: [1,1,1] [1,1,1] [1,1,1] [1,1,0] [1] [92]
objectstore-object-copy: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-object-create: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-object-delete: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-object-get: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-object-put: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-object-upload: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-object-versioned: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
objectstore-temp-url-get: [1,1,1] [1,1,1] [1,1,1] [1,1,0] [1] [92]*
objectstore-account-quotas: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-account-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-container-acl: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-container-quotas: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-container-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-container-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-container-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]
objectstore-account-quotas: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
objectstore-account-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
objectstore-container-acl: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
objectstore-container-quotas: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
objectstore-container-create: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
objectstore-container-delete: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*
objectstore-container-list: [1,1,1] [1,1,1] [1,1,0] [1,1,1] [1] [91]*

View File

@ -50,7 +50,7 @@ parser = argparse.ArgumentParser(
formatter_class=CustomFormatter)
parser.add_argument(
'-j', '--json-file',
default='../2016.next.json',
default='../next.json',
dest='json_file_name',
help='Path to the Guideline JSON file to read weights and names from.')
parser.add_argument(
@ -93,12 +93,15 @@ buffer = []
with open(args.score_file_name) as filehandle:
# The line format we're expecting here is:
#
# capability-name: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]
# capability-name: [1,1,1] [1,1,1] [1,1,1] [1,1,1] [1] [100]*
#
# Where the values inside the brackets can be zero, one, or a
# question mark. The final column is one that will be
# overwritten by this script and represents the total score
# for the capability. If present already, it's ignored.
# The optional asterisk on the end indicates that the total score
# is greater than or equal to the cutoff_score parsed from the JSON
# file and therefore the Capability warrants inclusion in the Guideline.
pattern = re.compile('((\S+):\s+((\[\S,\S,\S\] ){4}\[\S\]))')
# The scores in the tuples have the following meanings, in
@ -172,16 +175,25 @@ with open(args.score_file_name) as filehandle:
# wasn't complete.
total = total * complete
# If the total score exceeds the cutoff_score listed in
# the JSON file, denote that it has scored high enough
# to be included in the Guideline with an asterisk.
if total >= int(json_data['cutoff_score']):
meets_criteria = '*'
else:
meets_criteria = ''
# Now write the total score to a couple of places.
# Put it in the tabulated file.
buffer.append("%s [%d]\n" % (raw.group(1), total))
buffer.append("%s [%d]%s\n" % (raw.group(1), total,
meets_criteria))
# Put in in the CSV for easy spreadsheet import.
csv_outfile.write("%s\n" % (total))
csv_outfile.write("%s%s\n" % (total, meets_criteria))
# And stdout is useful for folks who are experimenting with
# the effect of changing a score.
print "%s: %d" % (cap_name, total)
print "%s: %d%s" % (cap_name, total, meets_criteria)
# Now we can write the text output file.
with open(args.text_outfile_name, 'w') as outfile:

View File

@ -1,32 +1,32 @@
Capability,Widely Deployed,Used by Tools,Used by Clients,Future Direction,Complete,Stable,Discoverable,Documented,Core in Last Release,Foundation,Atomic,Proximity,Non-Admin,Total
network-floating-ips-associate,1,1,1,1,1,1,0,1,0,0,1,1,1,74
network-floating-ips-create,1,1,1,1,1,1,0,1,0,0,1,1,1,74
network-floating-ips-update,1,1,1,1,1,1,0,1,0,0,1,1,1,74
network-floating-ips-delete,1,1,1,1,1,1,0,1,0,0,1,1,1,74
network-l2-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l2-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l2-external,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l2-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l2-port,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l2-show,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l2-update,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l3-add,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-floating-ips-associate,1,1,1,1,1,1,0,1,0,0,1,1,1,74*
network-floating-ips-create,1,1,1,1,1,1,0,1,0,0,1,1,1,74*
network-floating-ips-update,1,1,1,1,1,1,0,1,0,0,1,1,1,74*
network-floating-ips-delete,1,1,1,1,1,1,0,1,0,0,1,1,1,74*
network-l2-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l2-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l2-external,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l2-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l2-port,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l2-show,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l2-update,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l3-add,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l3-convert,0,0,0,1,0,0,0,0,0,0,0,0,1,11
network-l3-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l3-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l3-router,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l3-show,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l3-update,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-security-groups-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-security-groups-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-security-groups-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-security-groups-show,1,1,1,1,1,1,1,1,0,1,1,1,1,91
network-l3-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l3-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l3-router,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l3-show,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-l3-update,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-security-groups-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-security-groups-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-security-groups-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-security-groups-show,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
network-extensions-provider-add,0
network-extensions-provider-create,0
network-extensions-provider-delete,0
network-extensions-provider-show,0
network-subnet-pools,1,0,0,1,1,1,1,1,0,0,1,1,1,66
compute-list-api-versions,1,0,0,1,1,1,1,1,0,1,1,1,1,75
compute-list-api-versions,1,0,0,1,1,1,1,1,0,1,1,1,1,75*
images-v1-delete,0,1,1,0,1,1,0,1,0,1,0,1,1,58
images-v1-index,0,1,1,0,1,1,0,1,0,1,0,1,1,58
images-v1-list,0,1,1,0,1,1,0,1,0,1,0,1,1,58
@ -36,46 +36,46 @@ images-v1-shared-images-delete,0,1,1,0,1,1,0,1,0,1,0,1,1,58
images-v1-shared-images-get,0,1,1,0,1,1,0,1,0,1,0,1,1,58
images-v1-shared-images-remove,0,1,1,0,1,1,0,1,0,1,0,1,1,58
images-v1-update,0,1,1,0,1,1,0,1,0,1,0,1,1,58
images-v2-remove,1,0,1,1,1,1,1,1,0,1,0,1,1,79
images-v2-update,1,0,1,1,1,1,1,1,0,1,0,1,1,79
images-v2-share,1,0,1,1,1,1,1,1,0,1,0,1,1,79
images-v2-import,1,0,1,1,1,1,1,1,0,1,0,1,1,79
images-v2-list,1,0,1,1,1,1,1,1,0,1,0,1,1,79
images-v2-delete,1,0,1,1,1,1,1,1,0,1,0,1,1,79
images-v2-get,1,0,1,1,1,1,1,1,0,1,0,1,1,79
volumes-v2-create-delete,1,1,1,1,1,1,1,1,1,1,1,1,1,100
volumes-v2-attach-detach,1,1,1,1,1,1,1,1,1,1,1,1,1,100
volumes-v2-snapshot-create-delete,1,1,1,1,1,1,1,1,1,1,1,1,1,100
volumes-v2-get,1,1,1,1,1,1,1,1,1,1,1,1,1,100
volumes-v2-list,1,1,1,1,1,1,1,1,1,1,1,1,1,100
volumes-v2-update,1,1,1,1,1,1,1,1,1,1,1,1,1,100
volumes-v2-copy-image-to-volume,1,0,0,1,1,1,1,1,1,1,1,1,1,84
volumes-v2-clone,1,0,1,1,1,1,1,1,1,1,1,1,1,94
volumes-v2-qos,1,0,1,1,1,1,1,1,1,1,1,0,1,86
volumes-v2-availability-zones,1,0,0,1,1,1,1,1,1,1,1,0,1,76
images-v2-remove,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
images-v2-update,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
images-v2-share,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
images-v2-import,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
images-v2-list,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
images-v2-delete,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
images-v2-get,1,0,1,1,1,1,1,1,0,1,0,1,1,79*
volumes-v2-create-delete,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
volumes-v2-attach-detach,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
volumes-v2-snapshot-create-delete,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
volumes-v2-get,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
volumes-v2-list,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
volumes-v2-update,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
volumes-v2-copy-image-to-volume,1,0,0,1,1,1,1,1,1,1,1,1,1,84*
volumes-v2-clone,1,0,1,1,1,1,1,1,1,1,1,1,1,94*
volumes-v2-qos,1,0,1,1,1,1,1,1,1,1,1,0,1,86*
volumes-v2-availability-zones,1,0,0,1,1,1,1,1,1,1,1,0,1,76*
volumes-v2-extensions,1,0,0,0,1,1,1,1,1,1,0,0,1,59
volumes-v2-metadata,1,0,1,1,1,1,1,1,1,1,1,0,1,86
volumes-v2-transfer,1,0,0,1,1,1,1,1,1,1,1,0,1,76
volumes-v2-reserve,1,0,0,1,1,1,1,1,1,1,1,0,1,76
volumes-v2-readonly,1,0,1,1,1,1,1,1,1,1,1,0,1,86
volumes-v2-extend,1,0,1,1,1,1,1,1,0,1,1,0,1,77
volumes-v2-upload,1,0,1,1,1,1,1,1,0,1,1,0,1,77
identity-v3-api-discovery,1,0,1,1,1,1,1,1,0,1,1,1,1,85
identity-v3-catalog,1,0,1,1,1,1,1,1,0,1,1,1,1,85
volumes-v2-metadata,1,0,1,1,1,1,1,1,1,1,1,0,1,86*
volumes-v2-transfer,1,0,0,1,1,1,1,1,1,1,1,0,1,76*
volumes-v2-reserve,1,0,0,1,1,1,1,1,1,1,1,0,1,76*
volumes-v2-readonly,1,0,1,1,1,1,1,1,1,1,1,0,1,86*
volumes-v2-extend,1,0,1,1,1,1,1,1,0,1,1,0,1,77*
volumes-v2-upload,1,0,1,1,1,1,1,1,0,1,1,0,1,77*
identity-v3-api-discovery,1,0,1,1,1,1,1,1,0,1,1,1,1,85*
identity-v3-catalog,1,0,1,1,1,1,1,1,0,1,1,1,1,85*
identity-v3-list-projects,1,0,1,1,1,1,1,1,0,0,1,0,1,68
identity-v3-list-groups,1,0,1,1,1,1,1,1,0,0,1,0,1,68
objectstore-object-copy,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-object-create,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-object-delete,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-object-get,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-object-put,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-object-upload,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-object-versioned,1,1,1,1,1,1,1,1,1,1,1,1,1,100
objectstore-temp-url-get,1,1,1,1,1,1,1,1,1,1,1,0,1,92
objectstore-account-quotas,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-account-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-container-acl,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-container-quotas,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-container-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-container-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-container-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91
objectstore-object-copy,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-object-create,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-object-delete,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-object-get,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-object-put,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-object-upload,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-object-versioned,1,1,1,1,1,1,1,1,1,1,1,1,1,100*
objectstore-temp-url-get,1,1,1,1,1,1,1,1,1,1,1,0,1,92*
objectstore-account-quotas,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
objectstore-account-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
objectstore-container-acl,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
objectstore-container-quotas,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
objectstore-container-create,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
objectstore-container-delete,1,1,1,1,1,1,1,1,0,1,1,1,1,91*
objectstore-container-list,1,1,1,1,1,1,1,1,0,1,1,1,1,91*

Can't render this file because it has a wrong number of fields in line 24.