refactor
This commit is contained in:
parent
eb6b22e5b1
commit
ef948fa109
183 changed files with 798 additions and 914 deletions
|
@ -101,44 +101,41 @@ class ServiceAnnotator:
|
|||
self.grouplist_conditions = {}
|
||||
self.convert_services()
|
||||
|
||||
def gen_family(self,
|
||||
name,
|
||||
):
|
||||
family = self.objectspace.family()
|
||||
family.name = name
|
||||
family.doc = name
|
||||
family.mode = None
|
||||
return family
|
||||
|
||||
def convert_services(self):
|
||||
if not hasattr(self.space, 'services'):
|
||||
return
|
||||
if not hasattr(self.space.services, 'service'):
|
||||
del self.space.services
|
||||
return
|
||||
for idx, service in enumerate(self.space.services.service.values()):
|
||||
service_name = f'service{idx}'
|
||||
family = self.objectspace.family()
|
||||
family.name = service_name
|
||||
family.doc = service.name
|
||||
family.mode = None
|
||||
family.family = self.convert_service_to_family(f'services.{service_name}',
|
||||
service,
|
||||
)
|
||||
setattr(self.space.services, family.name, family)
|
||||
del self.space.services.service
|
||||
|
||||
def convert_service_to_family(self,
|
||||
subpath,
|
||||
service,
|
||||
):
|
||||
services = {}
|
||||
for elttype, values in vars(service).items():
|
||||
if elttype == 'name' or elttype in ERASED_ATTRIBUTES:
|
||||
continue
|
||||
eltname = elttype + 's'
|
||||
family = self.objectspace.family()
|
||||
family.name = eltname
|
||||
family.mode = None
|
||||
if isinstance(values, dict):
|
||||
values = list(values.values())
|
||||
family.family = self.make_group_from_elts(elttype,
|
||||
values,
|
||||
f'{subpath}.{eltname}',
|
||||
)
|
||||
services[family.name] = family
|
||||
return services
|
||||
self.space.services.hidden = True
|
||||
families = {}
|
||||
for idx, service_name in enumerate(self.space.services.service.keys()):
|
||||
service = self.space.services.service[service_name]
|
||||
new_service = self.objectspace.service()
|
||||
for elttype, values in vars(service).items():
|
||||
if elttype == 'name' or elttype in ERASED_ATTRIBUTES:
|
||||
setattr(new_service, elttype, values)
|
||||
continue
|
||||
eltname = elttype + 's'
|
||||
family = self.gen_family(eltname)
|
||||
if isinstance(values, dict):
|
||||
values = list(values.values())
|
||||
family.family = self.make_group_from_elts(elttype,
|
||||
values,
|
||||
f'services.{service_name}.{eltname}',
|
||||
)
|
||||
setattr(new_service, elttype, family)
|
||||
families[service_name] = new_service
|
||||
self.space.services.service = families
|
||||
|
||||
def make_group_from_elts(self,
|
||||
name,
|
||||
|
@ -160,8 +157,14 @@ class ServiceAnnotator:
|
|||
update_elt = '_update_' + elt_name
|
||||
if hasattr(self, update_elt):
|
||||
getattr(self, update_elt)(elt, index, path)
|
||||
variables = []
|
||||
subpath = '{}.{}{}'.format(path, name, index)
|
||||
|
||||
if hasattr(elt, 'source'):
|
||||
c_name = elt.source
|
||||
else:
|
||||
c_name = elt.name
|
||||
family = self.gen_family(c_name)
|
||||
family.variable = []
|
||||
subpath = '{}.{}'.format(path, c_name)
|
||||
listname = '{}list'.format(name)
|
||||
activate_path = '.'.join([subpath, 'activate'])
|
||||
if elt in self.grouplist_conditions:
|
||||
|
@ -179,75 +182,54 @@ class ServiceAnnotator:
|
|||
value,
|
||||
[]).append(activate_path)
|
||||
continue
|
||||
if key == 'name':
|
||||
true_key = elt_name
|
||||
else:
|
||||
true_key = key
|
||||
if key in self.objectspace.booleans_attributs:
|
||||
type_ = 'boolean'
|
||||
else:
|
||||
type_ = 'string'
|
||||
dtd_key_type = true_key + '_type'
|
||||
if hasattr(elt, dtd_key_type):
|
||||
type_ = KEY_TYPE[getattr(elt, dtd_key_type)]
|
||||
multi = isinstance(value, list)
|
||||
variables.append(self._generate_element(key,
|
||||
value,
|
||||
type_,
|
||||
subpath,
|
||||
multi,
|
||||
))
|
||||
family.variable.append(self._generate_element(elt_name,
|
||||
key,
|
||||
value,
|
||||
elt,
|
||||
f'{subpath}.{key}'
|
||||
))
|
||||
# FIXME ne devrait pas etre True par défaut
|
||||
# devrait etre un calcule
|
||||
variables.append(self._generate_element('activate',
|
||||
True,
|
||||
'boolean',
|
||||
subpath,
|
||||
))
|
||||
family = self.objectspace.family()
|
||||
family.name = '{}{}'.format(name, index)
|
||||
family.variable = variables
|
||||
family.mode = None
|
||||
self.paths.add_family('services',
|
||||
subpath,
|
||||
family,
|
||||
)
|
||||
family.variable.append(self._generate_element(elt_name,
|
||||
'activate',
|
||||
True,
|
||||
elt,
|
||||
activate_path,
|
||||
))
|
||||
families.append(family)
|
||||
return families
|
||||
|
||||
def _generate_element(self,
|
||||
elt_name,
|
||||
key,
|
||||
value,
|
||||
type_,
|
||||
subpath,
|
||||
multi=False,
|
||||
elt,
|
||||
path,
|
||||
):
|
||||
variable = self.objectspace.variable()
|
||||
variable.name = key
|
||||
if type_ != 'symlink':
|
||||
variable.doc = key
|
||||
variable.multi = multi
|
||||
variable.mode = None
|
||||
variable.hidden = True
|
||||
if key == 'name':
|
||||
true_key = elt_name
|
||||
else:
|
||||
true_key = key
|
||||
dtd_key_type = true_key + '_type'
|
||||
if key == 'activate':
|
||||
type_ = 'boolean'
|
||||
elif hasattr(elt, dtd_key_type):
|
||||
type_ = KEY_TYPE[getattr(elt, dtd_key_type)]
|
||||
elif key in self.objectspace.booleans_attributs:
|
||||
type_ = 'boolean'
|
||||
else:
|
||||
type_ = 'string'
|
||||
variable.type = type_
|
||||
if value is not None:
|
||||
if type_ == 'symlink':
|
||||
variable.opt = value
|
||||
else:
|
||||
if not multi:
|
||||
val = self.objectspace.value()
|
||||
val.name = value
|
||||
value = [val]
|
||||
else:
|
||||
# value is a list of objects
|
||||
value_list = []
|
||||
for val_iter in value:
|
||||
val = self.objectspace.value()
|
||||
val.name = val_iter.name
|
||||
value_list.append(val)
|
||||
value = value_list
|
||||
variable.value = value
|
||||
path = f'{subpath}.{key}'
|
||||
if type_ == 'symlink':
|
||||
variable.opt = value
|
||||
else:
|
||||
variable.doc = key
|
||||
val = self.objectspace.value()
|
||||
val.name = value
|
||||
variable.value = [val]
|
||||
self.paths.add_variable('services',
|
||||
path,
|
||||
'service',
|
||||
|
@ -264,8 +246,8 @@ class ServiceAnnotator:
|
|||
"""
|
||||
new_elts = {}
|
||||
# reorder elts by index
|
||||
for elt in elts:
|
||||
new_elts.setdefault(elt.index, []).append(elt)
|
||||
for idx, elt in enumerate(elts):
|
||||
new_elts.setdefault(idx, []).append(elt)
|
||||
idxes = list(new_elts.keys())
|
||||
idxes.sort()
|
||||
result_elts = []
|
||||
|
@ -330,12 +312,15 @@ class SpaceAnnotator(object):
|
|||
def absolute_path_for_symlink_in_services(self):
|
||||
if not hasattr(self.space, 'services'):
|
||||
return
|
||||
families = vars(self.space.services).values()
|
||||
for family in families:
|
||||
if hasattr(family, 'family'):
|
||||
for fam in family.family.values():
|
||||
for fam1 in fam.family:
|
||||
for variable in fam1.variable:
|
||||
for family_name, family in vars(self.space.services).items():
|
||||
if not isinstance(family, dict):
|
||||
continue
|
||||
for fam in family.values():
|
||||
for fam1_name, fam1 in vars(fam).items():
|
||||
if fam1_name == 'name' or fam1_name in ERASED_ATTRIBUTES:
|
||||
continue
|
||||
for fam2 in fam1.family:
|
||||
for variable in fam2.variable:
|
||||
if variable.type == 'symlink' and '.' not in variable.name:
|
||||
variable.opt = self.paths.get_variable_path(variable.opt,
|
||||
VARIABLE_NAMESPACE,
|
||||
|
@ -767,8 +752,8 @@ class SpaceAnnotator(object):
|
|||
raise CreoleDictConsistencyError(_('Cannot load {}').format(param.text))
|
||||
elif param.type == 'python':
|
||||
try:
|
||||
#values = eval(param.text, {'eosfunc': self.eosfunc, '__builtins__': {'range': range, 'str': str}})
|
||||
values = eval(param.text, {'eosfunc': self.eosfunc, '__builtins__': {'range': range, 'str': str}})
|
||||
#FIXME : eval('[str(i) for i in range(3, 13)]', {'eosfunc': eosfunc, '__builtins__': {'range': range, 'str': str}})
|
||||
except NameError:
|
||||
raise CreoleDictConsistencyError(_('The function {} is unknown').format(param.text))
|
||||
if not isinstance(values, list):
|
||||
|
@ -794,12 +779,7 @@ class SpaceAnnotator(object):
|
|||
for idx, param in enumerate(check.param):
|
||||
if param.type not in TYPE_PARAM_CHECK:
|
||||
raise CreoleDictConsistencyError(_('cannot use {} type as a param in check for {}').format(param.type, check.target))
|
||||
if param.type == 'eole':
|
||||
param.type = 'variable'
|
||||
if param.type == 'variable':
|
||||
# if HIGH_COMPATIBILITY and param.text.startswith('container_ip'):
|
||||
# if param.optional is True:
|
||||
# param_option_indexes.append(idx)
|
||||
try:
|
||||
param.text = self.paths.get_variable_path(param.text, namespace)
|
||||
except CreoleDictConsistencyError as err:
|
||||
|
@ -1093,8 +1073,6 @@ class SpaceAnnotator(object):
|
|||
if param.type not in TYPE_PARAM_CONDITION:
|
||||
raise CreoleDictConsistencyError(_('cannot use {} type as a param '
|
||||
'in a condition').format(param.type))
|
||||
if param.type == 'eole':
|
||||
param.type = 'variable'
|
||||
|
||||
def check_choice_option_condition(self, force_remove_targets):
|
||||
# remove condition for ChoiceOption that don't have param
|
||||
|
|
|
@ -43,33 +43,10 @@
|
|||
<!-- files element -->
|
||||
<!-- ============== -->
|
||||
|
||||
<!ELEMENT action ((input* | profile* | ewtapp* | tag* | saltaction*)*)>
|
||||
<!ATTLIST action type (form|custom|external|reader|apache) "custom">
|
||||
<!ATTLIST action title CDATA #REQUIRED>
|
||||
<!ATTLIST action description CDATA #REQUIRED>
|
||||
<!ATTLIST action rewrite CDATA #IMPLIED>
|
||||
<!ATTLIST action image CDATA #IMPLIED>
|
||||
<!ATTLIST action actionlist CDATA #IMPLIED>
|
||||
<!-- for apache action -->
|
||||
<!ATTLIST action apache_path CDATA #IMPLIED>
|
||||
<!ATTLIST action apache_path_type (FilenameOption|SymLinkOption|variable) "FilenameOption">
|
||||
<!-- for external action -->
|
||||
<!ATTLIST action url CDATA #IMPLIED>
|
||||
<!ATTLIST action url_type (URLOption|SymLinkOption|variable) "URLOption">
|
||||
<!-- for form action -->
|
||||
<!ATTLIST action save (True|False) "False">
|
||||
|
||||
<!ELEMENT services (service*)>
|
||||
|
||||
<!ELEMENT service ((port* | tcpwrapper* | ip* | interface* | package* | file* | digitalcertificate* | override*)*) >
|
||||
<!ATTLIST service name CDATA #REQUIRED>
|
||||
<!ATTLIST service method (systemd|none) "systemd">
|
||||
|
||||
<!ELEMENT input (#PCDATA)>
|
||||
<!ELEMENT profile (#PCDATA)>
|
||||
<!ELEMENT ewtapp (#PCDATA)>
|
||||
<!ELEMENT tag (#PCDATA)>
|
||||
<!ELEMENT saltaction (#PCDATA)>
|
||||
|
||||
<!ELEMENT port (#PCDATA)>
|
||||
<!ATTLIST port port_type (PortOption|SymLinkOption|variable) "PortOption">
|
||||
|
@ -114,7 +91,6 @@
|
|||
<!ATTLIST family name CDATA #REQUIRED>
|
||||
<!ATTLIST family description CDATA #IMPLIED>
|
||||
<!ATTLIST family mode (basic|normal|expert) "basic">
|
||||
<!ATTLIST family icon CDATA #IMPLIED>
|
||||
<!ATTLIST family hidden (True|False) "False">
|
||||
<!ATTLIST family dynamic CDATA #IMPLIED>
|
||||
|
||||
|
@ -140,7 +116,6 @@
|
|||
|
||||
<!ELEMENT separator (#PCDATA)>
|
||||
<!ATTLIST separator name CDATA #REQUIRED>
|
||||
<!ATTLIST separator never_hidden CDATA #IMPLIED>
|
||||
|
||||
<!ELEMENT value (#PCDATA)>
|
||||
|
||||
|
|
|
@ -34,3 +34,7 @@ class CreoleDictConsistencyError(Exception):
|
|||
"""It's not only that the Creole XML is valid against the Creole DTD
|
||||
it's that it is not consistent.
|
||||
"""
|
||||
|
||||
|
||||
class CreoleLoaderError(Exception):
|
||||
pass
|
||||
|
|
|
@ -1,32 +1,26 @@
|
|||
"""loader
|
||||
flattened XML specific
|
||||
"""
|
||||
from os.path import join, isfile, isdir
|
||||
from os import listdir
|
||||
#from ast import literal_eval
|
||||
from lxml.etree import parse, DTD
|
||||
from os.path import join, isfile
|
||||
from lxml.etree import DTD
|
||||
import imp
|
||||
|
||||
from tiramisu import (StrOption, OptionDescription, DynOptionDescription, PortOption,
|
||||
IntOption, ChoiceOption, BoolOption, SymLinkOption, IPOption,
|
||||
NetworkOption, NetmaskOption, DomainnameOption, BroadcastOption,
|
||||
URLOption, EmailOption, FilenameOption, UsernameOption, DateOption,
|
||||
PasswordOption, BoolOption, MACOption, Leadership, submulti,
|
||||
Params, ParamSelfOption, ParamOption, ParamDynOption, ParamValue, Calculation, calc_value,
|
||||
groups, owners)
|
||||
from tiramisu.error import ConfigError
|
||||
Params, ParamSelfOption, ParamOption, ParamDynOption, ParamValue, Calculation, calc_value)
|
||||
|
||||
from .config import dtdfilename
|
||||
from .i18n import _
|
||||
#For compatibility
|
||||
from .xmlreflector import HIGH_COMPATIBILITY
|
||||
#from . import eosfunc
|
||||
from .objspace import CreoleObjSpace
|
||||
from .utils import normalize_family
|
||||
from .annotator import VARIABLE_NAMESPACE
|
||||
import imp
|
||||
from .error import CreoleLoaderError
|
||||
|
||||
|
||||
FUNC_TO_DICT = ['valid_not_equal']
|
||||
KNOWN_TAGS = ['family', 'variable', 'separators', 'leader', 'property']
|
||||
|
||||
|
||||
class ConvertDynOptionDescription(DynOptionDescription):
|
||||
|
@ -37,19 +31,11 @@ class ConvertDynOptionDescription(DynOptionDescription):
|
|||
check_name=False)
|
||||
|
||||
|
||||
class CreoleLoaderError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def convert_tiramisu_value(value, obj):
|
||||
"""
|
||||
convertit les variables dans le bon type si nécessaire
|
||||
"""
|
||||
if value is None:
|
||||
return value
|
||||
def _convert_boolean(value):
|
||||
if isinstance(value, bool):
|
||||
return value
|
||||
prop = {'True': True,
|
||||
'False': False,
|
||||
'None': None}
|
||||
|
@ -57,10 +43,9 @@ def convert_tiramisu_value(value, obj):
|
|||
raise Exception('unknown value {} while trying to cast {} to boolean'.format(value, obj))
|
||||
return prop[value]
|
||||
|
||||
func = {IntOption: int, StrOption: str, PortOption: str,
|
||||
DomainnameOption: str, EmailOption: str, URLOption: str,
|
||||
IPOption: str, NetmaskOption: str, NetworkOption: str,
|
||||
BroadcastOption: str, FilenameOption: str,
|
||||
if value is None:
|
||||
return value
|
||||
func = {IntOption: int,
|
||||
BoolOption: _convert_boolean}.get(obj, None)
|
||||
if func is None:
|
||||
return value
|
||||
|
@ -98,18 +83,15 @@ CONVERT_OPTION = {'number': dict(opttype=IntOption),
|
|||
}
|
||||
|
||||
|
||||
class Elt(object):
|
||||
class Elt:
|
||||
def __init__(self, attrib):
|
||||
self.attrib = attrib
|
||||
|
||||
|
||||
class PopulateTiramisuObjects(object):
|
||||
class PopulateTiramisuObjects:
|
||||
def __init__(self):
|
||||
self.storage = ElementStorage()
|
||||
self.booleans = []
|
||||
self.force_store_values = set()
|
||||
self.separators = {}
|
||||
self.groups = {}
|
||||
|
||||
def parse_dtd(self, dtdfilename):
|
||||
"""Loads the Creole DTD
|
||||
|
@ -128,129 +110,111 @@ class PopulateTiramisuObjects(object):
|
|||
if set(attr.itervalues()) == set(['True', 'False']):
|
||||
self.booleans.append(attr.name)
|
||||
|
||||
def make_tiramisu_objects(self, xmlroot, eosfunc):
|
||||
elt = Elt({'name': 'baseoption'})
|
||||
if eosfunc is None:
|
||||
self.eosfunc = None
|
||||
else:
|
||||
self.eosfunc = imp.load_source('eosfunc', eosfunc)
|
||||
family = Family(elt, self.booleans, self.storage, self.eosfunc)
|
||||
def get_root_family(self):
|
||||
family = Family(Elt({'name': 'baseoption',
|
||||
'doc': 'baseoption'}),
|
||||
self.booleans,
|
||||
self.storage,
|
||||
self.eosfunc,
|
||||
)
|
||||
self.storage.add('.', family)
|
||||
|
||||
elts = {}
|
||||
for elt in xmlroot:
|
||||
elts.setdefault(elt.tag, []).append(elt)
|
||||
list_elts = list(elts.keys())
|
||||
if 'family' in list_elts:
|
||||
list_elts.remove('family')
|
||||
list_elts.insert(0, 'family')
|
||||
for elt in list_elts:
|
||||
xmlelts_ = elts[elt]
|
||||
if elt == 'family':
|
||||
xmlelts = []
|
||||
actions = None
|
||||
# VARIABLE_NAMESPACE family has to be loaded before any other family
|
||||
# because `extra` family could use `VARIABLE_NAMESPACE` variables.
|
||||
# `actions` family has to be loaded at the very end
|
||||
# because it may use `VARIABLE_NAMESPACE` or `extra` variables
|
||||
for xml in xmlelts_:
|
||||
if xml.attrib['name'] == VARIABLE_NAMESPACE:
|
||||
xmlelts.insert(0, xml)
|
||||
elif xml.attrib['name'] == 'actions':
|
||||
actions = xml
|
||||
else:
|
||||
xmlelts.append(xml)
|
||||
if actions is not None:
|
||||
xmlelts.append(actions)
|
||||
else:
|
||||
xmlelts = xmlelts_
|
||||
for xmlelt in xmlelts:
|
||||
if xmlelt.tag != 'family':
|
||||
raise CreoleLoaderError(_('unknown tag {}').format(xmlelt.tag))
|
||||
self._iter_family(xmlelt, family)
|
||||
|
||||
def _populate_variable(self, elt, subpath, is_follower, is_leader):
|
||||
variable = Variable(elt, self.booleans, self.storage, is_follower, is_leader, self.eosfunc)
|
||||
path = self._build_path(subpath, elt)
|
||||
properties = variable.attrib.get('properties', [])
|
||||
if 'force_store_value' in properties or "auto_freeze" in properties:
|
||||
self.force_store_values.add(path)
|
||||
self.storage.add(path, variable)
|
||||
return variable
|
||||
|
||||
def _populate_family(self, elt, subpath):
|
||||
if subpath is None:
|
||||
force_icon = False
|
||||
else:
|
||||
force_icon = not subpath.startswith('containers') and not subpath.startswith('actions')
|
||||
family = Family(elt, self.booleans, self.storage, self.eosfunc, force_icon)
|
||||
path = self._build_path(subpath, elt)
|
||||
self.storage.add(path, family)
|
||||
return family
|
||||
|
||||
def _build_path(self, subpath, elt):
|
||||
if subpath is None:
|
||||
subpath = elt.attrib['name']
|
||||
else:
|
||||
subpath += '.' + elt.attrib['name']
|
||||
return subpath
|
||||
|
||||
def _iter_leader(self, leader, subpath):
|
||||
subpath = self._build_path(subpath, leader)
|
||||
family = Family(leader, self.booleans, self.storage, self.eosfunc)
|
||||
family.set_leader()
|
||||
self.storage.add(subpath, family)
|
||||
leader_name = None
|
||||
for var in leader:
|
||||
if var.tag == 'property':
|
||||
self._parse_properties(family, var)
|
||||
elif var.tag == 'variable':
|
||||
if leader_name is None:
|
||||
leader_name = var.attrib['name']
|
||||
self.groups[leader_name] = []
|
||||
else:
|
||||
self.groups[leader_name].append(var.attrib['name'])
|
||||
self._iter_family(var, family, subpath=subpath)
|
||||
def reorder_family(self, xmlroot):
|
||||
xmlelts = []
|
||||
for xmlelt in xmlroot:
|
||||
# VARIABLE_NAMESPACE family has to be loaded before any other family
|
||||
# because `extra` family could use `VARIABLE_NAMESPACE` variables.
|
||||
if xmlelt.attrib['name'] == VARIABLE_NAMESPACE:
|
||||
xmlelts.insert(0, xmlelt)
|
||||
else:
|
||||
raise CreoleLoaderError(_('unknown tag {}').format(var.tag))
|
||||
return family
|
||||
xmlelts.append(xmlelt)
|
||||
return xmlelts
|
||||
|
||||
def _iter_family(self, child, family, subpath=None):
|
||||
if child.tag not in ['family', 'variable', 'separators', 'leader', 'property']:
|
||||
def make_tiramisu_objects(self, xmlroot, eosfunc):
|
||||
self.eosfunc = imp.load_source('eosfunc', eosfunc)
|
||||
|
||||
family = self.get_root_family()
|
||||
for xmlelt in self.reorder_family(xmlroot):
|
||||
self.iter_family(xmlelt,
|
||||
family,
|
||||
None,
|
||||
)
|
||||
|
||||
def iter_family(self,
|
||||
child,
|
||||
family,
|
||||
subpath,
|
||||
):
|
||||
if child.tag not in KNOWN_TAGS:
|
||||
raise CreoleLoaderError(_('unknown tag {}').format(child.tag))
|
||||
if child.tag == 'family':
|
||||
old_family = family
|
||||
family = self._populate_family(child, subpath)
|
||||
if old_family is not None:
|
||||
old_family.add(family)
|
||||
if len(child) != 0:
|
||||
subpath = self._build_path(subpath, child)
|
||||
for c in child:
|
||||
self._iter_family(c, family, subpath=subpath)
|
||||
elif child.tag == 'leader':
|
||||
leader = self._iter_leader(child, subpath)
|
||||
family.add(leader)
|
||||
if child.tag in ['family', 'leader']:
|
||||
self.populate_family(family,
|
||||
child,
|
||||
subpath,
|
||||
)
|
||||
elif child.tag == 'separators':
|
||||
self._parse_separators(child)
|
||||
self.parse_separators(child)
|
||||
elif child.tag == 'variable':
|
||||
if family is None:
|
||||
raise CreoleLoaderError(_('variable without family'))
|
||||
|
||||
is_follower = False
|
||||
is_leader = False
|
||||
if family.is_leader:
|
||||
if child.attrib['name'] != family.attrib['name']:
|
||||
is_follower = True
|
||||
else:
|
||||
is_leader = True
|
||||
variable = self._populate_variable(child, subpath, is_follower, is_leader)
|
||||
family.add(variable)
|
||||
self.populate_variable(child, subpath, family)
|
||||
elif child.tag == 'property':
|
||||
self._parse_properties(family, child)
|
||||
self.parse_properties(family, child)
|
||||
else:
|
||||
raise Exception('unknown tag {}'.format(child.tag))
|
||||
|
||||
def _parse_properties(self, family, child):
|
||||
def populate_family(self,
|
||||
parent_family,
|
||||
elt,
|
||||
subpath,
|
||||
):
|
||||
path = self.build_path(subpath,
|
||||
elt,
|
||||
)
|
||||
family = Family(elt,
|
||||
self.booleans,
|
||||
self.storage,
|
||||
self.eosfunc,
|
||||
)
|
||||
self.storage.add(path, family)
|
||||
if elt.tag == 'leader':
|
||||
family.set_leader()
|
||||
parent_family.add(family)
|
||||
if len(elt) != 0:
|
||||
for child in elt:
|
||||
self.iter_family(child,
|
||||
family,
|
||||
path,
|
||||
)
|
||||
|
||||
def parse_separators(self,
|
||||
separators,
|
||||
):
|
||||
for separator in separators:
|
||||
elt = self.storage.get(separator.attrib['name'])
|
||||
elt.add_information('separator', separator.text)
|
||||
|
||||
def populate_variable(self, elt, subpath, family):
|
||||
is_follower = False
|
||||
is_leader = False
|
||||
if family.is_leader:
|
||||
if elt.attrib['name'] != family.attrib['name']:
|
||||
is_follower = True
|
||||
else:
|
||||
is_leader = True
|
||||
path = self.build_path(subpath,
|
||||
elt,
|
||||
)
|
||||
variable = Variable(elt,
|
||||
self.booleans,
|
||||
self.storage,
|
||||
is_follower,
|
||||
is_leader,
|
||||
self.eosfunc,
|
||||
)
|
||||
self.storage.add(path, variable)
|
||||
family.add(variable)
|
||||
|
||||
def parse_properties(self, family, child):
|
||||
if child.get('type') == 'calculation':
|
||||
kwargs = {'condition': child.attrib['source'],
|
||||
'expected': ParamValue(child.attrib.get('expected'))}
|
||||
|
@ -260,17 +224,13 @@ class PopulateTiramisuObjects(object):
|
|||
else:
|
||||
family.attrib['properties'].append(child.text)
|
||||
|
||||
def _parse_separators(self, separators):
|
||||
for separator in separators:
|
||||
elt = self.storage.get(separator.attrib['name'])
|
||||
never_hidden = separator.attrib.get('never_hidden')
|
||||
if never_hidden == 'True':
|
||||
never_hidden = True
|
||||
else:
|
||||
never_hidden = None
|
||||
info = (separator.text, never_hidden)
|
||||
self.separators[separator.attrib['name']] = info
|
||||
elt.add_information('separator', info)
|
||||
def build_path(self,
|
||||
subpath,
|
||||
elt,
|
||||
):
|
||||
if subpath is None:
|
||||
return elt.attrib['name']
|
||||
return subpath + '.' + elt.attrib['name']
|
||||
|
||||
|
||||
class ElementStorage:
|
||||
|
@ -282,10 +242,6 @@ class ElementStorage:
|
|||
raise CreoleLoaderError(_('path already loaded {}').format(path))
|
||||
self.paths[path] = elt
|
||||
|
||||
def add_information(self, path, name, information):
|
||||
elt = self.get(path)
|
||||
elt.add_information(name, information)
|
||||
|
||||
def get(self, path):
|
||||
if path not in self.paths:
|
||||
raise CreoleLoaderError(_('there is no element for path {}').format(path))
|
||||
|
@ -313,115 +269,124 @@ class Variable(Common):
|
|||
self.option = None
|
||||
self.informations = {}
|
||||
self.attrib = {}
|
||||
self.attrib['properties'] = []
|
||||
if elt.attrib['type'] != 'symlink':
|
||||
self.attrib['properties'] = []
|
||||
self.attrib['validators'] = []
|
||||
self.eosfunc = eosfunc
|
||||
self.storage = storage
|
||||
is_submulti = False
|
||||
self.booleans = booleans
|
||||
self.populate_attrib(elt)
|
||||
self.is_follower = is_follower
|
||||
self.is_leader = is_leader
|
||||
convert_option = CONVERT_OPTION[elt.attrib['type']]
|
||||
self.object_type = convert_option['opttype']
|
||||
self.populate_choice(elt)
|
||||
for child in elt:
|
||||
self.populate_property(child)
|
||||
self.populate_value(child)
|
||||
self.populate_check(child)
|
||||
if 'initkwargs' in convert_option:
|
||||
self.attrib.update(convert_option['initkwargs'])
|
||||
if elt.attrib['type'] == 'symlink':
|
||||
self.attrib['opt'] = storage.get(self.attrib['opt'])
|
||||
|
||||
def populate_attrib(self,
|
||||
elt,
|
||||
):
|
||||
for key, value in elt.attrib.items():
|
||||
if key in booleans:
|
||||
if key == 'multi' and elt.attrib['type'] == 'symlink':
|
||||
continue
|
||||
if key == 'multi' and value == 'submulti':
|
||||
value = submulti
|
||||
elif key in self.booleans:
|
||||
if value == 'True':
|
||||
value = True
|
||||
elif value == 'False':
|
||||
value = False
|
||||
elif key == 'multi' and value == 'submulti':
|
||||
is_submulti = True
|
||||
value = submulti
|
||||
else:
|
||||
raise CreoleLoaderError(_('unknown value {} for {}').format(value, key))
|
||||
if key in ['help', 'test']:
|
||||
self.add_information(key, value)
|
||||
elif key == 'type':
|
||||
pass
|
||||
else:
|
||||
elif key != 'type':
|
||||
self.attrib[key] = value
|
||||
convert_option = CONVERT_OPTION[elt.attrib['type']]
|
||||
self.object_type = convert_option['opttype']
|
||||
|
||||
def populate_choice(self,
|
||||
elt,
|
||||
):
|
||||
if elt.attrib['type'] == 'choice':
|
||||
if self.attrib.get('choice'):
|
||||
self.attrib['values'] = getattr(self.eosfunc, self.attrib.get('choice'))
|
||||
values = []
|
||||
for child in elt:
|
||||
if child.tag == 'choice':
|
||||
value = child.text
|
||||
if child.attrib['type'] == 'number':
|
||||
value = int(value)
|
||||
values.append(value)
|
||||
self.attrib['values'] = tuple(values)
|
||||
|
||||
def populate_property(self, child):
|
||||
if child.tag == 'property':
|
||||
if child.get('type') == 'calculation':
|
||||
kwargs = {'condition': child.attrib['source'],
|
||||
'expected': ParamValue(child.attrib.get('expected'))}
|
||||
if child.attrib['inverse'] == 'True':
|
||||
kwargs['reverse_condition'] = ParamValue(True)
|
||||
self.attrib['properties'].append((ParamValue(child.text), kwargs))
|
||||
else:
|
||||
self.attrib['values'] = []
|
||||
for child in elt:
|
||||
if child.tag == 'choice':
|
||||
value = child.text
|
||||
if 'type' in child.attrib and child.attrib['type'] == 'number':
|
||||
value = int(value)
|
||||
if value is None:
|
||||
value = u''
|
||||
self.attrib['values'].append(value)
|
||||
self.attrib['values'] = tuple(self.attrib['values'])
|
||||
for child in elt:
|
||||
if child.tag == 'property':
|
||||
if child.get('type') == 'calculation':
|
||||
kwargs = {'condition': child.attrib['source'],
|
||||
'expected': ParamValue(child.attrib.get('expected'))}
|
||||
if child.attrib['inverse'] == 'True':
|
||||
kwargs['reverse_condition'] = ParamValue(True)
|
||||
self.attrib['properties'].append((ParamValue(child.text), kwargs))
|
||||
self.attrib['properties'].append(child.text)
|
||||
|
||||
def populate_value(self, child):
|
||||
if child.tag == 'value':
|
||||
if child.attrib.get('type') == 'calculation':
|
||||
if child.text is not None and child.text.strip():
|
||||
self.attrib['default'] = (child.text.strip(),)
|
||||
else:
|
||||
self.attrib['properties'].append(child.text)
|
||||
elif child.tag == 'value':
|
||||
if child.attrib.get('type') == 'calculation':
|
||||
if child.text is not None and child.text.strip():
|
||||
self.attrib['default'] = (child.text.strip(),)
|
||||
else:
|
||||
params = []
|
||||
for param in child:
|
||||
params.append(self.parse_param(param))
|
||||
self.attrib['default'] = (child.attrib['name'], params, False)
|
||||
params = []
|
||||
for param in child:
|
||||
params.append(self.parse_param(param))
|
||||
self.attrib['default'] = (child.attrib['name'], params, False)
|
||||
else:
|
||||
if "type" in child.attrib:
|
||||
type_ = CONVERT_OPTION[child.attrib['type']]['opttype']
|
||||
else:
|
||||
if "type" in child.attrib:
|
||||
type_ = CONVERT_OPTION[child.attrib['type']]['opttype']
|
||||
else:
|
||||
type_ = self.object_type
|
||||
if self.attrib['multi'] is True and not is_follower:
|
||||
if 'default' not in self.attrib:
|
||||
self.attrib['default'] = []
|
||||
value = convert_tiramisu_value(child.text, type_)
|
||||
self.attrib['default'].append(value)
|
||||
if 'default_multi' not in self.attrib and not is_leader:
|
||||
self.attrib['default_multi'] = value
|
||||
elif self.attrib['multi'] == submulti:
|
||||
if 'default' not in self.attrib:
|
||||
self.attrib['default'] = []
|
||||
value = convert_tiramisu_value(child.text, type_)
|
||||
if not is_follower:
|
||||
if not isinstance(value, list):
|
||||
dvalue = [value]
|
||||
else:
|
||||
dvalue = value
|
||||
self.attrib['default'].append(dvalue)
|
||||
if value and 'default_multi' not in self.attrib and not is_leader:
|
||||
self.attrib['default_multi'] = []
|
||||
if not is_leader:
|
||||
self.attrib['default_multi'].append(value)
|
||||
else:
|
||||
if 'default' in self.attrib:
|
||||
raise CreoleLoaderError(_('default value already set for {}'
|
||||
'').format(self.attrib['path']))
|
||||
value = convert_tiramisu_value(child.text, type_)
|
||||
if is_follower:
|
||||
self.attrib['default_multi'] = value
|
||||
type_ = self.object_type
|
||||
if self.attrib['multi'] is True and not self.is_follower:
|
||||
if 'default' not in self.attrib:
|
||||
self.attrib['default'] = []
|
||||
value = convert_tiramisu_value(child.text, type_)
|
||||
self.attrib['default'].append(value)
|
||||
if 'default_multi' not in self.attrib and not self.is_leader:
|
||||
self.attrib['default_multi'] = value
|
||||
elif self.attrib['multi'] == submulti:
|
||||
if 'default' not in self.attrib:
|
||||
self.attrib['default'] = []
|
||||
value = convert_tiramisu_value(child.text, type_)
|
||||
if not self.is_follower:
|
||||
if not isinstance(value, list):
|
||||
dvalue = [value]
|
||||
else:
|
||||
self.attrib['default'] = value
|
||||
elif child.tag == 'choice':
|
||||
# already load
|
||||
pass
|
||||
elif child.tag == 'check':
|
||||
params = []
|
||||
for param in child:
|
||||
params.append(self.parse_param(param))
|
||||
#check.params = params
|
||||
self.attrib['validators'].append((child.attrib['name'], params, child.attrib['warnings_only']))
|
||||
else:
|
||||
raise Exception('unknown tag {}'.format(child.tag))
|
||||
if 'initkwargs' in convert_option:
|
||||
self.attrib.update(convert_option['initkwargs'])
|
||||
if elt.attrib['type'] == 'symlink':
|
||||
del self.attrib['properties']
|
||||
del self.attrib['multi']
|
||||
self.attrib['opt'] = storage.get(self.attrib['opt'])
|
||||
dvalue = value
|
||||
self.attrib['default'].append(dvalue)
|
||||
if value and 'default_multi' not in self.attrib and not self.is_leader:
|
||||
self.attrib['default_multi'] = []
|
||||
if not self.is_leader:
|
||||
self.attrib['default_multi'].append(value)
|
||||
else:
|
||||
if 'default' in self.attrib:
|
||||
raise CreoleLoaderError(_('default value already set for {}'
|
||||
'').format(self.attrib['path']))
|
||||
value = convert_tiramisu_value(child.text, type_)
|
||||
if self.is_follower:
|
||||
self.attrib['default_multi'] = value
|
||||
else:
|
||||
self.attrib['default'] = value
|
||||
|
||||
def populate_check(self, child):
|
||||
if child.tag == 'check':
|
||||
params = []
|
||||
for param in child:
|
||||
params.append(self.parse_param(param))
|
||||
#check.params = params
|
||||
self.attrib['validators'].append((child.attrib['name'], params, child.attrib['warnings_only']))
|
||||
|
||||
def parse_param(self, param):
|
||||
name = param.attrib.get('name', '')
|
||||
|
@ -515,7 +480,7 @@ class Variable(Common):
|
|||
import traceback
|
||||
traceback.print_exc()
|
||||
name = self.attrib['name']
|
||||
raise CreoleLoaderError(_('cannot create option {}: {}').format(name, err))
|
||||
raise CreoleLoaderError(_('cannot create option "{}": {}').format(name, err))
|
||||
for key, value in self.informations.items():
|
||||
option.impl_set_information(key, value)
|
||||
self.option = option
|
||||
|
@ -523,42 +488,25 @@ class Variable(Common):
|
|||
|
||||
|
||||
class Family(Common):
|
||||
def __init__(self, elt, booleans, storage, eosfunc, force_icon=False):
|
||||
def __init__(self,
|
||||
elt,
|
||||
booleans,
|
||||
storage,
|
||||
eosfunc,
|
||||
):
|
||||
self.option = None
|
||||
self.attrib = {}
|
||||
self.is_leader = False
|
||||
if force_icon:
|
||||
self.informations = {'icon': None}
|
||||
else:
|
||||
self.informations = {}
|
||||
self.informations = {}
|
||||
self.children = []
|
||||
self.storage = storage
|
||||
self.eosfunc = eosfunc
|
||||
self.attrib['properties'] = []
|
||||
for key, value in elt.attrib.items():
|
||||
if key in booleans:
|
||||
if value == 'True':
|
||||
value = True
|
||||
elif value == 'False':
|
||||
value = False
|
||||
else:
|
||||
raise CreoleLoaderError(_('unknown value {} for {}').format(value, key))
|
||||
if key == 'icon':
|
||||
self.add_information('icon', value)
|
||||
continue
|
||||
elif key == 'hidden':
|
||||
if value:
|
||||
self.attrib['properties'].append(key)
|
||||
elif key == 'mode':
|
||||
self.attrib['properties'].append(value)
|
||||
elif key == 'help':
|
||||
if key == 'help':
|
||||
self.add_information(key, value)
|
||||
elif key == 'type':
|
||||
pass
|
||||
else:
|
||||
self.attrib[key] = value
|
||||
if 'doc' not in self.attrib:
|
||||
self.attrib['doc'] = u''
|
||||
|
||||
def add(self, child):
|
||||
self.children.append(child)
|
||||
|
@ -589,13 +537,11 @@ class Family(Common):
|
|||
else:
|
||||
option = Leadership(**self.attrib)
|
||||
except Exception as err:
|
||||
raise CreoleLoaderError(_('cannot create optiondescription {}: {}').format(self.attrib['name'], err))
|
||||
print(self.attrib)
|
||||
raise CreoleLoaderError(_('cannot create optiondescription "{}": {}').format(self.attrib['name'], err))
|
||||
for key, value in self.informations.items():
|
||||
option.impl_set_information(key, value)
|
||||
self.option = option
|
||||
#if self.is_leader:
|
||||
# self.option.impl_set_group_type(groups.leader)
|
||||
|
||||
return self.option
|
||||
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ from .path import Path
|
|||
# CreoleObjSpace's elements like 'family' or 'follower', that shall be forced to the Redefinable type
|
||||
FORCE_REDEFINABLES = ('family', 'follower', 'service', 'disknod', 'variables')
|
||||
# CreoleObjSpace's elements that shall be forced to the UnRedefinable type
|
||||
FORCE_UNREDEFINABLES = ('value', 'input', 'profile', 'ewtapp', 'tag', 'saltaction')
|
||||
FORCE_UNREDEFINABLES = ('value',)
|
||||
# CreoleObjSpace's elements that shall be set to the UnRedefinable type
|
||||
UNREDEFINABLE = ('submulti', 'multi', 'type')
|
||||
|
||||
|
@ -47,9 +47,18 @@ CONVERT_PROPERTIES = {'auto_save': ['force_store_value'], 'auto_freeze': ['force
|
|||
RENAME_ATTIBUTES = {'description': 'doc'}
|
||||
|
||||
INCOMPATIBLE_ATTRIBUTES = [['multi', 'submulti']]
|
||||
FORCED_TEXT_ELTS_AS_NAME = ('choice', 'property')
|
||||
FORCED_TEXT_ELTS_AS_NAME = ('choice', 'property', 'value', 'target')
|
||||
|
||||
#TYPE_TARGET_CONDITION = ('variable', 'family')
|
||||
CONVERT_EXPORT = {'Leadership': 'leader',
|
||||
'Separators': 'separators',
|
||||
'Variable': 'variable',
|
||||
'Value': 'value',
|
||||
'Property': 'property',
|
||||
'Choice': 'choice',
|
||||
'Param': 'param',
|
||||
'Separator': 'separator',
|
||||
'Check': 'check',
|
||||
}
|
||||
|
||||
# _____________________________________________________________________________
|
||||
# special types definitions for the Object Space's internal representation
|
||||
|
@ -474,7 +483,7 @@ class CreoleObjSpace:
|
|||
variableobj.redefine = child.attrib['target'] in self.redefine_variables
|
||||
if not hasattr(variableobj, 'index'):
|
||||
variableobj.index = self.index
|
||||
if child.tag in ['fill', 'condition', 'check', 'action']:
|
||||
if child.tag in ['fill', 'condition', 'check']:
|
||||
variableobj.namespace = namespace
|
||||
|
||||
def fill_variableobj_path_attribute(self,
|
||||
|
@ -537,60 +546,47 @@ class CreoleObjSpace:
|
|||
space = list(space.values())
|
||||
if isinstance(space, list):
|
||||
for subspace in space:
|
||||
if isinstance(subspace, self.Leadership):
|
||||
_name = 'leader'
|
||||
else:
|
||||
_name = name
|
||||
if name in ['services', 'variables', 'actions']:
|
||||
_name = 'family'
|
||||
if HIGH_COMPATIBILITY and not hasattr(subspace, 'doc'):
|
||||
subspace.doc = ''
|
||||
if _name == 'value' and (not hasattr(subspace, 'name') or subspace.name is None):
|
||||
if name == 'value' and (not hasattr(subspace, 'name') or subspace.name is None):
|
||||
raise Exception('pfff')
|
||||
continue
|
||||
_name = CONVERT_EXPORT.get(subspace.__class__.__name__, 'family')
|
||||
child_node = SubElement(node, _name)
|
||||
self._xml_export(child_node, subspace, _name)
|
||||
elif isinstance(space, self.Atom):
|
||||
if name == 'services':
|
||||
child_node = SubElement(node, 'family')
|
||||
elif isinstance(space, (self.Atom, (self.Redefinable, self.UnRedefinable))):
|
||||
_name = CONVERT_EXPORT.get(space.__class__.__name__, 'family')
|
||||
child_node = SubElement(node, _name)
|
||||
if _name != name:
|
||||
child_node.attrib['name'] = name
|
||||
if 'doc' not in child_node.attrib.keys():
|
||||
child_node.attrib['doc'] = name
|
||||
for subname in self.get_attributes(space):
|
||||
subspace = getattr(space, subname)
|
||||
self._sub_xml_export(subname, child_node, name, subspace, space)
|
||||
elif name not in ERASED_ATTRIBUTES:
|
||||
# # FIXME plutot dans annotator ...
|
||||
if node.tag in ['variable', 'family', 'leader']:
|
||||
if name in PROPERTIES:
|
||||
if space is True:
|
||||
for prop in CONVERT_PROPERTIES.get(name, [name]):
|
||||
SubElement(node, 'property').text = prop
|
||||
return
|
||||
if name == 'mode' and space:
|
||||
SubElement(node, 'property').text = space
|
||||
return
|
||||
# Not param for calculation ...
|
||||
if name == 'name' and node_name in FORCED_TEXT_ELTS_AS_NAME and not hasattr(current_space, 'param'):
|
||||
node.text = str(space)
|
||||
elif name == 'text' and node_name in self.forced_text_elts:
|
||||
node.text = space
|
||||
elif node.tag == 'family' and name == 'name':
|
||||
if 'doc' not in node.attrib.keys():
|
||||
node.attrib['doc'] = space
|
||||
node.attrib['name'] = normalize_family(space, check_name=False)
|
||||
else:
|
||||
child_node = SubElement(node, name)
|
||||
for subname in self.get_attributes(space):
|
||||
subspace = getattr(space, subname)
|
||||
self._sub_xml_export(subname, child_node, name, subspace, space)
|
||||
elif isinstance(space, self.Redefinable):
|
||||
child_node = SubElement(node, 'family')
|
||||
child_node.attrib['name'] = name
|
||||
for subname in self.get_attributes(space):
|
||||
subspace = getattr(space, subname)
|
||||
self._sub_xml_export(subname, child_node, name, subspace, space)
|
||||
else:
|
||||
# FIXME plutot dans annotator ...
|
||||
if name in PROPERTIES and node.tag in ['variable', 'family', 'leader']:
|
||||
if space is True:
|
||||
for prop in CONVERT_PROPERTIES.get(name, [name]):
|
||||
SubElement(node, 'property').text = prop
|
||||
|
||||
elif name not in ERASED_ATTRIBUTES:
|
||||
if name == 'name' and node_name in self.forced_text_elts_as_name and not hasattr(current_space, 'param'):
|
||||
if isinstance(space, str):
|
||||
node.text = space
|
||||
else:
|
||||
node.text = str(space)
|
||||
elif name == 'text' and node_name in self.forced_text_elts:
|
||||
node.text = space
|
||||
elif node.tag == 'family' and name == 'name':
|
||||
if 'doc' not in node.attrib.keys():
|
||||
node.attrib['doc'] = space
|
||||
node.attrib['name'] = normalize_family(space, check_name=False)
|
||||
elif node.tag in ['variable', 'family', 'leader'] and name == 'mode':
|
||||
if space is not None:
|
||||
SubElement(node, 'property').text = space
|
||||
else:
|
||||
if name in RENAME_ATTIBUTES:
|
||||
name = RENAME_ATTIBUTES[name]
|
||||
if space is not None:
|
||||
node.attrib[name] = str(space)
|
||||
if name in RENAME_ATTIBUTES:
|
||||
name = RENAME_ATTIBUTES[name]
|
||||
if space is not None:
|
||||
node.attrib[name] = str(space)
|
||||
|
||||
def _xml_export(self,
|
||||
node,
|
||||
|
@ -599,4 +595,9 @@ class CreoleObjSpace:
|
|||
):
|
||||
for name in self.get_attributes(space):
|
||||
subspace = getattr(space, name)
|
||||
self._sub_xml_export(name, node, node_name, subspace, space)
|
||||
self._sub_xml_export(name,
|
||||
node,
|
||||
node_name,
|
||||
subspace,
|
||||
space,
|
||||
)
|
||||
|
|
|
@ -115,15 +115,6 @@ class Path:
|
|||
) -> str: # pylint: disable=C0111
|
||||
return self._get_variable(name)['family']
|
||||
|
||||
def get_variable_family_path(self,
|
||||
name: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
dico = self._get_variable(name)
|
||||
list_path = [dico['namespace'], dico['family']]
|
||||
if dico['leader'] is not None:
|
||||
list_path.append(dico['leader'])
|
||||
return '.'.join(list_path)
|
||||
|
||||
def get_variable_namespace(self,
|
||||
name: str,
|
||||
) -> str: # pylint: disable=C0111
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="tata"/>
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="tata" name="tata"/>
|
||||
</family>
|
||||
</rougail>
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
|
||||
<services/>
|
||||
|
||||
<variables>
|
||||
<family name="général">
|
||||
<variable name="mode_conteneur_actif" type="oui/non" description="No change" auto_freeze="True">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="Redefine description" multi="True" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="Redefine description" multi="submulti" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="Général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="domain">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="number">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</variable>
|
||||
</family>
|
||||
<separators>
|
||||
<separator name="mode_conteneur_actif" never_hidden="True">Établissement</separator>
|
||||
<separator name="mode_conteneur_actif">Établissement</separator>
|
||||
</separators>
|
||||
</variables>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
@ -15,7 +15,7 @@
|
|||
</variable>
|
||||
</family>
|
||||
<separators>
|
||||
<separator name="rougail.general.mode_conteneur_actif" never_hidden="True">Établissement</separator>
|
||||
<separator name="rougail.general.mode_conteneur_actif">Établissement</separator>
|
||||
</separators>
|
||||
</family>
|
||||
</rougail>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="Général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>basic</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="string">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="Général" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="string">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="True" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="Description" multi="submulti" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
32
tests/flattener_dicos/10valid_enum_none/00-base.xml
Normal file
32
tests/flattener_dicos/10valid_enum_none/00-base.xml
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
|
||||
<services/>
|
||||
|
||||
<variables>
|
||||
<family name="general" mode="expert">
|
||||
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
|
||||
<value>non</value>
|
||||
</variable>
|
||||
</family>
|
||||
<family name="enumfam" mode="expert">
|
||||
<variable name="enumvar" type="string" description="multi">
|
||||
<value>b</value>
|
||||
</variable>
|
||||
</family>
|
||||
<separators/>
|
||||
</variables>
|
||||
|
||||
<constraints>
|
||||
<check name="valid_enum" target="enumvar">
|
||||
<param>['a','b','']</param>
|
||||
</check>
|
||||
</constraints>
|
||||
|
||||
<help>
|
||||
<variable name="enumvar">bla bla bla</variable>
|
||||
</help>
|
||||
|
||||
</rougail>
|
||||
<!-- vim: ts=4 sw=4 expandtab
|
||||
-->
|
|
@ -0,0 +1 @@
|
|||
{"rougail.general.mode_conteneur_actif": "non", "rougail.enumfam.enumvar": "b"}
|
27
tests/flattener_dicos/10valid_enum_none/result/00-base.xml
Normal file
27
tests/flattener_dicos/10valid_enum_none/result/00-base.xml
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
<choice type="string">oui</choice>
|
||||
<choice type="string">non</choice>
|
||||
<property>mandatory</property>
|
||||
<property>expert</property>
|
||||
<value type="string">non</value>
|
||||
</variable>
|
||||
</family>
|
||||
<family doc="enumfam" name="enumfam">
|
||||
<property>expert</property>
|
||||
<variable doc="multi" help="bla bla bla" multi="False" name="enumvar" type="choice">
|
||||
<choice type="string">a</choice>
|
||||
<choice type="string">b</choice>
|
||||
<choice type="string"></choice>
|
||||
<property>mandatory</property>
|
||||
<property>expert</property>
|
||||
<value type="string">b</value>
|
||||
</variable>
|
||||
</family>
|
||||
<separators/>
|
||||
</family>
|
||||
</rougail>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>expert</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/etc/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true, "services.service0.files.file0.activate": true}
|
||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true, "services.test.files.file.activate": true}
|
||||
|
|
|
@ -1,35 +1,29 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file" name="file">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/etc/file</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>hidden</property>
|
||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
|
@ -37,7 +31,7 @@
|
|||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "oui", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/etc/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
||||
{"rougail.general.condition": "oui", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||
|
|
|
@ -1,35 +1,29 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file" name="file">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/etc/file</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>hidden</property>
|
||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
|
@ -37,7 +31,7 @@
|
|||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file1", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file1", "services.service0.files.file0.templating": true, "services.service0.files.file0.activate": true, "services.service0.files.file1.group": "root", "services.service0.files.file1.mode": "0644", "services.service0.files.file1.name": "/tmp/file2", "services.service0.files.file1.owner": "root", "services.service0.files.file1.source": "file2", "services.service0.files.file1.templating": true, "services.service0.files.file1.activate": true}
|
||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": true, "services.test.files.file1.activate": true, "services.test.files.file2.group": "root", "services.test.files.file2.mode": "0644", "services.test.files.file2.name": "/tmp/file2", "services.test.files.file2.owner": "root", "services.test.files.file2.source": "file2", "services.test.files.file2.templating": true, "services.test.files.file2.activate": true}
|
||||
|
|
|
@ -1,66 +1,53 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file1" name="file1">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file1</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file1</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>hidden</property>
|
||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
</family>
|
||||
<family doc="file1" name="file1">
|
||||
<family doc="file2" name="file2">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file2</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file2</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>hidden</property>
|
||||
<property expected="oui" inverse="False" source="rougail.general.condition" type="calculation">disabled</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
|
@ -68,7 +55,7 @@
|
|||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||
|
|
|
@ -1,43 +1,37 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file" name="file">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>disabled</property>
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||
|
|
|
@ -1,43 +1,37 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file" name="file">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>disabled</property>
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||
|
|
|
@ -1,43 +1,37 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file" name="file">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>disabled</property>
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}
|
||||
{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": true}
|
||||
|
|
|
@ -1,35 +1,29 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file" name="file">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>hidden</property>
|
||||
<property expected="statique" inverse="True" source="rougail.general.condition" type="calculation">disabled</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
|
@ -37,7 +31,7 @@
|
|||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="condition" type="choice">
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file1", "services.service0.files.file0.owner": "root", "services.service0.files.file0.source": "file1", "services.service0.files.file0.templating": true}
|
||||
{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": true}
|
||||
|
|
|
@ -1,43 +1,37 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<family name="services">
|
||||
<family name="service0" doc="test">
|
||||
<family doc="files" name="files">
|
||||
<family doc="file0" name="file0">
|
||||
<family name="services" doc="services">
|
||||
<property>hidden</property>
|
||||
<family doc="test" name="test">
|
||||
<family name="files" doc="files">
|
||||
<family doc="file1" name="file1">
|
||||
<variable doc="group" multi="False" name="group" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="mode" multi="False" name="mode" type="string">
|
||||
<property>hidden</property>
|
||||
<value>0644</value>
|
||||
</variable>
|
||||
<variable doc="name" multi="False" name="name" type="string">
|
||||
<property>hidden</property>
|
||||
<value>/tmp/file1</value>
|
||||
</variable>
|
||||
<variable doc="owner" multi="False" name="owner" type="string">
|
||||
<property>hidden</property>
|
||||
<value>root</value>
|
||||
</variable>
|
||||
<variable doc="source" multi="False" name="source" type="string">
|
||||
<property>hidden</property>
|
||||
<value>file1</value>
|
||||
</variable>
|
||||
<variable doc="templating" multi="False" name="templating" type="boolean">
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
<variable doc="activate" multi="False" name="activate" type="boolean">
|
||||
<property>disabled</property>
|
||||
<property>hidden</property>
|
||||
<value>True</value>
|
||||
</variable>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
</family>
|
||||
<family doc="" name="rougail">
|
||||
<family doc="rougail" name="rougail">
|
||||
<family doc="general" name="general">
|
||||
<property>normal</property>
|
||||
<variable doc="No change" multi="False" name="mode_conteneur_actif" type="choice">
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue