Beispiel #1
0
    def _upsert_userinfo(self, sess, user_info):
        """
        update user info to database.

        Args:
            sess: sqlalchemy session
            user_info:
                a dict of {username: {display_name, phone_number, tags, admin}

        Return:
            None
        """

        for username in user_info:
            u = query_for_user(session=sess, username=username)

            if u is None:
                self.logger.info("create user {}".format(username))
                u = User(username=username)
                sess.add(u)

            if self.arborist_client:
                self.arborist_client.create_user({"name": username})

            u.email = user_info[username].get("email", "")
            u.display_name = user_info[username].get("display_name", "")
            u.phone_number = user_info[username].get("phone_number", "")
            u.is_admin = user_info[username].get("admin", False)

            # do not update if there is no tag
            if user_info[username]["tags"] == {}:
                continue

            # remove user db tags if they are not shown in new tags
            for tag in u.tags:
                if tag.key not in user_info[username]["tags"]:
                    u.tags.remove(tag)

            # sync
            for k, v in user_info[username]["tags"].items():
                found = False
                for tag in u.tags:
                    if tag.key == k:
                        found = True
                        tag.value = v
                # create new tag if not found
                if not found:
                    tag = Tag(key=k, value=v)
                    u.tags.append(tag)
Beispiel #2
0
def create_providers(data, db_session):
    s = db_session
    providers = data["providers"]
    for provider in providers:
        prov = CloudProvider()
        prov.name = provider["name"]
        prov.backend = provider["backend"]
        prov.service = provider["service"]
        s.add(prov)
        s.flush

    for name, user in list(data["users"].items()):
        new_user = User()
        new_user.username = name
        new_user.email = user["email"]
        new_user.is_admin = user["is_admin"]
        s.add(new_user)
        user["id"] = new_user.id

    for project in data["projects"]:
        new_project = Project()
        new_project.name = project["name"]
        s.add(new_project)
        for storage in project["storage_access"]:
            provider = s.query(CloudProvider).filter_by(name=storage).first()
            if provider:
                new_storage_access = StorageAccess(provider_id=provider.id,
                                                   project_id=new_project.id)
                s.add(new_storage_access)

        for bucket in project["buckets"]:
            new_bucket = Bucket()
            new_bucket.name = bucket["name"]
            provider = s.query(CloudProvider).filter_by(
                name=bucket["provider"]).first()
            new_bucket.provider_id = provider.id
            s.add(new_bucket)
            s.flush()
            project_to_bucket = ProjectToBucket()
            project_to_bucket.bucket_id = new_bucket.id
            project_to_bucket.project_id = new_project.id
            s.add(project_to_bucket)
            s.flush()
        for user in project["users"]:
            access = AccessPrivilege()
            access.user_id = data["users"][user["name"]]["id"]
            access.project_id = new_project.id
            s.add(access)