Exemplo n.º 1
0
def manifest_file_delete(workspace_id, manifest_id):
    """マニフェストテンプレートファイル削除

    Args:
        workspace_id (int): ワークスペースID
        file_id (int): ファイルID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL manifest_file_delete:workspace_id:{}, manifest_id:{}".format(
            workspace_id, manifest_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:
            # manifests情報 delete実行
            upd_cnt = da_manifest.delete_manifest(cursor, workspace_id,
                                                  manifest_id)

            globals.logger.debug("delete_manifest:ret:{}".format(upd_cnt))

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        return jsonify({"result": "200"})

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 2
0
def logs_insert(workspace_id=None, username=None, log_kind=None):
    """ログ出力 Log output

    Args:
        workspace_id (int): workspace id
        username (str): username
        log_kind (str): log_kind

    Returns:
        response: HTTP Respose
    """

    try:
        globals.logger.debug(
            'CALL {}:from[{}] workspace_id[{}] member[{}] log_kind[{}]'.format(
                inspect.currentframe().f_code.co_name, request.method,
                workspace_id, username, log_kind))

        with dbconnector() as db, dbcursor(db) as cursor:

            # Requestからcontentsを設定 Set contents from Request
            contents = request.json.copy()

            # logs insert実行
            log_id = da_logs.insert_logs(cursor, workspace_id, username,
                                         log_kind, contents)

            globals.logger.debug('insert log_id:{}'.format(log_id))

        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(
            e, "{} error".format(inspect.currentframe().f_code.co_name))
Exemplo n.º 3
0
def list_workspace():
    """ワークスペース一覧取得

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL list_workspace')

    try:
        # Requestからorganization_id項目を抽出する
        organization_id = request.json['common']['organization_id']

        with dbconnector() as db, dbcursor(db) as cursor:
            # select実行
            fetch_rows = da_workspace.select_workspace(cursor, organization_id)

        # Response用のjsonに変換
        response_rows = convert_workspace_response(fetch_rows)

        return jsonify({
            "result": "200",
            "rows": response_rows,
            "time": str(datetime.now(globals.TZ))
        }), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 4
0
def get_tekton_task(workspace_id):
    """CI結果情報取得

    Returns:
        response: HTTP Respose
    """

    try:
        globals.logger.debug('CALL {}:from[{}] workspace_id[{}]'.format(
            inspect.currentframe().f_code.co_name, request.method,
            workspace_id))

        with dbconnector() as db, dbcursor(db) as cursor:

            # CI result information select execution - CI結果情報 select実行
            fetch_rows = da_ci_result.select_tekton_pipeline_task(
                cursor, workspace_id)

        # Successful completion - 正常終了
        res_status = 200

        return jsonify({"result": res_status, "rows": fetch_rows}), res_status

    except Exception as e:
        return common.serverError(
            e, "tekton_pipeline_task db registration error")
Exemplo n.º 5
0
def cd_result_insert(workspace_id, cd_result_id, username):
    """CD結果登録 cd result insert

    Args:
        workspace_id (int): workspace id
        cd_result_id (int): cd-result id
        username (str): username

    Returns:
        response: HTTP Respose
    """

    try:
        globals.logger.debug(
            'CALL {}:from[{}] workspace_id[{}] member[{}]'.format(
                inspect.currentframe().f_code.co_name, request.method,
                workspace_id, username))

        with dbconnector() as db, dbcursor(db) as cursor:

            # Requestからcontentsを設定 Set contents from Request
            contents = request.json.copy()

            # cd-result insert実行
            lastrowid = da_cd_result.insert_cd_result(cursor, workspace_id,
                                                      cd_result_id, username,
                                                      contents)

            globals.logger.debug('insert lastrowid:{}'.format(lastrowid))

        return jsonify({"result": "200", "lastrowid": lastrowid}), 200

    except Exception as e:
        return common.server_error(
            e, "{} error".format(inspect.currentframe().f_code.co_name))
