lib/sles4sap_publiccloud.pm

DESCRIPTION

Package with common methods and default or constant  values for sles4sap tests in the cloud

run_cmd run_cmd(cmd => 'command', [runas => 'user', timeout => 60]);

Runs a command C<cmd> via ssh in the given VM and log the output.
All commands are executed through C<sudo>.
If 'runas' defined, command will be executed as specified user,
otherwise it will be executed as root.
cmd - command string to be executed remotely
timeout - command execution timeout
title - used in record_info
runas - pre-pend the command with su to execute it as specific user
... - pass through all other arguments supported by run_ssh_command

get_promoted_hostname() get_promoted_hostname();

Checks and returns hostname of HANA promoted node according to crm shell output.

sles4sap_cleanup

Clean up Network peering and qesap deployment
cleanup_called - flag to indicate cleanup status
network_peering_present - flag to indicate network peering presence
ansible_present - flag to indicate ansible has need executed as part of the deployment

get_hana_topology Parses command output, returns hash of hashes containing values for each host.

is_hana_online is_hana_online([timeout => 120, wait_for_start => 'false']);

Check if hana DB is online.
wait_for_start - Define 'wait_for_start' to wait for DB to start.
timeout - timeout for the wait of the online state

is_hana_resource_running is_hana_resource_running([timeout => 60]);

Checks if resource msl_SAPHana_* is running on given node.

stop_hana stop_hana([timeout => $timeout, method => $method]);

Stops HANA database using default or specified method.
"stop" - stops database using "HDB stop" command.
"kill" - kills database processes using "HDB -kill" command.
"crash" - crashes entire os using "/proc-sysrq-trigger" method.
method - Allow to specify a specific stop method
timeout - only used for stop and kill

start_hana start_hana([timeout => 60]);

Start HANA DB using "HDB start" command

cleanup_resource cleanup_resource([timeout => 60]);

Cleanup resource 'msl_SAPHana_*', wait for DB start automatically.
timeout - timeout for waiting resource to start

check_takeover check_takeover();

Checks takeover status and waits for finish until successful or reaches timeout.

enable_replication enable_replication([site_name => 'site_a']);

Enables replication on fenced database. Database needs to be offline.
site_name - site name of the site to register

get_replication_info get_replication_info();

Parses "hdbnsutil -sr_state" command output.
Returns hash of found values converted to lowercase and replaces spaces to underscores.

get_promoted_instance get_promoted_instance();

Retrieves hostname from currently promoted (Master) database and returns instance data from $self->{instances}.

wait_for_sync wait_for_sync([timeout => $timeout]);

Wait for replica site to sync data with primary.
Checks "SAPHanaSR-showAttr" output and ensures replica site has "sync_state" "SOK && PRIM" and no SFAIL.
Continue after expected output matched three times continually to make sure cluster is synced.
timeout - timeout for waiting sync state

wait_for_pacemaker wait_for_pacemaker([timeout => $timeout]);

Checks status of pacemaker via systemd 'is-active' command an waits for startup.
timeout - timeout for waiting for pacemaker service

change_sbd_service_timeout $self->change_sbd_service_timeout(service_timeout => '30');

Overrides timeout for sbd systemd service to a value provided by argument.
This is done by creating or changing file "/etc/systemd/system/sbd.service.d/sbd_delay_start.conf"
service_timeout - value for the TimeoutSec setting

setup_sbd_delay_publiccloud $self->setup_sbd_delay_publiccloud();

Set (activate or deactivate) SBD_DELAY_START setting in /etc/sysconfig/sbd.
Delay is used in case of cluster VM joining cluster too quickly after fencing operation.
For more information check sbd man page.

Setting is changed via OpenQA parameter: HA_SBD_START_DELAY
Possible values:
"no" - do not set and turn off SBD delay time
"yes" - sets default SBD value which is calculated from a formula
"<number of seconds>" - sets specific delay in seconds

Returns integer representing wait time.

sbd_delay_formula $self->sbd_delay_formula();

