This commit is contained in:
Emmanuel Garette 2020-07-07 18:12:16 +02:00
parent eb6b22e5b1
commit ef948fa109
183 changed files with 798 additions and 914 deletions

View File

@ -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

View File

@ -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)>

View File

@ -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

View File

@ -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

View File

@ -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,
)

View File

@ -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

View File

@ -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>

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View 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
-->

View File

@ -0,0 +1 @@
{"rougail.general.mode_conteneur_actif": "non", "rougail.enumfam.enumvar": "b"}

View 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>

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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">

View File

@ -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}

View File

@ -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