Compare commits

..

8 Commits

187 changed files with 1841 additions and 1003 deletions

5
debian/changelog vendored Normal file
View File

@ -0,0 +1,5 @@
rougail (0.1) unstable; urgency=low
* first version
-- Cadoles <contact@cadoles.com> Tue, 31 Mar 2020 10:40:42 +0200

View File

@ -1,5 +1,6 @@
# coding: utf-8
from copy import copy
from typing import List
from collections import OrderedDict
from os.path import join, basename
@ -74,6 +75,7 @@ KEY_TYPE = {'variable': 'symlink',
TYPE_PARAM_CHECK = ('string', 'python', 'eole', 'variable')
TYPE_PARAM_CONDITION = ('string', 'python', 'number', 'eole', 'variable')
TYPE_PARAM_FILL = ('string', 'eole', 'number', 'context', 'variable')
CONVERSION = {'number': int}
ERASED_FAMILY_ACTION_ATTRIBUTES = ('index', 'action')
@ -113,7 +115,7 @@ class ServiceAnnotator:
def convert_service_to_family(self, service_name, service_family, service):
for elttype, values in vars(service).items():
if elttype in ['name', 'index']:
if elttype in ['name', 'index', 'method']:
continue
family = self.objectspace.family()
family.name = elttype + 's'
@ -184,7 +186,10 @@ class ServiceAnnotator:
family.name = '{}{}'.format(name, index)
family.variable = variables
family.mode = None
self.paths.append('family', subpath, 'services', creoleobj=family)
self.paths.add_family('services',
subpath,
family,
)
families.append(family)
return families
@ -230,11 +235,19 @@ class ServiceAnnotator:
choices.append(choice)
variable.choice = choices
path = '{}.{}'.format(subpath, name)
self.paths.append('variable', path, 'services', 'service', variable)
self.paths.add_variable('services',
path,
'service',
False,
variable,
)
return variable
def _update_override(self, file_, index, service_path):
self._update_file(file_, index, service_path)
def _update_file(self, file_, index, service_path):
if file_.file_type == "UnicodeOption":
if not hasattr(file_, 'file_type') or file_.file_type == "UnicodeOption":
if not hasattr(file_, 'source'):
file_.source = basename(file_.name)
elif not hasattr(file_, 'source'):
@ -327,7 +340,10 @@ class ServiceAnnotator:
family.name = '{}{}'.format(name, index)
family.variable = variables
family.mode = None
self.paths.append('family', subpath, 'services', creoleobj=family)
self.paths.add_family('services',
subpath,
family,
)
families.append(family)
return families
@ -440,61 +456,105 @@ class SpaceAnnotator(object):
variable.help = hlp.text
del self.space.help
def convert_groups(self): # pylint: disable=C0111
if hasattr(self.space, 'constraints'):
if hasattr(self.space.constraints, 'group'):
for group in self.space.constraints.group:
leader_fullname = group.master
follower_names = list(group.slave.keys())
leader_family_name = self.paths.get_variable_family_name(leader_fullname)
namespace = self.paths.get_variable_namespace(leader_fullname)
leader_name = self.paths.get_variable_name(leader_fullname)
leader_family = self.space.variables[namespace].family[leader_family_name]
leader_path = namespace + '.' + leader_family_name
is_leader = False
for variable in list(leader_family.variable.values()):
if isinstance(variable, self.objectspace.Leadership):
# append follower to an existed leadership
if variable.name == leader_name:
leader_space = variable
is_leader = True
else:
if is_leader:
if variable.name == follower_names[0]:
# followers are multi
if not variable.multi:
raise CreoleDictConsistencyError(_('the variable {} in a group must be multi or submulti').format(variable.name))
follower_names.remove(variable.name)
leader_family.variable.pop(variable.name)
leader_space.variable.append(variable) # pylint: disable=E1101
if namespace == 'creole':
variable_fullpath = variable.name
else:
variable_fullpath = leader_path + '.' + variable.name
self.paths.set_leader(variable_fullpath, leader_name)
if follower_names == []:
break
else:
raise CreoleDictConsistencyError(_('cannot found this follower {}').format(follower_names[0]))
if is_leader is False and variable.name == leader_name:
leader_space = self.objectspace.Leadership()
def manage_leader(self,
leader_space: 'Leadership',
leader_family_name: str,
leader_name: str,
namespace: str,
variable: 'Variable',
group: 'Group',
leader_fullname: str,
) -> None:
# manage leader's variable
if variable.multi is not True:
raise CreoleDictConsistencyError(_('the variable {} in a group must be multi').format(variable.name))
leader_space.variable = []
leader_space.name = leader_name
leader_space.hidden = variable.hidden
variable.hidden = None
if hasattr(group, 'description'):
leader_space.doc = group.description
else:
leader_space.doc = variable.description
variable.hidden = None
self.paths.append('family', leader_path + '.' + leader_name, namespace, creoleobj=leader_space)
# manage leader's variable
if variable.multi is not True:
raise CreoleDictConsistencyError(_('the variable {} in a group must be multi').format(variable.name))
leader_path = namespace + '.' + leader_family_name + '.' + leader_name
self.paths.add_family(namespace,
leader_path,
leader_space,
)
leader_family = self.space.variables[namespace].family[leader_family_name]
leader_family.variable[leader_name] = leader_space
leader_space.variable.append(variable) # pylint: disable=E1101
self.paths.set_leader(leader_fullname, leader_name)
leader_space.variable.append(variable)
self.paths.set_leader(namespace,
leader_family_name,
leader_name,
leader_name,
)
leader_space.path = leader_fullname
is_leader = True
def manage_follower(self,
namespace: str,
leader_family_name: str,
variable: 'Variable',
leader_name: str,
follower_names: List[str],
leader_space: 'Leadership',
) -> None:
if variable.name != follower_names[0]:
raise CreoleDictConsistencyError(_('cannot found this follower {}').format(follower_names[0]))
follower_names.remove(variable.name)
# followers are multi
if not variable.multi:
raise CreoleDictConsistencyError(_('the variable {} in a group must be multi or submulti').format(variable.name))
leader_space.variable.append(variable) # pylint: disable=E1101
self.paths.set_leader(namespace,
leader_family_name,
variable.name,
leader_name,
)
def convert_groups(self): # pylint: disable=C0111
if hasattr(self.space, 'constraints') and hasattr(self.space.constraints, 'group'):
for group in self.space.constraints.group:
leader_fullname = group.leader
follower_names = list(group.follower.keys())
leader_family_name = self.paths.get_variable_family_name(leader_fullname)
namespace = self.paths.get_variable_namespace(leader_fullname)
leader_name = self.paths.get_variable_name(leader_fullname)
ori_leader_family = self.space.variables[namespace].family[leader_family_name]
has_a_leader = False
for variable in list(ori_leader_family.variable.values()):
if isinstance(variable, self.objectspace.Leadership):
# append follower to an existed leadership
if variable.name == leader_name:
leader_space = variable
has_a_leader = True
else:
if has_a_leader:
# it's a follower
self.manage_follower(namespace,
leader_family_name,
variable,
leader_name,
follower_names,
leader_space,
)
ori_leader_family.variable.pop(variable.name)
if follower_names == []:
# no more follower
break
elif variable.name == leader_name:
# it's a leader
leader_space = self.objectspace.Leadership()
self.manage_leader(leader_space,
leader_family_name,
leader_name,
namespace,
variable,
group,
leader_fullname,
)
has_a_leader = True
else:
raise CreoleDictConsistencyError(_('cannot found followers {}').format(follower_names))
del self.space.constraints.group
@ -626,7 +686,13 @@ class SpaceAnnotator(object):
choices = []
for value in values:
choice = self.objectspace.choice()
try:
if type_ in CONVERSION:
choice.name = CONVERSION[type_](value)
else:
choice.name = str(value)
except:
raise CreoleDictConsistencyError(_(f'unable to change type of a valid_enum entry "{value}" is not a valid "{type_}" for "{variable.name}"'))
choices.append(choice.name)
choice.type = type_
variable.choice.append(choice)
@ -635,7 +701,11 @@ class SpaceAnnotator(object):
if hasattr(variable, 'value'):
for value in variable.value:
value.type = type_
if value.name not in choices:
if type_ in CONVERSION:
cvalue = CONVERSION[type_](value.name)
else:
cvalue = value.name
if cvalue not in choices:
raise CreoleDictConsistencyError(_('value "{}" of variable "{}" is not in list of all expected values ({})').format(value.name, variable.name, choices))
else:
new_value = self.objectspace.value()
@ -1061,7 +1131,11 @@ class SpaceAnnotator(object):
# if param.optional is True:
# param_option_indexes.append(fill_idx)
try:
param.text = self.paths.get_variable_path(param.text, namespace)
param.text, suffix = self.paths.get_variable_path(param.text,
namespace,
with_suffix=True)
if suffix:
param.suffix = suffix
except CreoleDictConsistencyError as err:
if param.optional is True:
param_option_indexes.append(fill_idx)

View File

@ -13,7 +13,7 @@
# Forked by:
# Cadoles (http://www.cadoles.com)
# Copyright (C) 2019
# Copyright (C) 2019-2020
# distribued with GPL-2 or later license
@ -66,9 +66,9 @@
<!ELEMENT services (service*)>
<!ELEMENT service ((port* | tcpwrapper* | ip* | interface* | package* | file* | digitalcertificate*)*) >
<!ELEMENT service ((port* | tcpwrapper* | ip* | interface* | package* | file* | digitalcertificate* | override*)*) >
<!ATTLIST service name CDATA #REQUIRED>
<!ATTLIST service method (systemd|upstart|apache|network) "systemd">
<!ATTLIST service method (systemd|none) "systemd">
<!ELEMENT input (#PCDATA)>
<!ELEMENT profile (#PCDATA)>
@ -109,6 +109,7 @@
<!ATTLIST file mkdir (True|False) "False">
<!ATTLIST file rm (True|False) "False">
<!ATTLIST file redefine (True|False) "False">
<!ATTLIST file templating (True|False) "True">
<!ELEMENT digitalcertificate EMPTY>
<!ATTLIST digitalcertificate name CDATA #REQUIRED >
@ -118,6 +119,10 @@
<!ATTLIST digitalcertificate type CDATA #REQUIRED >
<!ATTLIST digitalcertificate ca CDATA #REQUIRED >
<!ELEMENT override EMPTY>
<!ATTLIST override name CDATA #REQUIRED >
<!ATTLIST override templating (True|False) "True">
<!ELEMENT variables (family*, separators*)>
<!ELEMENT family (#PCDATA | variable)*>
<!ATTLIST family name CDATA #REQUIRED>
@ -172,8 +177,8 @@
<!ATTLIST condition source CDATA #REQUIRED>
<!ATTLIST condition fallback (True|False) "False">
<!ELEMENT group (slave+)>
<!ATTLIST group master CDATA #REQUIRED>
<!ELEMENT group (follower+)>
<!ATTLIST group leader CDATA #REQUIRED>
<!ATTLIST group description CDATA #IMPLIED>
<!ELEMENT param (#PCDATA)>
@ -186,6 +191,6 @@
<!ATTLIST target type (family|variable|filelist|iplist|portlist|tcpwrapperlist|packagelist|actionlist) "variable">
<!ATTLIST target optional (True|False) "False">
<!ELEMENT slave (#PCDATA)>
<!ELEMENT follower (#PCDATA)>
<!ELEMENT help ((variable* | family*)*)>

View File

@ -44,8 +44,8 @@ mo_location = LOCALE_DIR
gettext.find(APP_NAME, mo_location)
gettext.textdomain(APP_NAME)
gettext.bind_textdomain_codeset(APP_NAME, "UTF-8")
gettext.translation(APP_NAME, fallback=True)
#gettext.bind_textdomain_codeset(APP_NAME, "UTF-8")
#gettext.translation(APP_NAME, fallback=True)
t = gettext.translation(APP_NAME, fallback=True)

View File

@ -11,7 +11,7 @@ from tiramisu import (StrOption, OptionDescription, DynOptionDescription, PortOp
NetworkOption, NetmaskOption, DomainnameOption, BroadcastOption,
URLOption, EmailOption, FilenameOption, UsernameOption, DateOption,
PasswordOption, BoolOption, MACOption, Leadership, submulti,
Params, ParamSelfOption, ParamOption, ParamValue, Calculation, calc_value,
Params, ParamSelfOption, ParamOption, ParamDynOption, ParamValue, Calculation, calc_value,
groups, owners)
from tiramisu.error import ConfigError
@ -385,18 +385,21 @@ class Variable(Common):
if 'default' not in self.attrib:
self.attrib['default'] = []
value = convert_tiramisu_value(child.text, type_)
if not isinstance(value, list) and not is_follower:
value = [value]
self.attrib['default'].append(value)
if 'default_multi' not in self.attrib and not is_leader:
self.attrib['default_multi'] = value
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 value is None: # and (elt.attrib['type'] != 'choice' or value not in self.attrib['values']):
value = u''
if is_follower:
self.attrib['default_multi'] = value
else:
@ -431,7 +434,7 @@ class Variable(Common):
transitive = False
else:
raise CreoleLoaderError(_('unknown transitive boolean {}').format(transitive))
value = [param.text, transitive]
value = [param.text, transitive, param.attrib.get('suffix')]
elif param.attrib['type'] == 'number':
value = int(param.text)
else:
@ -462,10 +465,21 @@ class Variable(Common):
if len(value) == 3:
for param in value[1]:
if isinstance(param[1], list):
option = self.storage.get(param[1][0]).get()
param_kwargs = {'notraisepropertyerror': param[1][1]}
if value[0] in FUNC_TO_DICT:
param_value = ParamOption(self.storage.get(param[1][0]).get(), notraisepropertyerror=param[1][1], todict=True)
param_kwargs['todict'] = True
if not param[1][2]:
param_value = ParamOption(option,
**param_kwargs,
)
else:
param_value = ParamOption(self.storage.get(param[1][0]).get(), notraisepropertyerror=param[1][1])
family = '.'.join(param[1][0].split('.', 3)[:2])
param_value = ParamDynOption(option,
param[1][2],
self.storage.get(family).get(),
**param_kwargs,
)
else:
param_value = ParamValue(param[1])
if not param[0]:

View File

@ -34,8 +34,8 @@ from .annotator import ERASED_ATTRIBUTES, ActionAnnotator, ServiceAnnotator, Spa
from .utils import normalize_family
from .error import CreoleOperationError, SpaceObjShallNotBeUpdated, CreoleDictConsistencyError
# CreoleObjSpace's elements like 'family' or 'slave', that shall be forced to the Redefinable type
FORCE_REDEFINABLES = ('family', 'slave', 'service', 'disknod', 'variables', 'family_action')
# CreoleObjSpace's elements like 'family' or 'follower', that shall be forced to the Redefinable type
FORCE_REDEFINABLES = ('family', 'follower', 'service', 'disknod', 'variables', 'family_action')
# CreoleObjSpace's elements that shall be forced to the UnRedefinable type
FORCE_UNREDEFINABLES = ('value', 'input', 'profile', 'ewtapp', 'tag', 'saltaction')
# CreoleObjSpace's elements that shall be set to the UnRedefinable type
@ -194,7 +194,12 @@ class CreoleObjSpace(object):
if 'variable' not in vars(family):
family.variable = OrderedDict()
family.variable[name] = variable_obj
self.paths.append('variable', name, namespace, family.name, variable_obj)
self.paths.add_variable(namespace,
name,
family.name,
False,
variable_obj,
)
return variable_obj
def remove_check(self, name): # pylint: disable=C0111
@ -419,13 +424,22 @@ class CreoleObjSpace(object):
if list(child) != []:
self.xml_parse_document(child, creoleobj, namespace, is_in_family)
def _fill_creoleobj_path_attribute(self, space, child, namespace, document, creoleobj): # pylint: disable=R0913
def _fill_creoleobj_path_attribute(self,
space,
child,
namespace,
document,
creoleobj,
): # pylint: disable=R0913
"""Fill self.paths attributes
"""
if not isinstance(space, self.help): # pylint: disable=E1101
if child.tag == 'variable':
family_name = normalize_family(document.attrib['name'])
self.paths.append('variable', child.attrib['name'], namespace, family_name,
self.paths.add_variable(namespace,
child.attrib['name'],
family_name,
document.attrib.get('dynamic') != None,
creoleobj)
if child.attrib.get('redefine', 'False') == 'True':
if namespace == 'creole':
@ -438,7 +452,10 @@ class CreoleObjSpace(object):
family_name = normalize_family(child.attrib['name'])
if namespace != 'creole':
family_name = namespace + '.' + family_name
self.paths.append('family', family_name, namespace, creoleobj=creoleobj)
self.paths.add_family(namespace,
family_name,
creoleobj,
)
creoleobj.path = self.paths.get_family_path(family_name, namespace)
def create_or_populate_from_xml(self, namespace, xmlfolders, from_zephir=None):
@ -575,7 +592,7 @@ class CreoleObjSpace(object):
self._sub_xml_export(name, node, node_name, subspace, space)
class Path(object):
class Path:
"""Helper class to handle the `path` attribute of a CreoleObjSpace
instance.
@ -585,28 +602,27 @@ class Path(object):
self.variables = {}
self.families = {}
def append(self, pathtype, name, namespace, family=None, creoleobj=None): # pylint: disable=C0111
if pathtype == 'family':
self.families[name] = dict(name=name, namespace=namespace, creoleobj=creoleobj)
elif pathtype == 'variable':
if namespace == 'creole':
varname = name
else:
if '.' in name:
varname = name
else:
varname = '.'.join([namespace, family, name])
self.variables[varname] = dict(name=name, family=family, namespace=namespace,
leader=None, creoleobj=creoleobj)
else: # pragma: no cover
raise Exception('unknown pathtype {}'.format(pathtype))
# Family
def add_family(self,
namespace: str,
name: str,
creoleobj: str,
) -> str: # pylint: disable=C0111
self.families[name] = dict(name=name,
namespace=namespace,
creoleobj=creoleobj,
)
def get_family_path(self, name, current_namespace): # pylint: disable=C0111
def get_family_path(self,
name: str,
current_namespace: str,
) -> str: # pylint: disable=C0111
if current_namespace is None: # pragma: no cover
raise CreoleOperationError('current_namespace must not be None')
dico = self.families[normalize_family(name,
check_name=False,
allow_dot=True)]
allow_dot=True,
)]
if dico['namespace'] != 'creole' and current_namespace != dico['namespace']:
raise CreoleDictConsistencyError(_('A family located in the {} namespace '
'shall not be used in the {} namespace').format(
@ -616,43 +632,112 @@ class Path(object):
path = '.'.join([dico['namespace'], path])
return path
def get_family_namespace(self, name): # pylint: disable=C0111
def get_family_namespace(self,
name: str,
) -> str: # pylint: disable=C0111
dico = self.families[name]
if dico['namespace'] is None:
return dico['name']
return dico['namespace']
def get_family_obj(self, name): # pylint: disable=C0111
def get_family_obj(self,
name: str,
) -> 'Family': # pylint: disable=C0111
if name not in self.families:
raise CreoleDictConsistencyError(_('unknown family {}').format(name))
dico = self.families[name]
return dico['creoleobj']
def get_variable_name(self, name): # pylint: disable=C0111
# Leadership
def set_leader(self,
namespace: str,
leader_family_name: str,
name: str,
leader_name: str,
) -> None: # pylint: disable=C0111
if namespace != 'creole':
# need rebuild path and move object in new path
old_path = namespace + '.' + leader_family_name + '.' + name
dico = self._get_variable(old_path)
del self.variables[old_path]
new_path = namespace + '.' + leader_family_name + '.' + leader_name + '.' + name
self.add_variable(namespace,
new_path,
dico['family'],
False,
dico['creoleobj'],
)
name = new_path
dico = self._get_variable(name)
return dico['name']
if dico['leader'] != None:
raise CreoleDictConsistencyError(_('Already defined leader {} for variable'
' {}'.format(dico['leader'], name)))
dico['leader'] = leader_name
def get_variable_obj(self, name): # pylint: disable=C0111
dico = self._get_variable(name)
return dico['creoleobj']
def get_leader(self, name): # pylint: disable=C0111
return self._get_variable(name)['leader']
def get_variable_family_name(self, name): # pylint: disable=C0111
dico = self._get_variable(name)
return dico['family']
# Variable
def add_variable(self,
namespace: str,
name: str,
family: str,
is_dynamic: bool,
creoleobj,
) -> str: # pylint: disable=C0111
if namespace == 'creole' or '.' in name:
varname = name
else:
varname = '.'.join([namespace, family, name])
self.variables[varname] = dict(name=name,
family=family,
namespace=namespace,
leader=None,
is_dynamic=is_dynamic,
creoleobj=creoleobj)
def get_variable_family_path(self, name): # pylint: disable=C0111
def get_variable_name(self,
name,
): # pylint: disable=C0111
return self._get_variable(name)['name']
def get_variable_obj(self,
name:str,
) -> 'Variable': # pylint: disable=C0111
return self._get_variable(name)['creoleobj']
def get_variable_family_name(self,
name: str,
) -> 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): # pylint: disable=C0111
def get_variable_namespace(self,
name: str,
) -> str: # pylint: disable=C0111
return self._get_variable(name)['namespace']
def get_variable_path(self, name, current_namespace, allow_source=False): # pylint: disable=C0111
def get_variable_path(self,
name: str,
current_namespace: str,
allow_source: str=False,
with_suffix: bool=False,
) -> str: # pylint: disable=C0111
if current_namespace is None: # pragma: no cover
raise CreoleOperationError('current_namespace must not be None')
if with_suffix:
dico, suffix = self._get_variable(name,
with_suffix=True,
)
else:
dico = self._get_variable(name)
if not allow_source:
if dico['namespace'] not in ['creole', 'services'] and current_namespace != dico['namespace']:
@ -660,37 +745,34 @@ class Path(object):
'shall not be used in the {} namespace').format(
dico['namespace'], current_namespace))
if '.' in dico['name']:
return dico['name']
value = dico['name']
else:
list_path = [dico['namespace'], dico['family']]
if dico['leader'] is not None:
list_path.append(dico['leader'])
list_path.append(dico['name'])
return '.'.join(list_path)
value = '.'.join(list_path)
if with_suffix:
return value, suffix
return value
def path_is_defined(self, name): # pylint: disable=C0111
def path_is_defined(self,
name: str,
) -> str: # pylint: disable=C0111
return name in self.variables
def set_leader(self, name, leader): # pylint: disable=C0111
dico = self._get_variable(name)
namespace = dico['namespace']
if dico['leader'] != None:
raise CreoleDictConsistencyError(_('Already defined leader {} for variable'
' {}'.format(dico['leader'], name)))
dico['leader'] = leader
if namespace != 'creole':
new_path = self.get_variable_path(name, namespace)
self.append('variable', new_path, namespace, family=dico['family'], creoleobj=dico['creoleobj'])
self.variables[new_path]['leader'] = leader
del self.variables[name]
def _get_variable(self, name):
def _get_variable(self,
name: str,
with_suffix: bool=False,
) -> str:
if name not in self.variables:
if name.startswith('creole.'):
name = name.split('.')[-1]
if name not in self.variables:
for var_name, variable in self.variables.items():
if variable['is_dynamic'] and name.startswith(var_name):
return variable, name[len(var_name):]
raise CreoleDictConsistencyError(_('unknown option {}').format(name))
if with_suffix:
return self.variables[name], None
return self.variables[name]
def get_leader(self, name): # pylint: disable=C0111
dico = self._get_variable(name)
return dico['leader']

View File

@ -59,11 +59,11 @@ class IsDefined:
if '.' in varname:
splitted_var = varname.split('.')
if len(splitted_var) != 2:
msg = _("Group variables must be of type master.slave")
msg = _("Group variables must be of type leader.follower")
raise KeyError(msg)
master, slave = splitted_var
if master in self.context:
return slave in self.context[master].slave.keys()
leader, follower = splitted_var
if leader in self.context:
return follower in self.context[leader].follower.keys()
return False
else:
return varname in self.context
@ -133,7 +133,7 @@ class CheetahTemplate(ChtTemplate):
class CreoleLeader:
def __init__(self, value, slave=None, index=None):
def __init__(self, value, follower=None, index=None):
"""
On rend la variable itérable pour pouvoir faire:
for ip in iplist:
@ -143,20 +143,20 @@ class CreoleLeader:
index is used for CreoleLint
"""
self._value = value
if slave is not None:
self.slave = slave
if follower is not None:
self.follower = follower
else:
self.slave = {}
self.follower = {}
self._index = index
def __getattr__(self, name):
"""Get slave variable or attribute of master value.
"""Get follower variable or attribute of leader value.
If the attribute is a name of a slave variable, return its value.
Otherwise, returns the requested attribute of master value.
If the attribute is a name of a follower variable, return its value.
Otherwise, returns the requested attribute of leader value.
"""
if name in self.slave:
value = self.slave[name]
if name in self.follower:
value = self.follower[name]
if isinstance(value, PropertiesOptionError):
raise AttributeError()
return value
@ -164,36 +164,36 @@ class CreoleLeader:
return getattr(self._value, name)
def __getitem__(self, index):
"""Get a master.slave at requested index.
"""Get a leader.follower at requested index.
"""
ret = {}
for key, values in self.slave.items():
for key, values in self.follower.items():
ret[key] = values[index]
return CreoleLeader(self._value[index], ret, index)
def __iter__(self):
"""Iterate over master.slave.
"""Iterate over leader.follower.
Return synchronised value of master.slave.
Return synchronised value of leader.follower.
"""
for i in range(len(self._value)):
ret = {}
for key, values in self.slave.items():
for key, values in self.follower.items():
ret[key] = values[i]
yield CreoleLeader(self._value[i], ret, i)
def __len__(self):
"""Delegate to master value
"""Delegate to leader value
"""
return len(self._value)
def __repr__(self):
"""Show CreoleLeader as dictionary.
The master value is stored under 'value' key.
The slaves are stored under 'slave' key.
The leader value is stored under 'value' key.
The followers are stored under 'follower' key.
"""
return repr({'value': self._value, 'slave': self.slave})
return repr({'value': self._value, 'follower': self.follower})
def __eq__(self, value):
return value == self._value
@ -214,7 +214,7 @@ class CreoleLeader:
return self._value >= value
def __str__(self):
"""Delegate to master value
"""Delegate to leader value
"""
return str(self._value)
@ -227,7 +227,7 @@ class CreoleLeader:
def __contains__(self, item):
return item in self._value
async def add_slave(self, config, name, path):
async def add_follower(self, config, name, path):
if isinstance(self._value, list):
values = []
for idx in range(len(self._value)):
@ -237,7 +237,7 @@ class CreoleLeader:
values.append(err)
else:
raise Exception('hu?')
self.slave[name] = values
self.follower[name] = values
class CreoleExtra:
@ -261,11 +261,18 @@ class CreoleTemplateEngine:
eosfunc_file: str,
distrib_dir: str,
tmp_dir: str,
dest_dir:str) -> None:
dest_dir: str,
override_dest_dir: str,
tmpfile_name: str,
factory_prefix: str,
) -> None:
self.config = config
self.dest_dir = dest_dir
self.override_dest_dir = override_dest_dir
self.tmp_dir = tmp_dir
self.distrib_dir = distrib_dir
self.tmpfile_name = tmpfile_name
self.factory_prefix = factory_prefix
eos = {}
if eosfunc_file is not None:
eosfunc = imp.load_source('eosfunc', eosfunc_file)
@ -285,7 +292,7 @@ class CreoleTemplateEngine:
leader = CreoleLeader(await suboption.value.get())
self.creole_variables_dict[await suboption.option.name()] = leader
else:
await leader.add_slave(self.config,
await leader.add_follower(self.config,
await suboption.option.name(),
await suboption.option.path())
else:
@ -306,7 +313,7 @@ class CreoleTemplateEngine:
leader = CreoleLeader(await suboption.value.get())
leader_name = await suboption.option.name()
else:
await leader.add_slave(self.config,
await leader.add_follower(self.config,
await suboption.option.name(),
await suboption.option.path())
variables[leader_name] = leader
@ -342,6 +349,7 @@ class CreoleTemplateEngine:
self.patch_template(filename)
def process(self,
source: str,
destfilename: str,
filevar: Dict,
variable: Any):
@ -350,8 +358,7 @@ class CreoleTemplateEngine:
# full path of the destination file
log.info(_(f"Cheetah processing: '{destfilename}'"))
try:
cheetah_template = CheetahTemplate(join(self.tmp_dir,
filevar['source']),
cheetah_template = CheetahTemplate(source,
self.creole_variables_dict,
self.eosfunc,
destfilename,
@ -368,31 +375,44 @@ class CreoleTemplateEngine:
def instance_file(self,
filevar: Dict,
systemd_rights: list) -> None:
systemd_rights: list,
override: bool,
service_name: str) -> None:
"""Run templatisation on one file
"""
log.info(_("Instantiating file '{filename}'"))
filenames = filevar['name']
if 'variable' in filevar:
variable = filevar['variable']
else:
variable = None
if override:
filenames = [f'/systemd/system/{service_name}.service.d/rougail.conf']
else:
filenames = filevar['name']
if not isinstance(filenames, list):
filenames = [filenames]
if variable:
variable = [variable]
for idx, filename in enumerate(filenames):
destfilename = join(self.dest_dir,
filename[1:])
if override:
destfilename = join(self.override_dest_dir, filename[1:])
else:
destfilename = join(self.dest_dir, filename[1:])
makedirs(dirname(destfilename), exist_ok=True)
if variable:
var = variable[idx]
else:
var = None
self.process(destfilename,
source = join(self.tmp_dir, filevar['source'])
if filevar['templating']:
self.process(source,
destfilename,
filevar,
var)
systemd_rights.append(f'C {filename} {filevar["mode"]} {filevar["owner"]} {filevar["group"]} - -')
else:
copy(source, destfilename)
if not override and self.tmpfile_name:
systemd_rights.append(f'C {filename} {filevar["mode"]} {filevar["owner"]} {filevar["group"]} - {self.factory_prefix}{filename}')
systemd_rights.append(f'z {filename} - - - - -')
async def instance_files(self) -> None:
@ -411,21 +431,27 @@ class CreoleTemplateEngine:
self.prepare_template(join(self.distrib_dir, template))
systemd_rights = []
for service_obj in await self.config.option('services').list('all'):
service_name = await service_obj.option.doc()
for fills in await service_obj.list('all'):
if await fills.option.name() == 'files':
if await fills.option.name() in ['files', 'overrides']:
for fill_obj in await fills.list('all'):
fill = await fill_obj.value.dict()
filename = fill['source']
distib_file = join(self.distrib_dir, filename)
if not isfile(distib_file):
raise FileNotFound(_(f"File {distib_file} does not exist."))
if fill.get('activate', False):
override = await fills.option.name() == 'overrides'
if override or fill.get('activate', False):
self.instance_file(fill,
systemd_rights)
systemd_rights,
override,
service_name,
)
else:
log.debug(_("Instantiation of file '{filename}' disabled"))
with open(join(self.dest_dir, 'rougail.conf'), 'w') as fh:
if self.tmpfile_name:
with open(self.tmpfile_name, 'w') as fh:
fh.write('\n'.join(systemd_rights))
fh.write('\n')
@ -434,10 +460,23 @@ async def generate(config: Config,
eosfunc_file: str,
distrib_dir: str,
tmp_dir: str,
dest_dir: str) -> None:
dest_dir: str,
override_dest_dir: str,
tmpfile_name: str=None,
factory_prefix: str=None,
) -> None:
if not tmpfile_name and factory_prefix:
raise Exception(_(f'only specify factory_prefix if tmpfile_name is set'))
if tmpfile_name and not factory_prefix:
raise Exception(_(f'if tmpfile_name is specify, set factory_prefix too'))
engine = CreoleTemplateEngine(config,
eosfunc_file,
distrib_dir,
tmp_dir,
dest_dir)
dest_dir,
override_dest_dir,
tmpfile_name,
factory_prefix,
)
await engine.instance_files()

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -5,13 +5,13 @@
<variables>
<family name="general1">
<variable name="slave3" type="string" description="slave3" multi="True"/>
<variable name="follower3" type="string" description="follower3" multi="True"/>
</family>
</variables>
<constraints>
<group master="master">
<slave>slave3</slave>
<group leader="leader">
<follower>follower3</follower>
</group>
</constraints>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": [], "creole.general1.leader.follower3": []}

View File

@ -13,22 +13,22 @@
</family>
<family doc="general1" name="general1">
<property>normal</property>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general1.master.slave1</param>
<param transitive="False" type="variable">creole.general1.leader.follower1</param>
</value>
</variable>
<variable doc="slave3" multi="True" name="slave3" type="string">
<variable doc="follower3" multi="True" name="follower3" type="string">
<property>normal</property>
</variable>
</leader>

View File

@ -0,0 +1,37 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
<variable name="follower3" type="string" description="follower3" multi="True"/>
</family>
</variables>
<constraints>
<auto name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</auto>
<auto name="calc_val" target="follower2">
<param type="variable">follower1</param>
</auto>
<auto name="calc_val" target="follower3">
<param type="variable">leader</param>
</auto>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
<follower>follower3</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": []}

View File

@ -10,10 +10,10 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
@ -22,22 +22,22 @@
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.slave1</param>
<param transitive="False" type="variable">creole.general.leader.follower1</param>
</value>
</variable>
<variable doc="slave3" multi="True" name="slave3" type="string">
<variable doc="follower3" multi="True" name="follower3" type="string">
<property>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.master</param>
<param transitive="False" type="variable">creole.general.leader.leader</param>
</value>
</variable>
</leader>

View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<auto name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</auto>
<auto name="calc_val" target="follower2">
<param type="variable">leader</param>
</auto>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": []}

View File

@ -10,10 +10,10 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
@ -22,13 +22,13 @@
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.master</param>
<param transitive="False" type="variable">creole.general.leader.leader</param>
</value>
</variable>
</leader>

View File

@ -0,0 +1,31 @@
<?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="leadermode" mode="expert">
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<auto name="calc_val" target="leader">
<param name="valeur">valfill</param>
</auto>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -11,22 +11,22 @@
<value type="string">non</value>
</variable>
</family>
<family doc="mastermode" name="mastermode">
<family doc="leadermode" name="leadermode">
<property>expert</property>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>hidden</property>
<property>expert</property>
<variable doc="master" multi="True" name="master" type="string">
<variable doc="leader" multi="True" name="leader" type="string">
<property>force_default_on_freeze</property>
<property>frozen</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>expert</property>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>expert</property>
</variable>
</leader>

View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True" mode="expert"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}

View File

@ -10,19 +10,19 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>expert</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.slave1</param>
<param transitive="False" type="variable">creole.general.leader.follower1</param>
</value>
</variable>
</leader>

View File

@ -0,0 +1,32 @@
<?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">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}

View File

@ -10,19 +10,19 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.slave1</param>
<param transitive="False" type="variable">creole.general.leader.follower1</param>
</value>
</variable>
</leader>

View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True" mandatory="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}

View File

@ -10,21 +10,21 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>basic</property>
<variable doc="master" multi="True" name="master" type="string">
<variable doc="leader" multi="True" name="leader" type="string">
<property>mandatory</property>
</variable>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.slave1</param>
<param transitive="False" type="variable">creole.general.leader.follower1</param>
</value>
</variable>
</leader>

View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True" mandatory="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}

View File

@ -10,20 +10,20 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>mandatory</property>
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general.master.slave1</param>
<param transitive="False" type="variable">creole.general.leader.follower1</param>
</value>
</variable>
</leader>

View File

@ -13,8 +13,8 @@
</variables>
<constraints>
<group master="nut_monitor_netmask">
<slave>nut_monitor_host</slave>
<group leader="nut_monitor_netmask">
<follower>nut_monitor_host</follower>
</group>
</constraints>

View File

@ -0,0 +1,41 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
<variable name="leader1" type="string" description="leader" multi="True"/>
<variable name="follower11" type="string" description="follower1" multi="True"/>
<variable name="follower21" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
<group leader="leader1">
<follower>follower11</follower>
<follower>follower21</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": [], "creole.general1.leader1.leader1": [], "creole.general1.leader1.follower11": [], "creole.general1.leader1.follower21": []}

View File

@ -13,29 +13,29 @@
</family>
<family doc="general1" name="general1">
<property>normal</property>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general1.master.slave1</param>
<param transitive="False" type="variable">creole.general1.leader.follower1</param>
</value>
</variable>
</leader>
<leader doc="master" name="master1">
<leader doc="leader" name="leader1">
<property>normal</property>
<variable doc="master" multi="True" name="master1" type="string"/>
<variable doc="slave1" multi="True" name="slave11" type="string">
<variable doc="leader" multi="True" name="leader1" type="string"/>
<variable doc="follower1" multi="True" name="follower11" type="string">
<property>normal</property>
</variable>
<variable doc="slave2" multi="True" name="slave21" type="string">
<variable doc="follower2" multi="True" name="follower21" type="string">
<property>normal</property>
</variable>
</leader>

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": []}

View File

@ -13,19 +13,19 @@
</family>
<family doc="general1" name="general1">
<property>normal</property>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general1.master.slave1</param>
<param transitive="False" type="variable">creole.general1.leader.follower1</param>
</value>
</variable>
</leader>

View File

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="leader" multi="True">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True">
<value>value</value>
</variable>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}

View File

@ -3,22 +3,22 @@
<family doc="" name="creole">
<family doc="general" name="general">
<property>normal</property>
<variable doc="master" multi="True" name="mode_conteneur_actif" type="choice">
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
<choice type="string">oui</choice>
<choice type="string">non</choice>
<property>mandatory</property>
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>mandatory</property>
<property>normal</property>
<value>value</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
</variable>
</leader>

View File

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="leader" multi="True">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True">
<value>leader</value>
</variable>
<variable name="follower1" type="string" description="follower1" submulti="True">
<value>value</value>
</variable>
<variable name="follower2" type="string" description="follower2" submulti="True">
<value>value1</value>
<value>value2</value>
</variable>
</family>
</variables>
<constraints>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.leader.leader": ["leader"], "creole.general.leader.follower1": [["value"]], "creole.general.leader.follower2": [["value1", "value2"]]}

View File

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='UTF-8'?>
<creole>
<family doc="" name="creole">
<family doc="general" name="general">
<property>normal</property>
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
<choice type="string">oui</choice>
<choice type="string">non</choice>
<property>mandatory</property>
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="leader" multi="True" name="leader" type="string">
<property>mandatory</property>
<value>leader</value>
</variable>
<variable doc="follower1" multi="submulti" name="follower1" type="string">
<property>mandatory</property>
<property>normal</property>
<value>value</value>
</variable>
<variable doc="follower2" multi="submulti" name="follower2" type="string">
<property>mandatory</property>
<property>normal</property>
<value>value1</value>
<value>value2</value>
</variable>
</leader>
</family>
</family>
</creole>

View File

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="leader" multi="True">
<value>non</value>
</variable>
<variable name="leader" type="string" description="leader" multi="True">
<value>value</value>
</variable>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.leader.leader": ["value"], "creole.general.leader.follower1": [null], "creole.general.leader.follower2": [null]}

View File

@ -3,23 +3,23 @@
<family doc="" name="creole">
<family doc="general" name="general">
<property>normal</property>
<variable doc="master" multi="True" name="mode_conteneur_actif" type="choice">
<variable doc="leader" multi="True" name="mode_conteneur_actif" type="choice">
<choice type="string">oui</choice>
<choice type="string">non</choice>
<property>mandatory</property>
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string">
<variable doc="leader" multi="True" name="leader" type="string">
<property>mandatory</property>
<value>value</value>
</variable>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
</variable>
</leader>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<rougail>
<variables>
<family name='general'>
<variable name='mode_conteneur_actif' type='oui/non' description="No change">
<value>non</value>
</variable>
</family>
<family name='general1'>
<variable name='leader' type='string' description="leader" multi="True"/>
<variable name='follower1' type='string' description="follower1" multi="True"/>
<variable name='follower2' type='string' description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<fill name='calc_val' target='follower1'>
<param name='valeur'>valfill</param>
</fill>
<fill name='calc_val' target='follower2'>
<param type='variable'>follower1</param>
</fill>
<group leader='leader' description="other description">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": []}

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<creole>
<family doc="" name="creole">
<family doc="general" name="general">
<property>normal</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>normal</property>
<value type="string">non</value>
</variable>
</family>
<family doc="general1" name="general1">
<property>normal</property>
<leader doc="other description" name="leader">
<property>normal</property>
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general1.leader.follower1</param>
</value>
</variable>
</leader>
</family>
</family>
</creole>

View File

@ -10,16 +10,16 @@
</variable>
</family>
<family name="general-1">
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
</variables>
<constraints>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>

View File

@ -5,7 +5,7 @@
<variables>
<family name="general-1">
<variable name="master" redefine="True" mandatory="True"/>
<variable name="leader" redefine="True" mandatory="True"/>
</family>
</variables>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general_1.leader.leader": [], "creole.general_1.leader.follower1": [], "creole.general_1.leader.follower2": []}

View File

@ -13,15 +13,15 @@
</family>
<family doc="general-1" name="general_1">
<property>basic</property>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>basic</property>
<variable doc="master" multi="True" name="master" type="string">
<variable doc="leader" multi="True" name="leader" type="string">
<property>mandatory</property>
</variable>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
</variable>
</leader>

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" submulti="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="follower1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="follower2">
<param type="variable">follower1</param>
</fill>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>
<help/>
</rougail>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": []}

View File

@ -13,19 +13,19 @@
</family>
<family doc="general1" name="general1">
<property>normal</property>
<leader doc="other description" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param name="valeur" transitive="False" type="string">valfill</param>
</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="submulti" name="follower2" type="string">
<property>normal</property>
<value name="calc_val" type="calculation">
<param transitive="False" type="variable">creole.general1.master.slave1</param>
<param transitive="False" type="variable">creole.general1.leader.follower1</param>
</value>
</variable>
</leader>

View File

@ -1,34 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.master.master": [], "creole.general1.master.slave1": [], "creole.general1.master.slave2": []}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="master" multi="True">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True">
<value>value</value>
</variable>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="master" multi="True">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True">
<value>value</value>
</variable>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.master.master": ["value"], "creole.general.master.slave1": [null], "creole.general.master.slave2": [null]}

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<rougail>
<variables>
<family name='general'>
<variable name='mode_conteneur_actif' type='oui/non' description="No change">
<value>non</value>
</variable>
</family>
<family name='general1'>
<variable name='master' type='string' description="master" multi="True"/>
<variable name='slave1' type='string' description="slave1" multi="True"/>
<variable name='slave2' type='string' description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name='calc_val' target='slave1'>
<param name='valeur'>valfill</param>
</fill>
<fill name='calc_val' target='slave2'>
<param type='variable'>slave1</param>
</fill>
<group master='master' description="other description">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.master.master": [], "creole.general1.master.slave1": [], "creole.general1.master.slave2": []}

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general_1.master.master": [], "creole.general_1.master.slave1": [], "creole.general_1.master.slave2": []}

View File

@ -0,0 +1,23 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="Description" submulti="True">
<value>non</value>
<value>oui</value>
</variable>
</family>
<separators/>
</variables>
<constraints>
</constraints>
<help/>
</rougail>
<!-- vim: ts=4 sw=4 expandtab
-->

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": [["non"], ["oui"]]}

View File

@ -0,0 +1,17 @@
<?xml version='1.0' encoding='UTF-8'?>
<creole>
<family doc="" name="creole">
<family doc="general" name="general">
<property>normal</property>
<variable doc="Description" multi="submulti" name="mode_conteneur_actif" type="choice">
<choice type="string">oui</choice>
<choice type="string">non</choice>
<property>mandatory</property>
<property>normal</property>
<value type="string">non</value>
<value type="string">oui</value>
</variable>
</family>
<separators/>
</family>
</creole>

View File

@ -1,32 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True" mode="expert"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}

View File

@ -1,32 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True" mandatory="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}

View File

@ -1,32 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True" mandatory="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}

View File

@ -1,41 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
<variable name="master1" type="string" description="master" multi="True"/>
<variable name="slave11" type="string" description="slave1" multi="True"/>
<variable name="slave21" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
<group master="master1">
<slave>slave11</slave>
<slave>slave21</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.master.master": [], "creole.general1.master.slave1": [], "creole.general1.master.slave2": [], "creole.general1.master1.master1": [], "creole.general1.master1.slave11": [], "creole.general1.master1.slave21": []}

View File

@ -1,34 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
</family>
<family name="general1">
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general1.master.master": [], "creole.general1.master.slave1": [], "creole.general1.master.slave2": [], "creole.general1.master.slave3": []}

View File

@ -1,37 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
<variable name="slave3" type="string" description="slave3" multi="True"/>
</family>
</variables>
<constraints>
<auto name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</auto>
<auto name="calc_val" target="slave2">
<param type="variable">slave1</param>
</auto>
<auto name="calc_val" target="slave3">
<param type="variable">master</param>
</auto>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
<slave>slave3</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": []}

View File

@ -1,32 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<rougail>
<services/>
<variables>
<family name="general">
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<auto name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</auto>
<auto name="calc_val" target="slave2">
<param type="variable">master</param>
</auto>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": []}

View File

@ -1,31 +0,0 @@
<?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="mastermode" mode="expert">
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<auto name="calc_val" target="master">
<param name="valeur">valfill</param>
</auto>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1,32 +0,0 @@
<?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">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
</family>
</variables>
<constraints>
<fill name="calc_val" target="slave1">
<param name="valeur">valfill</param>
</fill>
<fill name="calc_val" target="slave2">
<param type="variable">slave1</param>
</fill>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
</group>
</constraints>
<help/>
</rougail>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}

View File

@ -8,20 +8,20 @@
<variable name="mode_conteneur_actif" type="oui/non" description="No change">
<value>non</value>
</variable>
<variable name="master" type="string" description="master" multi="True"/>
<variable name="slave1" type="string" description="slave1" multi="True"/>
<variable name="slave2" type="string" description="slave2" multi="True"/>
<variable name="leader" type="string" description="leader" multi="True"/>
<variable name="follower1" type="string" description="follower1" multi="True"/>
<variable name="follower2" type="string" description="follower2" multi="True"/>
</family>
<separators/>
</variables>
<constraints>
<check name="valid_enum" target="slave1">
<check name="valid_enum" target="follower1">
<param>['a','b','c']</param>
</check>
<group master="master">
<slave>slave1</slave>
<slave>slave2</slave>
<group leader="leader">
<follower>follower1</follower>
<follower>follower2</follower>
</group>
</constraints>

View File

@ -0,0 +1 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}

