Remove microversions from document versions

This PS removes microversions from document versions because
no services use microversions and microversioning for documents
isn't supported in Deckhand.

Change-Id: I3635d15513a2c7b8154ec6be4d0b8577e7d4ce3d
This commit is contained in:
Felipe Monteiro 2018-02-22 21:26:01 -05:00
parent e0fc59e89b
commit 4e796ed30a
17 changed files with 43 additions and 61 deletions

View File

@ -36,13 +36,9 @@ _SUPPORTED_SCHEMA_VERSIONS = ('v1',)
def _get_schema_parts(document, schema_key='schema'):
# TODO(fmontei): Remove this function once documents have been standardized
# around macroversions or microversions.
schema_parts = utils.jsonpath_parse(document, schema_key).split('/')
schema_prefix = '/'.join(schema_parts[:2])
schema_version = schema_parts[2]
if schema_version.endswith('.0'):
schema_version = schema_version[:-2]
return schema_prefix, schema_version
@ -83,7 +79,7 @@ class BaseValidator(object):
"""
_supported_versions = ('v1',)
_schema_re = re.compile(r'^[a-zA-Z]+\/[a-zA-Z]+\/v\d+(.0)?$')
_schema_re = re.compile(r'^[a-zA-Z]+\/[a-zA-Z]+\/v\d+$')
def __init__(self):
global _DEFAULT_SCHEMAS

View File

@ -22,16 +22,16 @@ data:
properties:
schema:
type: string
pattern: ^[A-Za-z]+/[A-Za-z]+/v\d+(.0)?$
pattern: ^[A-Za-z]+/[A-Za-z]+/v\d+$
metadata:
type: object
properties:
schema:
anyOf:
- type: string
pattern: ^metadata/Document/v\d+(.0)?$
pattern: ^metadata/Document/v\d+$
- type: string
pattern: ^metadata/Control/v\d+(.0)?$
pattern: ^metadata/Control/v\d+$
name:
type: string
labels:
@ -82,7 +82,7 @@ data:
properties:
schema:
type: string
pattern: ^[A-Za-z]+/[A-Za-z]+/v\d+(.0)?$
pattern: ^[A-Za-z]+/[A-Za-z]+/v\d+$
name:
type: string
path:

View File

@ -27,8 +27,6 @@ DOCUMENT_TEST_SCHEMA = 'example/Kind/v1'
@six.add_metaclass(abc.ABCMeta)
class DeckhandFactory(object):
# TODO(fmontei): Allow this to be overridden in ``__init__``.
API_VERSION = '1.0'
@abc.abstractmethod
def gen_test(self, *args, **kwargs):
@ -92,13 +90,13 @@ class DocumentFactory(DeckhandFactory):
},
"metadata": {
"name": "placeholder",
"schema": "metadata/Control/v%s" % DeckhandFactory.API_VERSION,
"schema": "metadata/Control/v1",
"layeringDefinition": {
"abstract": False,
"layer": ""
}
},
"schema": "deckhand/LayeringPolicy/v%s" % DeckhandFactory.API_VERSION
"schema": "deckhand/LayeringPolicy/v1"
}
DOCUMENT_TEMPLATE = {
@ -111,7 +109,7 @@ class DocumentFactory(DeckhandFactory):
"actions": []
},
"name": "",
"schema": "metadata/Document/v%s" % DeckhandFactory.API_VERSION
"schema": "metadata/Document/v1"
},
"schema": DOCUMENT_TEST_SCHEMA
}

View File

@ -1,7 +1,7 @@
---
schema: deckhand/Certificate/v1.0
schema: deckhand/Certificate/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-api
storagePolicy: cleartext
layeringDefinition:

View File

@ -1,7 +1,7 @@
---
schema: deckhand/CertificateAuthority/v1.0
schema: deckhand/CertificateAuthority/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-api
storagePolicy: cleartext
layeringDefinition:

View File

@ -1,7 +1,7 @@
---
schema: deckhand/CertificateAuthorityKey/v1.0
schema: deckhand/CertificateAuthorityKey/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-api
storagePolicy: cleartext
layeringDefinition:

View File

@ -1,7 +1,7 @@
---
schema: deckhand/CertificateKey/v1.0
schema: deckhand/CertificateKey/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-api
storagePolicy: encrypted
layeringDefinition:

View File

@ -1,12 +1,12 @@
---
schema: deckhand/DataSchema/v1.0 # This specifies the official JSON schema meta-schema.
schema: deckhand/DataSchema/v1
metadata:
schema: metadata/Control/v1.0
name: promenade/Node/v1.0 # Specifies the documents to be used for validation.
schema: metadata/Control/v1
name: promenade/Node/v1
labels:
application: promenade
layeringDefinition:
abstract: False
layer: site
data: # Valid JSON Schema is expected here.
data:
$schema: http://blah

View File

@ -1,8 +1,8 @@
# Sample YAML file for testing forward replacement.
---
schema: promenade/ResourceType/v1.0
schema: promenade/ResourceType/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: a-unique-config-name-12345
labels:
component: apiserver
@ -22,20 +22,20 @@ metadata:
- dest:
path: .chart.values.tls.certificate
src:
schema: deckhand/Certificate/v1.0
schema: deckhand/Certificate/v1
name: example-cert
path: .
- dest:
path: .chart.values.tls.key
src:
schema: deckhand/CertificateKey/v1.0
schema: deckhand/CertificateKey/v1
name: example-key
path: .
- dest:
path: .chart.values.some_url
pattern: INSERT_[A-Z]+_HERE
src:
schema: deckhand/Passphrase/v1.0
schema: deckhand/Passphrase/v1
name: example-password
path: .
data:

View File

@ -1,7 +1,7 @@
---
schema: armada/Manifest/v1.0
schema: armada/Manifest/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: cluster-bootstrap
layeringDefinition:
abstract: false

View File

@ -1,8 +1,8 @@
# Sample layering policy.
---
schema: deckhand/LayeringPolicy/v1.0
schema: deckhand/LayeringPolicy/v1
metadata:
schema: metadata/Control/v1.0
schema: metadata/Control/v1
name: a-unique-config-name-12345
layeringDefinition:
abstract: False

View File

@ -1,7 +1,7 @@
---
schema: deckhand/Passphrase/v1.0
schema: deckhand/Passphrase/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-admin-password
storagePolicy: encrypted
layeringDefinition:

View File

@ -1,7 +1,7 @@
---
schema: deckhand/PrivateKey/v1.0
schema: deckhand/PrivateKey/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-private-password
storagePolicy: encrypted
layeringDefinition:

View File

@ -1,7 +1,7 @@
---
schema: deckhand/PublicKey/v1.0
schema: deckhand/PublicKey/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-public-password
storagePolicy: encrypted
layeringDefinition:

View File

@ -1,8 +1,8 @@
# Sample post-validation policy document.
---
schema: deckhand/ValidationPolicy/v1.0
schema: deckhand/ValidationPolicy/v1
metadata:
schema: metadata/Control/v1.0
schema: metadata/Control/v1
name: later-validation
layeringDefinition:
abstract: False

View File

@ -222,16 +222,6 @@ def multisort(data, sort_by=None, order_by=None):
reverse=True if order_by == 'desc' else False)
def _add_microversion(value):
"""Hack for coercing all Deckhand schema fields (``schema`` and
``metadata.schema``) into ending with v1.0 rather than v1, for example.
"""
microversion_re = r'^.*/.*/v[1-9]\d*$'
if re.match(value, microversion_re):
return value + '.0'
return value
def deepfilter(dct, **filters):
"""Match ``dct`` against all the filters in ``filters``.
@ -297,8 +287,6 @@ def deepfilter(dct, **filters):
filter_val = _transform_filter_bool(filter_val)
if filter_key in ['schema', 'metadata.schema']:
actual_val = _add_microversion(actual_val)
filter_val = _add_microversion(filter_val)
parts = actual_val.split('/')[:2]
if len(parts) == 2:
actual_namespace, actual_kind = parts

