mirror of
				https://github.com/docker/compose.git
				synced 2025-10-31 03:03:49 +01:00 
			
		
		
		
	Merge v2 config jsonschemas into a single file.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
		
							parent
							
								
									38dd342b7b
								
							
						
					
					
						commit
						adb64ef8d5
					
				| @ -31,12 +31,12 @@ from .types import ServiceLink | ||||
| from .types import VolumeFromSpec | ||||
| from .types import VolumeSpec | ||||
| from .validation import match_named_volumes | ||||
| from .validation import validate_against_fields_schema | ||||
| from .validation import validate_against_service_schema | ||||
| from .validation import validate_config_section | ||||
| from .validation import validate_against_config_schema | ||||
| from .validation import validate_depends_on | ||||
| from .validation import validate_extends_file_path | ||||
| from .validation import validate_network_mode | ||||
| from .validation import validate_service_constraints | ||||
| from .validation import validate_top_level_object | ||||
| from .validation import validate_ulimits | ||||
| 
 | ||||
| @ -415,7 +415,7 @@ def process_config_file(config_file, service_name=None): | ||||
|         processed_config = services | ||||
| 
 | ||||
|     config_file = config_file._replace(config=processed_config) | ||||
|     validate_against_fields_schema(config_file) | ||||
|     validate_against_config_schema(config_file) | ||||
| 
 | ||||
