From a0db661f6d848bdf741c5880710aff38a20d2c2b Mon Sep 17 00:00:00 2001 From: Frode Nordahl Date: Tue, 22 Oct 2024 18:10:11 +0200 Subject: [PATCH] Add test config grammar for per app overlay ppa. In some circumstances we want to install packages from overlay PPA on specific applications and not across the whole model. Add configuration grammar, actual implementation of generic setup step will follow in subsequent patch. Signed-off-by: Frode Nordahl --- zaza/utilities/deployment_env.py | 34 +++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/zaza/utilities/deployment_env.py b/zaza/utilities/deployment_env.py index a9750193..e20f9f3e 100644 --- a/zaza/utilities/deployment_env.py +++ b/zaza/utilities/deployment_env.py @@ -85,7 +85,7 @@ def parse_option_list_string(option_list, delimiter=None): return settings -def get_overlay_ppas(model_alias='default_alias'): +def get_overlay_ppas(model_alias='default_alias', application=None): """Get overlay_ppas from global_config. In the config file for the tests, the tests_options.overlay_ppa option @@ -97,17 +97,25 @@ def get_overlay_ppas(model_alias='default_alias'): :param model_alias: Name of model alias, defaults to 'default_alias'. :type model_alias: Option[str] + :param application: Name of application to retrieve config for. + :type application: Option[str] :returns: List of overlay PPAs. :rtype: Option[List[Any]] """ config = zaza.global_options.get_options() + config_overlay_ppas = None try: - return config[model_alias].overlay_ppas + config_overlay_ppas = config[model_alias].overlay_ppas except KeyError: try: - return config.overlay_ppas + config_overlay_ppas = config.overlay_ppas except KeyError: pass + if config_overlay_ppas and application: + return [overlay_ppa + for overlay_ppa in config_overlay_ppas + if (isinstance(overlay_ppa, dict) and + application in overlay_ppa)] or None return None @@ -144,6 +152,26 @@ def _parse_overlay_ppa_v2(overlay_ppa): 'key': overlay_ppa['key']} +def _parse_overlay_ppa_v3(overlay_ppa): + """Parse per application overlay_ppa config. + + Example YAML excerpt: + overlay_ppas: + application_name: + - ppa:ubuntu-security-proposed/ppa + other_application_name: + - source: "deb https://user:pass@private-ppa.launchpad" + key: | + -----BEGIN PGP PUBLIC KEY BLOCK----- + .... + -----END PGP PUBLIC KEY BLOCK----- + :param overlay_ppa: Element of overlay_ppas configuration. + :type overlay_ppa: Dict[str,List[Any]] + :returns + """ + # {'application': ['plain', {'source': 'fakesource', 'key': 'fakekey'}]} + + def parse_overlay_ppa(overlay_ppa): """Parse multiple versions of overlay_ppas elements.