From: Bruno Léon Date: Mon, 6 Jan 2020 12:59:55 +0000 (+0100) Subject: qa/tasks: add caasp deployement support X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b90f5d89eb5e1080130fe369dc73fd9349d7915f;p=ceph.git qa/tasks: add caasp deployement support --- diff --git a/qa/suites/caasp/% b/qa/suites/caasp/% new file mode 100644 index 00000000000..e69de29bb2d diff --git a/qa/suites/caasp/.qa b/qa/suites/caasp/.qa new file mode 120000 index 00000000000..fea2489fdf6 --- /dev/null +++ b/qa/suites/caasp/.qa @@ -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 index 00000000000..321963e74d8 --- /dev/null +++ b/qa/suites/caasp/10-host-definition.yaml @@ -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 index 00000000000..e30df56c5d3 --- /dev/null +++ b/qa/suites/caasp/20-install.yaml @@ -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 index 00000000000..e69de29bb2d diff --git a/qa/suites/caasp/boilerplate/.qa b/qa/suites/caasp/boilerplate/.qa new file mode 120000 index 00000000000..fea2489fdf6 --- /dev/null +++ b/qa/suites/caasp/boilerplate/.qa @@ -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 index 00000000000..e74c1884fe5 --- /dev/null +++ b/qa/suites/caasp/boilerplate/ceph_cm.yaml @@ -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 index 00000000000..fea2489fdf6 --- /dev/null +++ b/qa/suites/caasp/distros/.qa @@ -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 index 00000000000..c6791f58126 --- /dev/null +++ b/qa/suites/caasp/distros/sle_15.1.yaml @@ -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 index 00000000000..a45a256a151 --- /dev/null +++ b/qa/tasks/caasp.py @@ -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