|     if service_name and service_name not in services: | ||||
|         raise ConfigurationError( | ||||
| @ -548,7 +548,7 @@ def validate_extended_service_dict(service_dict, filename, service): | ||||
| 
 | ||||
| def validate_service(service_config, service_names, version): | ||||
|     service_dict, service_name = service_config.config, service_config.name | ||||
|     validate_against_service_schema(service_dict, service_name, version) | ||||
|     validate_service_constraints(service_dict, service_name, version) | ||||
|     validate_paths(service_dict) | ||||
| 
 | ||||
|     validate_ulimits(service_config) | ||||
|  | ||||
| @ -1,15 +1,50 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-04/schema#", | ||||
|   "id": "service_schema_v2.0.json", | ||||
| 
 | ||||
|   "id": "config_schema_v2.0.json", | ||||
|   "type": "object", | ||||
| 
 | ||||
|   "allOf": [ | ||||
|     {"$ref": "#/definitions/service"}, | ||||
|     {"$ref": "#/definitions/constraints"} | ||||
|   ], | ||||
|   "properties": { | ||||
|     "version": { | ||||
|       "type": "string" | ||||
|     }, | ||||
| 
 | ||||
|     "services": { | ||||
|       "id": "#/properties/services", | ||||
|       "type": "object", | ||||
|       "patternProperties": { | ||||
|         "^[a-zA-Z0-9._-]+$": { | ||||
|           "$ref": "#/definitions/service" | ||||
|         } | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     }, | ||||
| 
 | ||||
|     "networks": { | ||||
|       "id": "#/properties/networks", | ||||
|       "type": "object", | ||||
|       "patternProperties": { | ||||
|         "^[a-zA-Z0-9._-]+$": { | ||||
|           "$ref": "#/definitions/network" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     "volumes": { | ||||
|       "id": "#/properties/volumes", | ||||
|       "type": "object", | ||||
|       "patternProperties": { | ||||
|         "^[a-zA-Z0-9._-]+$": { | ||||
|           "$ref": "#/definitions/volume" | ||||
|         } | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   "additionalProperties": false, | ||||
| 
 | ||||
|   "definitions": { | ||||
| 
 | ||||
|     "service": { | ||||
|       "id": "#/definitions/service", | ||||
|       "type": "object", | ||||
| @ -193,6 +228,60 @@ | ||||
|       "additionalProperties": false | ||||
|     }, | ||||
| 
 | ||||
|     "network": { | ||||
|       "id": "#/definitions/network", | ||||
|       "type": "object", | ||||
|       "properties": { | ||||
|         "driver": {"type": "string"}, | ||||
|         "driver_opts": { | ||||
|           "type": "object", | ||||
|           "patternProperties": { | ||||
|             "^.+$": {"type": ["string", "number"]} | ||||
|           } | ||||
|         }, | ||||
|         "ipam": { | ||||
|             "type": "object", | ||||
|             "properties": { | ||||
|                 "driver": {"type": "string"}, | ||||
|                 "config": { | ||||
|                     "type": "array" | ||||
|                 } | ||||
|             }, | ||||
|             "additionalProperties": false | ||||
|         }, | ||||
|         "external": { | ||||
|           "type": ["boolean", "object"], | ||||
|           "properties": { | ||||
|             "name": {"type": "string"} | ||||
|           }, | ||||
|           "additionalProperties": false | ||||
|         } | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     }, | ||||
| 
 | ||||
|     "volume": { | ||||
|       "id": "#/definitions/volume", | ||||
|       "type": ["object", "null"], | ||||
|       "properties": { | ||||
|         "driver": {"type": "string"}, | ||||
|         "driver_opts": { | ||||
|           "type": "object", | ||||
|           "patternProperties": { | ||||
|             "^.+$": {"type": ["string", "number"]} | ||||
|           } | ||||
|         }, | ||||
|         "external": { | ||||
|           "type": ["boolean", "object"], | ||||
|           "properties": { | ||||
|             "name": {"type": "string"} | ||||
|           } | ||||
|         }, | ||||
|         "additionalProperties": false | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     }, | ||||
| 
 | ||||
|     "string_or_list": { | ||||
|       "oneOf": [ | ||||
|         {"type": "string"}, | ||||
| @ -221,15 +310,18 @@ | ||||
|         {"type": "array", "items": {"type": "string"}, "uniqueItems": true} | ||||
|       ] | ||||
|     }, | ||||
| 
 | ||||
|     "constraints": { | ||||
|       "id": "#/definitions/constraints", | ||||
|       "anyOf": [ | ||||
|       "services": { | ||||
|         "id": "#/definitions/services/constraints", | ||||
|         "anyOf": [ | ||||
|           {"required": ["build"]}, | ||||
|           {"required": ["image"]} | ||||
|       ], | ||||
|       "properties": { | ||||
|         "build": { | ||||
|           "required": ["context"] | ||||
|         ], | ||||
|         "properties": { | ||||
|           "build": { | ||||
|             "required": ["context"] | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| @ -1,96 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-04/schema#", | ||||
|   "type": "object", | ||||
|   "id": "fields_schema_v2.0.json", | ||||
| 
 | ||||
|   "properties": { | ||||
|     "version": { | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "services": { | ||||
|       "id": "#/properties/services", | ||||
|       "type": "object", | ||||
|       "patternProperties": { | ||||
|         "^[a-zA-Z0-9._-]+$": { | ||||
|           "$ref": "service_schema_v2.0.json#/definitions/service" | ||||
|         } | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     }, | ||||
|     "networks": { | ||||
|       "id": "#/properties/networks", | ||||
|       "type": "object", | ||||
|       "patternProperties": { | ||||
|         "^[a-zA-Z0-9._-]+$": { | ||||
|           "$ref": "#/definitions/network" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "volumes": { | ||||
|       "id": "#/properties/volumes", | ||||
|       "type": "object", | ||||
|       "patternProperties": { | ||||
|         "^[a-zA-Z0-9._-]+$": { | ||||
|           "$ref": "#/definitions/volume" | ||||
|         } | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   "definitions": { | ||||
|     "network": { | ||||
|       "id": "#/definitions/network", | ||||
|       "type": "object", | ||||
|       "properties": { | ||||
|         "driver": {"type": "string"}, | ||||
|         "driver_opts": { | ||||
|           "type": "object", | ||||
|           "patternProperties": { | ||||
|             "^.+$": {"type": ["string", "number"]} | ||||
|           } | ||||
|         }, | ||||
|         "ipam": { | ||||
|             "type": "object", | ||||
|             "properties": { | ||||
|                 "driver": {"type": "string"}, | ||||
|                 "config": { | ||||
|                     "type": "array" | ||||
|                 } | ||||
|             }, | ||||
|             "additionalProperties": false | ||||
|         }, | ||||
|         "external": { | ||||
|           "type": ["boolean", "object"], | ||||
|           "properties": { | ||||
|             "name": {"type": "string"} | ||||
|           }, | ||||
|           "additionalProperties": false | ||||
|         } | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     }, | ||||
|     "volume": { | ||||
|       "id": "#/definitions/volume", | ||||
|       "type": ["object", "null"], | ||||
|       "properties": { | ||||
|         "driver": {"type": "string"}, | ||||
|         "driver_opts": { | ||||
|           "type": "object", | ||||
|           "patternProperties": { | ||||
|             "^.+$": {"type": ["string", "number"]} | ||||
|           } | ||||
|         }, | ||||
|         "external": { | ||||
|           "type": ["boolean", "object"], | ||||
|           "properties": { | ||||
|             "name": {"type": "string"} | ||||
|           } | ||||
|         }, | ||||
|         "additionalProperties": false | ||||
|       }, | ||||
|       "additionalProperties": false | ||||
|     } | ||||
|   }, | ||||
|   "additionalProperties": false | ||||
| } | ||||
| @ -385,21 +385,17 @@ def process_errors(errors, path_prefix=None): | ||||
|     return '\n'.join(format_error_message(error) for error in errors) | ||||
| 
 | ||||
| 
 | ||||
| def validate_against_fields_schema(config_file): | ||||
|     schema_filename = "fields_schema_v{0}.json".format(config_file.version) | ||||
| def validate_against_config_schema(config_file): | ||||
|     _validate_against_schema( | ||||
|         config_file.config, | ||||
|         schema_filename, | ||||
|         "service_schema_v{0}.json".format(config_file.version), | ||||
|         format_checker=["ports", "expose", "bool-value-in-mapping"], | ||||
|         filename=config_file.filename) | ||||
| 
 | ||||
| 
 | ||||
| def validate_against_service_schema(config, service_name, version): | ||||
|     _validate_against_schema( | ||||
|         config, | ||||
|         "service_schema_v{0}.json".format(version), | ||||
|         format_checker=["ports"], | ||||
|         path_prefix=[service_name]) | ||||
| def validate_service_constraints(config, service_name, version): | ||||
|     # TODO: | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| def _validate_against_schema( | ||||
|  | ||||
| @ -22,19 +22,14 @@ exe = EXE(pyz, | ||||
|                 'compose/config/fields_schema_v1.json', | ||||
|                 'DATA' | ||||
|             ), | ||||
|             ( | ||||
|                 'compose/config/fields_schema_v2.0.json', | ||||
|                 'compose/config/fields_schema_v2.0.json', | ||||
|                 'DATA' | ||||
|             ), | ||||
|             ( | ||||
|                 'compose/config/service_schema_v1.json', | ||||
|                 'compose/config/service_schema_v1.json', | ||||
|                 'DATA' | ||||
|             ), | ||||
|             ( | ||||
|                 'compose/config/service_schema_v2.0.json', | ||||
|                 'compose/config/service_schema_v2.0.json', | ||||
|                 'compose/config/config_schema_v2.0.json', | ||||
|                 'compose/config/config_schema_v2.0.json', | ||||
|                 'DATA' | ||||
|             ), | ||||
|             ( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user