Exemplo n.º 6
0
def patch_tekton_task(workspace_id, task_id):
    """CI結果情報更新

    Args:
        workspace_id (int): ワークスペース ID
        task_id (int): task ID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL patch_tekton_task:{}_{}'.format(
        workspace_id, task_id))

    try:
        # Requestからinfo項目を生成する
        info = request.json

        with dbconnector() as db, dbcursor(db) as cursor:
            # CI結果情報更新
            upd_cnt = da_ci_result.update_tekton_pipeline_task(
                cursor, info, task_id)

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

            # 正常終了
            return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(e, "tekton_pipeline_task db update error")
Exemplo n.º 7
0
def get_workspace(workspace_id):
    """ワークスペース詳細

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL get_workspace:{}'.format(workspace_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:
            # workspace情報データ取得
            fetch_rows = da_workspace.select_workspace_id(cursor, workspace_id)

        if len(fetch_rows) > 0:
            # Response用のjsonに変換
            response_rows = convert_workspace_response(fetch_rows)

            return jsonify({
                "result": "200",
                "rows": response_rows,
                "time": str(datetime.now(globals.TZ))
            }), 200

        else:
            # 0件のときは404応答
            return jsonify({"result": "404"}), 404

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 8
0
def workspace_status_get(workspace_id):
    """ワークスペース状態情報取得 worksapce status info. get

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug("CALL workspace_status_get:{}".format(workspace_id))

    try:
        # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載)
        with dbconnector() as db, dbcursor(db) as cursor:

            # ワークスペース状態情報 select実行 worksapce status info. select
            fetch_rows = da_workspace_status.select_workspace_status(
                cursor, workspace_id)

            if len(fetch_rows) == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        # Response用のjsonに変換[変換が必要な場合は関数化する]
        response_row = json.loads(fetch_rows[0]["info"])

        return jsonify(response_row), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 9
0
def get_organization(organization_id):
    """オーガナイゼーション詳細

    Args:
        organization_id (int): organization ID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL get_organization:{}'.format(organization_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:
            # organization情報データ取得
            fetch_rows = da_organization.select_organization_id(
                cursor, organization_id)

        if len(fetch_rows) > 0:
            # Response用のjsonに変換
            response_rows = fetch_rows

            return jsonify({
                "result": "200",
                "rows": response_rows,
                "time": str(datetime.now(globals.TZ))
            }), 200

        else:
            # 0件のときは404応答
            return jsonify({"result": "404"}), 404

    except Exception as e:
        return common.serverError(e, "organization db get row error")
