]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/test/behave_tests/features/kcli_handler.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / test / behave_tests / features / kcli_handler.py
diff --git a/ceph/src/test/behave_tests/features/kcli_handler.py b/ceph/src/test/behave_tests/features/kcli_handler.py
new file mode 100644 (file)
index 0000000..1e28c7f
--- /dev/null
@@ -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)