]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
openstack: Support GitHub PR merge branches
authorKyrylo Shatskyy <kyrylo.shatskyy@gmail.com>
Thu, 6 Dec 2018 19:42:54 +0000 (20:42 +0100)
committerKyr Shatskyy <kyrylo.shatskyy@suse.com>
Mon, 14 Oct 2019 14:47:01 +0000 (16:47 +0200)
Add support for github pr merge branches, like 'origin/pr/*/merge',
so it can be used to setup teuthology server using teuthology-openstack
command line tool with --teuthology-branch argument.

Signed-off-by: Kyr Shatskyy <kyrylo.shatskyy@suse.com>
teuthology/openstack/__init__.py
teuthology/openstack/bootstrap-teuthology.sh [new file with mode: 0644]

index c491dfd075790e8ae1c25a312703ebb2c9f693c9..0c6477c565cacfcf61b097ac19bd3b06978d74fd 100644 (file)
@@ -37,6 +37,7 @@ import teuthology
 import time
 import types
 import yaml
+import base64
 
 from subprocess import CalledProcessError
 
@@ -1033,6 +1034,9 @@ ssh access           : ssh {identity}{username}@{ip} # logs in /usr/share/nginx/
         #     user_data = os.path.join(os.path.dirname(__file__),
         #                              '../..', self.user_data)
         # template = open(user_data).read()
+        with open(os.path.dirname(__file__) + '/bootstrap-teuthology.sh', 'r') as f:
+            bootstrap_content = cmd_str(f.read().encode('base64'))
+
         openrc = ''
         cacert_cmd = None
         for (var, value) in os.environ.items():
@@ -1055,14 +1059,7 @@ ssh access           : ssh {identity}{username}@{ip} # logs in /usr/share/nginx/
         #     upload = '--archive-upload ' + self.args.archive_upload
         # else:
         #     upload = ''
-        clone = teuth_config.openstack['clone']
         network = OpenStack().get_network()
-        log.debug('Default teuthology clone: %s' % clone)
-        if self.args.teuthology_git_url:
-            clone = "git clone -b {branch} {url}".format(
-                branch=self.args.teuthology_branch,
-                url=self.args.teuthology_git_url)
-            log.debug('Overridden teuthology clone: %s' % clone)
         ceph_workbench = ''
         if self.args.ceph_workbench_git_url:
             ceph_workbench += (" --ceph-workbench-branch " +
@@ -1113,8 +1110,13 @@ ssh access           : ssh {identity}{username}@{ip} # logs in /usr/share/nginx/
 
 
         cmds = [
-            "su - -c '(set -x ; %s && cd teuthology && ./bootstrap install)' "
-            "%s >> /tmp/init.out 2>&1" % (clone, self.username),
+            cmd_str(
+                "su - -c 'bash /tmp/bootstrap-teuthology.sh "
+                "teuthology {url} {branch}' {user} >> "
+                "/tmp/init.out 2>&1".format(
+                    url=self.args.teuthology_git_url,
+                    branch=self.args.teuthology_branch,
+                    user=self.username)),
             #"echo 'export %s' | tee /home/%s/openrc.sh" % (openrc, self.username),
             cmd_str(
                 "su - -c 'cat | tee $HOME/openrc.sh' {user} <<EOF\n"
@@ -1153,6 +1155,14 @@ ssh access           : ssh {identity}{username}@{ip} # logs in /usr/share/nginx/
                 'git',
                 'rsync',
             ],
+            'write_files': [
+                {
+                    'path': '/tmp/bootstrap-teuthology.sh',
+                    'content': bootstrap_content,
+                    'encoding': 'b64',
+                    'permissions': '0755',
+                },
+            ],
             'runcmd': cmds,
             'final_message': 'teuthology is up and running after $UPTIME seconds'
         }
diff --git a/teuthology/openstack/bootstrap-teuthology.sh b/teuthology/openstack/bootstrap-teuthology.sh
new file mode 100644 (file)
index 0000000..ea349fa
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/bash -ex
+TEUTH_PATH=${1:-"teuthology"}
+TEUTH_GIT=${2:-"https://github.com/ceph/teuthology"}
+TEUTH_BRANCH=${3:-"master"}
+
+mkdir -p $TEUTH_PATH
+git init $TEUTH_PATH
+
+pushd $TEUTH_PATH
+
+echo Fetch upstream changes from $TEUTH_GIT
+git fetch --tags --progress $TEUTH_GIT +refs/heads/*:refs/remotes/origin/*
+git config remote.origin.url $TEUTH_GIT
+git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
+git config remote.origin.url $TEUTH_GIT
+
+# Check if branch has form origin/pr/*/merge
+isPR="^origin\/pr\/"
+if [[ "$TEUTH_BRANCH" =~ $isPR ]] ; then
+
+git fetch --tags --progress https://github.com/suse/teuthology +refs/pull/*:refs/remotes/origin/pr/*
+rev=$(git rev-parse refs/remotes/$TEUTH_BRANCH^{commit})
+
+git config core.sparsecheckout
+git checkout -f $rev
+else
+git checkout $TEUTH_BRANCH
+fi
+
+./bootstrap install
+
+popd
+