From 1b5b8500ae6c831f965a81deccf082ad13102c85 Mon Sep 17 00:00:00 2001 From: Anton Chevychalov Date: Wed, 18 Jan 2017 18:52:10 +0300 Subject: [PATCH] Small features and fixes * We can add pub keys now * There is information about ssh access in summary * Cleanup some garbage from spool Change-Id: I0b41afe727f318288d3065b7ef4364a5c309e9fc --- jenkins/build_cluster/build_cluster.py | 21 +++++++++++++++++++++ jenkins/build_cluster/build_cluster_test.py | 19 +++++++++++++++++-- jenkins/build_cluster/config.xml | 7 ++++++- jenkins/build_cluster/update_helper.sh | 3 ++- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/jenkins/build_cluster/build_cluster.py b/jenkins/build_cluster/build_cluster.py index 030bdbc..d0f03a2 100755 --- a/jenkins/build_cluster/build_cluster.py +++ b/jenkins/build_cluster/build_cluster.py @@ -2,6 +2,7 @@ from __future__ import print_function +import io import os import re import signal @@ -20,6 +21,7 @@ REPO_HELPER = "repo_helper.sh" SSH_PARAMS = ["-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "LogLevel=quiet"] # That supress most of warnings and info messages +SSH_PUBKEYS_FILE = "keys.pub" DNS_SERVER = "172.18.16.10" #Moscow DNS cfg = dict() @@ -67,6 +69,7 @@ cfg["ADD_CENT_REPO"] = os.getenv("ADD_CENT_REPO") cfg["RELEASE"] = os.getenv("RELEASE") cfg["HA"] = os.getenv("HA") cfg["NETWORK_TYPE"] = os.getenv("NETWORK_TYPE") +cfg["SSH_PUB_KEYS"] = os.getenv("SSH_PUB_KEYS") try: vconn = libvirt.open("qemu:///system") @@ -89,6 +92,8 @@ class SSHHost: self.pswd=pswd + self._valid_key = re.compile('^ssh-rsa.*$') + def _calculate_conn_line(self, usr, subnet): admip = str(subnet.ip + 2) return "{usr}@{admip}".format(usr=usr, admip=admip) @@ -105,6 +110,17 @@ class SSHHost: ssh_cmd = ["scp"]+SSH_PARAMS+['./'+filename,self.conn_line+":"+dest], ) + def put_ssh_pub_keys(self, keys): + with io.open(SSH_PUBKEYS_FILE, "wb") as ofile: + for key in keys.split('\n'): + if self._valid_key.match(key): + ofile.write(key) + ofile.write('\n') + ofile.close() + + self.put_file(SSH_PUBKEYS_FILE) + return self.execute(["cat", "/tmp/" + SSH_PUBKEYS_FILE, ">>", "~/.ssh/authorized_keys"]) + def pprint_dict(subj): if not isinstance(subj, dict): @@ -695,6 +711,8 @@ PUBLIC: print(summary) print ("\nFUEL ACCESS:\n\thttp://{0}:8000".format( str(cfg["PUBLIC_SUBNET"].ip + 2))) + print ("\nSSH ACCESS:\n\tssh root@{0}".format( + str(cfg["PUBLIC_SUBNET"].ip + 2))) print ("\nVNC CONSOLES:\n") for dom in vconn.listAllDomains(): if dom.name().startswith(cfg["ENV_NAME"]): @@ -758,6 +776,9 @@ def main(): if cfg["ADD_CENT_REPO"]!="" and cfg["ADD_CENT_REPO"] is not None: add_cent_repo(admin_node,cfg["ADD_CENT_REPO"]) + if cfg["SSH_PUB_KEYS"]!="" and cfg["SSH_PUB_KEYS"] is not None: + admin_node.put_ssh_pub_keys(cfg["SSH_PUB_KEYS"]) + if cfg["UPDATE_FUEL"]=="true": if do_update(admin_node): print("fuel update complete") diff --git a/jenkins/build_cluster/build_cluster_test.py b/jenkins/build_cluster/build_cluster_test.py index 3c035e6..ffb3215 100755 --- a/jenkins/build_cluster/build_cluster_test.py +++ b/jenkins/build_cluster/build_cluster_test.py @@ -4,7 +4,7 @@ import build_cluster import netaddr -CONNECT_LINE = "root@780_admin" +CONNECT_LINE = "root@test_admin" PSWD = "r00tme" @@ -38,7 +38,7 @@ def main(): test_bool("scp put file check file", not node.execute(["test", "-f","/tmp/update_helper.sh"])) - # NOTE: can take too many time... + # NOTE: can take too many time... test_bool("do update", build_cluster.do_update (node)) repolist='''http://mirror.fuel-infra.org/mos-repos/centos/mos9.0-centos7/updates/x86_64/ @@ -63,5 +63,20 @@ def main(): test_bool("add repo rm repo file 2", node.execute(["rm", "-f","/etc/yum.repos.d/add2.repo"])) + test_bool("add pub keys", + node.put_ssh_pub_keys("""ssh-rsa AAAAB6NzaC1yc2EAAAADAQABAAABAQC8PWq76FFIKmxPGMdWErBMEFwtb2NZYeTxu1lMVacC1QemMMaoybNisvD+L4JyaiC+zFQzlHlCDgicCgw7TXkgFtoyttLMxbshcu+wx0uG8bMlQTZ5DZ7ywwBU7+OysSgBEvju1dlMF7wOKDcYLfJxbYoUYvq+tgVbBWBFm8q+PrMvZZGfPX5M6m/sdpiFc3/f1K6Hh+DeV+9hFx/2vES62Qwv76zzr7oGS3tAi2RyBFt6BWrJx9vqa25AAoqzRsHoj0+0iAi1reZQ3jvz3FIsfgVN+ymVv431X4Gr3H8+BMj56VpT5z8McXj9+o+qoK70YLrtg2z2IpSONOE7o3JX ac@achevychalov_ + +XXXXXJJJJJJJJJ ac@achevycahlov +ssh-rsa AAAAB7NzaC1yc2EAAAADAQABAAABAQC8PWq76FFIKmxPGMdWErBMEFwtb2NZYeTxu1lMVacC1QemMMaoybNisvD+L4JyaiC+zFQzlHlCDgicCgw7TXkgFtoyttLMxbshcu+wx0uG8bMlQTZ5DZ7ywwBU7+OysSgBEvju1dlMF7wOKDcYLfJxbYoUYvq+tgVbBWBFm8q+PrMvZZGfPX5M6m/sdpiFc3/f1K6Hh+DeV+9hFx/2vES62Qwv76zzr7oGS3tAi2RyBFt6BWrJx9vqa25AAoqzRsHoj0+0iAi1reZQ3jvz3FIsfgVN+ymVv431X4Gr3H8+BMj56VpT5z8McXj9+o+qoK70YLrtg2z2IpSONOE7o3JX ac@achevychalov_""")) + + test_bool("add pub keys CHECK1", + node.execute(["egrep","-q","AAAAB6N", ".ssh/authorized_keys"])) + + test_bool("add pub keys CHECK2", + node.execute(["egrep","-q","AAAAB7N", ".ssh/authorized_keys"])) + + test_bool("add pub keys CHECK3", + not node.execute(["egrep","-q","XXXXXJ", ".ssh/authorized_keys"])) + if __name__ == "__main__": main() diff --git a/jenkins/build_cluster/config.xml b/jenkins/build_cluster/config.xml index 4165639..0e77719 100644 --- a/jenkins/build_cluster/config.xml +++ b/jenkins/build_cluster/config.xml @@ -113,6 +113,11 @@ Required! Can be direct URL or URL to torrent-file. + + SSH_PUB_KEYS + Add you keys to default value of job + + Label of Slave You can choose where to deploy your cluster by typing exact slave label here. @@ -158,7 +163,7 @@ fi for file in build_cluster.py scancodes.py update_helper.sh repo_helper.sh; do #curl -o ./${file} "https://raw.githubusercontent.com/Mirantis/tools-sustaining/master/jenkins/build_cluster/${file}" - curl -o ./${file} "https://review.fuel-infra.org/gitweb?p=tools/sustaining.git;a=blob_plain;f=jenkins/build_cluster/${file}${commit_url}" + curl -s -o ./${file} "https://review.fuel-infra.org/gitweb?p=tools/sustaining.git;a=blob_plain;f=jenkins/build_cluster/${file}${commit_url}" chmod +x ${file} done; diff --git a/jenkins/build_cluster/update_helper.sh b/jenkins/build_cluster/update_helper.sh index 8619f85..d1a6cd6 100755 --- a/jenkins/build_cluster/update_helper.sh +++ b/jenkins/build_cluster/update_helper.sh @@ -70,10 +70,11 @@ wait_for () { while true; do eval $1 && return 0 ((cnt++)) - echo -en "$cnt... " + echo -en "." [[ $cnt -eq $2 ]] && return 1 sleep $3 done; + echo "" } first_phase () { -- 2.45.2