can add rougail_variable to template

This commit is contained in:
Emmanuel Garette 2019-12-22 14:46:16 +01:00
parent 5952a8d759
commit 3eb208b2c1
12 changed files with 185 additions and 27 deletions

View File

@ -87,55 +87,55 @@
<!ELEMENT service_access ((port | tcpwrapper)*)> <!ELEMENT service_access ((port | tcpwrapper)*)>
<!ATTLIST service_access service CDATA #REQUIRED > <!ATTLIST service_access service CDATA #REQUIRED >
<!ELEMENT port (#PCDATA)> <!--port_type--> <!ELEMENT port (#PCDATA)>
<!ATTLIST port port_type (PortOption|SymLinkOption|variable) "PortOption"> <!ATTLIST port port_type (PortOption|SymLinkOption|variable) "PortOption">
<!ATTLIST port service_accesslist CDATA #IMPLIED > <!ATTLIST port service_accesslist CDATA #IMPLIED >
<!ATTLIST port protocol (tcp|udp) "tcp"> <!ATTLIST port protocol (tcp|udp) "tcp">
<!ELEMENT tcpwrapper (#PCDATA)> <!--tcpwrapper_type--> <!ELEMENT tcpwrapper (#PCDATA)>
<!ATTLIST tcpwrapper tcpwrapper_type (UnicodeOption|SymLinkOption|variable) "UnicodeOption"> <!ATTLIST tcpwrapper tcpwrapper_type (UnicodeOption|SymLinkOption|variable) "UnicodeOption">
<!ATTLIST tcpwrapper service_accesslist CDATA #IMPLIED > <!ATTLIST tcpwrapper service_accesslist CDATA #IMPLIED >
<!ELEMENT service_restriction (ip*)> <!ELEMENT service_restriction (ip*)>
<!ATTLIST service_restriction service CDATA #REQUIRED > <!ATTLIST service_restriction service CDATA #REQUIRED >
<!ELEMENT ip (#PCDATA)> <!--ip_type--> <!ELEMENT ip (#PCDATA)>
<!ATTLIST ip service_restrictionlist CDATA #IMPLIED > <!ATTLIST ip service_restrictionlist CDATA #IMPLIED >
<!ATTLIST ip ip_type (NetworkOption|SymLinkOption|variable) "NetworkOption"> <!ATTLIST ip ip_type (NetworkOption|SymLinkOption|variable) "NetworkOption">
<!ATTLIST ip interface_type (UnicodeOption|SymLinkOption|variable) "UnicodeOption"> <!ATTLIST ip interface_type (UnicodeOption|SymLinkOption|variable) "UnicodeOption">
<!ATTLIST ip interface CDATA #REQUIRED> <!--interface_type--> <!ATTLIST ip interface CDATA #REQUIRED>
<!ATTLIST ip netmask_type (NetmaskOption|SymLinkOption|variable) "NetmaskOption"> <!ATTLIST ip netmask_type (NetmaskOption|SymLinkOption|variable) "NetmaskOption">
<!ATTLIST ip netmask CDATA "255.255.255.255"> <!--netmask_type--> <!ATTLIST ip netmask CDATA "255.255.255.255">
<!ELEMENT interface (#PCDATA)> <!ELEMENT interface (#PCDATA)>
<!ATTLIST interface interfacelist CDATA #IMPLIED > <!ATTLIST interface interfacelist CDATA #IMPLIED >
<!ATTLIST interface linkto CDATA #REQUIRED > <!ATTLIST interface linkto CDATA #REQUIRED >
<!ATTLIST interface ip CDATA #REQUIRED> <!--variable--> <!ATTLIST interface ip CDATA #REQUIRED>
<!ATTLIST interface ip_type (SymLinkOption|variable) "variable"> <!ATTLIST interface ip_type (SymLinkOption|variable) "variable">
<!ATTLIST interface mask CDATA #REQUIRED> <!--variable--> <!ATTLIST interface mask CDATA #REQUIRED>
<!ATTLIST interface mask_type (SymLinkOption|variable) "variable"> <!ATTLIST interface mask_type (SymLinkOption|variable) "variable">
<!ATTLIST interface bcast CDATA #IMPLIED> <!--variable--> <!ATTLIST interface bcast CDATA #IMPLIED>
<!ATTLIST interface bcast_type (SymLinkOption|variable) "variable"> <!ATTLIST interface bcast_type (SymLinkOption|variable) "variable">
<!ATTLIST interface gateway CDATA #IMPLIED> <!--variable--> <!ATTLIST interface gateway CDATA #IMPLIED>
<!ATTLIST interface gateway_type (variable) "variable"> <!ATTLIST interface gateway_type (variable) "variable">
<!ATTLIST interface method (bridge|macvlan) "macvlan" > <!ATTLIST interface method (bridge|macvlan) "macvlan" >
<!ATTLIST interface redefine (True|False) "False"> <!ATTLIST interface redefine (True|False) "False">
<!ELEMENT host EMPTY > <!ELEMENT host EMPTY >
<!ATTLIST host hostlist CDATA #IMPLIED > <!ATTLIST host hostlist CDATA #IMPLIED >
<!ATTLIST host name CDATA #REQUIRED > <!--variable--> <!ATTLIST host name CDATA #REQUIRED >
<!ATTLIST host name_type (SymLinkOption|variable) "variable"> <!ATTLIST host name_type (SymLinkOption|variable) "variable">
<!ATTLIST host ip CDATA #REQUIRED > <!--variable--> <!ATTLIST host ip CDATA #REQUIRED >
<!ATTLIST host ip_type (SymLinkOption|variable) "variable"> <!ATTLIST host ip_type (SymLinkOption|variable) "variable">
<!ATTLIST host crossed (True|False) "True" > <!ATTLIST host crossed (True|False) "True" >
<!ATTLIST host comment CDATA #IMPLIED > <!ATTLIST host comment CDATA #IMPLIED >
<!ELEMENT fstab EMPTY > <!ELEMENT fstab EMPTY >
<!ATTLIST fstab name CDATA #REQUIRED> <!--name_type--> <!ATTLIST fstab name CDATA #REQUIRED>
<!ATTLIST fstab name_type (FilenameOption|SymLinkOption|variable) "FilenameOption"> <!ATTLIST fstab name_type (FilenameOption|SymLinkOption|variable) "FilenameOption">
<!ATTLIST fstab type (bind|normal) "bind"> <!ATTLIST fstab type (bind|normal) "bind">
<!ATTLIST fstab fstype (auto|ext3|ext4|nfs|smb) "auto"> <!ATTLIST fstab fstype (auto|ext3|ext4|nfs|smb) "auto">
<!ATTLIST fstab mount_point CDATA #IMPLIED> <!--mount_point_type--> <!ATTLIST fstab mount_point CDATA #IMPLIED>
<!ATTLIST fstab mount_point_type (FilenameOption|SymLinkOption|variable) "FilenameOption"> <!ATTLIST fstab mount_point_type (FilenameOption|SymLinkOption|variable) "FilenameOption">
<!ATTLIST fstab options CDATA #IMPLIED> <!ATTLIST fstab options CDATA #IMPLIED>
<!ATTLIST fstab checks CDATA #IMPLIED> <!ATTLIST fstab checks CDATA #IMPLIED>
@ -149,6 +149,8 @@
<!ELEMENT file EMPTY> <!ELEMENT file EMPTY>
<!ATTLIST file name CDATA #REQUIRED > <!ATTLIST file name CDATA #REQUIRED >
<!ATTLIST file name_type (UnicodeOption|SymLinkOption|variable) "UnicodeOption"> <!ATTLIST file name_type (UnicodeOption|SymLinkOption|variable) "UnicodeOption">
<!ATTLIST file variable CDATA #IMPLIED>
<!ATTLIST file variable_type (variable) "variable">
<!ATTLIST file source CDATA #IMPLIED> <!ATTLIST file source CDATA #IMPLIED>
<!ATTLIST file mode CDATA #IMPLIED > <!ATTLIST file mode CDATA #IMPLIED >
<!ATTLIST file owner CDATA #IMPLIED > <!ATTLIST file owner CDATA #IMPLIED >
@ -229,4 +231,3 @@
<!ELEMENT slave (#PCDATA)> <!ELEMENT slave (#PCDATA)>
<!ELEMENT help ((variable* | family*)*)> <!ELEMENT help ((variable* | family*)*)>

View File

@ -8,7 +8,7 @@ import imp
import sys import sys
from shutil import copy from shutil import copy
import logging import logging
from typing import Dict from typing import Dict, Any
from subprocess import call from subprocess import call
from os import listdir, unlink, makedirs from os import listdir, unlink, makedirs
@ -116,16 +116,21 @@ class CheetahTemplate(ChtTemplate):
eosfunc: Dict, eosfunc: Dict,
config: Config, config: Config,
current_container: str, current_container: str,
destfilename): destfilename,
variable):
"""Initialize Creole CheetahTemplate """Initialize Creole CheetahTemplate
""" """
ChtTemplate.__init__(self, file=filename, extra_context = {'is_defined' : IsDefined(context),
searchList=[context, eosfunc, {'is_defined' : IsDefined(context),
# 'creole_client' : CreoleClient(config), # 'creole_client' : CreoleClient(config),
# 'current_container':CreoleGet(current_container), # 'current_container':CreoleGet(current_container),
'normalize_family': normalize_family, 'normalize_family': normalize_family,
'rougail_filename': destfilename 'rougail_filename': destfilename
}]) }
if variable:
extra_context['rougail_variable'] = variable
ChtTemplate.__init__(self,
file=filename,
searchList=[context, eosfunc, extra_context])
class CreoleLeader: class CreoleLeader:
@ -324,7 +329,8 @@ class CreoleTemplateEngine:
def process(self, def process(self,
destfilename: str, destfilename: str,
filevar: Dict, filevar: Dict,
container: str): container: str,
variable: Any):
"""Process a cheetah template """Process a cheetah template
""" """
# full path of the destination file # full path of the destination file
@ -336,7 +342,8 @@ class CreoleTemplateEngine:
self.eosfunc, self.eosfunc,
self.config.config.copy(), self.config.config.copy(),
container, container,
destfilename) destfilename,
variable)
data = str(cheetah_template) data = str(cheetah_template)
except CheetahNotFound as err: except CheetahNotFound as err:
varname = err.args[0][13:-1] varname = err.args[0][13:-1]
@ -393,15 +400,26 @@ class CreoleTemplateEngine:
container_dir = join(self.dest_dir, container_dir = join(self.dest_dir,
container) container)
filenames = filevar['name'] filenames = filevar['name']
if 'variable' in filevar:
variable = filevar['variable']
else:
variable = None
if not isinstance(filenames, list): if not isinstance(filenames, list):
filenames = [filenames] filenames = [filenames]
for filename in filenames: if variable:
variable = [variable]
for idx, filename in enumerate(filenames):
destfilename = join(container_dir, destfilename = join(container_dir,
filename[1:]) filename[1:])
makedirs(dirname(destfilename), exist_ok=True) makedirs(dirname(destfilename), exist_ok=True)
if variable:
var = variable[idx]
else:
var = None
self.process(destfilename, self.process(destfilename,
filevar, filevar,
container) container,
var)
self.change_properties(destfilename, self.change_properties(destfilename,
filevar) filevar)

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<containers>
<container name='test' id='23'>
<file name='file_name' name_type="variable" source="mailname" variable="var"/>
</container>
</containers>
<variables>
<family name='général'>
<variable name='mode_conteneur_actif' type='oui/non' description="No change" hidden="True">
<value>oui</value>
</variable>
<variable name='file_name' type='string' multi='True'>
<value>/etc/mailname</value>
<value>/etc/mailname2</value>
</variable>
<variable name='var' type='string' multi='True'>
<value>mailname</value>
<value>mailname2</value>
</variable>
</family>
<separators/>
</variables>
</creole>

View File

@ -0,0 +1 @@
{"creole.general.file_name": ["/etc/mailname", "/etc/mailname2"], "creole.general.var": ["mailname", "mailname2"], "containers.container0.files.file0.mkdir": false, "containers.container0.files.file0.name": ["/etc/mailname", "/etc/mailname2"], "containers.container0.files.file0.rm": false, "containers.container0.files.file0.source": "mailname", "containers.container0.files.file0.variable": ["mailname", "mailname2"], "containers.container0.files.file0.activate": true}

View File

@ -0,0 +1,54 @@
<?xml version='1.0' encoding='UTF-8'?>
<creole>
<family name="containers">
<family name="container0" doc="test">
<family doc="files" name="files">
<family doc="file0" name="file0">
<variable doc="" multi="False" name="mkdir" type="boolean">
<value>False</value>
</variable>
<variable multi="False" name="name" opt="creole.general.file_name" type="symlink"/>
<variable doc="" multi="False" name="rm" type="boolean">
<value>False</value>
</variable>
<variable doc="" multi="False" name="source" type="string">
<value>mailname</value>
</variable>
<variable multi="False" name="variable" opt="creole.general.var" type="symlink"/>
<variable doc="" multi="False" name="activate" type="boolean">
<value>True</value>
</variable>
</family>
</family>
<property>basic</property>
</family>
</family>
<family doc="" name="creole">
<family doc="général" 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>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
<property>mandatory</property>
<property>normal</property>
<value type="string">oui</value>
</variable>
<variable doc="file_name" multi="True" name="file_name" type="string">
<property>mandatory</property>
<property>normal</property>
<value>/etc/mailname</value>
<value>/etc/mailname2</value>
</variable>
<variable doc="var" multi="True" name="var" type="string">
<property>mandatory</property>
<property>normal</property>
<value>mailname</value>
<value>mailname2</value>
</variable>
</family>
<separators/>
</family>
</creole>

View File

@ -0,0 +1,54 @@
<?xml version='1.0' encoding='UTF-8'?>
<creole>
<family name="containers">
<family name="container0" doc="test">
<family doc="files" name="files">
<family doc="file0" name="file0">
<variable doc="" multi="False" name="mkdir" type="boolean">
<value>False</value>
</variable>
<variable multi="False" name="name" opt="creole.general.file_name" type="symlink"/>
<variable doc="" multi="False" name="rm" type="boolean">
<value>False</value>
</variable>
<variable doc="" multi="False" name="source" type="string">
<value>mailname</value>
</variable>
<variable multi="False" name="variable" opt="creole.general.var" type="symlink"/>
<variable doc="" multi="False" name="activate" type="boolean">
<value>True</value>
</variable>
</family>
</family>
<property>basic</property>
</family>
</family>
<family doc="" name="creole">
<family doc="général" 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>force_default_on_freeze</property>
<property>frozen</property>
<property>hidden</property>
<property>mandatory</property>
<property>normal</property>
<value type="string">oui</value>
</variable>
<variable doc="file_name" multi="True" name="file_name" type="string">
<property>mandatory</property>
<property>normal</property>
<value>/etc/mailname</value>
<value>/etc/mailname2</value>
</variable>
<variable doc="var" multi="True" name="var" type="string">
<property>mandatory</property>
<property>normal</property>
<value>mailname</value>
<value>mailname2</value>
</variable>
</family>
<separators/>
</family>
</creole>

View File

@ -0,0 +1 @@
%%rougail_variable

View File

@ -0,0 +1 @@
%%rougail_variable