mirror of https://github.com/helm/helm
parent
9854ebd016
commit
6e15ece724
@ -0,0 +1,616 @@
|
||||
######################################################################
|
||||
# Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
######################################################################
|
||||
|
||||
import os
|
||||
import unittest
|
||||
import schema_validation
|
||||
import yaml
|
||||
|
||||
INVALID_PROPERTIES = "Invalid properties for 'template.py'"
|
||||
|
||||
|
||||
def GetFilePath():
|
||||
"""Find our source and data files."""
|
||||
return os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def ReadTestFile(filename):
|
||||
"""Returns contents of a file from the testdata/ directory."""
|
||||
|
||||
full_path = os.path.join(GetFilePath(), '..', 'test', 'schemas', filename)
|
||||
return open(full_path, 'r').read()
|
||||
|
||||
|
||||
def RawValidate(raw_properties, schema_name, raw_schema):
|
||||
return ImportsRawValidate(raw_properties, schema_name,
|
||||
{schema_name: raw_schema})
|
||||
|
||||
|
||||
def ImportsRawValidate(raw_properties, schema_name, import_map):
|
||||
"""Takes raw properties, calls validate and returns yaml properties."""
|
||||
properties = yaml.safe_load(raw_properties)
|
||||
return schema_validation.Validate(properties, schema_name, 'template.py',
|
||||
import_map)
|
||||
|
||||
|
||||
class SchemaValidationTest(unittest.TestCase):
|
||||
"""Tests of the schema portion of the template expansion library."""
|
||||
|
||||
def testDefaults(self):
|
||||
schema_name = 'defaults.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
expected_properties = """
|
||||
alpha: alpha
|
||||
one: 1
|
||||
"""
|
||||
self.assertEqual(yaml.safe_load(expected_properties),
|
||||
RawValidate(empty_properties, schema_name, schema))
|
||||
|
||||
def testNestedDefaults(self):
|
||||
schema_name = 'nested_defaults.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
zone: us-central1-a
|
||||
disks:
|
||||
- name: backup # diskType and sizeGb set by default
|
||||
- name: cache # sizeGb set by default
|
||||
diskType: pd-ssd
|
||||
- name: data # Nothing set by default
|
||||
diskType: pd-ssd
|
||||
sizeGb: 150
|
||||
- name: swap # diskType set by default
|
||||
sizeGb: 200
|
||||
"""
|
||||
expected_properties = """
|
||||
zone: us-central1-a
|
||||
disks:
|
||||
- sizeGb: 100
|
||||
diskType: pd-standard
|
||||
name: backup
|
||||
- sizeGb: 100
|
||||
diskType: pd-ssd
|
||||
name: cache
|
||||
- sizeGb: 150
|
||||
diskType: pd-ssd
|
||||
name: data
|
||||
- sizeGb: 200
|
||||
diskType: pd-standard
|
||||
name: swap
|
||||
"""
|
||||
self.assertEqual(yaml.safe_load(expected_properties),
|
||||
RawValidate(properties, schema_name, schema))
|
||||
|
||||
def testNestedRefDefaults(self):
|
||||
schema_name = 'ref_nested_defaults.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
zone: us-central1-a
|
||||
disks:
|
||||
- name: backup # diskType and sizeGb set by default
|
||||
- name: cache # sizeGb set by default
|
||||
diskType: pd-ssd
|
||||
- name: data # Nothing set by default
|
||||
diskType: pd-ssd
|
||||
sizeGb: 150
|
||||
- name: swap # diskType set by default
|
||||
sizeGb: 200
|
||||
"""
|
||||
expected_properties = """
|
||||
zone: us-central1-a
|
||||
disks:
|
||||
- sizeGb: 100
|
||||
diskType: pd-standard
|
||||
name: backup
|
||||
- sizeGb: 100
|
||||
diskType: pd-ssd
|
||||
name: cache
|
||||
- sizeGb: 150
|
||||
diskType: pd-ssd
|
||||
name: data
|
||||
- sizeGb: 200
|
||||
diskType: pd-standard
|
||||
name: swap
|
||||
"""
|
||||
self.assertEqual(yaml.safe_load(expected_properties),
|
||||
RawValidate(properties, schema_name, schema))
|
||||
|
||||
def testInvalidDefault(self):
|
||||
schema_name = 'invalid_default.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn(INVALID_PROPERTIES, e.message)
|
||||
self.assertIn("'string' is not of type 'integer' at ['number']",
|
||||
e.message)
|
||||
|
||||
def testRequiredDefault(self):
|
||||
schema_name = 'required_default.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
expected_properties = """
|
||||
name: my_name
|
||||
"""
|
||||
self.assertEqual(yaml.safe_load(expected_properties),
|
||||
RawValidate(empty_properties, schema_name, schema))
|
||||
|
||||
def testRequiredDefaultReference(self):
|
||||
schema_name = 'req_default_ref.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn(INVALID_PROPERTIES, e.message)
|
||||
self.assertIn("'my_name' is not of type 'integer' at ['number']",
|
||||
e.message)
|
||||
|
||||
def testDefaultReference(self):
|
||||
schema_name = 'default_ref.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
expected_properties = 'number: 1'
|
||||
|
||||
self.assertEqual(yaml.safe_load(expected_properties),
|
||||
RawValidate(empty_properties, schema_name, schema))
|
||||
|
||||
def testMissingQuoteInReference(self):
|
||||
schema_name = 'missing_quote.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = 'number: 1'
|
||||
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(2, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("type 'NoneType' is not iterable", e.message)
|
||||
self.assertIn('around your reference', e.message)
|
||||
|
||||
def testRequiredPropertyMissing(self):
|
||||
schema_name = 'required.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn(INVALID_PROPERTIES, e.message)
|
||||
self.assertIn("'name' is a required property", e.errors[0].message)
|
||||
|
||||
def testRequiredPropertyValid(self):
|
||||
schema_name = 'required.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
name: my-name
|
||||
"""
|
||||
self.assertEqual(yaml.safe_load(properties),
|
||||
RawValidate(properties, schema_name, schema))
|
||||
|
||||
def testMultipleErrors(self):
|
||||
schema_name = 'defaults.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
one: not a number
|
||||
alpha: 12345
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(2, len(e.errors))
|
||||
self.assertIn(INVALID_PROPERTIES, e.message)
|
||||
self.assertIn("'not a number' is not of type 'integer' at ['one']",
|
||||
e.message)
|
||||
self.assertIn("12345 is not of type 'string' at ['alpha']", e.message)
|
||||
|
||||
def testNumbersValid(self):
|
||||
schema_name = 'numbers.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
minimum0: 0
|
||||
exclusiveMin0: 1
|
||||
maximum10: 10
|
||||
exclusiveMax10: 9
|
||||
even: 20
|
||||
odd: 21
|
||||
"""
|
||||
self.assertEquals(yaml.safe_load(properties),
|
||||
RawValidate(properties, schema_name, schema))
|
||||
|
||||
def testNumbersInvalid(self):
|
||||
schema_name = 'numbers.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
minimum0: -1
|
||||
exclusiveMin0: 0
|
||||
maximum10: 11
|
||||
exclusiveMax10: 10
|
||||
even: 21
|
||||
odd: 20
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(6, len(e.errors))
|
||||
self.assertIn(INVALID_PROPERTIES, e.message)
|
||||
self.assertIn("-1 is less than the minimum of 0 at ['minimum0']",
|
||||
e.message)
|
||||
self.assertIn(('0 is less than or equal to the minimum of 0'
|
||||
" at ['exclusiveMin0']"), e.message)
|
||||
self.assertIn("11 is greater than the maximum of 10 at ['maximum10']",
|
||||
e.message)
|
||||
self.assertIn(('10 is greater than or equal to the maximum of 10'
|
||||
" at ['exclusiveMax10']"), e.message)
|
||||
self.assertIn("21 is not a multiple of 2 at ['even']", e.message)
|
||||
self.assertIn("{'multipleOf': 2} is not allowed for 20 at ['odd']",
|
||||
e.message)
|
||||
|
||||
def testReference(self):
|
||||
schema_name = 'reference.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
odd: 6
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn('even', e.message)
|
||||
self.assertIn('is not allowed for 6', e.message)
|
||||
|
||||
def testBadSchema(self):
|
||||
schema_name = 'bad.jinja.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(2, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("u'minimum' is a dependency of u'exclusiveMinimum'",
|
||||
e.message)
|
||||
self.assertIn("0 is not of type u'boolean'", e.message)
|
||||
|
||||
def testInvalidReference(self):
|
||||
schema_name = 'invalid_reference.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = 'odd: 1'
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn('Unresolvable JSON pointer', e.message)
|
||||
|
||||
def testInvalidReferenceInSchema(self):
|
||||
schema_name = 'invalid_reference_schema.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
empty_properties = ''
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn('Unresolvable JSON pointer', e.message)
|
||||
|
||||
def testMetadata(self):
|
||||
schema_name = 'metadata.py.schema'
|
||||
schema = ReadTestFile(schema_name)
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
self.assertEquals(yaml.safe_load(properties),
|
||||
RawValidate(properties, schema_name, schema))
|
||||
|
||||
def testInvalidInput(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
info:
|
||||
title: Invalid Input
|
||||
properties: invalid
|
||||
"""
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("'invalid' is not of type u'object'", e.message)
|
||||
|
||||
def testPattern(self):
|
||||
schema_name = 'schema'
|
||||
schema = r"""
|
||||
properties:
|
||||
bad-zone:
|
||||
pattern: \w+-\w+-\w+
|
||||
zone:
|
||||
pattern: \w+-\w+-\w+
|
||||
"""
|
||||
properties = """
|
||||
bad-zone: abc
|
||||
zone: us-central1-a
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn('Invalid properties', e.message)
|
||||
self.assertIn("'abc' does not match", e.message)
|
||||
self.assertIn('bad-zone', e.message)
|
||||
|
||||
def testUniqueItems(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
properties:
|
||||
bad-list:
|
||||
type: array
|
||||
uniqueItems: true
|
||||
list:
|
||||
type: array
|
||||
uniqueItems: true
|
||||
"""
|
||||
properties = """
|
||||
bad-list:
|
||||
- a
|
||||
- b
|
||||
- a
|
||||
list:
|
||||
- a
|
||||
- b
|
||||
- c
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn('Invalid properties', e.message)
|
||||
self.assertIn('has non-unique elements', e.message)
|
||||
self.assertIn('bad-list', e.message)
|
||||
|
||||
def testUniqueItemsOnString(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
properties:
|
||||
ok-string:
|
||||
type: string
|
||||
uniqueItems: true
|
||||
string:
|
||||
type: string
|
||||
uniqueItems: true
|
||||
"""
|
||||
properties = """
|
||||
ok-string: aaa
|
||||
string: abc
|
||||
"""
|
||||
self.assertEquals(yaml.safe_load(properties),
|
||||
RawValidate(properties, schema_name, schema))
|
||||
|
||||
def testRequiredTopLevel(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
info:
|
||||
title: Invalid Input
|
||||
required:
|
||||
- name
|
||||
"""
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn(INVALID_PROPERTIES, e.message)
|
||||
self.assertIn("'name' is a required property", e.message)
|
||||
|
||||
def testEmptySchemaProperties(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
info:
|
||||
title: Empty Input
|
||||
properties:
|
||||
"""
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
try:
|
||||
RawValidate(properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("None is not of type u'object' at [u'properties']",
|
||||
e.message)
|
||||
|
||||
def testNoInput(self):
|
||||
schema = """
|
||||
info:
|
||||
title: No other sections
|
||||
"""
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
self.assertEquals(yaml.safe_load(properties),
|
||||
RawValidate(properties, 'schema', schema))
|
||||
|
||||
def testEmptySchema(self):
|
||||
schema = ''
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
self.assertEquals(yaml.safe_load(properties),
|
||||
RawValidate(properties, 'schema', schema))
|
||||
|
||||
def testImportPathSchema(self):
|
||||
schema = """
|
||||
imports:
|
||||
- path: a
|
||||
- path: path/to/b
|
||||
name: b
|
||||
"""
|
||||
properties = """
|
||||
one: 2
|
||||
alpha: beta
|
||||
"""
|
||||
|
||||
import_map = {'schema': schema,
|
||||
'a': '',
|
||||
'b': ''}
|
||||
|
||||
self.assertEquals(yaml.safe_load(properties),
|
||||
ImportsRawValidate(properties, 'schema', import_map))
|
||||
|
||||
def testImportSchemaMissing(self):
|
||||
schema = ''
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
properties = yaml.safe_load(empty_properties)
|
||||
schema_validation.Validate(properties, 'schema', 'template',
|
||||
{'wrong_name': schema})
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Could not find schema file 'schema'", e.message)
|
||||
|
||||
def testImportsMalformedNotAList(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
imports: not-a-list
|
||||
"""
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("is not of type 'array' at ['imports']", e.message)
|
||||
|
||||
def testImportsMalformedMissingPath(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
imports:
|
||||
- name: no_path.yaml
|
||||
"""
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("'path' is a required property", e.message)
|
||||
|
||||
def testImportsMalformedNonunique(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
imports:
|
||||
- path: a.yaml
|
||||
name: a
|
||||
- path: a.yaml
|
||||
name: a
|
||||
"""
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn('non-unique elements', e.message)
|
||||
|
||||
def testImportsMalformedAdditionalProperties(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
imports:
|
||||
- path: a.yaml
|
||||
gnome: a
|
||||
"""
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(1, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn('Additional properties are not allowed'
|
||||
" ('gnome' was unexpected)", e.message)
|
||||
|
||||
def testImportAndInputErrors(self):
|
||||
schema = """
|
||||
imports:
|
||||
- path: file
|
||||
required:
|
||||
- name
|
||||
"""
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, 'schema', schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(2, len(e.errors))
|
||||
self.assertIn("'file' requested in schema 'schema'", e.message)
|
||||
self.assertIn("'name' is a required property", e.message)
|
||||
|
||||
def testImportAndInputSchemaErrors(self):
|
||||
schema_name = 'schema'
|
||||
schema = """
|
||||
imports: not-a-list
|
||||
required: not-a-list
|
||||
"""
|
||||
empty_properties = ''
|
||||
|
||||
try:
|
||||
RawValidate(empty_properties, schema_name, schema)
|
||||
self.fail('Validation should fail')
|
||||
except schema_validation.ValidationErrors as e:
|
||||
self.assertEqual(2, len(e.errors))
|
||||
self.assertIn("Invalid schema '%s'" % schema_name, e.message)
|
||||
self.assertIn("is not of type 'array' at ['imports']", e.message)
|
||||
self.assertIn("is not of type u'array' at [u'required']", e.message)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
@ -0,0 +1,9 @@
|
||||
info:
|
||||
title: Schema with a lots of errors in it
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
exclusiveMin:
|
||||
type: integer
|
||||
exclusiveMinimum: 0
|
@ -0,0 +1,14 @@
|
||||
info:
|
||||
title: Schema with a property that has a referenced default value
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
number:
|
||||
$ref: '#/level/mult'
|
||||
|
||||
level:
|
||||
mult:
|
||||
type: integer
|
||||
multipleOf: 1
|
||||
default: 1
|
@ -0,0 +1,12 @@
|
||||
info:
|
||||
title: Schema with properties that have default values
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
one:
|
||||
type: integer
|
||||
default: 1
|
||||
alpha:
|
||||
type: string
|
||||
default: alpha
|
@ -0,0 +1,12 @@
|
||||
info:
|
||||
title: Schema with properties that have default values
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
one:
|
||||
type: integer
|
||||
default: 1
|
||||
alpha:
|
||||
type: string
|
||||
default: alpha
|
@ -0,0 +1,11 @@
|
||||
info:
|
||||
title: Schema with a required integer property that has a default string value
|
||||
|
||||
imports:
|
||||
|
||||
required:
|
||||
- number
|
||||
properties:
|
||||
number:
|
||||
type: integer
|
||||
default: string
|
@ -0,0 +1,10 @@
|
||||
info:
|
||||
title: Schema with references to something that doesnt exist
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
odd:
|
||||
type: integer
|
||||
not:
|
||||
$ref: '#/wheeeeeee'
|
@ -0,0 +1,8 @@
|
||||
info:
|
||||
title: Schema with references to something that doesnt exist
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
odd:
|
||||
$ref: '#/wheeeeeee'
|
@ -0,0 +1,20 @@
|
||||
info:
|
||||
title: Schema with properties that have extra metadata
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
one:
|
||||
type: integer
|
||||
default: 1
|
||||
metadata:
|
||||
gcloud: is great!
|
||||
compute: is awesome
|
||||
alpha:
|
||||
type: string
|
||||
default: alpha
|
||||
metadata:
|
||||
- you
|
||||
- can
|
||||
- do
|
||||
- anything
|
@ -0,0 +1,11 @@
|
||||
info:
|
||||
title: Schema with references
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
number:
|
||||
$ref: #/number
|
||||
|
||||
number:
|
||||
type: integer
|
@ -0,0 +1,33 @@
|
||||
info:
|
||||
title: VM with Disks
|
||||
author: Kubernetes
|
||||
description: Creates a single vm, then attaches disks to it.
|
||||
|
||||
required:
|
||||
- zone
|
||||
|
||||
properties:
|
||||
zone:
|
||||
type: string
|
||||
description: GCP zone
|
||||
default: us-central1-a
|
||||
disks:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description: Suffix for this disk
|
||||
sizeGb:
|
||||
type: integer
|
||||
default: 100
|
||||
diskType:
|
||||
type: string
|
||||
enum:
|
||||
- pd-standard
|
||||
- pd-ssd
|
||||
default: pd-standard
|
||||
additionalProperties: false
|
@ -0,0 +1,27 @@
|
||||
info:
|
||||
title: Schema with a lots of number properties and restrictions
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
minimum0:
|
||||
type: integer
|
||||
minimum: 0
|
||||
exclusiveMin0:
|
||||
type: integer
|
||||
minimum: 0
|
||||
exclusiveMinimum: true
|
||||
maximum10:
|
||||
type: integer
|
||||
maximum: 10
|
||||
exclusiveMax10:
|
||||
type: integer
|
||||
maximum: 10
|
||||
exclusiveMaximum: true
|
||||
even:
|
||||
type: integer
|
||||
multipleOf: 2
|
||||
odd:
|
||||
type: integer
|
||||
not:
|
||||
multipleOf: 2
|
@ -0,0 +1,36 @@
|
||||
info:
|
||||
title: VM with Disks
|
||||
author: Kubernetes
|
||||
description: Creates a single vm, then attaches disks to it.
|
||||
|
||||
required:
|
||||
- zone
|
||||
|
||||
properties:
|
||||
zone:
|
||||
type: string
|
||||
description: GCP zone
|
||||
default: us-central1-a
|
||||
disks:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/disk'
|
||||
|
||||
disk:
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description: Suffix for this disk
|
||||
sizeGb:
|
||||
type: integer
|
||||
default: 100
|
||||
diskType:
|
||||
type: string
|
||||
enum:
|
||||
- pd-standard
|
||||
- pd-ssd
|
||||
default: pd-standard
|
||||
additionalProperties: false
|
@ -0,0 +1,14 @@
|
||||
info:
|
||||
title: Schema with references
|
||||
|
||||
imports:
|
||||
|
||||
properties:
|
||||
odd:
|
||||
type: integer
|
||||
not:
|
||||
$ref: '#/even'
|
||||
|
||||
|
||||
even:
|
||||
multipleOf: 2
|
@ -0,0 +1,14 @@
|
||||
info:
|
||||
title: Schema with a required property that has a referenced default value
|
||||
|
||||
imports:
|
||||
|
||||
required:
|
||||
- number
|
||||
properties:
|
||||
number:
|
||||
$ref: '#/default_val'
|
||||
|
||||
default_val:
|
||||
type: integer
|
||||
default: my_name
|
@ -0,0 +1,10 @@
|
||||
info:
|
||||
title: Schema with a required property
|
||||
|
||||
imports:
|
||||
|
||||
required:
|
||||
- name
|
||||
properties:
|
||||
name:
|
||||
type: string
|
@ -0,0 +1,11 @@
|
||||
info:
|
||||
title: Schema with a required property that has a default value
|
||||
|
||||
imports:
|
||||
|
||||
required:
|
||||
- name
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
default: my_name
|
Loading…
Reference in new issue