summaryrefslogtreecommitdiffstats
path: root/src/test/behave_tests/features/kcli_handler.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/behave_tests/features/kcli_handler.py')
-rw-r--r--src/test/behave_tests/features/kcli_handler.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/test/behave_tests/features/kcli_handler.py b/src/test/behave_tests/features/kcli_handler.py
new file mode 100644
index 000000000..1e28c7ff4
--- /dev/null
+++ b/src/test/behave_tests/features/kcli_handler.py
@@ -0,0 +1,88 @@
+import subprocess
+import time
+import os
+
+
+kcli_exec = r"""
+podman run --net host -it --rm --security-opt label=disable
+ -v $HOME/.ssh:/root/.ssh -v $HOME/.kcli:/root/.kcli
+ -v /var/lib/libvirt/images:/var/lib/libvirt/images
+ -v /var/run/libvirt:/var/run/libvirt -v $PWD:/workdir
+ -v /var/tmp:/ignitiondir jolmomar/kcli
+"""
+
+
+def _create_kcli_cmd(command):
+ cmd = kcli_exec.replace("$HOME", os.getenv("HOME"))
+ cmd = cmd.replace("$PWD", os.getenv("PWD"))
+ kcli = cmd.replace("\n", "").split(" ")
+ return kcli + command.split(" ")
+
+
+def is_bootstrap_script_complete():
+ """
+ Checks for status of bootstrap script executions.
+ """
+ timeout = 0
+ command = " ".join(
+ [
+ f'"{cmd}"' for cmd in
+ "journalctl --no-tail --no-pager -t cloud-init".split(" ")
+ ]
+ )
+ cmd = _create_kcli_cmd(
+ f'ssh ceph-node-00 {command} | grep "Bootstrap complete."'
+ )
+ while timeout < 10: # Totally waits for 5 mins before giving up
+ proc = subprocess.run(cmd, capture_output=True, text=True)
+ if "Bootstrap complete." in proc.stdout:
+ print("Bootstrap script completed successfully")
+ return True
+ timeout += 1
+ print("Waiting for bootstrap_cluster script...")
+ print(proc.stdout[len(proc.stdout) - 240:])
+ time.sleep(30)
+ print(
+ f"Timeout reached {30*timeout}. Giving up for boostrap to complete"
+ )
+ return False
+
+
+def execute_kcli_cmd(command):
+ """
+ Executes the kcli command by combining the provided command
+ with kcli executable command.
+ """
+ cmd = _create_kcli_cmd(command)
+ print(f"Executing kcli command : {command}")
+ try:
+ proc = subprocess.run(
+ cmd,
+ capture_output=True,
+ text=True,
+ # env=dict(STORAGE_OPTS=''),
+ )
+ except Exception as ex:
+ print(f"Error executing kcli command\n{ex}")
+
+ op = proc.stderr if proc.stderr else proc.stdout
+ return (op, proc.returncode)
+
+
+def execute_ssh_cmd(vm_name, shell, command):
+ """
+ Executes the provided ssh command on the provided vm machine
+ """
+ if shell == "cephadm_shell":
+ command = f"cephadm shell {command}"
+ sudo_cmd = f"sudo -i {command}".split(" ")
+ sudo_cmd = " ".join([f'"{cmd}"' for cmd in sudo_cmd])
+ cmd = _create_kcli_cmd(f"ssh {vm_name} {sudo_cmd}")
+ print(f"Executing ssh command : {cmd}")
+ try:
+ proc = subprocess.run(cmd, capture_output=True, text=True)
+ except Exception as ex:
+ print(f"Error executing ssh command: {ex}")
+
+ op = proc.stderr if proc.stderr else proc.stdout
+ return (op, proc.returncode)