Exemple #1
0
class Project(Duffyv1Model):
    """"""
    __tablename__ = 'users'
    apikey = db.Column(db.String(37), primary_key=True)
    projectname = db.Column(db.String(50))
    jobname = db.Column(db.String(50))
    createdat = db.Column(db.DateTime)
    limitnodes = db.Column(db.Integer)
    sshkeys = db.relationship("SSHKey", backref="project")
Exemple #2
0
class Session(Duffyv1Model):
    __tablename__ = 'sessions'
    id = db.Column(db.String(37), default=lambda: str(uuid.uuid4())[:8], primary_key=True)
    delivered_at = db.Column(db.DateTime, default=datetime.datetime.now())
    dropped_at = db.Column(db.DateTime)
    apikey = db.Column(db.String(37))
    state = db.Column(db.String(15), default='Prod')
    jobid = db.Column(db.String(200))
    hosts = db.relationship('Host', lazy='joined')
Exemple #3
0
class openstack_host(Duffyv1Model):
    __tablename__ = 'openstack_nodes'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30))
    hostname = db.Column(db.String(20))
    ip = db.Column(db.String(15))
    state = db.Column(db.String(20))
    next_state = db.Column(db.String(20))
    comment = db.Column(db.String(255))
    image_source = db.Column(db.String(30))
    flavor = db.Column(db.Sting(20))
    session_id = db.Column(db.String(37), db.ForeignKey('sessions.id'))
    session = db.relationship('Session', lazy='joined')

    def contextualize(self, project):
        self.state = 'Contextualizing'
        self.save()
        # Sync all of the keys to the root user on the remote host
        import paramiko
        import os
        try:
            ssh = paramiko.SSHClient()
            # TODO: Make this configurable
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            key = paramiko.RSAKey.from_private_key_file(
                os.path.expanduser('~/.ssh/id_rsa'))
            ssh.connect(self.ip, username='******', pkey=key)
            sftp = ssh.open_sftp()
            file_handle = sftp.file('/root/.ssh/authorized_keys',
                                    mode='a',
                                    bufsize=-1)
        except Exception as e:
            self.state = 'Active'
            self.save()
            return False

        try:
            for sshkey in project.sshkeys:
                file_handle.write(sshkey.key + '\n')
            file_handle.flush()
            file_handle.close()
            ssh.close()
        except Exception as e:
            self.state = 'Failed'
            self.save()
            return False
        return True
Exemple #4
0
class Host(Duffyv1Model):
    __tablename__ = 'stock'
    id = db.Column(db.Integer, primary_key=True)
    hostname = db.Column(db.String(20))
    ip = db.Column(db.String(15))
    chassis = db.Column(db.String(20))
    used_count = db.Column(db.Integer)
    state = db.Column(db.String(20))
    comment = db.Column(db.String(255))
    distro = db.Column(db.String(20))
    rel = db.Column(db.String(10))
    ver = db.Column(db.String(10))
    arch = db.Column(db.String(10))
    pool = db.Column(db.Integer)
    console_port = db.Column(db.Integer)
    flavor = db.Column(db.String(20))
    session_id = db.Column(db.String(37), db.ForeignKey('sessions.id'))
    session = db.relationship('Session', lazy='joined')

    def contextualize(self, project):
        self.state = 'Contextualizing'
        self.save()
        # Sync all of the keys to the root user on the remote host
        import paramiko
        import os
        try:
            ssh = paramiko.SSHClient()
            # TODO: Make this configurable
            key = paramiko.DSSKey.from_private_key_file(os.path.expanduser('~/.ssh/id_dsa'))
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            ssh.connect(self.hostname, username='******', pkey=key)
            sftp = ssh.open_sftp()
            file_handle = sftp.file('/root/.ssh/authorized_keys', mode='a', bufsize=-1)
        except Exception as e:
            self.state = 'Ready'
            self.save()
            return False

        try:
            for sshkey in project.sshkeys:
                file_handle.write(sshkey.key + '\n')
            file_handle.flush()
            file_handle.close()
            ssh.close()
        except Exception as e:
            self.state = 'Failed'
            self.save()
            return False
        return True         # If all went well, we made it here
Exemple #5
0
class SSHKey(Duffyv1Model):
    __tablename__ = 'userkeys'
    id = db.Column(db.Integer, primary_key=True)
    project_id = db.Column(db.String(37), db.ForeignKey('users.apikey'))
    key = db.Column(db.String(8192))