Compare commits

...

6 Commits

183 changed files with 1769 additions and 996 deletions

View File

@ -1,5 +1,6 @@
# coding: utf-8 # coding: utf-8
from copy import copy from copy import copy
from typing import List
from collections import OrderedDict from collections import OrderedDict
from os.path import join, basename from os.path import join, basename
@ -113,7 +114,7 @@ class ServiceAnnotator:
def convert_service_to_family(self, service_name, service_family, service): def convert_service_to_family(self, service_name, service_family, service):
for elttype, values in vars(service).items(): for elttype, values in vars(service).items():
if elttype in ['name', 'index']: if elttype in ['name', 'index', 'method']:
continue continue
family = self.objectspace.family() family = self.objectspace.family()
family.name = elttype + 's' family.name = elttype + 's'
@ -184,7 +185,10 @@ class ServiceAnnotator:
family.name = '{}{}'.format(name, index) family.name = '{}{}'.format(name, index)
family.variable = variables family.variable = variables
family.mode = None family.mode = None
self.paths.append('family', subpath, 'services', creoleobj=family) self.paths.add_family('services',
subpath,
family,
)
families.append(family) families.append(family)
return families return families
@ -230,11 +234,19 @@ class ServiceAnnotator:
choices.append(choice) choices.append(choice)
variable.choice = choices variable.choice = choices
path = '{}.{}'.format(subpath, name) path = '{}.{}'.format(subpath, name)
self.paths.append('variable', path, 'services', 'service', variable) self.paths.add_variable('services',
path,
'service',
False,
variable,
)
return 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): 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'): if not hasattr(file_, 'source'):
file_.source = basename(file_.name) file_.source = basename(file_.name)
elif not hasattr(file_, 'source'): elif not hasattr(file_, 'source'):
@ -327,7 +339,10 @@ class ServiceAnnotator:
family.name = '{}{}'.format(name, index) family.name = '{}{}'.format(name, index)
family.variable = variables family.variable = variables
family.mode = None family.mode = None
self.paths.append('family', subpath, 'services', creoleobj=family) self.paths.add_family('services',
subpath,
family,
)
families.append(family) families.append(family)
return families return families
@ -440,64 +455,108 @@ class SpaceAnnotator(object):
variable.help = hlp.text variable.help = hlp.text
del self.space.help 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 def convert_groups(self): # pylint: disable=C0111
if hasattr(self.space, 'constraints'): if hasattr(self.space, 'constraints') and hasattr(self.space.constraints, 'group'):
if hasattr(self.space.constraints, 'group'): for group in self.space.constraints.group:
for group in self.space.constraints.group: leader_fullname = group.leader
leader_fullname = group.master follower_names = list(group.follower.keys())
follower_names = list(group.slave.keys()) leader_family_name = self.paths.get_variable_family_name(leader_fullname)
leader_family_name = self.paths.get_variable_family_name(leader_fullname) namespace = self.paths.get_variable_namespace(leader_fullname)
namespace = self.paths.get_variable_namespace(leader_fullname) leader_name = self.paths.get_variable_name(leader_fullname)
leader_name = self.paths.get_variable_name(leader_fullname) ori_leader_family = self.space.variables[namespace].family[leader_family_name]
leader_family = self.space.variables[namespace].family[leader_family_name] has_a_leader = False
leader_path = namespace + '.' + leader_family_name for variable in list(ori_leader_family.variable.values()):
is_leader = False if isinstance(variable, self.objectspace.Leadership):
for variable in list(leader_family.variable.values()): # append follower to an existed leadership
if isinstance(variable, self.objectspace.Leadership): if variable.name == leader_name:
# append follower to an existed leadership leader_space = variable
if variable.name == leader_name: has_a_leader = True
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
else: else:
raise CreoleDictConsistencyError(_('cannot found followers {}').format(follower_names)) if has_a_leader:
del self.space.constraints.group # 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 def remove_empty_families(self): # pylint: disable=C0111,R0201
if hasattr(self.space, 'variables'): if hasattr(self.space, 'variables'):
@ -1061,7 +1120,11 @@ class SpaceAnnotator(object):
# if param.optional is True: # if param.optional is True:
# param_option_indexes.append(fill_idx) # param_option_indexes.append(fill_idx)
try: 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: except CreoleDictConsistencyError as err:
if param.optional is True: if param.optional is True:
param_option_indexes.append(fill_idx) param_option_indexes.append(fill_idx)

