remove included template
This commit is contained in:
parent
cdfa065550
commit
e8667848e9
2 changed files with 63 additions and 14 deletions
|
@ -29,7 +29,7 @@ from shutil import copy
|
|||
import logging
|
||||
from typing import Dict, Any
|
||||
from subprocess import call
|
||||
from os import listdir, makedirs, getcwd, chdir
|
||||
from os import listdir, makedirs, getcwd, chdir, unlink, rmdir
|
||||
from os.path import dirname, join, isfile, isdir, abspath
|
||||
|
||||
|
||||
|
@ -271,7 +271,7 @@ class RougailBaseTemplate:
|
|||
type_: str,
|
||||
service_name: str,
|
||||
service_type: str,
|
||||
) -> None:
|
||||
) -> str:
|
||||
"""Run templatisation on one file
|
||||
"""
|
||||
self.log.info(_("Instantiating file '{filename}'"))
|
||||
|
@ -286,6 +286,7 @@ class RougailBaseTemplate:
|
|||
variable = [variable]
|
||||
if not isdir(self.destinations_dir):
|
||||
raise TemplateError(_(f'cannot find destinations_dir {self.destinations_dir}'))
|
||||
destfilenames = []
|
||||
for idx, filename, in enumerate(filenames):
|
||||
if variable:
|
||||
var = variable[idx]
|
||||
|
@ -301,19 +302,28 @@ class RougailBaseTemplate:
|
|||
)
|
||||
if data is None:
|
||||
continue
|
||||
filename, source, destfile, var = data
|
||||
destfilename = join(self.destinations_dir, destfile[1:])
|
||||
filename, source, true_destfilename, var = data
|
||||
destfilename = join(self.destinations_dir, true_destfilename[1:])
|
||||
makedirs(dirname(destfilename), exist_ok=True)
|
||||
self.log.info(_(f"{filevar['engine']} processing: '{destfilename}'"))
|
||||
self.engines[filevar['engine']].process(filename=filename,
|
||||
source=source,
|
||||
true_destfilename=destfile,
|
||||
true_destfilename=true_destfilename,
|
||||
destfilename=destfilename,
|
||||
destdir=self.destinations_dir,
|
||||
variable=var,
|
||||
index=idx,
|
||||
rougail_variables_dict=self.rougail_variables_dict,
|
||||
eosfunc=self.eosfunc,
|
||||
)
|
||||
self.process(true_destfilename,
|
||||
destfilename,
|
||||
filevar.get('mode'),
|
||||
filevar.get('owner'),
|
||||
filevar.get('group'),
|
||||
)
|
||||
destfilenames.append(destfilename)
|
||||
return destfilenames
|
||||
|
||||
async def instance_files(self) -> None:
|
||||
"""Run templatisation on all files
|
||||
|
@ -339,6 +349,7 @@ class RougailBaseTemplate:
|
|||
self.prepare_template(template,
|
||||
templates_dir,
|
||||
)
|
||||
files_to_delete = []
|
||||
for included in (True, False):
|
||||
for service_obj in await self.config.option('services').list('all'):
|
||||
service_name = await service_obj.option.description()
|
||||
|
@ -374,14 +385,24 @@ class RougailBaseTemplate:
|
|||
elif included is True:
|
||||
continue
|
||||
if fill['activate']:
|
||||
self.instance_file(fill,
|
||||
destfilenames = self.instance_file(fill,
|
||||
type_,
|
||||
service_name,
|
||||
service_type,
|
||||
)
|
||||
if included and fill.get('included', 'no') == 'content':
|
||||
files_to_delete.extend(destfilenames)
|
||||
else:
|
||||
self.log.debug(_("Instantiation of file '{filename}' disabled"))
|
||||
self.log.debug(_(f"Instantiation of file '{fill['name']}' disabled"))
|
||||
self.post_instance_service(service_name, service_type)
|
||||
for filename in files_to_delete:
|
||||
unlink(filename)
|
||||
parent = filename
|
||||
while True:
|
||||
parent = dirname(parent)
|
||||
if listdir(parent):
|
||||
break
|
||||
rmdir(parent)
|
||||
self.post_instance()
|
||||
if ori_dir is not None:
|
||||
chdir(ori_dir)
|
||||
|
@ -415,6 +436,11 @@ class RougailBaseTemplate:
|
|||
): # pragma: no cover
|
||||
pass
|
||||
|
||||
def process(self,
|
||||
*args,
|
||||
): # pragma: no cover
|
||||
raise NotImplementedError(_('cannot processed'))
|
||||
|
||||
def post_instance(self): # pragma: no cover
|
||||
pass
|
||||
|
||||
|
|
|
@ -21,13 +21,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
"""
|
||||
|
||||
from typing import Dict, Any
|
||||
from os import makedirs, symlink
|
||||
from os import makedirs, symlink, chmod
|
||||
from os.path import dirname, isfile, join
|
||||
from ipaddress import ip_network
|
||||
|
||||
from .base import RougailBaseTemplate
|
||||
from ..i18n import _
|
||||
from ..error import FileNotFound
|
||||
from ..error import FileNotFound, TemplateError
|
||||
|
||||
|
||||
ROUGAIL_IP_TEMPLATE = """[Service]
|
||||
|
@ -41,10 +41,14 @@ IPAddressDeny=any
|
|||
ROUGAIL_DEST = '/usr/local/lib'
|
||||
ROUGAIL_GLOBAL_SYSTEMD_FILE = '/usr/lib/systemd/system'
|
||||
ROUGAIL_DEST_FILE = '/tmpfiles.d/0rougail.conf'
|
||||
LOCAL_DIR = ('/etc/', '/var/', '/srv/')
|
||||
|
||||
|
||||
ROUGAIL_TMPL_TEMPLATE = f"""%def display(%%file, %%filename)
|
||||
%if %%filename.startswith('/etc/') or %%filename.startswith('/var/') or %%filename.startswith('/srv/')
|
||||
"""
|
||||
TMP_LOCAL_DIR = (f"%%filename.startswith('{local_dir}')" for local_dir in LOCAL_DIR)
|
||||
ROUGAIL_TMPL_TEMPLATE += '%if ' + ' or '.join(TMP_LOCAL_DIR)
|
||||
ROUGAIL_TMPL_TEMPLATE += f"""
|
||||
C %%filename %%file.mode %%file.owner %%file.group - {ROUGAIL_DEST}%%filename
|
||||
%end if
|
||||
%end def
|
||||
|
@ -180,11 +184,29 @@ class RougailSystemdTemplate(RougailBaseTemplate):
|
|||
destfilename=destfilename,
|
||||
destdir=self.destinations_dir,
|
||||
variable=self.ip_per_service,
|
||||
index=None,
|
||||
rougail_variables_dict=self.rougail_variables_dict,
|
||||
eosfunc=self.eosfunc,
|
||||
)
|
||||
self.ip_per_service = None
|
||||
|
||||
def process(self,
|
||||
filename: str,
|
||||
destfilename: str,
|
||||
mode: str,
|
||||
owner: str,
|
||||
group: str,
|
||||
) -> None:
|
||||
for local_dir in LOCAL_DIR:
|
||||
if filename.startswith(local_dir):
|
||||
return
|
||||
if owner not in [None, self.rougailconfig['default_files_owner']]:
|
||||
raise TemplateError(_(f'cannot change owner of file {destfilename}'))
|
||||
if group not in [None, self.rougailconfig['default_files_group']]:
|
||||
raise TemplateError(_(f'cannot change group of file {destfilename}'))
|
||||
if mode not in [None, self.rougailconfig['default_files_mode']]:
|
||||
chmod(destfilename, eval(f'0o{mode}'))
|
||||
|
||||
def post_instance(self):
|
||||
destfilename = join(self.destinations_dir, ROUGAIL_DEST_FILE[1:])
|
||||
makedirs(dirname(destfilename), exist_ok=True)
|
||||
|
@ -195,6 +217,7 @@ class RougailSystemdTemplate(RougailBaseTemplate):
|
|||
destfilename=destfilename,
|
||||
destdir=self.destinations_dir,
|
||||
variable=None,
|
||||
index=None,
|
||||
rougail_variables_dict=self.rougail_variables_dict,
|
||||
eosfunc=self.eosfunc,
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue