]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/tasks: add caasp deployement support
authorBruno Léon <bruno.leon@suse.com>
Mon, 6 Jan 2020 12:59:55 +0000 (13:59 +0100)
committerStefen Allen <sallen@suse.com>
Thu, 9 Dec 2021 19:29:45 +0000 (12:29 -0700)
qa/suites/caasp/% [new file with mode: 0644]
qa/suites/caasp/.qa [new symlink]
qa/suites/caasp/10-host-definition.yaml [new file with mode: 0644]
qa/suites/caasp/20-install.yaml [new file with mode: 0644]
qa/suites/caasp/boilerplate/+ [new file with mode: 0644]
qa/suites/caasp/boilerplate/.qa [new symlink]
qa/suites/caasp/boilerplate/ceph_cm.yaml [new file with mode: 0644]
qa/suites/caasp/distros/.qa [new symlink]
qa/suites/caasp/distros/sle_15.1.yaml [new symlink]
qa/tasks/caasp.py [new file with mode: 0644]

diff --git a/qa/suites/caasp/% b/qa/suites/caasp/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/caasp/.qa b/qa/suites/caasp/.qa
new file mode 120000 (symlink)
index 0000000..fea2489
--- /dev/null
@@ -0,0 +1 @@
+../.qa
\ No newline at end of file
diff --git a/qa/suites/caasp/10-host-definition.yaml b/qa/suites/caasp/10-host-definition.yaml
new file mode 100644 (file)
index 0000000..321963e
--- /dev/null
@@ -0,0 +1,6 @@
+roles:
+- [skuba_mgmt_host.0]
+- [caasp_master.0]
+- [caasp_worker.0]
+- [caasp_worker.1]
+- [caasp_worker.2]
diff --git a/qa/suites/caasp/20-install.yaml b/qa/suites/caasp/20-install.yaml
new file mode 100644 (file)
index 0000000..e30df56
--- /dev/null
@@ -0,0 +1,8 @@
+tasks:
+- clock:
+- install:
+    install_ceph_packages: false
+- exec:
+    skuba_mgmt_host.0:
+      - zypper --non-interactive install skuba kubernetes-client
+- caasp:
diff --git a/qa/suites/caasp/boilerplate/+ b/qa/suites/caasp/boilerplate/+
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/caasp/boilerplate/.qa b/qa/suites/caasp/boilerplate/.qa
new file mode 120000 (symlink)
index 0000000..fea2489
--- /dev/null
@@ -0,0 +1 @@
+../.qa
\ No newline at end of file
diff --git a/qa/suites/caasp/boilerplate/ceph_cm.yaml b/qa/suites/caasp/boilerplate/ceph_cm.yaml
new file mode 100644 (file)
index 0000000..e74c188
--- /dev/null
@@ -0,0 +1 @@
+ceph_cm_ansible: false
diff --git a/qa/suites/caasp/distros/.qa b/qa/suites/caasp/distros/.qa
new file mode 120000 (symlink)
index 0000000..fea2489
--- /dev/null
@@ -0,0 +1 @@
+../.qa
\ No newline at end of file
diff --git a/qa/suites/caasp/distros/sle_15.1.yaml b/qa/suites/caasp/distros/sle_15.1.yaml
new file mode 120000 (symlink)
index 0000000..c6791f5
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/all/sle_15.1.yaml
\ No newline at end of file
diff --git a/qa/tasks/caasp.py b/qa/tasks/caasp.py
new file mode 100644 (file)
index 0000000..a45a256
--- /dev/null
@@ -0,0 +1,86 @@
+'''
+Task that deploys a CAASP cluster on all the nodes
+Linter:
+    flake8 --max-line-length=100
+'''
+import logging
+from teuthology.misc import (
+    all_roles_of_type,
+    append_lines_to_file,
+    get_file,
+    )
+from teuthology.task import Task
+from tasks.util import get_remote_for_role
+log = logging.getLogger(__name__)
+
+
+class Caasp(Task):
+    """
+    Deploy a Caasp cluster on all remotes using Skuba.
+    Nodes are declared in suites/caasp folder
+    """
+
+    def __init__(self, ctx, config):
+        super(Caasp, self).__init__(ctx, config)
+        log.debug("beginning of constructor method")
+        self.ctx['roles'] = self.ctx.config['roles']
+        self.log = log
+        self.remotes = self.cluster.remotes
+        self.mgmt = get_remote_for_role(self.ctx, "skuba_mgmt_host.0")
+        self.ssh_priv = 'caasp_key.rsa'
+        self.ssh_pub = 'caasp_key.rsa.pub'
+        self.set_agent = "eval $(ssh-agent) && ssh-add ~/{} && ".format(
+            self.ssh_priv)
+
+    def __ssh_setup(self):
+        """ Generate keys on management node. Copy pub to all of them. """
+        log.debug("Executing SSH setup")
+        self.__ssh_gen_key()
+        self.__ssh_copy_pub_to_caasp()
+
+    def __ssh_gen_key(self):
+        self.mgmt.sh('ssh-keygen -t rsa -b 2048 -N "" -f {}'.format(self.ssh_priv))
+
+    def __ssh_copy_pub_to_caasp(self):
+        log.debug("Copying public key to remotes")
+        data = get_file(self.mgmt, self.ssh_pub)
+        for i, _ in enumerate(all_roles_of_type(self.ctx.cluster, 'caasp_master')):
+            r = get_remote_for_role(self.ctx, 'caasp_master.' + str(i))
+            append_lines_to_file(r, '.ssh/authorized_keys', data)
+        for i, _ in enumerate(all_roles_of_type(self.ctx.cluster, 'caasp_worker')):
+            r = get_remote_for_role(self.ctx, 'caasp_worker.' + str(i))
+            append_lines_to_file(r, '.ssh/authorized_keys', data)
+
+    def __create_cluster(self):
+        log.debug('Creating cluster')
+        master_remote = get_remote_for_role(self.ctx, "caasp_master.0")
+        self.mgmt.sh(self.set_agent + """
+            ssh-add -L
+            skuba cluster init --control-plane {master} cluster
+            cd cluster
+            skuba node bootstrap --user {user} --sudo --target {master} my-master
+            """.format(master=master_remote.hostname, user='ubuntu'))
+
+        for i, _ in enumerate(all_roles_of_type(self.ctx.cluster, 'caasp_worker')):
+            r = get_remote_for_role(self.ctx, 'caasp_worker.' + str(i))
+            command = "cd cluster;skuba node join --role worker --user ubuntu \
+                --sudo --target {} worker.{}".format(r.hostname, str(i))
+            self.mgmt.sh("%s %s" % (self.set_agent, command))
+
+    def __show_cluster_status(self):
+        command = 'cd cluster && skuba cluster status'
+        self.mgmt.sh("%s %s" % (self.set_agent, command))
+
+    def begin(self):
+        self.__ssh_setup()
+        self.__create_cluster()
+        self.__show_cluster_status()
+
+    def end(self):
+        pass
+
+    def teardown(self):
+        pass
+
+
+task = Caasp