View File

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

View File

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

View File

@ -34,8 +34,8 @@ from .annotator import ERASED_ATTRIBUTES, ActionAnnotator, ServiceAnnotator, Spa
from .utils import normalize_family from .utils import normalize_family
from .error import CreoleOperationError, SpaceObjShallNotBeUpdated, CreoleDictConsistencyError from .error import CreoleOperationError, SpaceObjShallNotBeUpdated, CreoleDictConsistencyError
# CreoleObjSpace's elements like 'family' or 'slave', that shall be forced to the Redefinable type # CreoleObjSpace's elements like 'family' or 'follower', that shall be forced to the Redefinable type
FORCE_REDEFINABLES = ('family', 'slave', 'service', 'disknod', 'variables', 'family_action') FORCE_REDEFINABLES = ('family', 'follower', 'service', 'disknod', 'variables', 'family_action')
# CreoleObjSpace's elements that shall be forced to the UnRedefinable type # CreoleObjSpace's elements that shall be forced to the UnRedefinable type
FORCE_UNREDEFINABLES = ('value', 'input', 'profile', 'ewtapp', 'tag', 'saltaction') FORCE_UNREDEFINABLES = ('value', 'input', 'profile', 'ewtapp', 'tag', 'saltaction')
# CreoleObjSpace's elements that shall be set to the UnRedefinable type # CreoleObjSpace's elements that shall be set to the UnRedefinable type
@ -194,7 +194,12 @@ class CreoleObjSpace(object):
if 'variable' not in vars(family): if 'variable' not in vars(family):
family.variable = OrderedDict() family.variable = OrderedDict()
family.variable[name] = variable_obj 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 return variable_obj
def remove_check(self, name): # pylint: disable=C0111 def remove_check(self, name): # pylint: disable=C0111
@ -419,14 +424,23 @@ class CreoleObjSpace(object):
if list(child) != []: if list(child) != []:
self.xml_parse_document(child, creoleobj, namespace, is_in_family) 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 """Fill self.paths attributes
""" """
if not isinstance(space, self.help): # pylint: disable=E1101 if not isinstance(space, self.help): # pylint: disable=E1101
if child.tag == 'variable': if child.tag == 'variable':
family_name = normalize_family(document.attrib['name']) family_name = normalize_family(document.attrib['name'])
self.paths.append('variable', child.attrib['name'], namespace, family_name, self.paths.add_variable(namespace,
creoleobj) child.attrib['name'],
family_name,
document.attrib.get('dynamic') != None,
creoleobj)
if child.attrib.get('redefine', 'False') == 'True': if child.attrib.get('redefine', 'False') == 'True':
if namespace == 'creole': if namespace == 'creole':
self.redefine_variables.append(child.attrib['name']) self.redefine_variables.append(child.attrib['name'])
@ -438,7 +452,10 @@ class CreoleObjSpace(object):
family_name = normalize_family(child.attrib['name']) family_name = normalize_family(child.attrib['name'])
if namespace != 'creole': if namespace != 'creole':
family_name = namespace + '.' + family_name 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) creoleobj.path = self.paths.get_family_path(family_name, namespace)
def create_or_populate_from_xml(self, namespace, xmlfolders, from_zephir=None): 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) 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 """Helper class to handle the `path` attribute of a CreoleObjSpace
instance. instance.
@ -585,28 +602,27 @@ class Path(object):
self.variables = {} self.variables = {}
self.families = {} self.families = {}
def append(self, pathtype, name, namespace, family=None, creoleobj=None): # pylint: disable=C0111 # Family
if pathtype == 'family': def add_family(self,
self.families[name] = dict(name=name, namespace=namespace, creoleobj=creoleobj) namespace: str,
elif pathtype == 'variable': name: str,
if namespace == 'creole': creoleobj: str,
varname = name ) -> str: # pylint: disable=C0111
else: self.families[name] = dict(name=name,
if '.' in name: namespace=namespace,
varname = name creoleobj=creoleobj,
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))
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 if current_namespace is None: # pragma: no cover
raise CreoleOperationError('current_namespace must not be None') raise CreoleOperationError('current_namespace must not be None')
dico = self.families[normalize_family(name, dico = self.families[normalize_family(name,
check_name=False, check_name=False,
allow_dot=True)] allow_dot=True,
)]
if dico['namespace'] != 'creole' and current_namespace != dico['namespace']: if dico['namespace'] != 'creole' and current_namespace != dico['namespace']:
raise CreoleDictConsistencyError(_('A family located in the {} namespace ' raise CreoleDictConsistencyError(_('A family located in the {} namespace '
'shall not be used in the {} namespace').format( 'shall not be used in the {} namespace').format(
@ -616,81 +632,147 @@ class Path(object):
path = '.'.join([dico['namespace'], path]) path = '.'.join([dico['namespace'], path])
return 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] dico = self.families[name]
if dico['namespace'] is None: if dico['namespace'] is None:
return dico['name'] return dico['name']
return dico['namespace'] 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: if name not in self.families:
raise CreoleDictConsistencyError(_('unknown family {}').format(name)) raise CreoleDictConsistencyError(_('unknown family {}').format(name))
dico = self.families[name] dico = self.families[name]
return dico['creoleobj'] 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) 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 def get_leader(self, name): # pylint: disable=C0111
dico = self._get_variable(name) return self._get_variable(name)['leader']
return dico['creoleobj']
def get_variable_family_name(self, name): # pylint: disable=C0111 # Variable
dico = self._get_variable(name) def add_variable(self,
return dico['family'] 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) dico = self._get_variable(name)
list_path = [dico['namespace'], dico['family']] list_path = [dico['namespace'], dico['family']]
if dico['leader'] is not None: if dico['leader'] is not None:
list_path.append(dico['leader']) list_path.append(dico['leader'])
return '.'.join(list_path) 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'] 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 if current_namespace is None: # pragma: no cover
raise CreoleOperationError('current_namespace must not be None') 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 not allow_source:
if dico['namespace'] not in ['creole', 'services'] and current_namespace != dico['namespace']: if dico['namespace'] not in ['creole', 'services'] and current_namespace != dico['namespace']:
raise CreoleDictConsistencyError(_('A variable located in the {} namespace ' raise CreoleDictConsistencyError(_('A variable located in the {} namespace '
'shall not be used in the {} namespace').format( 'shall not be used in the {} namespace').format(
dico['namespace'], current_namespace)) dico['namespace'], current_namespace))
if '.' in dico['name']: if '.' in dico['name']:
return dico['name'] value = dico['name']
list_path = [dico['namespace'], dico['family']] else:
if dico['leader'] is not None: list_path = [dico['namespace'], dico['family']]
list_path.append(dico['leader']) if dico['leader'] is not None:
list_path.append(dico['name']) list_path.append(dico['leader'])
return '.'.join(list_path) 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 return name in self.variables
def set_leader(self, name, leader): # pylint: disable=C0111 def _get_variable(self,
dico = self._get_variable(name) name: str,
namespace = dico['namespace'] with_suffix: bool=False,
if dico['leader'] != None: ) -> str:
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):
if name not in self.variables: if name not in self.variables:
if name.startswith('creole.'): if name.startswith('creole.'):
name = name.split('.')[-1] name = name.split('.')[-1]
if name not in self.variables: 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)) raise CreoleDictConsistencyError(_('unknown option {}').format(name))
if with_suffix:
return self.variables[name], None
return self.variables[name] return self.variables[name]
def get_leader(self, name): # pylint: disable=C0111
dico = self._get_variable(name)
return dico['leader']

