can add rougail_variable to template
This commit is contained in:
parent
5952a8d759
commit
3eb208b2c1
12 changed files with 185 additions and 27 deletions
|
@ -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*)*)>
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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}
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
||||||
|
mailname
|
|
@ -0,0 +1 @@
|
||||||
|
mailname2
|
|
@ -0,0 +1 @@
|
||||||
|
mailname
|
|
@ -0,0 +1 @@
|
||||||
|
mailname2
|
|
@ -0,0 +1 @@
|
||||||
|
%%rougail_variable
|
|
@ -0,0 +1 @@
|
||||||
|
%%rougail_variable
|
Loading…
Reference in a new issue