Exemplo n.º 10
0
def workspace_status_delete(workspace_id, id):
    """ワークスペース状態情報削除 worksapce status info. delete

    Args:
        workspace_id (int): ワークスペースID
        id (int): ワークスペース状態情報ID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL workspace_status_delete:workspace_id:{}".format(workspace_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:
            # ワークスペース状態情報 delete実行 worksapce status info. delete
            upd_cnt = da_workspace_status.delete_workspace_status(
                cursor, workspace_id)

            globals.logger.debug("workspace_status:ret:{}".format(upd_cnt))

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 11
0
def workspace_status_update(workspace_id):
    """ワークスペース状態情報更新 worksapce status info. update

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL workspace_status_update:{}".format(workspace_id))

    try:
        # 更新対象のJson値をパラメータとして受け取る Receive the Json value to be updated as a parameter
        info_upadate_colums = request.json
        with dbconnector() as db, dbcursor(db) as cursor:

            # ワークスペース状態情報 update実行 worksapce status info. update
            upd_cnt = da_workspace_status.update_workspace_status(
                cursor, workspace_id, info_upadate_colums)

            globals.logger.debug('update workspace_id:{}'.format(workspace_id))

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 12
0
def workspace_status_registration(workspace_id):
    """ワークスペース状態状態登録 workspace status registration

    Args:
        workspace_id (int): ワークスペースID worksapce id

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL workspace_access_registration:{}".format(workspace_id))

    try:
        # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載)
        info = request.json
        with dbconnector() as db, dbcursor(db) as cursor:

            # ワークスペース状態情報 insert実行 worksapce status info. insert
            da_workspace_status.insert_workspace_status(
                cursor, workspace_id, info)

            globals.logger.debug('insert workspace_id:{}'.format(workspace_id))

        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 13
0
def workspace_access_update(workspace_id):
    """ワークスペースアクセス情報更新

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL workspace_access_update:{}".format(workspace_id))

    try:
        # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載)
        info = request.json
        with dbconnector() as db, dbcursor(db) as cursor:

            # ワークスペースアクセス情報 update実行
            upd_cnt = da_workspace_access.update_workspace_access(
                cursor, workspace_id, info)

            globals.logger.debug('update workspace_id:{}'.format(workspace_id))

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 14
0
def manifest_file_get(workspace_id, file_id):
    """マニフェストテンプレートファイル取得

    Args:
        workspace_id (int): ワークスペースID
        file_id (int): ファイルID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL manifest_file_get: [ workspace_id: {}, manifest_id: {} ]".format(
            workspace_id, file_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:

            # manifest情報の取得
            fetch_rows = da_manifest.select_manifest_id(
                cursor, workspace_id, file_id)

            if len(fetch_rows) == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        # Response用のjsonに変換
        response_rows = fetch_rows

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 15
0
def get_workspace_before(workspace_id):
    """更新前のワークスペース履歴 - Workspace history before update

    Args:
        workspace_id (int): workspace id

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL get_workspace_before:{}'.format(workspace_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:
            # get workspace history - workspace履歴取得
            fetch_rows = da_workspace.select_history(cursor, workspace_id)

        if len(fetch_rows) > 0:
            # Convert to json for Response - Response用のjsonに変換
            response_rows = convert_workspace_response(fetch_rows)

            return jsonify({
                "result": "200",
                "rows": response_rows,
                "time": str(datetime.now(globals.TZ))
            }), 200

        else:
            # 404 response when 0 - 0件のときは404応答
            return jsonify({"result": "404"}), 404

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 16
0
def delete_workspace_pipeline(workspace_id, kind):
    """tekton pipelineの削除
        tekton_pipeline_yamlテーブルから適用済みのyamlを取得し削除する

    Args:
        workspace_id (int): ワークスペースID
        kind (str): 区分 "namespace"/"pipeline"
    """
    globals.logger.debug(
        'start delete_workspace_pipeline_files workspace_id:{} kind:{}'.format(
            workspace_id, kind))

    with dbconnector() as db, dbcursor(db) as cursor:
        # 適用済みのyaml取得
        fetch_rows = da_tekton.select_tekton_pipeline_yaml_id(
            cursor, workspace_id, kind)

    with tempfile.TemporaryDirectory() as tempdir, dbconnector(
    ) as db, dbcursor(db) as cursor:
        for fetch_row in fetch_rows:
            globals.logger.debug(
                'tekton pipeline delete workspace_id:{} template:{}'.format(
                    workspace_id, fetch_row['filename']))

            # yaml一時ファイル生成
            path_yamlfile = '{}/{}'.format(tempdir, fetch_row['filename'])
            with open(path_yamlfile, mode='w') as fp:
                fp.write(fetch_row['yamltext'])

            # kubectl実行
            try:
                result_kubectl = subprocess.check_output(
                    ['kubectl', 'delete', '-f', path_yamlfile],
                    stderr=subprocess.STDOUT)
                globals.logger.debug(
                    'COMMAAND SUCCEED: kubectl delete -f {}\n{}'.format(
                        path_yamlfile, result_kubectl.decode('utf-8')))

            except subprocess.CalledProcessError as e:
                globals.logger.error('COMMAND ERROR RETURN:{}\n{}'.format(
                    e.returncode, e.output.decode('utf-8')))
                # 削除失敗は無視

            # リソースを削除したら適用済みのyaml情報を削除する
            da_tekton.delete_tekton_pipeline_yaml(cursor, fetch_row['yaml_id'])

            db.commit()
