Compare commits
6 Commits
pkg/dev/ri
...
5b4b43d5f4
Author | SHA1 | Date | |
---|---|---|---|
5b4b43d5f4 | |||
d47d1fde62 | |||
308e980bfd | |||
1cd8873e5b | |||
b0b44d4ee1 | |||
822483ab70 |
5
debian/changelog
vendored
Normal file
5
debian/changelog
vendored
Normal 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
|
@ -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
|
||||
@ -113,7 +114,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 +185,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 +234,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 +339,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,64 +455,108 @@ class SpaceAnnotator(object):
|
||||
variable.help = hlp.text
|
||||
del self.space.help
|
||||
|
||||
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
|
||||
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)
|
||||
self.paths.set_leader(namespace,
|
||||
leader_family_name,
|
||||
leader_name,
|
||||
leader_name,
|
||||
)
|
||||
leader_space.path = leader_fullname
|
||||
|
||||
|
||||
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'):
|
||||
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()
|
||||
leader_space.variable = []
|
||||
leader_space.name = leader_name
|
||||
leader_space.hidden = variable.hidden
|
||||
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_family.variable[leader_name] = leader_space
|
||||
leader_space.variable.append(variable) # pylint: disable=E1101
|
||||
self.paths.set_leader(leader_fullname, leader_name)
|
||||
leader_space.path = leader_fullname
|
||||
is_leader = True
|
||||
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:
|
||||
raise CreoleDictConsistencyError(_('cannot found followers {}').format(follower_names))
|
||||
del self.space.constraints.group
|
||||
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
|
||||
|
||||
def remove_empty_families(self): # pylint: disable=C0111,R0201
|
||||
if hasattr(self.space, 'variables'):
|
||||
@ -1061,7 +1120,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)
|
||||
|
@ -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*)*)>
|
||||
|
@ -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]:
|
||||
|
@ -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,14 +424,23 @@ 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,
|
||||
creoleobj)
|
||||
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':
|
||||
self.redefine_variables.append(child.attrib['name'])
|
||||
@ -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,81 +632,147 @@ 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')
|
||||
dico = self._get_variable(name)
|
||||
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']:
|
||||
raise CreoleDictConsistencyError(_('A variable located in the {} namespace '
|
||||
'shall not be used in the {} namespace').format(
|
||||
dico['namespace'], current_namespace))
|
||||
if '.' in dico['name']:
|
||||
return dico['name']
|
||||
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 = 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'])
|
||||
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']
|
||||
|
@ -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,14 @@ class CreoleTemplateEngine:
|
||||
eosfunc_file: str,
|
||||
distrib_dir: str,
|
||||
tmp_dir: str,
|
||||
dest_dir:str) -> None:
|
||||
dest_dir: str,
|
||||
tmpfile_name: str,
|
||||
) -> None:
|
||||
self.config = config
|
||||
self.dest_dir = dest_dir
|
||||
self.tmp_dir = tmp_dir
|
||||
self.distrib_dir = distrib_dir
|
||||
self.tmpfile_name = tmpfile_name
|
||||
eos = {}
|
||||
if eosfunc_file is not None:
|
||||
eosfunc = imp.load_source('eosfunc', eosfunc_file)
|
||||
@ -285,7 +288,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 +309,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 +345,7 @@ class CreoleTemplateEngine:
|
||||
self.patch_template(filename)
|
||||
|
||||
def process(self,
|
||||
source: str,
|
||||
destfilename: str,
|
||||
filevar: Dict,
|
||||
variable: Any):
|
||||
@ -350,8 +354,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,19 +371,24 @@ 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 not isinstance(filenames, list):
|
||||
filenames = [filenames]
|
||||
if variable:
|
||||
variable = [variable]
|
||||
if override:
|
||||
filenames = [f'/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:])
|
||||
@ -389,11 +397,17 @@ class CreoleTemplateEngine:
|
||||
var = variable[idx]
|
||||
else:
|
||||
var = None
|
||||
self.process(destfilename,
|
||||
filevar,
|
||||
var)
|
||||
systemd_rights.append(f'C {filename} {filevar["mode"]} {filevar["owner"]} {filevar["group"]} - -')
|
||||
systemd_rights.append(f'z {filename} - - - - -')
|
||||
source = join(self.tmp_dir, filevar['source'])
|
||||
if filevar['templating']:
|
||||
self.process(source,
|
||||
destfilename,
|
||||
filevar,
|
||||
var)
|
||||
else:
|
||||
copy(source, destfilename)
|
||||
if not override and self.tmpfile_name:
|
||||
systemd_rights.append(f'C {filename} {filevar["mode"]} {filevar["owner"]} {filevar["group"]} - -')
|
||||
systemd_rights.append(f'z {filename} - - - - -')
|
||||
|
||||
async def instance_files(self) -> None:
|
||||
"""Run templatisation on all files
|
||||
@ -411,33 +425,41 @@ 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:
|
||||
fh.write('\n'.join(systemd_rights))
|
||||
fh.write('\n')
|
||||
if self.tmpfile_name:
|
||||
with open(self.tmpfile_name, 'w') as fh:
|
||||
fh.write('\n'.join(systemd_rights))
|
||||
fh.write('\n')
|
||||
|
||||
|
||||
async def generate(config: Config,
|
||||
eosfunc_file: str,
|
||||
distrib_dir: str,
|
||||
tmp_dir: str,
|
||||
dest_dir: str) -> None:
|
||||
eosfunc_file: str,
|
||||
distrib_dir: str,
|
||||
tmp_dir: str,
|
||||
dest_dir: str,
|
||||
tmpfile_name: str=None) -> None:
|
||||
engine = CreoleTemplateEngine(config,
|
||||
eosfunc_file,
|
||||
distrib_dir,
|
||||
tmp_dir,
|
||||
dest_dir)
|
||||
dest_dir,
|
||||
tmpfile_name)
|
||||
await engine.instance_files()
|
||||
|
34
tests/flattener_dicos/10leadership_append/00-base.xml
Normal file
34
tests/flattener_dicos/10leadership_append/00-base.xml
Normal 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>
|
@ -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>
|
||||
|
@ -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": []}
|
@ -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>
|
37
tests/flattener_dicos/10leadership_auto/00-base.xml
Normal file
37
tests/flattener_dicos/10leadership_auto/00-base.xml
Normal 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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": []}
|
@ -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>
|
32
tests/flattener_dicos/10leadership_autoleader/00-base.xml
Normal file
32
tests/flattener_dicos/10leadership_autoleader/00-base.xml
Normal 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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": []}
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}
|
@ -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>
|
32
tests/flattener_dicos/10leadership_familyaccent/00-base.xml
Normal file
32
tests/flattener_dicos/10leadership_familyaccent/00-base.xml
Normal 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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}
|
@ -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>
|
@ -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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}
|
@ -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>
|
32
tests/flattener_dicos/10leadership_mandatory/00-base.xml
Normal file
32
tests/flattener_dicos/10leadership_mandatory/00-base.xml
Normal 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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}
|
@ -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>
|
@ -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>
|
||||
|
41
tests/flattener_dicos/10leadership_multi/00-base.xml
Normal file
41
tests/flattener_dicos/10leadership_multi/00-base.xml
Normal 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>
|
@ -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": []}
|
@ -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>
|
34
tests/flattener_dicos/10load_leadership/00-base.xml
Normal file
34
tests/flattener_dicos/10load_leadership/00-base.xml
Normal 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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": []}
|
@ -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>
|
@ -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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}
|
@ -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>
|
@ -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>
|
@ -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"]]}
|
@ -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>
|
@ -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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.leader.leader": ["value"], "creole.general.leader.follower1": [null], "creole.general.leader.follower2": [null]}
|
@ -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>
|
@ -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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": []}
|
@ -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>
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general_1.leader.leader": [], "creole.general_1.leader.follower1": [], "creole.general_1.leader.follower2": []}
|
@ -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>
|
34
tests/flattener_dicos/10load_leadership_submulti/00-base.xml
Normal file
34
tests/flattener_dicos/10load_leadership_submulti/00-base.xml
Normal 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>
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general1.leader.leader": [], "creole.general1.leader.follower1": [], "creole.general1.leader.follower2": []}
|
@ -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>
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general1.master.master": [], "creole.general1.master.slave1": [], "creole.general1.master.slave2": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": ["non"], "creole.general.master.master": ["value"], "creole.general.master.slave1": [null], "creole.general.master.slave2": [null]}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general1.master.master": [], "creole.general1.master.slave1": [], "creole.general1.master.slave2": []}
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general_1.master.master": [], "creole.general_1.master.slave1": [], "creole.general_1.master.slave2": []}
|
23
tests/flattener_dicos/10load_submulti_two_value/00-base.xml
Normal file
23
tests/flattener_dicos/10load_submulti_two_value/00-base.xml
Normal 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
|
||||
-->
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": [["non"], ["oui"]]}
|
@ -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>
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}
|
@ -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>
|
@ -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": []}
|
@ -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>
|
@ -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": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": []}
|
@ -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>
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}
|
@ -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>
|
||||
|
@ -0,0 +1 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.leader.leader": [], "creole.general.leader.follower1": [], "creole.general.leader.follower2": []}
|
@ -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>
|
@ -1 +0,0 @@
|
||||
{"creole.general.mode_conteneur_actif": "non", "creole.general.master.master": [], "creole.general.master.slave1": [], "creole.general.master.slave2": []}
|
@ -3,7 +3,7 @@
|
||||
|
||||
<services>
|
||||
<service name="test">
|
||||
<file name="/tmp/file" filelist="afilllist"/>
|
||||
<file name="/etc/file" filelist="afilllist"/>
|
||||
</service>
|
||||
</services>
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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>
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
<services>
|
||||
<service name="test">
|
||||
<file name="/tmp/file" filelist="afilllist"/>
|
||||
<file name="/etc/file" filelist="afilllist"/>
|
||||
</service>
|
||||
</services>
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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>
|
||||
|
@ -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}
|
||||
|
@ -32,6 +32,10 @@
|
||||
<property>mandatory</property>
|
||||
<value>file1</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>
|
||||
@ -67,6 +71,10 @@
|
||||
<property>mandatory</property>
|
||||
<value>file2</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>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user