return calculated sbd delay

cloud_file_content_replace cloud_file_content_replace(filename => $filename, search_pattern => $search_pattern, replace_with => $replace_with);

Replaces file content direct on PC SUT. Similar to lib/utils.pm file_content_replace()
filename - file location
search_pattern - search pattern
replace_with - string to replace

create_instance_data

Create and populate a list of publiccloud::instance and publiccloud::provider compatible
class instances.
provider - Instance of PC object "provider", the one usually created by provider_factory()

deployment_name

Return a string to be used as value for the deployment_name variable
in the qe-sap-deployment.

delete_network_peering

Delete network peering between SUT created with qe-sa-deployment
and the IBS Mirror. Function is generic over all the Cloud Providers

create_ansible_playbook_list

Detects HANA/HA scenario from function arguments and returns a list of ansible playbooks to include
in the "ansible: create:" section of config.yaml file.
ha_enabled - Enable the installation of HANA and the cluster configuration
registration - select registration mode, possible values are * registercloudguest (default) * suseconnect * noreg "QESAP_SCC_NO_REGISTER" skips scc registration via ansible
fencing - select fencing mechanism

azure_fencing_agents_playbook_args

azure_fencing_agents_playbook_args(
    spn_application_id=>$spn_application_id,
    spn_application_password=>$spn_application_password
);

Collects data and creates string of arguments that can be supplied to playbook.
spn_application_id - application ID that allows API access for STONITH device
spn_application_password - password provided for application ID above

get_hana_site_names

Get primary and secondary site name.
This information is both needed to configure the qe-sap-deployment
and later in the test when calling `hdbnsutil -sr_register`.
This function mostly read the information from job settings
HANA_PRIMARY_SITE and HANA_SECONDARY_SITE, so main reason to have
it behind a function is to have coherent defaults.

create_hana_vars_section

Detects HANA/HA scenario from openQA variables and creates "terraform: variables:" section in config.yaml file.

display_full_status

$self->display_full_status()

Displays most useful debugging info about cluster status, database status within a 'record_info' test entry.

list_cluster_nodes

$self->list_cluster_nodes()

Returns list of hostnames that are part of a cluster using crm shell command from one of the cluster nodes.

get_hana_database_status

Run a query to the hana database, parses "hdbsql" command output and check if the connection still is alive.
Returns 1 if the response from hana database is online, 0 otherwise
password_db - password
instance_id - instance id

is_hana_database_online

Setup a timeout and check the hana database status is offline and there is not connection.
If the connection still is online run a wait and try again to get the status.
Returns 1 if the output of the hana database is online, 0 means that hana database is offline
timeout - default 900
total_consecutive_passes - default 5

is_primary_node_online

Check if primary node in a hana cluster is offline.
Returns if primary node status is offline with 0 and 1 online
timeout - default 300

pacemaker_version

Returns the pacemaker version

saphanasr_showAttr_version

Returns the SAPHanaSR-showattr version

wait_for_cluster

Verifies that nodes are online, resources are started and DB is in sync
wait_time - time to wait before retry in seconds, default 10
max_retries - maximum number of retries, default 7

wait_for_zypper

The function attempts to run 'zypper ref' to check for a lock. If Zypper is locked, it waits for a specified delay before retrying.
Returns normally if Zypper is not locked or dies after a maximum number of retries if Zypper remains locked.
$instance - The instance object on which the Zypper command is executed. This object must have the run_ssh_command method implemented.
max_retries - The maximum number of times the function will retry checking if Zypper is locked. Default is 10.
retry_delay - The number of seconds to wait between retries. Default is 20 seconds.
timeout - The number of seconds to wait before aborting zypper ref
runas - If 'runas' defined, command will be executed as specified user, otherwise it will be executed as cloudadmin.

wait_for_idle

The function wraps the `cs_wait_for_idle` command, and restarts in case of timeout (once, this
time fatal) after displaying cluster information.
$timeout - The timeout (in seconds) for the command.