88 ATTR_IMAGE , ATTR_URL , ATTR_MAINTAINER , ATTR_ARCH , ATTR_DEVICES ,
99 ATTR_ENVIRONMENT , ATTR_HOST_NETWORK , ARCH_ARMHF , ARCH_AARCH64 , ARCH_AMD64 ,
1010 ARCH_I386 , ATTR_TMPFS , ATTR_PRIVILEGED , ATTR_USER , ATTR_STATE , ATTR_SYSTEM ,
11- STATE_STARTED , STATE_STOPPED , ATTR_LOCATON , ATTR_REPOSITORY )
11+ STATE_STARTED , STATE_STOPPED , ATTR_LOCATON , ATTR_REPOSITORY , ATTR_TIMEOUT ,
12+ ATTR_NETWORK , ATTR_AUTO_UPDATE )
13+ from ..validate import NETWORK_PORT , DOCKER_PORTS
1214
1315
1416MAP_VOLUME = r"^(config|ssl|addons|backup|share)(?::(rw|:ro))?$"
1921V_BOOL = 'bool'
2022V_EMAIL = 'email'
2123V_URL = 'url'
24+ V_PORT = 'port'
2225
23- ADDON_ELEMENT = vol .In ([V_STR , V_INT , V_FLOAT , V_BOOL , V_EMAIL , V_URL ])
26+ ADDON_ELEMENT = vol .In ([V_STR , V_INT , V_FLOAT , V_BOOL , V_EMAIL , V_URL , V_PORT ])
2427
2528ARCH_ALL = [
2629 ARCH_ARMHF , ARCH_AARCH64 , ARCH_AMD64 , ARCH_I386
3134]
3235
3336
34- def check_network (data ):
35- """Validate network settings."""
36- host_network = data [ATTR_HOST_NETWORK ]
37-
38- if ATTR_PORTS in data and host_network :
39- raise vol .Invalid ("Hostnetwork & ports are not allow!" )
40-
41- return data
42-
43-
4437# pylint: disable=no-value-for-parameter
4538SCHEMA_ADDON_CONFIG = vol .Schema ({
4639 vol .Required (ATTR_NAME ): vol .Coerce (str ),
@@ -54,7 +47,7 @@ def check_network(data):
5447 STARTUP_INITIALIZE ]),
5548 vol .Required (ATTR_BOOT ):
5649 vol .In ([BOOT_AUTO , BOOT_MANUAL ]),
57- vol .Optional (ATTR_PORTS ): dict ,
50+ vol .Optional (ATTR_PORTS ): DOCKER_PORTS ,
5851 vol .Optional (ATTR_HOST_NETWORK , default = False ): vol .Boolean (),
5952 vol .Optional (ATTR_DEVICES ): [vol .Match (r"^(.*):(.*):([rwm]{1,3})$" )],
6053 vol .Optional (ATTR_TMPFS ):
@@ -69,8 +62,10 @@ def check_network(data):
6962 ])
7063 }, False ),
7164 vol .Optional (ATTR_IMAGE ): vol .Match (r"\w*/\w*" ),
65+ vol .Optional (ATTR_TIMEOUT , default = 10 ):
66+ vol .All (vol .Coerce (int ), vol .Range (min = 10 , max = 120 ))
7267}, extra = vol .ALLOW_EXTRA )
73- SCHEMA_ADDON = vol . Schema ( vol . All ( SCHEMA_ADDON_CONFIG , check_network ))
68+
7469
7570# pylint: disable=no-value-for-parameter
7671SCHEMA_REPOSITORY_CONFIG = vol .Schema ({
@@ -80,11 +75,14 @@ def check_network(data):
8075}, extra = vol .ALLOW_EXTRA )
8176
8277
78+ # pylint: disable=no-value-for-parameter
8379SCHEMA_ADDON_USER = vol .Schema ({
8480 vol .Required (ATTR_VERSION ): vol .Coerce (str ),
8581 vol .Required (ATTR_OPTIONS ): dict ,
82+ vol .Optional (ATTR_AUTO_UPDATE , default = False ): vol .Boolean (),
8683 vol .Optional (ATTR_BOOT ):
8784 vol .In ([BOOT_AUTO , BOOT_MANUAL ]),
85+ vol .Optional (ATTR_NETWORK ): DOCKER_PORTS ,
8886})
8987
9088
@@ -94,6 +92,16 @@ def check_network(data):
9492})
9593
9694
95+ SCHEMA_ADDON_FILE = vol .Schema ({
96+ vol .Optional (ATTR_USER , default = {}): {
97+ vol .Coerce (str ): SCHEMA_ADDON_USER ,
98+ },
99+ vol .Optional (ATTR_SYSTEM , default = {}): {
100+ vol .Coerce (str ): SCHEMA_ADDON_SYSTEM ,
101+ }
102+ })
103+
104+
97105SCHEMA_ADDON_SNAPSHOT = vol .Schema ({
98106 vol .Required (ATTR_USER ): SCHEMA_ADDON_USER ,
99107 vol .Required (ATTR_SYSTEM ): SCHEMA_ADDON_SYSTEM ,
@@ -150,6 +158,8 @@ def _single_validate(typ, value, key):
150158 return vol .Email ()(value )
151159 elif typ == V_URL :
152160 return vol .Url ()(value )
161+ elif typ == V_PORT :
162+ return NETWORK_PORT (value )
153163
154164 raise vol .Invalid ("Fatal error for {} type {}." .format (key , typ ))
155165 except ValueError :
0 commit comments