Exemplo n.º 17
0
def update_manifestParameter(workspace_id):
    """ワークスペース変更

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL update_manifestParameter:{}".format(workspace_id))

    try:
        request_json = request.json.copy()
        update_at = request_json["update_at"]
        update_at = parser.parse(update_at)

        # Requestからspecification項目を生成する
        specification = request_json

        with dbconnector() as db, dbcursor(db) as cursor:
            # workspace情報取得
            workspaceInfo = da_workspace.select_workspace_id(
                cursor, workspace_id)

            # workspace情報のmanifestParameter部を差し替え
            db_specification = json.loads(workspaceInfo[0]["specification"])

            # 登録する配列用のindex
            i = 0
            for db_env in db_specification["ci_config"]["environments"]:
                for in_env in specification["ci_config"]["environments"]:
                    if db_env["environment_id"] == in_env["environment_id"]:
                        db_specification["ci_config"]["environments"][i][
                            "manifests"] = in_env["manifests"]
                        break
                i += 1

            # manifestパラメータの項目説明も更新に含める
            db_specification["parameter-info"] = specification[
                "parameter-info"]

            # workspace情報 update実行
            upd_cnt = da_workspace.update_workspace(cursor, db_specification,
                                                    workspace_id, update_at)

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

            # Response用のjsonに変換
            response_rows = workspaceInfo

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 18
0
def put_workspace(workspace_id):
    """ワークスペース更新

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug("CALL put_workspace:{}".format(workspace_id))
    app_name = "ワークスペース情報更新:"
    exec_stat = "初期化"
    exec_detail = ""

    try:
        request_json = request.json.copy()
        update_at = request_json["update_at"]
        update_at = parser.parse(update_at)
        globals.logger.debug(f"update_at:{update_at}")
        # Requestからspecification項目を生成する
        specification = convert_workspace_specification(request_json)

        exec_stat = "DB接続"
        with dbconnector() as db, dbcursor(db) as cursor:
            # workspace情報 update実行
            exec_stat = "更新実行"
            upd_cnt = da_workspace.update_workspace(cursor, specification,
                                                    workspace_id, update_at)

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({
                    "result": "404",
                    "errorStatement": app_name + exec_stat,
                    "errorDetail": "更新するデータがありません"
                }), 404

            # workspace履歴追加
            exec_stat = "登録実行(履歴)"
            da_workspace.insert_history(cursor, workspace_id)

            # workspace情報の再取得
            exec_stat = "登録データ確認"
            fetch_rows = da_workspace.select_workspace_id(cursor, workspace_id)

        # Response用のjsonに変換
        response_rows = fetch_rows

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e, app_name + exec_stat, exec_detail)
Exemplo n.º 19
0
def cd_result_list(workspace_id=None,
                   cd_result_id=None,
                   username=None,
                   latest=False):
    """CD結果取得 cd result list

    Args:
        workspace_id (int): workspace id
        cd_result_id (string): cd-result id
        username (str): username
        latest (Bool): latest True or False

    Returns:
        response: HTTP Respose
    """

    try:
        globals.logger.debug(
            'CALL {}:from[{}] workspace_id[{}] cd_result_id[{}] username[{}] latest[{}]'
            .format(inspect.currentframe().f_code.co_name, request.method,
                    workspace_id, cd_result_id, username, latest))

        globals.logger.debug('CALL {}:args[{}]'.format(
            inspect.currentframe().f_code.co_name, request.args))
        #    latest (bool): 最新のみ
        if request.args.get('latest') is not None:
            latest = request.args.get('latest') == "True"
        else:
            latest = False

        #    cd_status_in (str): 最新のみ
        if request.args.get('cd_status_in') is not None:
            cd_status_in = request.args.get('cd_status_in').split(".")
        else:
            cd_status_in = []

        with dbconnector() as db, dbcursor(db) as cursor:

            # CD結果履歴の取得 Get CD result history
            fetch_rows = da_cd_result.select_cd_result(cursor, workspace_id,
                                                       cd_result_id,
                                                       cd_status_in, username,
                                                       latest)

        return jsonify({"result": "200", "rows": fetch_rows})

    except Exception as e:
        return common.server_error(
            e, "{} error".format(inspect.currentframe().f_code.co_name))
