Exemple #1
0
class Domain(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    slug = db.Column(db.String(255))

    uri = db.Column(db.String(255))
    htpasswd = db.Column(db.String(128))
    ssl_key = db.Column(db.String(128))

    upstreams = db.relationship(
        'Upstream',
        backref='domain',
    )

    domain_controller_id = db.Column(db.Integer,
                                     db.ForeignKey('domain_controller.id'))

    aliases = db.relationship(
        'Alias',
        backref=db.backref('domain', lazy='joined'),
    )

    def has_upstream(self, upstreamInfo):
        for upstream in self.upstreams:
            if upstream == upstreamInfo:
                return True

        return False

    def __str__(self):
        return 'Domain {}: {} with controller : {}'\
            .format(self.id, self.uri, self.domain_controller.id)
Exemple #2
0
class SSL(db.Model):
    __tablename__ = 'ssl_keys'
    __table_args__ = (UniqueConstraint('name',
                                       'domaincontroller_id',
                                       name='_ssl_dc_uc'), )
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    domaincontroller_id = db.Column(db.Integer,
                                    db.ForeignKey('domain_controller.id'))
Exemple #3
0
class Upstream(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ip = db.Column(db.String(32))
    port = db.Column(db.Integer)
    port_ssl = db.Column(db.Integer)
    state = db.Column(db.Enum(*UPSTREAM_STATES))
    domain_id = db.Column(db.Integer, db.ForeignKey('domain.id'))

    def __eq__(self, other):
        if other.id == self.id:
            return True

        if other.ip == self.ip and other.port == self.port\
                and other.port_ssl == self.port_ssl:
            return True

        return False

    def __str__(self):
        return 'Upstream {}: {} with state : {}'\
            .format(self.id, self.ip, self.state)
Exemple #4
0
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
from jeto import db

teams_users = db.Table(
    'teams_users', db.Column('team_id', db.Integer, db.ForeignKey('team.id')),
    db.Column('user_id', db.String(64), db.ForeignKey('user.id')))


class Team(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    users = db.relationship(
        'User',
        secondary=teams_users,
        backref=db.backref('teams', lazy='select'),
    )
    permissions_grids = db.relationship(
        'TeamPermissionsGrids',
        backref='team',
    )

    def __init__(self, id, name, users=[]):
        self.id = id
        self.name = name
        self.users = users

    def get_permissions_grids(self, objectType=None, objectId=None):
        permissions_grids = sorted(self.permissions_grids,
                                   key=lambda item: item.objectType)
        if objectType is not None:
Exemple #5
0
class VagrantInstance(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    path = db.Column(db.String(256))
    name = db.Column(db.String(128))
    environment = db.Column(db.String(128))
    project_id = db.Column(db.Integer, db.ForeignKey('project.id'))
    host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
    git_reference = db.Column(db.String(128))
    archive_url = db.Column(db.String(256))

    def __init__(self,
                 id,
                 path,
                 name,
                 environment,
                 git_reference=None,
                 archive_url=None):
        self.id = id
        self.path = path
        self.name = name
        self.environment = environment
        self.git_reference = git_reference
        self.archive_url = archive_url
        # self.init_on_load()

    def __unicode__(self):
        return '{} : {} : {}'.format(self.name, self._status,
                                     self._generatePath())

    def __str__(self):
        return self.__unicode__()

    def post(self):
        return self

    @orm.reconstructor
    def init_on_load(self):
        # self.status = self._status()
        # if 'running' in self.status:
        #     self.ip = self._ip()
        pass

    def _status(self):
        path = self._generatePath()

        results = self._submit_job(
            'status',
            path=path,
            host=self.host,
            environment=self.environment,
        )

        machines, jeto_infos, scripts, date_commit = self._parse_status(
            results)
        machinesFormatted = []
        for machine, value in machines.iteritems():
            app.logger.debug(value)
            if 'state-human-short' in value:
                val = value['state-human-short']
            elif 'error-exit' in value:
                val = value['error-exit']  # Vagrant is not ready yet
            else:
                val = 'Something went wrong'

            machinesFormatted.append({
                'name': machine,
                'status': val,
                # 'ip': value['ip']
            })

        return machinesFormatted, jeto_infos, scripts, date_commit

    def _parse_status(self, results):
        results = json.loads(results)

        date_commit = results.get('date_commit', None)

        jeto_infos = results.get('jeto_infos')
        scripts = None
        if jeto_infos:
            scripts = jeto_infos.get('scripts', None)
            if scripts:
                del jeto_infos['scripts']

        results = results.get('vagrant', 'Something went wrong\n')
        machines = {}
        if results is not None:
            results = results.split('\n')
            # Vagrant returns 5 lines, the first one being #BEGIN# and
            # the last line being #END#, we want everything else
            results = results[1:-3]
            formatted = []
            item = []
            for result in results:
                # Clean up
                result = result.replace('\\', ' ')

                if ',' in result and len(item) > 0:
                    formatted.append(item)
                    item = []

                # Each field is comma seperated
                if ',' in result:
                    item = result.split(',')
                    # !(VAGRANT_COMMA) is a real comma, but escaped by vagrant
                    item[-1] = item[-1].replace('%!(VAGRANT_COMMA)', ',')
                    formatted.append(item)
                else:
                    # !(VAGRANT_COMMA) is a real comma, but escaped by vagrant
                    result = result.replace('%!(VAGRANT_COMMA)', ',')
                    if len(item):
                        item[-1] = item[-1] + result

            withoutTimestamp = []
            for item in formatted:
                withoutTimestamp.append(item[1:])

            for item in withoutTimestamp:
                if item[0] not in machines:
                    machines[item[0]] = {}

                if len(item) >= 3:
                    machines[item[0]][item[1]] = item[2]

        return (machines, jeto_infos, scripts, date_commit)

    def _ip(self, machineName):
        results = self._submit_job(
            'ip',
            path=self._generatePath(),
            machineName=machineName,
            host=self.host,
            environment=self.environment,
        )
        return results

    def _generatePath(self):
        path = self.path
        if self.git_reference:
            return PROJECT_BASEPATH + \
                slugify.slugify(self.project.name) +\
                '/' + \
                slugify.slugify(self.name) + \
                '/' + \
                self.git_reference
        elif self.archive_url:
            return PROJECT_BASEPATH + \
                slugify.slugify(self.project.name) +\
                '/' + \
                slugify.slugify(self.name) + \
                '/' + \
                'tgz'

        return path

    def start(self, machineName='default'):
        results = self._submit_job(
            'run',
            machineName=machineName,
            path=self._generatePath(),
            environment=self.environment,
            host=self.host,
        )

        return results

    def provision(self, machineName):
        results = self._submit_job(
            'provision',
            path=self._generatePath(),
            environment=self.environment,
            machineName=machineName,
            host=self.host,
        )
        return results

    def stop(self, machineName):
        results = self._submit_job(
            'stop',
            path=self._generatePath(),
            environment=self.environment,
            machineName=machineName,
            host=self.host,
        )
        return results

    def delete(self):
        self._submit_job(
            'destroy',
            path=self._generatePath(),
            environment=self.environment,
            host=self.host,
        )
        db.session.delete(self)
        db.session.commit()

    def extract(self):
        results = self._submit_job(
            'extract',
            path=self._generatePath(),
            archive_url=self.archive_url,
            host=self.host,
        )
        return results

    def rsync(self):
        results = self._submit_job(
            'rsync',
            path=self._generatePath(),
            host=self.host,
        )
        return results

    def sync(self):
        results = self._submit_job(
            'sync',
            path=self._generatePath(),
            git_reference=self.git_reference,
        )
        return results

    def clone(self):
        results = self._submit_job(
            'clone',
            path=self._generatePath(),
            git_address=self.project.git_address,
            git_reference=self.git_reference,
            host=self.host,
        )
        return results

    def runScript(self, script, machineName='default'):
        results = self._submit_job(
            'run_script',
            path=self._generatePath(),
            host=self.host,
            environment=self.environment,
            machineName=machineName,
            script=script,
        )
        return results

    def _submit_job(self, action, **kwargs):
        with Connection():
            queue = Queue('high', connection=redis_conn)
            action = 'worker.{}'.format(action)
            job = queue.enqueue_call(
                func=action,
                timeout=1200,
                job_id=str(time.time()),
                kwargs=kwargs,
            )
            if action != 'worker.status':
                redis_conn.hmset('jobs:{}'.format(self.id),
                                 {job.id: str(current_user.id)})

            if is_async() is False:
                while job.result is None:
                    time.sleep(0.5)
            else:
                return job.id

        return job.result
Exemple #6
0
class Alias(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    uri = db.Column(db.String(255))
    domain_id = db.Column(db.Integer, db.ForeignKey('domain.id'))
Exemple #7
0
class APIKey(db.Model):
    __tablename__ = 'api_key'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    comment = db.Column(db.String(255))
    user_id = db.Column(db.String(64), db.ForeignKey('user.id'))
Exemple #8
0
class TeamPermissionsGrids(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    objectId = db.Column(db.Integer)
    objectType = db.Column(db.String(64))
    action = db.Column(db.String(64))
    team_id = db.Column(db.Integer, db.ForeignKey('team.id'))
Exemple #9
0
class UserPermissionsGrids(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    objectId = db.Column(db.Integer)
    objectType = db.Column(db.String(64))
    action = db.Column(db.String(64))
    user_id = db.Column(db.String(64), db.ForeignKey('user.id'))