Generic Utilities

Collection of functions that did not fit anywhere else.

async zaza.utilities.generic.check_call(cmd, log_stdout=True, log_stderr=True)

Asynchronous function to check a subprocess call.

Parameters:

cmd (List[str]) – Command to execute

Returns:

None

Return type:

None

Raises:

subprocess.CalledProcessError if returncode !=0

async zaza.utilities.generic.check_output(cmd, log_stdout=True, log_stderr=True)

Asynchronous function to run a subprocess and get the output.

Note, as the code raises an Exception on returncode != 0, ‘Code’ in the dictionary will always be ‘0’. This is included for compatability reasons.

Parameters:
  • cmd (List[str]) – Command to execute

  • log_stdout (bool) – Whether to log stdout on success, defaults to True

  • log_stderr (bool) – Whether to log stderr on success, defaults to True

Returns:

{‘Code’: ‘’, ‘Stderr’: ‘’, ‘Stdout’: ‘’}

Return type:

dict

Raises:

subprocess.CalledProcessError if returncode !=0

zaza.utilities.generic.dict_to_yaml(dict_data)

Return YAML from dictionary.

Parameters:

dict_data (dict) – Dictionary data

Returns:

YAML dump

Return type:

string

zaza.utilities.generic.do_release_upgrade(unit_name)

Run do-release-upgrade noninteractive.

Parameters:

unit_name (str) – Unit Name

Returns:

None

Return type:

None

zaza.utilities.generic.get_network_config(net_topology, ignore_env_vars=False, net_topology_file='network.yaml')

Get network info from environment.

Get network info from network.yaml, override the values if specific environment variables are set for the undercloud.

This function may be used when running network configuration from CLI to pass in network configuration settings from a YAML file.

Parameters:
  • net_topology (string) – Network topology name from network.yaml

  • ignore_env_vars (bool) – Ignore enviroment variables or not

Returns:

Dictionary of network configuration

Return type:

dict

zaza.utilities.generic.get_pkg_version(application, pkg)

Return package version.

Parameters:
  • application (string) – Application name

  • pkg (string) – Package name

Returns:

List of package version

Return type:

list

zaza.utilities.generic.get_process_id_list(unit_name, process_name, expect_success=True, pgrep_full=False)

Get a list of process ID(s).

Get a list of process ID(s) from a single sentry juju unit for a single process name.

Parameters:
  • unit_name – Amulet sentry instance (juju unit)

  • process_name – Process name

  • expect_success – If False, expect the PID to be missing, raise if it is present.

  • pgrep_full (bool) – Should pgrep be used rather than pidof to identify a service.

Returns:

List of process IDs

Raises:

zaza_exceptions.ProcessIdsFailed

zaza.utilities.generic.get_undercloud_env_vars()

Get environment specific undercloud network configuration settings.

Get environment specific undercloud network configuration settings from environment variables.

For each testing substrate, specific undercloud network configuration settings should be exported into the environment to enable testing on that substrate.

Note: Overcloud settings should be declared by the test caller and should not be overridden here.

Return a dictionary compatible with zaza.openstack.configure.network functions’ expected key structure.

Example exported environment variables: export default_gateway=”172.17.107.1” export external_net_cidr=”172.17.107.0/24” export external_dns=”10.5.0.2” export start_floating_ip=”172.17.107.200” export end_floating_ip=”172.17.107.249”

Example o-c-t & uosci non-standard environment variables: export NET_ID=”a705dd0f-5571-4818-8c30-4132cc494668” export GATEWAY=”172.17.107.1” export CIDR_EXT=”172.17.107.0/24” export NAMESERVER=”10.5.0.2” export FIP_RANGE=”172.17.107.200:172.17.107.249”

Returns:

Network environment variables

Return type:

dict

zaza.utilities.generic.get_unit_process_ids(unit_processes, expect_success=True)

Get unit process ID(s).

Construct a dict containing unit sentries, process names, and process IDs.

Parameters:
  • unit_processes – A dictionary of unit names to list of process names.

  • expect_success – if False expect the processes to not be running, raise if they are.

Returns:

Dictionary of unit names to dictionary of process names to PIDs.

Raises:

zaza_exceptions.ProcessIdsFailed

zaza.utilities.generic.get_yaml_config(config_file)

Return configuration from YAML file.

Parameters:

config_file (string) – Configuration file name

Returns:

Dictionary of configuration

Return type:

dict

zaza.utilities.generic.juju_reboot(unit_name)

Reboot a unit using juju-reboot.