Exemplo n.º 20
0
def create_workspace():
    """ワークスペース生成

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL create_workspace')
    app_name = "ワークスペース情報登録:"
    exec_stat = "初期化"
    exec_detail = ""
    globals.logger.debug(request.json)

    try:
        # Requestからorganization_id項目を抽出する
        organization_id = request.json['common']['organization_id']
        # Requestからspecification項目を生成する
        specification = convert_workspace_specification(request.json)

        exec_stat = "DB接続"
        with dbconnector() as db, dbcursor(db) as cursor:
            # workspace情報 insert実行(戻り値:追加したワークスペースID)
            exec_stat = "登録実行"
            workspace_id = da_workspace.insert_workspace(
                cursor, organization_id, specification)

            globals.logger.debug('insert workspaced_id:{}'.format(
                str(workspace_id)))

            # workspace履歴追加
            exec_stat = "登録実行(履歴)"
            da_workspace.insert_history(cursor, workspace_id)

            # workspace情報 データ再取得
            exec_stat = "登録データ確認"
            fetch_rows = da_workspace.select_workspace_id(cursor, workspace_id)

        # Response用のjsonに変換
        response_rows = fetch_rows

        globals.logger.info('CREATED workspace:{} , organization:{}'.format(
            str(workspace_id), str(organization_id)))

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e, app_name + exec_stat, exec_detail)
Exemplo n.º 21
0
def post_tekton_task(workspace_id):
    """tekton_pipeline_task生成

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        Response: HTTP Respose
    """
    globals.logger.debug('CALL post_tekton_task:{}'.format(workspace_id))

    try:
        # image tagの生成
        image_tag = '{}.{}'.format(
            re.sub(r'.*/', '', request.json['git_branch']),
            datetime.now(globals.TZ).strftime("%Y%m%d-%H%M%S"))

        with dbconnector() as db, dbcursor(db) as cursor:

            info = request.json
            info['workspace_id'] = workspace_id
            info['status'] = TASK_STATUS_RUNNING
            info['container_registry_image_tag'] = image_tag

            # tekton_pipeline_task情報の登録(戻り値:task_id)
            task_id = da_tekton.insert_tekton_pipeline_task(cursor, info)

            # こちらはDBCloseに纏めてコミットされることを考慮しているため単一コミットはしない

        return jsonify({
            "result": "200",
            "param": {
                "task_id": task_id,
                "container_registry_image_tag": image_tag
            }
        }), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 22
0
def cd_result_update(workspace_id, cd_result_id):
    """CD結果更新 cd result update

    Args:
        workspace_id (int): workspace id
        cd_result_id (int): cd-result id

    Returns:
        response: HTTP Respose
    """

    try:
        globals.logger.debug(
            'CALL {}:from[{}] workspace_id[{}] cd_result_id[{}]'.format(
                inspect.currentframe().f_code.co_name, request.method,
                workspace_id, cd_result_id))

        with dbconnector() as db, dbcursor(db) as cursor:

            # Requestからcontentsを設定 Set contents from Request
            update_contents_items = request.json.copy()

            # cd-result update実行
            upd_cnt = da_cd_result.update_cd_result(cursor, workspace_id,
                                                    cd_result_id,
                                                    update_contents_items)

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

            globals.logger.debug('update cd_result_id:{}'.format(cd_result_id))

        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.server_error(
            e, "{} error".format(inspect.currentframe().f_code.co_name))
Exemplo n.º 23
0
def patch_tekton_task(workspace_id, task_id):
    """tekton_pipeline_task更新

    Args:
        workspace_id (int): ワークスペースID
        task_id (int): タスクID

    Returns:
        Response: HTTP Respose
    """
    globals.logger.debug('CALL patch_tekton_task:{},{}'.format(
        workspace_id, task_id))

    try:
        # # SQL生成
        # sqlstmt = ( 'UPDATE tekton_pipeline_task SET '
        #             + ','.join(map(lambda x: '{} = %({})s'.format(x,x), request.json.keys()))
        #             + ' WHERE task_id = %(task_id)s' )

        # # 更新パラメータ
        # update_param = request.json.copy()
        # update_param['task_id'] = task_id

        # 更新実行
        with dbconnector() as db, dbcursor(db) as cursor:
            upd_cnt = da_tekton.update_tekton_pipeline_task(
                cursor, request.json, task_id)

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

        # 正常応答
        return jsonify({"result": "200"}), 200

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 24
0
def post_tekton_task(workspace_id):
    """CI結果情報登録

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL post_tekton_task:{}'.format(workspace_id))

    try:
        # image tagの生成
        image_tag = '{}.{}'.format(
            re.sub(r'.*/', '', request.json['git_branch']),
            datetime.now(globals.TZ).strftime("%Y%m%d-%H%M%S"))

        with dbconnector() as db, dbcursor(db) as cursor:

            # Requestからinfo項目を生成する
            info = request.json
            info['workspace_id'] = workspace_id
            info['status'] = TASK_STATUS_RUNNING
            info['container_registry_image_tag'] = image_tag

            # CI結果情報 insert実行(戻り値:追加したtask_id)
            task_id = da_ci_result.insert_tekton_pipeline_task(cursor, info)

            globals.logger.debug('insert task_id:{}'.format(str(task_id)))

        return jsonify({
            "result": "200",
            "param": {
                "task_id": task_id,
                "container_registry_image_tag": image_tag
            }
        }), 200

    except Exception as e:
        return common.serverError(
            e, "tekton_pipeline_task db registration error")
