Revision 1d9f2031 ci/utils.py

b/ci/utils.py
441 441
            sys.exit(-1)
442 442

  
443 443
    @_check_fabric
444
    def clone_repo(self):
444
    def clone_repo(self, local_repo=False):
445 445
        """Clone Synnefo repo from slave server"""
446 446
        self.logger.info("Configure repositories on remote server..")
447 447
        self.logger.debug("Setup apt, install curl and git")
......
459 459
                   self.config.get('Global', 'git_config_mail'))
460 460
        _run(cmd, False)
461 461

  
462
        # Find synnefo_repo and synnefo_branch to use
462 463
        synnefo_repo = self.config.get('Global', 'synnefo_repo')
463 464
        synnefo_branch = self.config.get("Global", "synnefo_branch")
464 465
        if synnefo_branch == "":
......
472 473
                        ["git", "rev-parse", "--short", "HEAD"],
473 474
                        stdout=subprocess.PIPE).communicate()[0].strip()
474 475
        self.logger.info("Will use branch %s" % synnefo_branch)
475
        # Currently clonning synnefo can fail unexpectedly
476
        cloned = False
477
        for i in range(10):
478
            self.logger.debug("Clone synnefo from %s" % synnefo_repo)
479
            try:
480
                _run("git clone %s synnefo" % synnefo_repo, False)
481
                cloned = True
482
                break
483
            except BaseException:
484
                self.logger.warning("Clonning synnefo failed.. retrying %s"
485
                                    % i)
476

  
477
        if local_repo or synnefo_branch == "":
478
            # Use local_repo
479
            self.logger.debug("Push local repo to server")
480
            # Firstly create the remote repo
481
            _run("git init synnefo", False)
482
            # Then push our local repo over ssh
483
            # We have to pass some arguments to ssh command
484
            # namely to disable host checking.
485
            (temp_ssh_file_handle, temp_ssh_file) = tempfile.mkstemp()
486
            os.close(temp_ssh_file_handle)
487
            cmd = """
488
            echo 'exec ssh -o "StrictHostKeyChecking no" \
489
                           -o "UserKnownHostsFile /dev/null" \
490
                           -q "$@"' > {4}
491
            chmod u+x {4}
492
            export GIT_SSH="{4}"
493
            echo "{0}" | git push --mirror ssh://{1}@{2}:{3}/~/synnefo
494
            rm -f {4}
495
            """.format(fabric.env.password,
496
                       fabric.env.user,
497
                       fabric.env.host_string,
498
                       fabric.env.port,
499
                       temp_ssh_file)
500
            os.system(cmd)
501
        else:
502
            # Clone Synnefo from remote repo
503
            # Currently clonning synnefo can fail unexpectedly
504
            cloned = False
505
            for i in range(10):
506
                self.logger.debug("Clone synnefo from %s" % synnefo_repo)
507
                try:
508
                    _run("git clone %s synnefo" % synnefo_repo, False)
509
                    cloned = True
510
                    break
511
                except BaseException:
512
                    self.logger.warning(
513
                        "Clonning synnefo failed.. retrying %s" % i)
514
            if not cloned:
515
                self.logger.error("Can not clone Synnefo repo.")
516
                sys.exit(-1)
517

  
518
        # Checkout the desired synnefo_branch
519
        self.logger.debug("Checkout %s branch/commit" % synnefo_branch)
486 520
        cmd = """
487 521
        cd synnefo
488 522
        for branch in `git branch -a | grep remotes | \
......
493 527
        """ % (synnefo_branch)
494 528
        _run(cmd, False)
495 529

  
496
        if not cloned:
497
            self.logger.error("Can not clone Synnefo repo.")
498
            sys.exit(-1)
499

  
500 530
    @_check_fabric
501 531
    def build_synnefo(self):
502 532
        """Build Synnefo packages"""

Also available in: Unified diff