View File

@ -89,9 +89,9 @@ the client managers' functionality:
# Generate a sample document.
payload = """
---
schema: deckhand/Certificate/v1.0
schema: deckhand/Certificate/v1
metadata:
schema: metadata/Document/v1.0
schema: metadata/Document/v1
name: application-api
storagePolicy: cleartext
data: |-
@ -112,10 +112,10 @@ the client managers' functionality:
# Convert the response to a dictionary.
>>> result.to_dict()
{'status': {'bucket': 'mop', 'revision': 1},
'schema': 'deckhand/Certificate/v1.0', 'data': {...} 'id': 1,
'schema': 'deckhand/Certificate/v1', 'data': {...} 'id': 1,
'metadata': {'layeringDefinition': {'abstract': False},
'storagePolicy': 'cleartext', 'name': 'application-api',
'schema': 'metadata/Document/v1.0'}}
'schema': 'metadata/Document/v1'}}
# Show the revision that was created.
revision = client.revisions.get(1)
@ -138,10 +138,10 @@ the client managers' functionality:
>>> [r.to_dict() for r in raw_documents]
[{'status': {'bucket': 'foo', 'revision': 1},
'schema': 'deckhand/Certificate/v1.0', 'data': {...}, 'id': 1,
'schema': 'deckhand/Certificate/v1', 'data': {...}, 'id': 1,
'metadata': {'layeringDefinition': {'abstract': False},
'storagePolicy': 'cleartext', 'name': 'application-api',
'schema': 'metadata/Document/v1.0'}}]
'schema': 'metadata/Document/v1'}}]
Client Reference
----------------