Exemplo n.º 25
0
def manifest_file_registration(workspace_id):
    """マニフェストテンプレートファイル登録

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug(
        "CALL manifest_file_registration:{}".format(workspace_id))

    try:
        # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載)
        specification = request.json
        response_rows = []
        with dbconnector() as db, dbcursor(db) as cursor:

            for spec in specification['manifests']:

                # manifest情報 insert実行
                manifest_id = da_manifest.insert_manifest(
                    cursor, workspace_id, spec)

                globals.logger.debug('insert manifest_id:{}'.format(
                    str(manifest_id)))

                # manifest情報の再取得
                fetch_rows = da_manifest.select_manifest_id(
                    cursor, workspace_id, manifest_id)
                # 戻り値に内容を追加
                response_rows.append(fetch_rows[0])

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 26
0
def manifest_file_update(workspace_id, file_id):
    """マニフェストテンプレートファイル更新

    Args:
        workspace_id (int): ワークスペースID
        file_id (int): ファイルID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug("CALL manifest_file_update:{}".format(file_id))

    try:
        # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載)
        specification = request.json

        with dbconnector() as db, dbcursor(db) as cursor:
            # workspace情報 update実行
            upd_cnt = da_manifest.update_manifest(cursor, workspace_id,
                                                  specification, file_id)

            if upd_cnt == 0:
                # データがないときは404応答
                db.rollback()
                return jsonify({"result": "404"}), 404

            # manifest情報の再取得
            fetch_rows = da_manifest.select_manifest_id(
                cursor, workspace_id, file_id)

        # Response用のjsonに変換
        response_rows = fetch_rows

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 27
0
def create_organization():
    """オーガナイゼーション登録

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL create_organization')

    try:
        # Requestからinfo項目を生成する
        info = request.json

        with dbconnector() as db, dbcursor(db) as cursor:
            # organization情報 insert実行(戻り値:追加したorganizationID)
            organization_id = da_organization.insert_organization(cursor, info)

            globals.logger.debug('insert organization_id:{}'.format(
                str(organization_id)))

            # organization履歴追加
            da_organization.insert_history(cursor, organization_id)

            # organization情報 データ再取得
            fetch_rows = da_organization.select_organization_id(
                cursor, organization_id)

        # Response用のjsonに変換
        response_rows = fetch_rows

        globals.logger.info('CREATED organization:{}'.format(
            str(organization_id)))

        return jsonify({"result": "200", "rows": response_rows}), 200

    except Exception as e:
        return common.serverError(e, "organization db registration error")
Exemplo n.º 28
0
def list_organization():
    """オーガナイゼーション一覧取得

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug('CALL list_organization')

    try:
        with dbconnector() as db, dbcursor(db) as cursor:
            # select実行
            fetch_rows = da_organization.select_organization(cursor)

        # Response用のjsonに変換
        response_rows = fetch_rows

        return jsonify({
            "result": "200",
            "rows": response_rows,
            "time": str(datetime.now(globals.TZ))
        }), 200

    except Exception as e:
        return common.serverError(e, "organization db get list error")
