From 641b6eebe36d0a72a707336ec021735f1c8dbe76 Mon Sep 17 00:00:00 2001 From: Ivan Lausuch Date: Wed, 28 Jun 2023 16:01:33 +0200 Subject: [PATCH 1/2] Prepare two synchronized machines to test PCW PCW is executed in a microos and is setup using ansible. This PR creates the environment for two VMs to test the ansible playbooks and selenium tests. The microos is ready with all the needed packages. https://progress.opensuse.org/issues/130144 --- data/publiccloud/pcw/sshd_config | 2 ++ lib/main_micro_alp.pm | 11 +++++++ lib/network_utils.pm | 2 +- tests/publiccloud/ansible_client.pm | 47 ++++++++++++++++++++++++++++ tests/publiccloud/ansible_target.pm | 48 +++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 data/publiccloud/pcw/sshd_config create mode 100644 tests/publiccloud/ansible_client.pm create mode 100644 tests/publiccloud/ansible_target.pm diff --git a/data/publiccloud/pcw/sshd_config b/data/publiccloud/pcw/sshd_config new file mode 100644 index 000000000000..50d0312c0756 --- /dev/null +++ b/data/publiccloud/pcw/sshd_config @@ -0,0 +1,2 @@ +PubkeyAuthentication yes +PermitRootLogin yes diff --git a/lib/main_micro_alp.pm b/lib/main_micro_alp.pm index a1a61bf11dde..e72eb2e95fa8 100644 --- a/lib/main_micro_alp.pm +++ b/lib/main_micro_alp.pm @@ -289,6 +289,17 @@ sub load_tests { return 1; } + if (check_var('PUBLIC_CLOUD_ANSIBLE_CLIENT', 1)) { + loadtest 'boot/boot_to_desktop'; + loadtest 'publiccloud/ansible_client'; + return 1; + } + elsif (check_var('PUBLIC_CLOUD_ANSIBLE_TARGET', 1)) { + loadtest 'microos/disk_boot'; + loadtest 'publiccloud/ansible_target'; + return 1; + } + if (get_var('REMOTE_TARGET')) { load_remote_target_tests; return 1; diff --git a/lib/network_utils.pm b/lib/network_utils.pm index c8035893ace0..2732ba480336 100644 --- a/lib/network_utils.pm +++ b/lib/network_utils.pm @@ -60,7 +60,7 @@ sub iface { my ($quantity) = @_; $quantity ||= 1; # bonding_masters showing up in ppc64le jobs in 15-SP5: bsc#1210641 - return script_output('ls /sys/class/net/ | grep -v lo | grep -v bonding_masters | head -' . $quantity); + return script_output('ls /sys/class/net/ | grep -v -e lo -e bonding_masters -e docker | head -' . $quantity); } =head2 can_upload_logs diff --git a/tests/publiccloud/ansible_client.pm b/tests/publiccloud/ansible_client.pm new file mode 100644 index 000000000000..050dbb470baa --- /dev/null +++ b/tests/publiccloud/ansible_client.pm @@ -0,0 +1,47 @@ +# SUSE's openQA tests +# +# Copyright 2023 SUSE LLC +# SPDX-License-Identifier: FSFAP + +# Summary: prepare the VM to sync with the ansible_target +# Maintainer: qa-c@suse.de + +use base "consoletest"; +use serial_terminal 'select_serial_terminal'; +use strict; +use warnings; +use testapi; +use mmapi; +use utils qw(zypper_call); +use network_utils qw(setup_static_network); +use lockapi; + +sub run { + my ($self, $args) = @_; + select_serial_terminal; + + record_info('system', script_output('cat /etc/os-release')); + setup_static_network(ip => '10.0.2.15/15', gw => '10.0.2.2'); + record_info('ip', script_output('ip a')); + record_info('route', script_output('ip r')); + assert_script_run('echo "10.0.2.20 microos" >> /etc/hosts'); + zypper_call('in -y iputils git'); + + assert_script_run('mkdir /root/.ssh'); + assert_script_run('curl -f -v ' . autoinst_url . '/data/slenkins/ssh/id_rsa > /root/.ssh/id_rsa'); + assert_script_run('chmod 600 /root/.ssh/id_rsa'); + + my $children = get_children(); + my $child_id = (keys %$children)[0]; + mutex_wait('target_is_ready', $child_id); + + # Testing target is accessible + assert_script_run('ping -c 1 microos'); + assert_script_run('ssh -v -o StrictHostKeyChecking=accept-new root@microos cat /etc/os-release'); + + mutex_create 'job_completed'; + + wait_for_children; +} + +1; diff --git a/tests/publiccloud/ansible_target.pm b/tests/publiccloud/ansible_target.pm new file mode 100644 index 000000000000..88ea70b39da1 --- /dev/null +++ b/tests/publiccloud/ansible_target.pm @@ -0,0 +1,48 @@ +# SUSE's openQA tests +# +# Copyright 2023 SUSE LLC +# SPDX-License-Identifier: FSFAP + +# Summary: prepare the VM to grant access to ansible_client +# Maintainer: qa-c@suse.de + +use base "consoletest"; +use serial_terminal 'select_serial_terminal'; +use transactional qw(trup_call process_reboot); +use strict; +use warnings; +use testapi; +use lockapi; +use mm_network qw(setup_static_mm_network); +use utils qw(zypper_call); +use Utils::Systemd qw(systemctl); + +sub run { + my ($self, $args) = @_; + select_serial_terminal; + record_info('system', script_output('cat /etc/os-release')); + record_info('device', script_output('nmcli -t device')); + + setup_static_mm_network('10.0.2.20/15'); + + record_info('ip', script_output('ip a')); + record_info('route', script_output('ip r')); + script_run('ping -c 1 10.0.2.15'); + script_run('ping -c 1 download.suse.de'); + + assert_script_run('curl -f -v ' . autoinst_url . '/data/slenkins/ssh/authorized_keys >> /root/.ssh/authorized_keys'); + assert_script_run('curl -f -v ' . autoinst_url . '/data/publiccloud/pcw/sshd_config >/etc/ssh/sshd_config'); + + zypper_call('--gpg-auto-import-keys ref'); + trup_call('pkg install python3 python3-selinux'); + process_reboot(trigger => 1); + + systemctl('restart sshd'); + systemctl('status sshd'); + mutex_create 'target_is_ready'; + + assert_script_run('ping -c 1 10.0.2.15'); + mutex_wait 'job_completed'; +} + +1; From 7a54b657aa1a51bb69eae3220e15d3cd91cc180d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Dost=C3=A1l?= Date: Thu, 27 Jul 2023 10:46:38 +0200 Subject: [PATCH 2/2] Public CLoud: Schedule Ansible client as SLE and target as SLEM --- lib/main_micro_alp.pm | 21 ++++++++------------- lib/main_publiccloud.pm | 15 +++++++++++++++ tests/publiccloud/ansible_client.pm | 20 +++++++++++++------- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/lib/main_micro_alp.pm b/lib/main_micro_alp.pm index e72eb2e95fa8..913ea8063622 100644 --- a/lib/main_micro_alp.pm +++ b/lib/main_micro_alp.pm @@ -13,6 +13,7 @@ use base 'Exporter'; use Exporter; use main_common; use main_containers qw(load_container_tests is_container_test); +use main_publiccloud 'load_ansible_tests'; use testapi qw(check_var get_required_var get_var set_var); use version_utils; use utils; @@ -278,9 +279,14 @@ sub load_slem_on_pc_tests { } sub load_tests { - # SLEM on PC if (is_public_cloud()) { - load_slem_on_pc_tests; + if (check_var('PUBLIC_CLOUD_ANSIBLE_CLIENT', 1) || check_var('PUBLIC_CLOUD_ANSIBLE_TARGET', 1)) { + # SLE-Micro Ansible target + load_ansible_tests(); + } else { + # SLEM on PC + load_slem_on_pc_tests(); + } return 1; } @@ -289,17 +295,6 @@ sub load_tests { return 1; } - if (check_var('PUBLIC_CLOUD_ANSIBLE_CLIENT', 1)) { - loadtest 'boot/boot_to_desktop'; - loadtest 'publiccloud/ansible_client'; - return 1; - } - elsif (check_var('PUBLIC_CLOUD_ANSIBLE_TARGET', 1)) { - loadtest 'microos/disk_boot'; - loadtest 'publiccloud/ansible_target'; - return 1; - } - if (get_var('REMOTE_TARGET')) { load_remote_target_tests; return 1; diff --git a/lib/main_publiccloud.pm b/lib/main_publiccloud.pm index 284f58f02e54..48569b81e190 100644 --- a/lib/main_publiccloud.pm +++ b/lib/main_publiccloud.pm @@ -19,6 +19,7 @@ require bmwqemu; our @EXPORT = qw( load_publiccloud_tests + load_ansible_tests ); sub load_maintenance_publiccloud_tests { @@ -180,6 +181,20 @@ sub load_publiccloud_download_repos { loadtest 'shutdown/shutdown'; } +sub load_ansible_tests { + if (check_var('PUBLIC_CLOUD_ANSIBLE_CLIENT', 1)) { + loadtest 'boot/boot_to_desktop'; + loadtest 'publiccloud/ansible_client'; + return 1; + } + elsif (check_var('PUBLIC_CLOUD_ANSIBLE_TARGET', 1)) { + loadtest 'microos/disk_boot'; + loadtest 'publiccloud/ansible_target'; + return 1; + } +} + + =head2 load_publiccloud_tests C schedules the test jobs for the variety of groups. diff --git a/tests/publiccloud/ansible_client.pm b/tests/publiccloud/ansible_client.pm index 050dbb470baa..7c5845f2ba19 100644 --- a/tests/publiccloud/ansible_client.pm +++ b/tests/publiccloud/ansible_client.pm @@ -8,26 +8,32 @@ use base "consoletest"; use serial_terminal 'select_serial_terminal'; -use strict; +use transactional qw(trup_call process_reboot); +#use strict; use warnings; use testapi; +use lockapi; use mmapi; +use mm_network qw(setup_static_mm_network); use utils qw(zypper_call); -use network_utils qw(setup_static_network); -use lockapi; sub run { my ($self, $args) = @_; select_serial_terminal; record_info('system', script_output('cat /etc/os-release')); - setup_static_network(ip => '10.0.2.15/15', gw => '10.0.2.2'); + # setup_static_network(ip => '10.0.2.15/15', gw => '10.0.2.2'); + # record_info('ip', script_output('ip a')); + # record_info('route', script_output('ip r')); + # assert_script_run('echo "10.0.2.20 microos" >> /etc/hosts'); + # zypper_call('in -y iputils git'); + + setup_static_mm_network('10.0.2.15/15'); + record_info('ip', script_output('ip a')); record_info('route', script_output('ip r')); - assert_script_run('echo "10.0.2.20 microos" >> /etc/hosts'); - zypper_call('in -y iputils git'); + script_run('ping -c 1 download.suse.de'); - assert_script_run('mkdir /root/.ssh'); assert_script_run('curl -f -v ' . autoinst_url . '/data/slenkins/ssh/id_rsa > /root/.ssh/id_rsa'); assert_script_run('chmod 600 /root/.ssh/id_rsa');