View File

@ -10,10 +10,10 @@
<property>normal</property>
<value type="string">non</value>
</variable>
<leader doc="master" name="master">
<leader doc="leader" name="leader">
<property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="choice">
<variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="follower1" multi="True" name="follower1" type="choice">
<choice type="string">a</choice>
<choice type="string">b</choice>
<choice type="string">c</choice>
@ -21,7 +21,7 @@
<property>normal</property>
<value type="string">a</value>
</variable>
<variable doc="slave2" multi="True" name="slave2" type="string">
<variable doc="follower2" multi="True" name="follower2" type="string">
<property>normal</property>
</variable>
</leader>

View File

@ -1 +0,0 @@
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}

View File

@ -3,7 +3,7 @@
<services>
<service name="test">
<file name="/tmp/file" filelist="afilllist"/>
<file name="/etc/file" filelist="afilllist"/>
</service>
</services>

View File

@ -1 +1 @@
{"creole.general.condition": "non", "creole.general.mode_conteneur_actif": "non", "creole.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mkdir": false, "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.rm": false, "services.service0.files.file0.source": "file", "services.service0.files.file0.activate": true}
{"creole.general.condition": "non", "creole.general.mode_conteneur_actif": "non", "creole.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mkdir": false, "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/etc/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.rm": false, "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true, "services.service0.files.file0.activate": true}

View File

@ -18,7 +18,7 @@
</variable>
<variable doc="" multi="False" name="name" type="string">
<property>mandatory</property>
<value>/tmp/file</value>
<value>/etc/file</value>
</variable>
<variable doc="" multi="False" name="owner" type="string">
<property>mandatory</property>
@ -32,6 +32,10 @@
<property>mandatory</property>
<value>file</value>
</variable>
<variable doc="" multi="False" name="templating" type="boolean">
<property>mandatory</property>
<value>True</value>
</variable>
<variable doc="" multi="False" name="activate" type="boolean">
<property>mandatory</property>
<property expected="oui" inverse="False" source="creole.general.condition" type="calculation">disabled</property>

View File

@ -3,7 +3,7 @@
<services>
<service name="test">
<file name="/tmp/file" filelist="afilllist"/>
<file name="/etc/file" filelist="afilllist"/>
</service>
</services>

View File

@ -1 +1 @@
{"creole.general.condition": "oui", "services.service0.files.file0.group": "root", "services.service0.files.file0.mkdir": false, "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.rm": false, "services.service0.files.file0.source": "file"}
{"creole.general.condition": "oui", "services.service0.files.file0.group": "root", "services.service0.files.file0.mkdir": false, "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/etc/file", "services.service0.files.file0.owner": "root", "services.service0.files.file0.rm": false, "services.service0.files.file0.source": "file", "services.service0.files.file0.templating": true}

View File

@ -18,7 +18,7 @@
</variable>
<variable doc="" multi="False" name="name" type="string">
<property>mandatory</property>
<value>/tmp/file</value>
<value>/etc/file</value>
</variable>
<variable doc="" multi="False" name="owner" type="string">
<property>mandatory</property>
@ -32,6 +32,10 @@
<property>mandatory</property>
<value>file</value>
</variable>
<variable doc="" multi="False" name="templating" type="boolean">
<property>mandatory</property>
<value>True</value>
</variable>
<variable doc="" multi="False" name="activate" type="boolean">
<property>mandatory</property>
<property expected="oui" inverse="False" source="creole.general.condition" type="calculation">disabled</property>

View File

@ -1 +1 @@
{"creole.general.condition": "non", "creole.general.mode_conteneur_actif": "non", "creole.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mkdir": false, "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file1", "services.service0.files.file0.owner": "root", "services.service0.files.file0.rm": false, "services.service0.files.file0.source": "file1", "services.service0.files.file0.activate": true, "services.service0.files.file1.group": "root", "services.service0.files.file1.mkdir": false, "services.service0.files.file1.mode": "0644", "services.service0.files.file1.name": "/tmp/file2", "services.service0.files.file1.owner": "root", "services.service0.files.file1.rm": false, "services.service0.files.file1.source": "file2", "services.service0.files.file1.activate": true}
{"creole.general.condition": "non", "creole.general.mode_conteneur_actif": "non", "creole.general.mode_conteneur_actif2": "non", "services.service0.files.file0.group": "root", "services.service0.files.file0.mkdir": false, "services.service0.files.file0.mode": "0644", "services.service0.files.file0.name": "/tmp/file1", "services.service0.files.file0.owner": "root", "services.service0.files.file0.rm": false, "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.mkdir": false, "services.service0.files.file1.mode": "0644", "services.service0.files.file1.name": "/tmp/file2", "services.service0.files.file1.owner": "root", "services.service0.files.file1.rm": false, "services.service0.files.file1.source": "file2", "services.service0.files.file1.templating": true, "services.service0.files.file1.activate": true}

Some files were not shown because too many files have changed in this diff Show More