Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change the method of credentials #39

Open
zcon-cychoi opened this issue Dec 15, 2023 · 0 comments
Open

Change the method of credentials #39

zcon-cychoi opened this issue Dec 15, 2023 · 0 comments
Labels
enhancement New feature or request

Comments

@zcon-cychoi
Copy link
Contributor

zcon-cychoi commented Dec 15, 2023

(Ref. #35 코멘트)

@zcon-cychoi 넵 설명 감사드립니다. 자세히 설명해 주셔서 바로바로 이해가 잘 되네요 😃

Migration 이외의 파트를 제가 구분하여 PR 올리도록 하겠습니다.

Migration 관련 파트는 Credential 관련 부분을 분리해야할 필요가 있고요.
아래 두 가지 안 정도를 생각해 볼 수 있을 것 같습니다.
1안) cm-data-mold binary와 같은 디렉토리에 credential을 사전 세팅
2안) Credential을 최초 한번 업로드하고, 이후 Migration시 file의 ID 또는 path를 활용하는 방안

관련하여 수정 가능여부, 공수, 이슈 등을 먼저 파악해 보려고 합니다. 확인해 보시고 공유해주시기 바랍니다.
(코드 개선은 이후에 진행하도록 하겠습니다.)

credential 관련하여 업데이트할 부분에 대한 생각을 정리해봤습니다.

API 에서는 기본적으로 마이그레이션 수행에 필요한 함수 실행 이전에
crendential 파일 유/무를 확인하고 관련 값을 업데이트 해주면 될 듯 합니다.

1안에 대한 변경 부분 확인 사항

  • Web UI 상에서 credential 입력 관련 부분 수정 방안

    <첫번째 방안> - checkbox 를 추가하여 credential 입력 폼들을 enable/disable 하여 저장파일을 사용할지 입력 사항을 사용할지 선택하는 방식
    <두번째 방안> - 저장된 credential 존재하면 입력폼에 해당되는 값을 자동 입력해주는 방식
    <세번째 방안> - HTML 요소에서 required 를 제거하고 빈값이 들어오면 저장된 파일 사용하는 방식

<input type="text" class="form-control" id="mig-aws-accessKey" name="awsAccessKey" placeholder="Access Key" required>

2안에 대한 추가/변경 필요 사항

  • Web UI

    • Credential 관리 페이지 추가
    • AWS, GCP, NCP, MySQL, MongoDB 별로 crendential 입력 폼 필요
    • 기존 crendential 입력 폼 대신 저장된 crendential 선택 ( <select> or <table>)
  • Web Server

    • credential 저장에 필요한 struct 추가
    • credential 파일을 저장/불러오기 함수 필요
    • credential 리스트 확인 함수 필요 (for Web UI)
    • credential 추가/변경/삭제 API

1,2안 공통

  • API 수정이 필요한 부분
    • AWS / NCP Object Storage code
func MigrationS3ToNCPPostHandler(ctx echo.Context) error {

	start := time.Now()

	logger, logstrings := pageLogInit("migs3ncp", "Export s3 data to ncp objectstorage", start)

	params := MigrationForm{}
	if !getDataWithBind(logger, start, ctx, &params) {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
        
        
        // TODO: getS3OSC 함수 실행 전에 params 에 credential 업데이트

	awsOSC := getS3OSC(logger, start, "mig", params)
	if awsOSC == nil {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}

	ncpOSC := getS3COSC(logger, start, "mig", params)
	if ncpOSC == nil {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
...
  • GCP Object Storage code
func MigrationGCPToS3PostHandler(ctx echo.Context) error {

	start := time.Now()

	logger, logstrings := pageLogInit("genlinux", "Export gcp data to s3", start)

	params := MigrationForm{}
	if !getDataWithBind(logger, start, ctx, &params) {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}

        // TODO: credential 을 저장된 파일 사용하는지 입력된 폼을 사용하는지 체크 후 gcpCreateCredFile 실행 여부 선택
	credTmpDir, credFileName, ok := gcpCreateCredFile(logger, start, ctx)
	if !ok {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
	defer os.RemoveAll(credTmpDir)

        // TODO: credFileName 은 credential 파일 이름[string]
	gcpOSC := getGCPCOSC(logger, start, "mig", params, credFileName)
	if gcpOSC == nil {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
...
func MigrationMySQLPostHandler(ctx echo.Context) error {

	start := time.Now()

	logger, logstrings := pageLogInit("migmysql", "Import mysql to mysql", start)

	formdata := MigrationMySQLForm{}
	if !getDataWithBind(logger, start, ctx, &formdata) {
		return ctx.JSON(http.StatusOK, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
	params := GetMigrationParamsFormFormData(formdata)

        // TODO: crendential 파일이 있으면 getMysqlRDBC 함수 호출 이전에 params 에 값 업데이트

	srdbc := getMysqlRDBC(logger, start, "smig", params)
	if srdbc == nil {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}

	trdbc := getMysqlRDBC(logger, start, "tmig", params)
	if trdbc == nil {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
...
func MigrationMongoDBToDynamoDBPostHandler(ctx echo.Context) error {

	start := time.Now()

	logger, logstrings := pageLogInit("migMGDN", "Export mongoDB data to dynamoDB", start)

	params := MigrationForm{}
	if !getDataWithBind(logger, start, ctx, &params) {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}

        // TODO: credential 파일 존재하면 getMongoNRDBC 함수 호출 이전에 params 값 업데이트

	ncpNRDB := getMongoNRDBC(logger, start, "mig", params)
	if ncpNRDB == nil {
		return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
			Result: logstrings.String(),
			Error:  nil,
		})
	}
...
@zcon-cychoi zcon-cychoi added the enhancement New feature or request label Dec 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant