Convert the old cnfvar module into a cnfvar string parsing module
[pyi2ncommon] / src / arnied_wrapper.py
index af6acc0..8c2d5d5 100644 (file)
@@ -58,7 +58,6 @@ import tempfile
 import logging
 log = logging.getLogger('pyi2ncommon.arnied_wrapper')
 
-from . import cnfvar_old
 from . import sysmisc
 
 
@@ -462,84 +461,6 @@ def get_cnf_id(cnf_key, value, timeout=30, vm=None):
     return cnf_id
 
 
-def get_cnfvar(varname=None, instance=None, data=None, timeout=30, vm=None):
-    """
-    Invoke get_cnf and return a nested CNF structure.
-
-    :param str varname: "varname" field of the CNF_VAR to look up
-    :param instance: "instance" of that variable to return
-    :type instance: int
-    :param str data: "data" field by which the resulting CNF_VAR list should be filtered
-    :param int timeout: arnied run verification timeout
-    :param vm: vm to run on if running on a guest instead of the host
-    :type vm: :py:class:`virttest.qemu_vm.VM` or None
-    :returns: the resulting "cnfvar" structure or None if the lookup fails or the result could not be parsed
-    :rtype: cnfvar option
-    """
-    wait_for_arnied(timeout=timeout, vm=vm)
-    # firstly, build argv for get_cnf
-    cmd = ["get_cnf", "-j"]
-    if varname is not None:
-        cmd.append("%s" % varname)
-        if instance:
-            cmd.append("%d" % instance)
-    cmd_line = " ".join(cmd)
-
-    # now invoke get_cnf
-    result = run_cmd(cmd=cmd_line, vm=vm)
-    (status, raw) = result.returncode, result.stdout
-    if status != 0:
-        log.info("error %d executing \"%s\"", status, cmd_line)
-        log.debug(raw)
-        return None
-
-    # reading was successful, attempt to parse what we got
-    try:
-        # The output from "get_cnf -j" is already utf-8. This contrast with
-        # the output of "get_cnf" (no json) which is latin1.
-        if isinstance(raw, bytes):
-            raw = raw.decode("utf-8")
-        cnf = cnfvar_old.read_cnf_json(raw)
-    except TypeError as exn:
-        log.info("error \"%s\" parsing result of \"%s\"", exn, cmd_line)
-        return None
-    except cnfvar_old.InvalidCNF as exn:
-        log.info("error \"%s\" validating result of \"%s\"", exn, cmd_line)
-        return None
-
-    if data is not None:
-        return cnfvar_old.get_vars(cnf, data=data)
-
-    return cnf
-
-
-def get_cnfvar_id(varname, data, timeout=30, vm=None):
-    """
-    Similar to :py:func:`get_cnf_id` but uses :py:func:`get_cnfvar`.
-
-    :param str varname: "varname" field of the CNF_VAR to look up
-    :param str data: "data" field by which the resulting CNF_VAR list should be filtered
-    :param int timeout: arnied run verification timeout
-    :param vm: vm to run on if running on a guest instead of the host
-    :type vm: :py:class:`virttest.qemu_vm.VM` or None
-    :returns: the cnf id or -1 if no such cnf variable
-    :rtype: int
-    """
-    wait_for_arnied(timeout=timeout, vm=vm)
-    log.info("Extracting from arnied CNF_VAR %s with data %s",
-             varname, data)
-    cnf = get_cnfvar(varname=varname, data=data, vm=vm)
-    variables = cnf["cnf"]
-    if len(variables) == 0:
-        log.info("CNF_VAR extraction unsuccessful, defaulting to -1")
-        # preserve behavior
-        return -1
-    first_instance = int(variables[0]["instance"])
-    log.info("CNF_VAR instance lookup yielded %d results, returning first value (%d)",
-             len(variables), first_instance)
-    return first_instance
-
-
 def wait_for_generate(timeout=300, vm=None):
     """
     Wait for the 'generate' program to complete.
@@ -584,6 +505,9 @@ def set_cnf(config_files, kind="cnf", timeout=30, vm=None):
     the host. If these are absolute paths, they will be kept as is or
     otherwise will be searched for in `SRC_CONFIG_DIR`. If a vm is provided,
     the config files will be copied there as temporary files before applying.
+
+    ..todo:: The static method must be deprecated after we drop and convert
+             lots of use cases for it to dynamic only.
     """
     log.info("Setting arnied configuration")
     wait_for_arnied(timeout=timeout, vm=vm)
@@ -639,6 +563,9 @@ def set_cnf_semidynamic(config_files, params_dict, regex_dict=None,
     the host. If these are absolute paths, they will be kept as is or
     otherwise will be searched for in `SRC_CONFIG_DIR`. If a vm is provided,
     the config files will be copied there as temporary files before applying.
+
+    ..todo:: The semi-dynamic method must be deprecated after we drop and convert
+             lots of use cases for it to dynamic only.
     """
     log.info("Performing semi-dynamic arnied configuration")
 
@@ -648,58 +575,6 @@ def set_cnf_semidynamic(config_files, params_dict, regex_dict=None,
     log.info("Semi-dynamic arnied configuration successful!")
 
 
-def set_cnf_dynamic(cnf, config_file=None, kind="cnf", timeout=30, vm=None):
-    """
-    Perform dynamic arnied configuration from fully generated config files.
-
-    :param cnf: one key with the same value as *kind* and a list of cnfvars as value
-    :type cnf: {str, str}
-    :param config_file: optional user supplied filename
-    :type config_file: str or None
-    :param str kind: "json", "cnf", or "raw"
-    :param int timeout: arnied run verification timeout
-    :param vm: vm to run on if running on a guest instead of the host
-    :type vm: :py:class:`virttest.qemu_vm.VM` or None
-    :raises: :py:class:`ValueError` if `kind` is not an acceptable value
-    :raises: :py:class:`ConfigError` if cannot apply file
-
-    The config file might not be provided in which case a temporary file will
-    be generated and saved on the host's `DUMP_CONFIG_DIR` of not provided as
-    an absolute path. If a vm is provided, the config file will be copied there
-    as a temporary file before applying.
-    """
-    if config_file is None:
-        config_path = generate_config_path(dumped=True)
-    elif os.path.isabs(config_file):
-        config_path = config_file
-    else:
-        config_path = os.path.join(os.path.abspath(DUMP_CONFIG_DIR), config_file)
-    generated = config_file is None
-    config_file = os.path.basename(config_path)
-    log.info("Using %s cnf file %s%s",
-             "generated" if generated else "user-supplied",
-             config_file, " on %s" % vm.name if vm is not None else "")
-
-    # Important to write bytes here to ensure text is encoded with latin-1
-    fd = open(config_path, "wb")
-    try:
-        SET_CNF_METHODS = {
-            "raw": cnfvar_old.write_cnf_raw,
-            "json": cnfvar_old.write_cnf_json,
-            "cnf": cnfvar_old.write_cnf
-        }
-        SET_CNF_METHODS[kind](cnf, out=fd)
-    except KeyError:
-        raise ValueError("Invalid set_cnf method \"%s\"; expected \"json\" or \"cnf\""
-                         % kind)
-    finally:
-        fd.close()
-    log.info("Generated config file %s", config_path)
-
-    kind = "cnf" if kind != "json" else kind
-    set_cnf([config_path], kind=kind, timeout=timeout, vm=vm)
-
-
 def set_cnf_pipe(cnf, timeout=30, block=False):
     """
     Set local configuration by talking to arnied via ``set_cnf``.