diff --git a/doc/README.md b/doc/README.md index c822e8569..0e8c5a8ce 100644 --- a/doc/README.md +++ b/doc/README.md @@ -25,6 +25,7 @@ Rougail est un bibliothèque python3 qui permet de charger des dictionnaires (fi ### Les services - [La gestion d'un fichier](service/file.md) + - [La gestion d'un certificat](service/certificate.md) - [La gestion d'un fichier de service systemd](service/override.md) - [La gestion d'une ip](service/ip.md) diff --git a/doc/dev/config.md b/doc/dev/config.md index b343f6949..bda0d2a8f 100644 --- a/doc/dev/config.md +++ b/doc/dev/config.md @@ -132,7 +132,7 @@ Le moteur de template est géré dans la clef "default_files_engine" et a comme ### Les droits par défaut des fichiers -Les droits des fichiers générés est géré dans la clef "default_files_mode" et a comme valeur par défaut : "0644". +Les droits des fichiers générés est géré dans la clef "default_files_mode" (valeur de type nombre) et a comme valeur par défaut : 644. ### Le propriétaire par défaut des fichiers diff --git a/doc/service/README.md b/doc/service/README.md index 18e697f80..c796b46e2 100644 --- a/doc/service/README.md +++ b/doc/service/README.md @@ -4,7 +4,7 @@ Un service est inclut dans un conteneur [services](../services.md). -Cette balise permet de définir tous les éléments ([fichier](file.md), [IP](ip.md) et [réécriture](override.md)) liés à un service ou à démon. +Cette balise permet de définir tous les éléments ([fichier](file.md), [certificat](certificate.md), [IP](ip.md) et [réécriture](override.md)) liés à un service ou à démon. Il faut, à la création du service, préciser son nom : @@ -122,7 +122,7 @@ En YAML : disabled: true ``` -Dans ce cas, le service et les éléments qu'il compose ([fichier](file.md), [IP](ip.md) et [réécriture](override.md) seront désactivés. +Dans ce cas, le service et les éléments qu'il compose ([fichier](file.md), [certificat](certificate.md), [IP](ip.md) et [réécriture](override.md) seront désactivés. Il est possible de définir une [condition](../condition/README.md) de type "disabled_if_in" ou "disabled_if_not_in" sur une balise service : diff --git a/doc/service/certificate.md b/doc/service/certificate.md new file mode 100644 index 000000000..6febbb399 --- /dev/null +++ b/doc/service/certificate.md @@ -0,0 +1,163 @@ +# La gestion d'un certificat + +## La balise certificate + +La gestion des certificats se fait dans un conteneur de [service](README.md). + +La déclaration du certificat permet d'associer un certificat à un service. Attention, Rougail ne permet que de déclarer ces certificats. Il n'y a pas de gestion du certification dans la bibliothèque. + +Pour déclarer un certificat : + +```xml + + + /etc/pki/tls/certs/squid.crt + + +``` + +En YAML : + +```yml +services: +- service: + - name: squid + certificate: + - private: /etc/pki/tls/private/squid.key + authority: /etc/pki/ca-trust/source/anchors/ca_squid.crt + text: /etc/pki/tls/certs/squid.crt +``` + +Les trois informations a donner sont donc : + +- le nom du certificat +- le nom de la clef privée +- le nom de certificat de l'autorité de certification + +## Les noms de fichiers dynamique + +Il est possible également de définir le nom des fichiers dans des variables : + +```xml + + + certificate + + + + + /etc/pki/tls/certs/squid.crt + + + /etc/pki/tls/private/squid.key + + + /etc/pki/ca-trust/source/anchors/ca_squid.crt + + +``` + +En YAML : + +```yml +services: +- service: + - name: squid + certificate: + - private: private + private_type: variable + authority: authority + authority_type: variable + certificate_type: variable + text: certificate +variables: +- variable: + - name: certificate + type: filename + value: + - text: /etc/pki/tls/certs/squid.crt + - name: private + type: filename + value: + - text: /etc/pki/tls/private/squid.key + - name: authority + type: filename + value: + - text: /etc/pki/ca-trust/source/anchors/ca_squid.crt +``` + +Attention, les variables doivent être de type "filename". + +## Le propriétaire de la clef privée + +Le certificat et le certificat de l'autorité de certification n'ont pas besoin d'être privés. +Par contre, seul le service qui doit avoir accès à la clef privée. + +Par défaut seul utilisateur "root" et groupe "root" peuvent y accéder. + +Il est possible de définir l'utilisateur ou le groupe de la clef privée générée : + +```xml + + + /etc/pki/tls/certs/squid.crt + + +``` + +En YAML : + +```yml +services: +- service: + - name: squid + certificate: + - private: /etc/pki/tls/private/squid.key + authority: /etc/pki/ca-trust/source/anchors/ca_squid.crt + owner: squid + group: squid + text: /etc/pki/tls/certs/squid.crt +``` + +L'utilisateur et le groupe peuvent être défini dans une variable : + +```xml + + + /etc/pki/tls/certs/squid.crt + + + + squid + + + squid + + +``` + +En YAML : + +```yml +services: +- service: + - name: squid + certificate: + - private: /etc/pki/tls/private/squid.key + authority: /etc/pki/ca-trust/source/anchors/ca_squid.crt + owner: owner + owner_type: variable + group: group + group_type: variable + text: /etc/pki/tls/certs/squid.crt +variables: +- variable: + - name: owner + type: unix_user + value: + - text: squid + - name: group + type: unix_user + value: + - text: squid +``` diff --git a/src/rougail/annotator/service.py b/src/rougail/annotator/service.py index 4b6616e5d..295d26407 100644 --- a/src/rougail/annotator/service.py +++ b/src/rougail/annotator/service.py @@ -33,11 +33,17 @@ from typing import Tuple from rougail.i18n import _ from rougail.utils import normalize_family from rougail.error import DictConsistencyError +from rougail.annotator.variable import CONVERT_OPTION +try: + import tiramisu3 as tiramisu +except ModuleNotFoundError: + import tiramisu # a object's attribute has some annotations # that shall not be present in the exported (flatened) XML ERASED_ATTRIBUTES = ('redefine', 'namespace', 'xmlfiles', 'disabled', 'name', 'manage') ERASED_ATTRIBUTES2 = ('redefine', 'namespace', 'xmlfiles', 'disabled') ALLOW_ATTRIBUT_NOT_MANAGE = ['file', 'engine', 'target'] +FORCE_INFORMATIONS = ['mode'] class Annotator: @@ -221,6 +227,12 @@ class Annotator: dtd_key_type = key + '_type' elt_type = getattr(elt, dtd_key_type, None) if elt_type: + try: + value = CONVERT_OPTION.get(elt_type, {}).get('func', str)(value) + except ValueError as err: + msg = _(f'"{value}" is not a valid "{elttype}": {err}') + raise DictConsistencyError(msg, 93, elt.xmlfiles) + if key not in FORCE_INFORMATIONS and elt_type: if elt_type == 'variable': elt_type = 'symlink' family.variable.append(self._generate_element(elt_type, @@ -381,3 +393,78 @@ class Annotator: if netmask.type != 'netmask': msg = _(f'netmask in ip must have type "netmask", not "{netmask.type}"') raise DictConsistencyError(msg, 65, ip.xmlfiles) + + def _update_certificate(self, + certificate, + certificate_name, + path_prefix, + ) -> None: + if hasattr(certificate, 'certificate_type') and certificate.certificate_type == 'variable': + variable = self.objectspace.paths.get_variable(certificate.name, + certificate.namespace, + xmlfiles=certificate.xmlfiles, + force_path_prefix=path_prefix, + add_path_prefix=True, + ) + if variable.type != 'filename': + msg = _(f'certificate cannot be linked to "{variable.type}" variable "{certificate.name}"') + raise DictConsistencyError(msg, 90, certificate.xmlfiles) + else: + option = CONVERT_OPTION['filename'] + value = certificate.name + try: + value = option.get('func', str)(value) + getattr(tiramisu, option['opttype'])('test', + 'Object to valid value', + value, + **option.get('initkwargs', {}), + ) + except ValueError as err: + msg = _(f'certificate "{value}" is not a valid "filename"') + raise DictConsistencyError(msg, 94, certificate.xmlfiles) from err + if hasattr(certificate, 'private_type') and certificate.private_type == 'variable': + variable = self.objectspace.paths.get_variable(certificate.private, + certificate.namespace, + xmlfiles=certificate.xmlfiles, + force_path_prefix=path_prefix, + add_path_prefix=True, + ) + if variable.type != 'filename': + msg = _(f'private cannot be linked to "{variable.type}" variable "{certificate.private}" for certificate "{certificate.name}"') + raise DictConsistencyError(msg, 91, certificate.xmlfiles) + else: + option = CONVERT_OPTION['filename'] + value = certificate.private + try: + value = option.get('func', str)(value) + getattr(tiramisu, option['opttype'])('test', + 'Object to valid value', + value, + **option.get('initkwargs', {}), + ) + except ValueError as err: + msg = _(f'authority "{value}" is not a valid "filename"') + raise DictConsistencyError(msg, 95, certificate.xmlfiles) from err + if hasattr(certificate, 'authority_type') and certificate.authority_type == 'variable': + variable = self.objectspace.paths.get_variable(certificate.authority, + certificate.namespace, + xmlfiles=certificate.xmlfiles, + force_path_prefix=path_prefix, + add_path_prefix=True, + ) + if variable.type != 'filename': + msg = _(f'authority cannot be linked to "{variable.type}" variable "{certificate.authority}" for certificate "{certificate.name}"') + raise DictConsistencyError(msg, 92, certificate.xmlfiles) + else: + option = CONVERT_OPTION['filename'] + value = certificate.authority + try: + value = option.get('func', str)(value) + getattr(tiramisu, option['opttype'])('test', + 'Object to valid value', + value, + **option.get('initkwargs', {}), + ) + except ValueError as err: + msg = _(f'private "{value}" is not a valid "filename"') + raise DictConsistencyError(msg, 96, certificate.xmlfiles) from err diff --git a/src/rougail/config.py b/src/rougail/config.py index 2c2524c46..8b906834f 100644 --- a/src/rougail/config.py +++ b/src/rougail/config.py @@ -63,7 +63,7 @@ RougailConfig = {'dictionaries_dir': [join(ROUGAILROOT, 'dictionaries')], 'default_family_mode': 'basic', 'default_variable_mode': 'normal', 'default_files_engine': 'cheetah', - 'default_files_mode': '0644', + 'default_files_mode': 644, 'default_files_owner': 'root', 'default_files_group': 'root', 'default_files_included': 'no', diff --git a/src/rougail/data/rougail.dtd b/src/rougail/data/rougail.dtd index 0858b510f..21706d226 100644 --- a/src/rougail/data/rougail.dtd +++ b/src/rougail/data/rougail.dtd @@ -49,7 +49,7 @@ - + @@ -71,6 +71,7 @@ + @@ -86,6 +87,17 @@ + + + + + + + + + + + diff --git a/src/rougail/data/rougail.yml b/src/rougail/data/rougail.yml index 8a9e517eb..e60196eee 100644 --- a/src/rougail/data/rougail.yml +++ b/src/rougail/data/rougail.yml @@ -81,7 +81,7 @@ mapping: owner: type: str mode: - type: str + type: int source_type: type: str enum: @@ -109,6 +109,48 @@ mapping: - "none" - "cheetah" - "jinja" + certificate: + required: false + type: seq + sequence: + - type: map + mapping: + text: + required: false + type: str + certificate_type: + type: str + enum: + - "filename" + - "variable" + group_type: + type: str + enum: + - "unix_user" + - "variable" + group: + type: str + owner_type: + type: str + enum: + - "unix_user" + - "variable" + owner: + type: str + authority: + type: str + authority_type: + type: str + enum: + - "filename" + - "variable" + private: + type: str + private_type: + type: str + enum: + - "filename" + - "variable" name: type: str undisable: diff --git a/src/rougail/template/base.py b/src/rougail/template/base.py index deb8966fc..bb12cdaa9 100644 --- a/src/rougail/template/base.py +++ b/src/rougail/template/base.py @@ -633,11 +633,11 @@ class RougailBaseTemplate: ) variables[await option.option.name()] = subfamilies else: - if is_variable_namespace: - value = await option.value.get() - self.rougail_variables_dict[await option.option.name()] = value + name = await option.option.name() value = await option.value.get() - variables[await option.option.name()] = value + if is_variable_namespace: + self.rougail_variables_dict[name] = value + variables[name] = value if isinstance(is_service_namespace, str) and is_service_namespace + 's' in INFORMATIONS: self.get_default(is_service_namespace + 's', variables, diff --git a/src/rougail/template/systemd.py b/src/rougail/template/systemd.py index 8d7f9cd82..c8060630c 100644 --- a/src/rougail/template/systemd.py +++ b/src/rougail/template/systemd.py @@ -59,7 +59,7 @@ class RougailSystemdTemplate(RougailBaseTemplate): %if {self.rougailconfig['systemd_tmpfile_delete_before_create']} r %%filename %end if -C %%filename %%file.mode %%file.owner %%file.group - {self.rougailconfig['systemd_tmpfile_factory_dir']}%%filename +C %%filename 0%%file.mode %%file.owner %%file.group - {self.rougailconfig['systemd_tmpfile_factory_dir']}%%filename %end if %end def %for %%service in %%services diff --git a/tests/dictionaries/01base_certificate/__init__.py b/tests/dictionaries/01base_certificate/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate/makedict/after.json b/tests/dictionaries/01base_certificate/makedict/after.json new file mode 100644 index 000000000..034988e52 --- /dev/null +++ b/tests/dictionaries/01base_certificate/makedict/after.json @@ -0,0 +1,26 @@ +{ + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate/makedict/base.json b/tests/dictionaries/01base_certificate/makedict/base.json new file mode 100644 index 000000000..3d1864ca5 --- /dev/null +++ b/tests/dictionaries/01base_certificate/makedict/base.json @@ -0,0 +1,8 @@ +{ + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": "/etc/pki/ca-trust/source/anchors/ca_example.crt", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": "/etc/pki/tls/certs/example.crt", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": "/etc/pki/tls/private/example.key", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": true, + "services.test_service.activate": true, + "services.test_service.manage": true +} diff --git a/tests/dictionaries/01base_certificate/makedict/before.json b/tests/dictionaries/01base_certificate/makedict/before.json new file mode 100644 index 000000000..034988e52 --- /dev/null +++ b/tests/dictionaries/01base_certificate/makedict/before.json @@ -0,0 +1,26 @@ +{ + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate/tiramisu/base.py b/tests/dictionaries/01base_certificate/tiramisu/base.py new file mode 100644 index 000000000..219477cad --- /dev/null +++ b/tests/dictionaries/01base_certificate/tiramisu/base.py @@ -0,0 +1,32 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_5 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_6 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_7 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_4 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_3 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_5, option_6, option_7, option_4]) +optiondescription_2 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_3]) +option_1 = BoolOption(name="activate", doc="activate", default=True) +option_8 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_10 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_2, option_1, option_8]) +optiondescription_10.impl_set_information('type', "service") +optiondescription_9 = OptionDescription(name="services", doc="services", children=[optiondescription_10], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_9]) diff --git a/tests/dictionaries/01base_certificate/tiramisu/multi.py b/tests/dictionaries/01base_certificate/tiramisu/multi.py new file mode 100644 index 000000000..4bcd94783 --- /dev/null +++ b/tests/dictionaries/01base_certificate/tiramisu/multi.py @@ -0,0 +1,45 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_5 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_6 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_7 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_4 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_3 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_5, option_6, option_7, option_4]) +optiondescription_2 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_3]) +option_1 = BoolOption(name="activate", doc="activate", default=True) +option_8 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_19 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_2, option_1, option_8]) +optiondescription_19.impl_set_information('type', "service") +optiondescription_18 = OptionDescription(name="services", doc="services", children=[optiondescription_19], properties=frozenset({"hidden"})) +optiondescription_17 = OptionDescription(name="1", doc="1", children=[optiondescription_18]) +option_13 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_14 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_15 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_12 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_11 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_13, option_14, option_15, option_12]) +optiondescription_10 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_11]) +option_9 = BoolOption(name="activate", doc="activate", default=True) +option_16 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_22 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_10, option_9, option_16]) +optiondescription_22.impl_set_information('type', "service") +optiondescription_21 = OptionDescription(name="services", doc="services", children=[optiondescription_22], properties=frozenset({"hidden"})) +optiondescription_20 = OptionDescription(name="2", doc="2", children=[optiondescription_21]) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_17, optiondescription_20]) diff --git a/tests/dictionaries/01base_certificate/xml/00-base.xml b/tests/dictionaries/01base_certificate/xml/00-base.xml new file mode 100644 index 000000000..83db92cc7 --- /dev/null +++ b/tests/dictionaries/01base_certificate/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + /etc/pki/tls/certs/example.crt + + + diff --git a/tests/dictionaries/01base_certificate/yml/00-base.yml b/tests/dictionaries/01base_certificate/yml/00-base.yml new file mode 100644 index 000000000..e89f38387 --- /dev/null +++ b/tests/dictionaries/01base_certificate/yml/00-base.yml @@ -0,0 +1,8 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /etc/pki/tls/private/example.key + authority: /etc/pki/ca-trust/source/anchors/ca_example.crt + text: /etc/pki/tls/certs/example.crt diff --git a/tests/dictionaries/01base_certificate_group_variable_wrong/__init__.py b/tests/dictionaries/01base_certificate_group_variable_wrong/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_group_variable_wrong/errno_58 b/tests/dictionaries/01base_certificate_group_variable_wrong/errno_58 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_group_variable_wrong/xml/00-base.xml b/tests/dictionaries/01base_certificate_group_variable_wrong/xml/00-base.xml new file mode 100644 index 000000000..176b4508c --- /dev/null +++ b/tests/dictionaries/01base_certificate_group_variable_wrong/xml/00-base.xml @@ -0,0 +1,16 @@ + + + + + /etc/pki/tls/certs/example.crt + + + + + example + + + example + + + diff --git a/tests/dictionaries/01base_certificate_group_variable_wrong/yml/00-base.yml b/tests/dictionaries/01base_certificate_group_variable_wrong/yml/00-base.yml new file mode 100644 index 000000000..68a8652f0 --- /dev/null +++ b/tests/dictionaries/01base_certificate_group_variable_wrong/yml/00-base.yml @@ -0,0 +1,21 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /etc/pki/tls/private/example.key + authority: /etc/pki/ca-trust/source/anchors/ca_example.crt + owner: owner + owner_type: variable + group: group + group_type: variable + text: /etc/pki/tls/certs/example.crt +variables: +- variable: + - name: owner + type: unix_user + value: + - text: example + - name: group + value: + - text: example diff --git a/tests/dictionaries/01base_certificate_owner/__init__.py b/tests/dictionaries/01base_certificate_owner/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_owner/makedict/after.json b/tests/dictionaries/01base_certificate_owner/makedict/after.json new file mode 100644 index 000000000..c60a5df75 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/makedict/after.json @@ -0,0 +1,34 @@ +{ + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.group": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.owner": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate_owner/makedict/base.json b/tests/dictionaries/01base_certificate_owner/makedict/base.json new file mode 100644 index 000000000..bac2a7b7c --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/makedict/base.json @@ -0,0 +1,10 @@ +{ + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": "/etc/pki/ca-trust/source/anchors/ca_example.crt", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.group": "example", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": "/etc/pki/tls/certs/example.crt", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.owner": "example", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": "/etc/pki/tls/private/example.key", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": true, + "services.test_service.activate": true, + "services.test_service.manage": true +} diff --git a/tests/dictionaries/01base_certificate_owner/makedict/before.json b/tests/dictionaries/01base_certificate_owner/makedict/before.json new file mode 100644 index 000000000..c60a5df75 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/makedict/before.json @@ -0,0 +1,34 @@ +{ + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.group": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.owner": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate_owner/tiramisu/base.py b/tests/dictionaries/01base_certificate_owner/tiramisu/base.py new file mode 100644 index 000000000..e77bfc8ad --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/tiramisu/base.py @@ -0,0 +1,34 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_5 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_6 = UsernameOption(name="group", doc="group", default="example") +option_7 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_8 = UsernameOption(name="owner", doc="owner", default="example") +option_9 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_4 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_3 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_5, option_6, option_7, option_8, option_9, option_4]) +optiondescription_2 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_3]) +option_1 = BoolOption(name="activate", doc="activate", default=True) +option_10 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_12 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_2, option_1, option_10]) +optiondescription_12.impl_set_information('type', "service") +optiondescription_11 = OptionDescription(name="services", doc="services", children=[optiondescription_12], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_11]) diff --git a/tests/dictionaries/01base_certificate_owner/tiramisu/multi.py b/tests/dictionaries/01base_certificate_owner/tiramisu/multi.py new file mode 100644 index 000000000..a1bc010f0 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/tiramisu/multi.py @@ -0,0 +1,49 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_5 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_6 = UsernameOption(name="group", doc="group", default="example") +option_7 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_8 = UsernameOption(name="owner", doc="owner", default="example") +option_9 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_4 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_3 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_5, option_6, option_7, option_8, option_9, option_4]) +optiondescription_2 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_3]) +option_1 = BoolOption(name="activate", doc="activate", default=True) +option_10 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_23 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_2, option_1, option_10]) +optiondescription_23.impl_set_information('type', "service") +optiondescription_22 = OptionDescription(name="services", doc="services", children=[optiondescription_23], properties=frozenset({"hidden"})) +optiondescription_21 = OptionDescription(name="1", doc="1", children=[optiondescription_22]) +option_15 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_16 = UsernameOption(name="group", doc="group", default="example") +option_17 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_18 = UsernameOption(name="owner", doc="owner", default="example") +option_19 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_14 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_13 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_15, option_16, option_17, option_18, option_19, option_14]) +optiondescription_12 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_13]) +option_11 = BoolOption(name="activate", doc="activate", default=True) +option_20 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_26 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_12, option_11, option_20]) +optiondescription_26.impl_set_information('type', "service") +optiondescription_25 = OptionDescription(name="services", doc="services", children=[optiondescription_26], properties=frozenset({"hidden"})) +optiondescription_24 = OptionDescription(name="2", doc="2", children=[optiondescription_25]) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_21, optiondescription_24]) diff --git a/tests/dictionaries/01base_certificate_owner/xml/00-base.xml b/tests/dictionaries/01base_certificate_owner/xml/00-base.xml new file mode 100644 index 000000000..979e5463b --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + /etc/pki/tls/certs/example.crt + + + diff --git a/tests/dictionaries/01base_certificate_owner/yml/00-base.yml b/tests/dictionaries/01base_certificate_owner/yml/00-base.yml new file mode 100644 index 000000000..0dee3a4c4 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner/yml/00-base.yml @@ -0,0 +1,10 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /etc/pki/tls/private/example.key + authority: /etc/pki/ca-trust/source/anchors/ca_example.crt + owner: example + group: example + text: /etc/pki/tls/certs/example.crt diff --git a/tests/dictionaries/01base_certificate_owner_variable/__init__.py b/tests/dictionaries/01base_certificate_owner_variable/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_owner_variable/makedict/after.json b/tests/dictionaries/01base_certificate_owner_variable/makedict/after.json new file mode 100644 index 000000000..ab27ebd51 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/makedict/after.json @@ -0,0 +1,42 @@ +{ + "rougail.owner": { + "owner": "default", + "value": "example" + }, + "rougail.group": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.group": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.owner": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate_owner_variable/makedict/base.json b/tests/dictionaries/01base_certificate_owner_variable/makedict/base.json new file mode 100644 index 000000000..cf539a159 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/makedict/base.json @@ -0,0 +1,12 @@ +{ + "rougail.owner": "example", + "rougail.group": "example", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": "/etc/pki/ca-trust/source/anchors/ca_example.crt", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.group": "example", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": "/etc/pki/tls/certs/example.crt", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.owner": "example", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": "/etc/pki/tls/private/example.key", + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": true, + "services.test_service.activate": true, + "services.test_service.manage": true +} diff --git a/tests/dictionaries/01base_certificate_owner_variable/makedict/before.json b/tests/dictionaries/01base_certificate_owner_variable/makedict/before.json new file mode 100644 index 000000000..ab27ebd51 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/makedict/before.json @@ -0,0 +1,42 @@ +{ + "rougail.owner": { + "owner": "default", + "value": "example" + }, + "rougail.group": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.group": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.owner": { + "owner": "default", + "value": "example" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates./etc/pki/tls/certs/example_crt.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate_owner_variable/tiramisu/base.py b/tests/dictionaries/01base_certificate_owner_variable/tiramisu/base.py new file mode 100644 index 000000000..2bd4fddaf --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/tiramisu/base.py @@ -0,0 +1,37 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_1 = UsernameOption(name="owner", doc="owner", default="example", properties=frozenset({"mandatory", "normal"})) +option_2 = UsernameOption(name="group", doc="group", default="example", properties=frozenset({"mandatory", "normal"})) +optiondescription_13 = OptionDescription(name="rougail", doc="Rougail", children=[option_1, option_2]) +option_7 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_8 = SymLinkOption(name="group", opt=option_2) +option_9 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_10 = SymLinkOption(name="owner", opt=option_1) +option_11 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_6 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_5 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_7, option_8, option_9, option_10, option_11, option_6]) +optiondescription_4 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_5]) +option_3 = BoolOption(name="activate", doc="activate", default=True) +option_12 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_15 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_4, option_3, option_12]) +optiondescription_15.impl_set_information('type', "service") +optiondescription_14 = OptionDescription(name="services", doc="services", children=[optiondescription_15], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_13, optiondescription_14]) diff --git a/tests/dictionaries/01base_certificate_owner_variable/tiramisu/multi.py b/tests/dictionaries/01base_certificate_owner_variable/tiramisu/multi.py new file mode 100644 index 000000000..94725228d --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/tiramisu/multi.py @@ -0,0 +1,55 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_1 = UsernameOption(name="owner", doc="owner", default="example", properties=frozenset({"mandatory", "normal"})) +option_2 = UsernameOption(name="group", doc="group", default="example", properties=frozenset({"mandatory", "normal"})) +optiondescription_26 = OptionDescription(name="rougail", doc="Rougail", children=[option_1, option_2]) +option_9 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_10 = SymLinkOption(name="group", opt=option_2) +option_11 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_12 = SymLinkOption(name="owner", opt=option_1) +option_13 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_8 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_7 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_9, option_10, option_11, option_12, option_13, option_8]) +optiondescription_6 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_7]) +option_5 = BoolOption(name="activate", doc="activate", default=True) +option_14 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_28 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_6, option_5, option_14]) +optiondescription_28.impl_set_information('type', "service") +optiondescription_27 = OptionDescription(name="services", doc="services", children=[optiondescription_28], properties=frozenset({"hidden"})) +optiondescription_25 = OptionDescription(name="1", doc="1", children=[optiondescription_26, optiondescription_27]) +option_3 = UsernameOption(name="owner", doc="owner", default="example", properties=frozenset({"mandatory", "normal"})) +option_4 = UsernameOption(name="group", doc="group", default="example", properties=frozenset({"mandatory", "normal"})) +optiondescription_30 = OptionDescription(name="rougail", doc="Rougail", children=[option_3, option_4]) +option_19 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt") +option_20 = SymLinkOption(name="group", opt=option_4) +option_21 = FilenameOption(name="name", doc="name", default="/etc/pki/tls/certs/example.crt") +option_22 = SymLinkOption(name="owner", opt=option_3) +option_23 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key") +option_18 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_17 = OptionDescription(name="/etc/pki/tls/certs/example_crt", doc="/etc/pki/tls/certs/example.crt", children=[option_19, option_20, option_21, option_22, option_23, option_18]) +optiondescription_16 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_17]) +option_15 = BoolOption(name="activate", doc="activate", default=True) +option_24 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_32 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_16, option_15, option_24]) +optiondescription_32.impl_set_information('type', "service") +optiondescription_31 = OptionDescription(name="services", doc="services", children=[optiondescription_32], properties=frozenset({"hidden"})) +optiondescription_29 = OptionDescription(name="2", doc="2", children=[optiondescription_30, optiondescription_31]) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_25, optiondescription_29]) diff --git a/tests/dictionaries/01base_certificate_owner_variable/xml/00-base.xml b/tests/dictionaries/01base_certificate_owner_variable/xml/00-base.xml new file mode 100644 index 000000000..53ea98215 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/xml/00-base.xml @@ -0,0 +1,16 @@ + + + + + /etc/pki/tls/certs/example.crt + + + + + example + + + example + + + diff --git a/tests/dictionaries/01base_certificate_owner_variable/yml/00-base.yml b/tests/dictionaries/01base_certificate_owner_variable/yml/00-base.yml new file mode 100644 index 000000000..282027c83 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable/yml/00-base.yml @@ -0,0 +1,22 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /etc/pki/tls/private/example.key + authority: /etc/pki/ca-trust/source/anchors/ca_example.crt + owner: owner + owner_type: variable + group: group + group_type: variable + text: /etc/pki/tls/certs/example.crt +variables: +- variable: + - name: owner + type: unix_user + value: + - text: example + - name: group + type: unix_user + value: + - text: example diff --git a/tests/dictionaries/01base_certificate_owner_variable_wrong/__init__.py b/tests/dictionaries/01base_certificate_owner_variable_wrong/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_owner_variable_wrong/errno_58 b/tests/dictionaries/01base_certificate_owner_variable_wrong/errno_58 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_owner_variable_wrong/xml/00-base.xml b/tests/dictionaries/01base_certificate_owner_variable_wrong/xml/00-base.xml new file mode 100644 index 000000000..0a09eb03f --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable_wrong/xml/00-base.xml @@ -0,0 +1,16 @@ + + + + + /etc/pki/tls/certs/example.crt + + + + + example + + + example + + + diff --git a/tests/dictionaries/01base_certificate_owner_variable_wrong/yml/00-base.yml b/tests/dictionaries/01base_certificate_owner_variable_wrong/yml/00-base.yml new file mode 100644 index 000000000..8e2114cd3 --- /dev/null +++ b/tests/dictionaries/01base_certificate_owner_variable_wrong/yml/00-base.yml @@ -0,0 +1,21 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /etc/pki/tls/private/example.key + authority: /etc/pki/ca-trust/source/anchors/ca_example.crt + owner: owner + owner_type: variable + group: group + group_type: variable + text: /etc/pki/tls/certs/example.crt +variables: +- variable: + - name: owner + value: + - text: example + - name: group + type: unix_user + value: + - text: example diff --git a/tests/dictionaries/01base_certificate_variable/__init__.py b/tests/dictionaries/01base_certificate_variable/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_certificate_variable/makedict/after.json b/tests/dictionaries/01base_certificate_variable/makedict/after.json new file mode 100644 index 000000000..1d7cca464 --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/makedict/after.json @@ -0,0 +1,38 @@ +{ + "rougail.certificate": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "rougail.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "rougail.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates.certificate.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates.certificate.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates.certificate.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates.certificate.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate_variable/makedict/base.json b/tests/dictionaries/01base_certificate_variable/makedict/base.json new file mode 100644 index 000000000..a4c8a74eb --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/makedict/base.json @@ -0,0 +1,11 @@ +{ + "rougail.certificate": "/etc/pki/tls/certs/example.crt", + "rougail.private": "/etc/pki/tls/private/example.key", + "rougail.authority": "/etc/pki/ca-trust/source/anchors/ca_example.crt", + "services.test_service.certificates.certificate.authority": "/etc/pki/ca-trust/source/anchors/ca_example.crt", + "services.test_service.certificates.certificate.name": "/etc/pki/tls/certs/example.crt", + "services.test_service.certificates.certificate.private": "/etc/pki/tls/private/example.key", + "services.test_service.certificates.certificate.activate": true, + "services.test_service.activate": true, + "services.test_service.manage": true +} diff --git a/tests/dictionaries/01base_certificate_variable/makedict/before.json b/tests/dictionaries/01base_certificate_variable/makedict/before.json new file mode 100644 index 000000000..1d7cca464 --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/makedict/before.json @@ -0,0 +1,38 @@ +{ + "rougail.certificate": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "rougail.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "rougail.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates.certificate.authority": { + "owner": "default", + "value": "/etc/pki/ca-trust/source/anchors/ca_example.crt" + }, + "services.test_service.certificates.certificate.name": { + "owner": "default", + "value": "/etc/pki/tls/certs/example.crt" + }, + "services.test_service.certificates.certificate.private": { + "owner": "default", + "value": "/etc/pki/tls/private/example.key" + }, + "services.test_service.certificates.certificate.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_certificate_variable/tiramisu/base.py b/tests/dictionaries/01base_certificate_variable/tiramisu/base.py new file mode 100644 index 000000000..48117d63a --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/tiramisu/base.py @@ -0,0 +1,36 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_1 = FilenameOption(name="certificate", doc="certificate", default="/etc/pki/tls/certs/example.crt", properties=frozenset({"mandatory", "normal"})) +option_2 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key", properties=frozenset({"mandatory", "normal"})) +option_3 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt", properties=frozenset({"mandatory", "normal"})) +optiondescription_12 = OptionDescription(name="rougail", doc="Rougail", children=[option_1, option_2, option_3]) +option_8 = SymLinkOption(name="authority", opt=option_3) +option_9 = SymLinkOption(name="name", opt=option_1) +option_10 = SymLinkOption(name="private", opt=option_2) +option_7 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_6 = OptionDescription(name="certificate", doc="certificate", children=[option_8, option_9, option_10, option_7]) +optiondescription_5 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_6]) +option_4 = BoolOption(name="activate", doc="activate", default=True) +option_11 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_14 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_5, option_4, option_11]) +optiondescription_14.impl_set_information('type', "service") +optiondescription_13 = OptionDescription(name="services", doc="services", children=[optiondescription_14], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_12, optiondescription_13]) diff --git a/tests/dictionaries/01base_certificate_variable/tiramisu/multi.py b/tests/dictionaries/01base_certificate_variable/tiramisu/multi.py new file mode 100644 index 000000000..7834fd585 --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/tiramisu/multi.py @@ -0,0 +1,53 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_1 = FilenameOption(name="certificate", doc="certificate", default="/etc/pki/tls/certs/example.crt", properties=frozenset({"mandatory", "normal"})) +option_2 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key", properties=frozenset({"mandatory", "normal"})) +option_3 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt", properties=frozenset({"mandatory", "normal"})) +optiondescription_24 = OptionDescription(name="rougail", doc="Rougail", children=[option_1, option_2, option_3]) +option_11 = SymLinkOption(name="authority", opt=option_3) +option_12 = SymLinkOption(name="name", opt=option_1) +option_13 = SymLinkOption(name="private", opt=option_2) +option_10 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_9 = OptionDescription(name="certificate", doc="certificate", children=[option_11, option_12, option_13, option_10]) +optiondescription_8 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_9]) +option_7 = BoolOption(name="activate", doc="activate", default=True) +option_14 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_26 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_8, option_7, option_14]) +optiondescription_26.impl_set_information('type', "service") +optiondescription_25 = OptionDescription(name="services", doc="services", children=[optiondescription_26], properties=frozenset({"hidden"})) +optiondescription_23 = OptionDescription(name="1", doc="1", children=[optiondescription_24, optiondescription_25]) +option_4 = FilenameOption(name="certificate", doc="certificate", default="/etc/pki/tls/certs/example.crt", properties=frozenset({"mandatory", "normal"})) +option_5 = FilenameOption(name="private", doc="private", default="/etc/pki/tls/private/example.key", properties=frozenset({"mandatory", "normal"})) +option_6 = FilenameOption(name="authority", doc="authority", default="/etc/pki/ca-trust/source/anchors/ca_example.crt", properties=frozenset({"mandatory", "normal"})) +optiondescription_28 = OptionDescription(name="rougail", doc="Rougail", children=[option_4, option_5, option_6]) +option_19 = SymLinkOption(name="authority", opt=option_6) +option_20 = SymLinkOption(name="name", opt=option_4) +option_21 = SymLinkOption(name="private", opt=option_5) +option_18 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_17 = OptionDescription(name="certificate", doc="certificate", children=[option_19, option_20, option_21, option_18]) +optiondescription_16 = OptionDescription(name="certificates", doc="certificates", children=[optiondescription_17]) +option_15 = BoolOption(name="activate", doc="activate", default=True) +option_22 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_30 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_16, option_15, option_22]) +optiondescription_30.impl_set_information('type', "service") +optiondescription_29 = OptionDescription(name="services", doc="services", children=[optiondescription_30], properties=frozenset({"hidden"})) +optiondescription_27 = OptionDescription(name="2", doc="2", children=[optiondescription_28, optiondescription_29]) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_23, optiondescription_27]) diff --git a/tests/dictionaries/01base_certificate_variable/xml/00-base.xml b/tests/dictionaries/01base_certificate_variable/xml/00-base.xml new file mode 100644 index 000000000..c86ae46b0 --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/xml/00-base.xml @@ -0,0 +1,19 @@ + + + + + certificate + + + + + /etc/pki/tls/certs/example.crt + + + /etc/pki/tls/private/example.key + + + /etc/pki/ca-trust/source/anchors/ca_example.crt + + + diff --git a/tests/dictionaries/01base_certificate_variable/yml/00-base.yml b/tests/dictionaries/01base_certificate_variable/yml/00-base.yml new file mode 100644 index 000000000..1f56ab46c --- /dev/null +++ b/tests/dictionaries/01base_certificate_variable/yml/00-base.yml @@ -0,0 +1,25 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: private + private_type: variable + authority: authority + authority_type: variable + certificate_type: variable + text: certificate +variables: +- variable: + - name: certificate + type: filename + value: + - text: /etc/pki/tls/certs/example.crt + - name: private + type: filename + value: + - text: /etc/pki/tls/private/example.key + - name: authority + type: filename + value: + - text: /etc/pki/ca-trust/source/anchors/ca_example.crt diff --git a/tests/dictionaries/01base_file_mode/__init__.py b/tests/dictionaries/01base_file_mode/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/01base_file_mode/makedict/after.json b/tests/dictionaries/01base_file_mode/makedict/after.json new file mode 100644 index 000000000..05af219b0 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/makedict/after.json @@ -0,0 +1,22 @@ +{ + "services.test_service.files.file.name": { + "owner": "default", + "value": "/etc/file" + }, + "services.test_service.files.file.source": { + "owner": "default", + "value": "file" + }, + "services.test_service.files.file.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_file_mode/makedict/base.json b/tests/dictionaries/01base_file_mode/makedict/base.json new file mode 100644 index 000000000..2296bda68 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/makedict/base.json @@ -0,0 +1,7 @@ +{ + "services.test_service.files.file.name": "/etc/file", + "services.test_service.files.file.source": "file", + "services.test_service.files.file.activate": true, + "services.test_service.activate": true, + "services.test_service.manage": true +} diff --git a/tests/dictionaries/01base_file_mode/makedict/before.json b/tests/dictionaries/01base_file_mode/makedict/before.json new file mode 100644 index 000000000..05af219b0 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/makedict/before.json @@ -0,0 +1,22 @@ +{ + "services.test_service.files.file.name": { + "owner": "default", + "value": "/etc/file" + }, + "services.test_service.files.file.source": { + "owner": "default", + "value": "file" + }, + "services.test_service.files.file.activate": { + "owner": "default", + "value": true + }, + "services.test_service.activate": { + "owner": "default", + "value": true + }, + "services.test_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/01base_file_mode/result/etc/file b/tests/dictionaries/01base_file_mode/result/etc/file new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/result/etc/file @@ -0,0 +1 @@ +test diff --git a/tests/dictionaries/01base_file_mode/result/tmpfiles.d/0rougail.conf b/tests/dictionaries/01base_file_mode/result/tmpfiles.d/0rougail.conf new file mode 100644 index 000000000..f397d988d --- /dev/null +++ b/tests/dictionaries/01base_file_mode/result/tmpfiles.d/0rougail.conf @@ -0,0 +1 @@ +C /etc/file 0755 root root - /usr/local/lib/etc/file diff --git a/tests/dictionaries/01base_file_mode/tiramisu/base.py b/tests/dictionaries/01base_file_mode/tiramisu/base.py new file mode 100644 index 000000000..c017f3881 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/tiramisu/base.py @@ -0,0 +1,32 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_5 = FilenameOption(name="name", doc="name", default="/etc/file") +option_6 = StrOption(name="source", doc="source", default="file") +option_4 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_3 = OptionDescription(name="file", doc="file", children=[option_5, option_6, option_4]) +optiondescription_3.impl_set_information('mode', 755) +optiondescription_2 = OptionDescription(name="files", doc="files", children=[optiondescription_3]) +option_1 = BoolOption(name="activate", doc="activate", default=True) +option_7 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_9 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_2, option_1, option_7]) +optiondescription_9.impl_set_information('type', "service") +optiondescription_8 = OptionDescription(name="services", doc="services", children=[optiondescription_9], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_8]) diff --git a/tests/dictionaries/01base_file_mode/tiramisu/multi.py b/tests/dictionaries/01base_file_mode/tiramisu/multi.py new file mode 100644 index 000000000..ba5749785 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/tiramisu/multi.py @@ -0,0 +1,45 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass + +def _load_functions(path): + global _SourceFileLoader, _spec_from_loader, _module_from_spec, func + loader = _SourceFileLoader('func', path) + spec = _spec_from_loader(loader.name, loader) + func_ = _module_from_spec(spec) + loader.exec_module(func_) + for function in dir(func_): + if function.startswith('_'): + continue + setattr(func, function, getattr(func_, function)) +_load_functions('tests/dictionaries/../eosfunc/test.py') +try: + from tiramisu3 import * +except: + from tiramisu import * +option_5 = FilenameOption(name="name", doc="name", default="/etc/file") +option_6 = StrOption(name="source", doc="source", default="file") +option_4 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_3 = OptionDescription(name="file", doc="file", children=[option_5, option_6, option_4]) +optiondescription_3.impl_set_information('mode', 755) +optiondescription_2 = OptionDescription(name="files", doc="files", children=[optiondescription_3]) +option_1 = BoolOption(name="activate", doc="activate", default=True) +option_7 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_17 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_2, option_1, option_7]) +optiondescription_17.impl_set_information('type', "service") +optiondescription_16 = OptionDescription(name="services", doc="services", children=[optiondescription_17], properties=frozenset({"hidden"})) +optiondescription_15 = OptionDescription(name="1", doc="1", children=[optiondescription_16]) +option_12 = FilenameOption(name="name", doc="name", default="/etc/file") +option_13 = StrOption(name="source", doc="source", default="file") +option_11 = BoolOption(name="activate", doc="activate", default=True) +optiondescription_10 = OptionDescription(name="file", doc="file", children=[option_12, option_13, option_11]) +optiondescription_10.impl_set_information('mode', 755) +optiondescription_9 = OptionDescription(name="files", doc="files", children=[optiondescription_10]) +option_8 = BoolOption(name="activate", doc="activate", default=True) +option_14 = BoolOption(name="manage", doc="manage", default=True) +optiondescription_20 = OptionDescription(name="test_service", doc="test.service", children=[optiondescription_9, option_8, option_14]) +optiondescription_20.impl_set_information('type', "service") +optiondescription_19 = OptionDescription(name="services", doc="services", children=[optiondescription_20], properties=frozenset({"hidden"})) +optiondescription_18 = OptionDescription(name="2", doc="2", children=[optiondescription_19]) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_15, optiondescription_18]) diff --git a/tests/dictionaries/01base_file_mode/tmpl/file b/tests/dictionaries/01base_file_mode/tmpl/file new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/tmpl/file @@ -0,0 +1 @@ +test diff --git a/tests/dictionaries/01base_file_mode/xml/00-base.xml b/tests/dictionaries/01base_file_mode/xml/00-base.xml new file mode 100644 index 000000000..eeb2f1a04 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + /etc/file + + + diff --git a/tests/dictionaries/01base_file_mode/yml/00-base.yml b/tests/dictionaries/01base_file_mode/yml/00-base.yml new file mode 100644 index 000000000..6039dad21 --- /dev/null +++ b/tests/dictionaries/01base_file_mode/yml/00-base.yml @@ -0,0 +1,7 @@ +version: '0.10' +services: +- service: + - name: test + file: + - mode: 755 + text: /etc/file diff --git a/tests/dictionaries/70container_files/tmpl/rougail.conf b/tests/dictionaries/70container_files/tmpl/rougail.conf index cd853a0e9..b023342ea 100644 --- a/tests/dictionaries/70container_files/tmpl/rougail.conf +++ b/tests/dictionaries/70container_files/tmpl/rougail.conf @@ -2,7 +2,7 @@ %if %%hasattr(%%service, 'files') %for %%file in %%service.files %if %%file.name != %%rougail_filename and %%hasattr(%%file, 'activate') and %%file.activate == True -C %%file.name %%file.mode %%file.owner %%file.group - /usr/local/share/factory%%file.name +C %%file.name 0%%file.mode %%file.owner %%file.group - /usr/local/share/factory%%file.name z %%file.name - - - - - %end if %end for diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority/__init__.py b/tests/dictionaries/80base_certificate_wrong_value_authority/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority/errno_96 b/tests/dictionaries/80base_certificate_wrong_value_authority/errno_96 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority/xml/00-base.xml b/tests/dictionaries/80base_certificate_wrong_value_authority/xml/00-base.xml new file mode 100644 index 000000000..bfb3a45af --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_authority/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + /example.crt + + + diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority/yml/00-base.yml b/tests/dictionaries/80base_certificate_wrong_value_authority/yml/00-base.yml new file mode 100644 index 000000000..1704b0baa --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_authority/yml/00-base.yml @@ -0,0 +1,8 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /example.key + authority: ca_example.crt + text: /example.crt diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority_variable/__init__.py b/tests/dictionaries/80base_certificate_wrong_value_authority_variable/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority_variable/errno_92 b/tests/dictionaries/80base_certificate_wrong_value_authority_variable/errno_92 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority_variable/xml/00-base.xml b/tests/dictionaries/80base_certificate_wrong_value_authority_variable/xml/00-base.xml new file mode 100644 index 000000000..ba87bb642 --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_authority_variable/xml/00-base.xml @@ -0,0 +1,19 @@ + + + + + certificate + + + + + /etc/pki/tls/certs/example.crt + + + /etc/pki/tls/private/example.key + + + /etc/pki/ca-trust/source/anchors/ca_example.crt + + + diff --git a/tests/dictionaries/80base_certificate_wrong_value_authority_variable/yml/00-base.yml b/tests/dictionaries/80base_certificate_wrong_value_authority_variable/yml/00-base.yml new file mode 100644 index 000000000..8f7f4c35f --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_authority_variable/yml/00-base.yml @@ -0,0 +1,24 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: private + private_type: variable + authority: authority + authority_type: variable + certificate_type: variable + text: certificate +variables: +- variable: + - name: certificate + type: filename + value: + - text: /etc/pki/tls/certs/example.crt + - name: private + type: filename + value: + - text: /etc/pki/tls/private/example.key + - name: authority + value: + - text: /etc/pki/ca-trust/source/anchors/ca_example.crt diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate/__init__.py b/tests/dictionaries/80base_certificate_wrong_value_certificate/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate/errno_94 b/tests/dictionaries/80base_certificate_wrong_value_certificate/errno_94 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate/xml/00-base.xml b/tests/dictionaries/80base_certificate_wrong_value_certificate/xml/00-base.xml new file mode 100644 index 000000000..d8f5282d0 --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_certificate/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + example.crt + + + diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate/yml/00-base.yml b/tests/dictionaries/80base_certificate_wrong_value_certificate/yml/00-base.yml new file mode 100644 index 000000000..f4e92cf3e --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_certificate/yml/00-base.yml @@ -0,0 +1,8 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: /example.key + authority: /ca_example.crt + text: example.crt diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/__init__.py b/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/errno_90 b/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/errno_90 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/xml/00-base.xml b/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/xml/00-base.xml new file mode 100644 index 000000000..e5bb581b5 --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/xml/00-base.xml @@ -0,0 +1,19 @@ + + + + + certificate + + + + + /etc/pki/tls/certs/example.crt + + + /etc/pki/tls/private/example.key + + + /etc/pki/ca-trust/source/anchors/ca_example.crt + + + diff --git a/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/yml/00-base.yml b/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/yml/00-base.yml new file mode 100644 index 000000000..239d96c7a --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_certificate_variable/yml/00-base.yml @@ -0,0 +1,24 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: private + private_type: variable + authority: authority + authority_type: variable + certificate_type: variable + text: certificate +variables: +- variable: + - name: certificate + value: + - text: /etc/pki/tls/certs/example.crt + - name: private + type: filename + value: + - text: /etc/pki/tls/private/example.key + - name: authority + type: filename + value: + - text: /etc/pki/ca-trust/source/anchors/ca_example.crt diff --git a/tests/dictionaries/80base_certificate_wrong_value_private/__init__.py b/tests/dictionaries/80base_certificate_wrong_value_private/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_private/errno_95 b/tests/dictionaries/80base_certificate_wrong_value_private/errno_95 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_private/xml/00-base.xml b/tests/dictionaries/80base_certificate_wrong_value_private/xml/00-base.xml new file mode 100644 index 000000000..e6ab2d2df --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_private/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + /example.crt + + + diff --git a/tests/dictionaries/80base_certificate_wrong_value_private/yml/00-base.yml b/tests/dictionaries/80base_certificate_wrong_value_private/yml/00-base.yml new file mode 100644 index 000000000..c3327727a --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_private/yml/00-base.yml @@ -0,0 +1,8 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: example.key + authority: /ca_example.crt + text: /example.crt diff --git a/tests/dictionaries/80base_certificate_wrong_value_private_variable/__init__.py b/tests/dictionaries/80base_certificate_wrong_value_private_variable/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_private_variable/errno_91 b/tests/dictionaries/80base_certificate_wrong_value_private_variable/errno_91 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_certificate_wrong_value_private_variable/xml/00-base.xml b/tests/dictionaries/80base_certificate_wrong_value_private_variable/xml/00-base.xml new file mode 100644 index 000000000..3caea9ee2 --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_private_variable/xml/00-base.xml @@ -0,0 +1,19 @@ + + + + + certificate + + + + + /etc/pki/tls/certs/example.crt + + + /etc/pki/tls/private/example.key + + + /etc/pki/ca-trust/source/anchors/ca_example.crt + + + diff --git a/tests/dictionaries/80base_certificate_wrong_value_private_variable/yml/00-base.yml b/tests/dictionaries/80base_certificate_wrong_value_private_variable/yml/00-base.yml new file mode 100644 index 000000000..424d8248f --- /dev/null +++ b/tests/dictionaries/80base_certificate_wrong_value_private_variable/yml/00-base.yml @@ -0,0 +1,24 @@ +version: '0.10' +services: +- service: + - name: test + certificate: + - private: private + private_type: variable + authority: authority + authority_type: variable + certificate_type: variable + text: certificate +variables: +- variable: + - name: certificate + type: filename + value: + - text: /etc/pki/tls/certs/example.crt + - name: private + value: + - text: /etc/pki/tls/private/example.key + - name: authority + type: filename + value: + - text: /etc/pki/ca-trust/source/anchors/ca_example.crt diff --git a/tests/dictionaries/80base_file_mode_wrong_type/__init__.py b/tests/dictionaries/80base_file_mode_wrong_type/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_file_mode_wrong_type/errno_43 b/tests/dictionaries/80base_file_mode_wrong_type/errno_43 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_file_mode_wrong_type/errno_93 b/tests/dictionaries/80base_file_mode_wrong_type/errno_93 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80base_file_mode_wrong_type/xml/00-base.xml b/tests/dictionaries/80base_file_mode_wrong_type/xml/00-base.xml new file mode 100644 index 000000000..57b9e7339 --- /dev/null +++ b/tests/dictionaries/80base_file_mode_wrong_type/xml/00-base.xml @@ -0,0 +1,8 @@ + + + + + /etc/file + + + diff --git a/tests/dictionaries/80base_file_mode_wrong_type/yml/00-base.yml b/tests/dictionaries/80base_file_mode_wrong_type/yml/00-base.yml new file mode 100644 index 000000000..6cf06f91e --- /dev/null +++ b/tests/dictionaries/80base_file_mode_wrong_type/yml/00-base.yml @@ -0,0 +1,7 @@ +version: '0.10' +services: +- service: + - name: test + file: + - mode: "wrong_mode" + text: /etc/file diff --git a/tests/dictionaries/80file_group_wrong_type/__init__.py b/tests/dictionaries/80file_group_wrong_type/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80file_group_wrong_type/errno_58 b/tests/dictionaries/80file_group_wrong_type/errno_58 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80file_group_wrong_type/xml/00-base.xml b/tests/dictionaries/80file_group_wrong_type/xml/00-base.xml new file mode 100644 index 000000000..93210b284 --- /dev/null +++ b/tests/dictionaries/80file_group_wrong_type/xml/00-base.xml @@ -0,0 +1,13 @@ + + + + + /etc/file + + + + + nobody + + + diff --git a/tests/dictionaries/80file_group_wrong_type/yml/00-base.yml b/tests/dictionaries/80file_group_wrong_type/yml/00-base.yml new file mode 100644 index 000000000..f0a5162b0 --- /dev/null +++ b/tests/dictionaries/80file_group_wrong_type/yml/00-base.yml @@ -0,0 +1,14 @@ +version: '0.10' +services: +- service: + - name: test + file: + - group_type: variable + group: group + text: /etc/file +variables: +- variable: + - name: group + type: string + value: + - text: nobody diff --git a/tests/dictionaries/80file_owner_wrong_type/__init__.py b/tests/dictionaries/80file_owner_wrong_type/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80file_owner_wrong_type/errno_58 b/tests/dictionaries/80file_owner_wrong_type/errno_58 new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/80file_owner_wrong_type/xml/00-base.xml b/tests/dictionaries/80file_owner_wrong_type/xml/00-base.xml new file mode 100644 index 000000000..6bce4260c --- /dev/null +++ b/tests/dictionaries/80file_owner_wrong_type/xml/00-base.xml @@ -0,0 +1,15 @@ + + + + + /etc/file + + + + + + nobody + + + + diff --git a/tests/dictionaries/80file_owner_wrong_type/yml/00-base.yml b/tests/dictionaries/80file_owner_wrong_type/yml/00-base.yml new file mode 100644 index 000000000..2b0a52d53 --- /dev/null +++ b/tests/dictionaries/80file_owner_wrong_type/yml/00-base.yml @@ -0,0 +1,17 @@ +version: '0.10' +services: +- service: + - name: test + file: + - owner_type: variable + owner: owner + text: /etc/file +variables: +- family: + - name: general + variables: + - variable: + - name: owner + type: string + value: + - text: nobody diff --git a/tests/test_1_flattener.py b/tests/test_1_flattener.py index 6bed1ffb8..0edcda80f 100644 --- a/tests/test_1_flattener.py +++ b/tests/test_1_flattener.py @@ -35,7 +35,7 @@ excludes = set([]) #excludes = set(['45multi_family_order']) test_ok -= excludes test_raise -= excludes -#test_ok = ['01base_multi_notuniq'] +#test_ok = ['01base_file_mode'] #test_ok = [] #test_raise = ['80auto_autofreeze'] #test_raise = [] @@ -264,20 +264,18 @@ def test_error_dictionary(test_dir_error): ext, test_dir = test_dir_error assert getcwd() == ORI_DIR test_dir = join(dico_dirs, test_dir) - errno = 0 + errno = [] eolobj = load_rougail_object(test_dir, ext) if eolobj is None: return for i in listdir(test_dir): if i.startswith('errno_'): - if errno: - raise Exception('multiple errno') - errno = int(i.split('_')[1]) + errno.append(int(i.split('_')[1])) + if not errno: + errno.append(0) with raises(DictConsistencyError) as err: launch_flattener(eolobj) save(test_dir, eolobj) - if err.value.errno != errno: - print(f'expected errno: {errno}, errno: {err.value.errno}') - launch_flattener(eolobj) - save(test_dir, eolobj) + msg = str(err) + assert err.value.errno in errno, f'expected errno: {errno}, errno: {err.value.errno}, msg: {err}' assert getcwd() == ORI_DIR diff --git a/tests/test_3_template.py b/tests/test_3_template.py index b53bc8ff9..1e44e1e57 100644 --- a/tests/test_3_template.py +++ b/tests/test_3_template.py @@ -17,7 +17,7 @@ test_ok = {f for f in listdir(template_dirs) if not f.startswith('_') and isdir( test_ok -= excludes test_ok = list(test_ok) test_ok.sort() -#test_ok = ['70service_servicelist_file'] +#test_ok = ['70container_files'] @fixture(scope="module", params=test_ok) diff --git a/tests/test_others.py b/tests/test_others.py index b86d0aada..36a0fce69 100644 --- a/tests/test_others.py +++ b/tests/test_others.py @@ -27,6 +27,8 @@ def parse_dtd_subelement(obj_name, content, default_required=False): if content.occur == 'once': if content.right and content.right.name: yield {'name': content.right.name, 'type': None, 'required': default_required} + else: + yield from parse_dtd_subelement(obj_name, content.right, default_required=False) elif content.occur == 'mult': yield from parse_dtd_subelement(obj_name, content.right, default_required=False) elif content.occur == 'plus': @@ -72,17 +74,21 @@ def parse_dtd(elt_name, elts, space=0): schema += " " * subspace + 'type: ' + subelt['type'] + "\n" if subelt['name'] != 'family' or subspace < 26: schema += parse_dtd(subelt['name'], elts, subspace) - for dtd_attr in elt['elt'].iterattributes(): - schema += " " * space + dtd_attr.name + ':\n' + attributes = {attr.name: attr for attr in elt['elt'].iterattributes()} + for name, dtd_attr in attributes.items(): enum = list(dtd_attr.itervalues()) - type_ = 'str' if set(enum) == {'True', 'False'} or set(enum) == {'True', 'False', 'nil'}: # it's a boolean type_ = 'bool' + elif enum == ['number']: + continue + elif f'{name}_type' in attributes and list(attributes[f'{name}_type'].itervalues()) == ['number']: + type_ = 'int' else: type_ = 'str' + schema += " " * space + name + ':\n' subspace = space + 2 - schema += " " * subspace + "type: " + type_ + '\n' + schema += " " * subspace + "type: " + type_ + '\n' if type_ != 'bool' and enum: enumspace = subspace + 2 schema += " " * subspace + 'enum:\n'