Exemplo n.º 29
0
def manifest_file_get_list(workspace_id):
    """マニフェストテンプレートファイル取得(全件)

    Args:
        workspace_id (int): ワークスペースID

    Returns:
        response: HTTP Respose
    """
    globals.logger.debug("CALL manifest_file_get:{}".format(workspace_id))

    try:
        with dbconnector() as db, dbcursor(db) as cursor:

            # manifest情報の取得
            fetch_rows = da_manifest.select_manifest(cursor, workspace_id)

        # Response用のjsonに変換
        response_rows = fetch_rows

        return jsonify({"result": "200", "rows": response_rows})

    except Exception as e:
        return common.serverError(e)
Exemplo n.º 30
0
def apply_tekton_pipeline(workspace_id, kind, param):
    """tekton pipelineの適用
        templateにパラメータを埋込、適用する

    Args:
        workspace_id (int): ワークスペースID
        kind (str): 区分 "namespace"/"pipeline"
        param (dict): ワークスペースパラメータ
    """
    globals.logger.debug(
        'start apply_tekton_pipeline_files workspace_id:{} kind:{}'.format(
            workspace_id, kind))

    with dbconnector() as db, dbcursor(db) as cursor:

        for template in templates[kind]:
            globals.logger.debug(
                '* tekton pipeline apply start workspace_id:{} template:{}'.
                format(workspace_id, template))

            try:
                # templateの展開
                yamltext = render_template('tekton/{}/{}'.format(
                    kind, template),
                                           param=param,
                                           workspace_id=workspace_id)
                globals.logger.debug(' render_template finish')

                # ディレクトリ作成
                os.makedirs(dest_folder, exist_ok=True)

                # yaml一時ファイル生成
                path_yamlfile = '{}/{}'.format(dest_folder, template)
                with open(path_yamlfile, mode='w') as fp:
                    fp.write(yamltext)

                globals.logger.debug(' yamlfile output finish')

            except Exception as e:
                globals.logger.error(
                    'tekton pipeline yamlfile create workspace_id:{} template:{}'
                    .format(workspace_id, template))
                raise

            # yaml情報の変数設定
            info = {
                "workspace_id": workspace_id,
                "kind": kind,
                "template": template,
                "yamltext": yamltext,
            }

            # 適用yaml情報の書き込み
            da_tekton.insert_tekton_pipeline_yaml(cursor, info)

            db.commit()

            # kubectl実行
            try:
                result_kubectl = subprocess.check_output(
                    ['kubectl', 'apply', '-f', path_yamlfile],
                    stderr=subprocess.STDOUT)
                globals.logger.debug(
                    'COMMAAND SUCCEED: kubectl apply -f {}\n{}'.format(
                        path_yamlfile, result_kubectl.decode('utf-8')))

            except subprocess.CalledProcessError as e:
                globals.logger.error('COMMAND ERROR RETURN:{}\n{}'.format(
                    e.returncode, e.output.decode('utf-8')))
                raise  # 再スロー