示例#1
0
class OmeletAMIPacker(OmeletPacker):

    def __init__(self, configs, aws_key, repo):
        OmeletPacker.__init__(self, configs, repo)
        self._aws_key = aws_key
        self._launcher = AMIPackerLauncher(configs, aws_key, self._git)

    def launch(self):
        sha1 = os.environ['COMMIT_ID']
        comment = os.environ['CI_MESSAGE']
        (committer, diff_list) = self._git.get_commit_diff_info()
        db_configs = DBConfigParser()
        db = DBAccessor()
        db.connect(db_configs.get_dynamodb_region(), self._aws_key.get_aws_access_key(),
                   self._aws_key.get_aws_secret_key())
        db.table_init(db_configs.get_dynamodb_tables()['image_table'],
                      db_configs.get_dynamodb_tables()['tree_table'],
                      db_configs.get_dynamodb_tables()['history_table'])
        for diff_file in diff_list:
            if self._is_template(diff_file):
                template = os.path.join(self._git.get_repo(), diff_file)

                # main program
                if self._validate(diff_file):
                    ami_name = self._get_image_name(diff_file)
                    self._launch_amipacker_series(db, ami_name, template, sha1, committer.name,
                                                  committer.email, comment, True, ami_name)
                else:
                    return "Image File: %s\nCommitter: %s<%s>" % (diff_file, committer.name, committer.email)
        return None

    def _launch_amipacker_series(self, db, ami_name, template, sha1, committer, committer_mail,
                                 comment, notify, causedby=None):
        # update myself
        valid = self._launcher.launch_amipacker(db, ami_name, template, sha1, committer,
                                                committer_mail, comment, notify, causedby)

        # update my descent if any
        if valid:
            for child in db.get_tree_children(ami_name):
                self._launch_amipacker_series(db, child, self._get_template(child), sha1,
                                              committer, committer_mail, comment, notify, causedby)
示例#2
0
 def __init__(self, configs, aws_key, repo):
     OmeletPacker.__init__(self, configs, repo)
     self._aws_key = aws_key
     self._launcher = AMIPackerLauncher(configs, aws_key, self._git)