View File

@ -59,11 +59,11 @@ class IsDefined:
if '.' in varname: if '.' in varname:
splitted_var = varname.split('.') splitted_var = varname.split('.')
if len(splitted_var) != 2: 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) raise KeyError(msg)
master, slave = splitted_var leader, follower = splitted_var
if master in self.context: if leader in self.context:
return slave in self.context[master].slave.keys() return follower in self.context[leader].follower.keys()
return False return False
else: else:
return varname in self.context return varname in self.context
@ -133,7 +133,7 @@ class CheetahTemplate(ChtTemplate):
class CreoleLeader: 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: On rend la variable itérable pour pouvoir faire:
for ip in iplist: for ip in iplist:
@ -143,20 +143,20 @@ class CreoleLeader:
index is used for CreoleLint index is used for CreoleLint
""" """
self._value = value self._value = value
if slave is not None: if follower is not None:
self.slave = slave self.follower = follower
else: else:
self.slave = {} self.follower = {}
self._index = index self._index = index
def __getattr__(self, name): 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. If the attribute is a name of a follower variable, return its value.
Otherwise, returns the requested attribute of master value. Otherwise, returns the requested attribute of leader value.
""" """
if name in self.slave: if name in self.follower:
value = self.slave[name] value = self.follower[name]
if isinstance(value, PropertiesOptionError): if isinstance(value, PropertiesOptionError):
raise AttributeError() raise AttributeError()
return value return value
@ -164,36 +164,36 @@ class CreoleLeader:
return getattr(self._value, name) return getattr(self._value, name)
def __getitem__(self, index): def __getitem__(self, index):
"""Get a master.slave at requested index. """Get a leader.follower at requested index.
""" """
ret = {} ret = {}
for key, values in self.slave.items(): for key, values in self.follower.items():
ret[key] = values[index] ret[key] = values[index]
return CreoleLeader(self._value[index], ret, index) return CreoleLeader(self._value[index], ret, index)
def __iter__(self): 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)): for i in range(len(self._value)):
ret = {} ret = {}
for key, values in self.slave.items(): for key, values in self.follower.items():
ret[key] = values[i] ret[key] = values[i]
yield CreoleLeader(self._value[i], ret, i) yield CreoleLeader(self._value[i], ret, i)
def __len__(self): def __len__(self):
"""Delegate to master value """Delegate to leader value
""" """
return len(self._value) return len(self._value)
def __repr__(self): def __repr__(self):
"""Show CreoleLeader as dictionary. """Show CreoleLeader as dictionary.
The master value is stored under 'value' key. The leader value is stored under 'value' key.
The slaves are stored under 'slave' 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): def __eq__(self, value):
return value == self._value return value == self._value
@ -214,7 +214,7 @@ class CreoleLeader:
return self._value >= value return self._value >= value
def __str__(self): def __str__(self):
"""Delegate to master value """Delegate to leader value
""" """
return str(self._value) return str(self._value)
@ -227,7 +227,7 @@ class CreoleLeader:
def __contains__(self, item): def __contains__(self, item):
return item in self._value 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): if isinstance(self._value, list):
values = [] values = []
for idx in range(len(self._value)): for idx in range(len(self._value)):
@ -237,7 +237,7 @@ class CreoleLeader:
values.append(err) values.append(err)
else: else:
raise Exception('hu?') raise Exception('hu?')
self.slave[name] = values self.follower[name] = values
class CreoleExtra: class CreoleExtra:
@ -261,11 +261,14 @@ class CreoleTemplateEngine:
eosfunc_file: str, eosfunc_file: str,
distrib_dir: str, distrib_dir: str,
tmp_dir: str, tmp_dir: str,
dest_dir:str) -> None: dest_dir: str,
tmpfile_name: str,
) -> None:
self.config = config self.config = config
self.dest_dir = dest_dir self.dest_dir = dest_dir
self.tmp_dir = tmp_dir self.tmp_dir = tmp_dir
self.distrib_dir = distrib_dir self.distrib_dir = distrib_dir
self.tmpfile_name = tmpfile_name
eos = {} eos = {}
if eosfunc_file is not None: if eosfunc_file is not None:
eosfunc = imp.load_source('eosfunc', eosfunc_file) eosfunc = imp.load_source('eosfunc', eosfunc_file)
@ -285,7 +288,7 @@ class CreoleTemplateEngine:
leader = CreoleLeader(await suboption.value.get()) leader = CreoleLeader(await suboption.value.get())
self.creole_variables_dict[await suboption.option.name()] = leader self.creole_variables_dict[await suboption.option.name()] = leader
else: else:
await leader.add_slave(self.config, await leader.add_follower(self.config,
await suboption.option.name(), await suboption.option.name(),
await suboption.option.path()) await suboption.option.path())
else: else:
@ -306,7 +309,7 @@ class CreoleTemplateEngine:
leader = CreoleLeader(await suboption.value.get()) leader = CreoleLeader(await suboption.value.get())
leader_name = await suboption.option.name() leader_name = await suboption.option.name()
else: else:
await leader.add_slave(self.config, await leader.add_follower(self.config,
await suboption.option.name(), await suboption.option.name(),
await suboption.option.path()) await suboption.option.path())
variables[leader_name] = leader variables[leader_name] = leader
@ -342,6 +345,7 @@ class CreoleTemplateEngine:
self.patch_template(filename) self.patch_template(filename)
def process(self, def process(self,
source: str,
destfilename: str, destfilename: str,
filevar: Dict, filevar: Dict,
variable: Any): variable: Any):
@ -350,8 +354,7 @@ class CreoleTemplateEngine:
# full path of the destination file # full path of the destination file
log.info(_(f"Cheetah processing: '{destfilename}'")) log.info(_(f"Cheetah processing: '{destfilename}'"))
try: try:
cheetah_template = CheetahTemplate(join(self.tmp_dir, cheetah_template = CheetahTemplate(source,
filevar['source']),
self.creole_variables_dict, self.creole_variables_dict,
self.eosfunc, self.eosfunc,
destfilename, destfilename,
@ -368,19 +371,24 @@ class CreoleTemplateEngine:
def instance_file(self, def instance_file(self,
filevar: Dict, filevar: Dict,
systemd_rights: list) -> None: systemd_rights: list,
override: bool,
service_name: str) -> None:
"""Run templatisation on one file """Run templatisation on one file
""" """
log.info(_("Instantiating file '{filename}'")) log.info(_("Instantiating file '{filename}'"))
filenames = filevar['name']
if 'variable' in filevar: if 'variable' in filevar:
variable = filevar['variable'] variable = filevar['variable']
else: else:
variable = None variable = None
if not isinstance(filenames, list): if override:
filenames = [filenames] filenames = [f'/system/{service_name}.service.d/rougail.conf']
if variable: else:
variable = [variable] filenames = filevar['name']
if not isinstance(filenames, list):
filenames = [filenames]
if variable:
variable = [variable]
for idx, filename in enumerate(filenames): for idx, filename in enumerate(filenames):
destfilename = join(self.dest_dir, destfilename = join(self.dest_dir,
filename[1:]) filename[1:])
@ -389,11 +397,17 @@ class CreoleTemplateEngine:
var = variable[idx] var = variable[idx]
else: else:
var = None var = None
self.process(destfilename, source = join(self.tmp_dir, filevar['source'])
filevar, if filevar['templating']:
var) self.process(source,
systemd_rights.append(f'C {filename} {filevar["mode"]} {filevar["owner"]} {filevar["group"]} - -') destfilename,
systemd_rights.append(f'z {filename} - - - - -') 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: async def instance_files(self) -> None:
"""Run templatisation on all files """Run templatisation on all files
@ -411,33 +425,41 @@ class CreoleTemplateEngine:
self.prepare_template(join(self.distrib_dir, template)) self.prepare_template(join(self.distrib_dir, template))
systemd_rights = [] systemd_rights = []
for service_obj in await self.config.option('services').list('all'): 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'): 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'): for fill_obj in await fills.list('all'):
fill = await fill_obj.value.dict() fill = await fill_obj.value.dict()
filename = fill['source'] filename = fill['source']
distib_file = join(self.distrib_dir, filename) distib_file = join(self.distrib_dir, filename)
if not isfile(distib_file): if not isfile(distib_file):
raise FileNotFound(_(f"File {distib_file} does not exist.")) 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, self.instance_file(fill,
systemd_rights) systemd_rights,
override,
service_name,
)
else: else:
log.debug(_("Instantiation of file '{filename}' disabled")) log.debug(_("Instantiation of file '{filename}' disabled"))
with open(join(self.dest_dir, 'rougail.conf'), 'w') as fh: if self.tmpfile_name:
fh.write('\n'.join(systemd_rights)) with open(self.tmpfile_name, 'w') as fh:
fh.write('\n') fh.write('\n'.join(systemd_rights))
fh.write('\n')
async def generate(config: Config, async def generate(config: Config,
eosfunc_file: str, eosfunc_file: str,
distrib_dir: str, distrib_dir: str,
tmp_dir: str, tmp_dir: str,
dest_dir: str) -> None: dest_dir: str,
tmpfile_name: str=None) -> None:
engine = CreoleTemplateEngine(config, engine = CreoleTemplateEngine(config,
eosfunc_file, eosfunc_file,
distrib_dir, distrib_dir,
tmp_dir, tmp_dir,
dest_dir) dest_dir,
tmpfile_name)
await engine.instance_files() await engine.instance_files()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,10 +10,10 @@
<property>normal</property> <property>normal</property>
<value type="string">non</value> <value type="string">non</value>
</variable> </variable>
<leader doc="master" name="master"> <leader doc="leader" name="leader">
<property>normal</property> <property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/> <variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string"> <variable doc="follower1" multi="True" name="follower1" type="string">
<property>force_default_on_freeze</property> <property>force_default_on_freeze</property>
<property>frozen</property> <property>frozen</property>
<property>hidden</property> <property>hidden</property>
@ -22,22 +22,22 @@
<param name="valeur" transitive="False" type="string">valfill</param> <param name="valeur" transitive="False" type="string">valfill</param>
</value> </value>
</variable> </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>force_default_on_freeze</property>
<property>frozen</property> <property>frozen</property>
<property>hidden</property> <property>hidden</property>
<property>normal</property> <property>normal</property>
<value name="calc_val" type="calculation"> <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> </value>
</variable> </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>force_default_on_freeze</property>
<property>frozen</property> <property>frozen</property>
<property>hidden</property> <property>hidden</property>
<property>normal</property> <property>normal</property>
<value name="calc_val" type="calculation"> <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> </value>
</variable> </variable>
</leader> </leader>

View File

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

View File

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

View File

@ -10,10 +10,10 @@
<property>normal</property> <property>normal</property>
<value type="string">non</value> <value type="string">non</value>
</variable> </variable>
<leader doc="master" name="master"> <leader doc="leader" name="leader">
<property>normal</property> <property>normal</property>
<variable doc="master" multi="True" name="master" type="string"/> <variable doc="leader" multi="True" name="leader" type="string"/>
<variable doc="slave1" multi="True" name="slave1" type="string"> <variable doc="follower1" multi="True" name="follower1" type="string">
<property>force_default_on_freeze</property> <property>force_default_on_freeze</property>
<property>frozen</property> <property>frozen</property>
<property>hidden</property> <property>hidden</property>
@ -22,13 +22,13 @@
<param name="valeur" transitive="False" type="string">valfill</param> <param name="valeur" transitive="False" type="string">valfill</param>
</value> </value>
</variable> </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>force_default_on_freeze</property>
<property>frozen</property> <property>frozen</property>
<property>hidden</property> <property>hidden</property>
<property>normal</property> <property>normal</property>
<value name="calc_val" type="calculation"> <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> </value>
</variable> </variable>
</leader> </leader>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -32,6 +32,10 @@
<property>mandatory</property> <property>mandatory</property>
<value>file1</value> <value>file1</value>
</variable> </variable>
<variable doc="" multi="False" name="templating" type="boolean">
<property>mandatory</property>
<value>True</value>
</variable>
<variable doc="" multi="False" name="activate" type="boolean"> <variable doc="" multi="False" name="activate" type="boolean">
<property>mandatory</property> <property>mandatory</property>
<property expected="oui" inverse="False" source="creole.general.condition" type="calculation">disabled</property> <property expected="oui" inverse="False" source="creole.general.condition" type="calculation">disabled</property>
@ -67,6 +71,10 @@
<property>mandatory</property> <property>mandatory</property>
<value>file2</value> <value>file2</value>
</variable> </variable>
<variable doc="" multi="False" name="templating" type="boolean">
<property>mandatory</property>
<value>True</value>
</variable>
<variable doc="" multi="False" name="activate" type="boolean"> <variable doc="" multi="False" name="activate" type="boolean">
<property>mandatory</property> <property>mandatory</property>
<property expected="oui" inverse="False" source="creole.general.condition" type="calculation">disabled</property> <property expected="oui" inverse="False" source="creole.general.condition" type="calculation">disabled</property>

View File

@ -1 +1 @@
{"creole.general.condition": "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"} {"creole.general.condition": "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.templating": true}

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