As juju run does not allow running juju-reboot (see LP: #1990140), use juju ssh to invoke juju-run with the unit context with the juju-reboot command. This will trigger a Juju-controlled reboot during which Juju will not attempt to run any hooks asynchronously which can cause an unintended hook execution failure upon reboot (for example, this happens with update-status hooks causing intermittent CI failures).

zaza.utilities.generic.reboot(unit_name)

Reboot unit.

Parameters:

unit_name (str) – Unit Name

Returns:

None

Return type:

None

zaza.utilities.generic.run_via_ssh(unit_name, cmd)

Run command on unit via ssh.

For executing commands on units when the juju agent is down.

Parameters:
  • unit_name – Unit Name

  • cmd (str) – Command to execute on remote unit

Returns:

None

Return type:

None

zaza.utilities.generic.series_upgrade(unit_name, machine_num, from_series='trusty', to_series='xenial', origin='openstack-origin', files=None, workaround_script=None)

Perform series upgrade on a unit.

Parameters:
  • unit_name (str) – Unit Name

  • machine_num (str) – Machine number

  • from_series (str) – The series from which to upgrade

  • to_series (str) – The series to which to upgrade

  • origin (str) – The configuration setting variable name for changing origin source. (openstack-origin or source)

  • files (list) – Workaround files to scp to unit under upgrade

  • workaround_script (str) – Workaround script to run during series upgrade

Returns:

None

Return type:

None

zaza.utilities.generic.series_upgrade_application(application, pause_non_leader_primary=True, pause_non_leader_subordinate=True, from_series='trusty', to_series='xenial', origin='openstack-origin', completed_machines=[], files=None, workaround_script=None)

Series upgrade application.

Wrap all the functionality to handle series upgrade for a given application. Including pausing non-leader units.

Parameters:
  • application (str) – Name of application to upgrade series

  • pause_non_leader_primary (bool) – Whether the non-leader applications should be paused

  • pause_non_leader_subordinate (bool) – Whether the non-leader subordinate hacluster applications should be paused

  • from_series (str) – The series from which to upgrade

  • to_series (str) – The series to which to upgrade

  • origin (str) – The configuration setting variable name for changing origin source. (openstack-origin or source)

  • completed_machines (list) – List of completed machines which do no longer require series upgrade.

  • files (list) – Workaround files to scp to unit under upgrade

  • workaround_script (str) – Workaround script to run during series upgrade

Returns:

None

Return type:

None

zaza.utilities.generic.series_upgrade_non_leaders_first(application, from_series='trusty', to_series='xenial', completed_machines=[])

Series upgrade non leaders first.

Wrap all the functionality to handle series upgrade for charms which must have non leaders upgraded first.

Parameters:
  • application (str) – Name of application to upgrade series

  • from_series (str) – The series from which to upgrade

  • to_series (str) – The series to which to upgrade

  • completed_machines (list) – List of completed machines which do no longer require series upgrade.

Returns:

None

Return type:

None

zaza.utilities.generic.set_dpkg_non_interactive_on_unit(unit_name, apt_conf_d='/etc/apt/apt.conf.d/50unattended-upgrades')

Set dpkg options on unit.

Parameters:
  • unit_name (str) – Unit Name

  • apt_conf_d (str) – Apt.conf file to update

zaza.utilities.generic.set_origin(application, origin='openstack-origin', pocket='distro')

Set the configuration option for origin source.

Parameters:
  • application (str) – Name of application to upgrade series

  • origin (str) – The configuration setting variable name for changing origin source. (openstack-origin or source)

  • pocket (str) – Origin source cloud pocket. i.e. ‘distro’ or ‘cloud:xenial-newton’

Returns:

None

Return type:

None

async zaza.utilities.generic.unit_run(unit, command, timeout=None)

Help function to help support Juju 2.9 and Juju 3>.

Parameters:
  • unit (juju.unit.Unit) – juju unit

  • command (str) – Command to execute

  • timeout (int) – How long in seconds to wait for command to complete

Returns:

completed Action object

Return type:

juju.action.Action

zaza.utilities.generic.validate_unit_process_ids(expected, actual)

Validate process id quantities for services on units.

Returns:

True if the PIDs are validated, raises an exception if it is not the case.

Raises:

zaza_exceptions.UnitCountMismatch

Raises:

zaza_exceptions.UnitNotFound

Raises:

zaza_exceptions.ProcessNameCountMismatch

Raises:

zaza_exceptions.ProcessNameMismatch

Raises:

zaza_exceptions.PIDCountMismatch

zaza.utilities.generic.wrap_do_release_upgrade(unit_name, from_series='trusty', to_series='xenial', files=None, workaround_script=None)

Wrap do release upgrade.

In a production environment this step would be run administratively. For testing purposes we need this automated.

Parameters:
  • unit_name (str) – Unit Name

  • from_series (str) – The series from which to upgrade

  • to_series (str) – The series to which to upgrade

  • files (list) – Workaround files to scp to unit under upgrade

  • workaround_script (str) – Workaround script to run during series upgrade

Returns:

None

Return type:

None