Skip to content

Commit

Permalink
Merge pull request #2469 from devtron-labs/fix/update-validate-migrat…
Browse files Browse the repository at this point in the history
…ion-spec

fix: update validate migration spec
  • Loading branch information
AbhishekA1509 authored Feb 17, 2025
2 parents 90413a9 + b568885 commit 40cb7d6
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ const MigrateFromArgo = ({ migrateToDevtronFormState, setMigrateToDevtronFormSta
},
}))

const validationResponse = await validateMigrationSource(migrateToDevtronFormState, +appId)
const validationResponse = await validateMigrationSource({ migrateToDevtronFormState, appId: +appId })
setMigrateToDevtronFormState((prevState) => ({
...prevState,
migrateFromArgoFormState: {
Expand Down
16 changes: 4 additions & 12 deletions src/components/cdPipeline/MigrateToDevtron/service.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,19 @@
import { post, showError } from '@devtron-labs/devtron-fe-common-lib'
import { Routes } from '@Config/constants'
import {
MigrateToDevtronFormState,
ValidateMigrateToDevtronPayloadType,
ValidateMigrationSourceDTO,
ValidateMigrationSourceServiceParamsType,
} from '../cdPipeline.types'
import { sanitizeValidateMigrationSourceResponse } from './utils'
import { getValidateMigrationSourcePayload, sanitizeValidateMigrationSourceResponse } from './utils'

export const validateMigrationSource = async (
migrateToDevtronFormState: MigrateToDevtronFormState,
appId: number,
params: ValidateMigrationSourceServiceParamsType,
): Promise<ValidateMigrationSourceDTO> => {
try {
const payload: ValidateMigrateToDevtronPayloadType = {
deploymentAppType: migrateToDevtronFormState.deploymentAppType,
deploymentAppName: migrateToDevtronFormState.migrateFromArgoFormState.appName,
applicationObjectClusterId: migrateToDevtronFormState.migrateFromArgoFormState.clusterId,
applicationObjectNamespace: migrateToDevtronFormState.migrateFromArgoFormState.namespace,
appId,
}
const { result } = await post<ValidateMigrationSourceDTO, ValidateMigrateToDevtronPayloadType>(
Routes.APP_CD_PIPELINE_VALIDATE_LINK_REQUEST,
payload,
getValidateMigrationSourcePayload(params),
)

return sanitizeValidateMigrationSourceResponse(result)
Expand Down
26 changes: 25 additions & 1 deletion src/components/cdPipeline/MigrateToDevtron/utils.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import { Link } from 'react-router-dom'
import { GenericAppType } from '@Components/app/list-new/AppListType'
import { URLS } from '@Config/routes'
import { ValidateMigrationSourceDTO } from '../cdPipeline.types'
import { DeploymentAppTypes } from '@devtron-labs/devtron-fe-common-lib'
import {
ValidateMigrateToDevtronPayloadType,
ValidateMigrationSourceDTO,
ValidateMigrationSourceServiceParamsType,
} from '../cdPipeline.types'
import { SelectArgoAppOptionType, SelectClusterOptionType } from './types'

export const sanitizeValidateMigrationSourceResponse = (
Expand Down Expand Up @@ -65,3 +70,22 @@ export const renderGitOpsNotConfiguredDescription = () => (
&nbsp;and try again.
</p>
)

export const getValidateMigrationSourcePayload = ({
migrateToDevtronFormState,
appId,
}: ValidateMigrationSourceServiceParamsType): ValidateMigrateToDevtronPayloadType => {
if (migrateToDevtronFormState.deploymentAppType === DeploymentAppTypes.GITOPS) {
return {
appId,
deploymentAppType: migrateToDevtronFormState.deploymentAppType,
deploymentAppName: migrateToDevtronFormState.migrateFromArgoFormState.appName,
applicationMetadata: {
applicationObjectClusterId: migrateToDevtronFormState.migrateFromArgoFormState.clusterId,
applicationObjectNamespace: migrateToDevtronFormState.migrateFromArgoFormState.namespace,
},
}
}

return null
}
42 changes: 35 additions & 7 deletions src/components/cdPipeline/cdPipeline.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,14 +146,33 @@ export enum MigrationSourceValidationReasonType {
ENFORCED_POLICY_VIOLATION = 'EnforcedPolicyViolation',
}

export interface ValidateMigrateToDevtronPayloadType {
deploymentAppType: DeploymentAppTypes
applicationObjectClusterId: number
applicationObjectNamespace: string
interface ValidateMigrateToDevtronCommonPayloadType {
deploymentAppName: string
appId: number
}

interface ValidationPayloadApplicationMetaDataType {
applicationObjectClusterId: number
applicationObjectNamespace: string
}

export type ValidateMigrateToDevtronPayloadType = ValidateMigrateToDevtronCommonPayloadType &
(
| {
deploymentAppType: DeploymentAppTypes.GITOPS
applicationMetadata: ValidationPayloadApplicationMetaDataType
helmReleaseMetaData?: never
}
| {
deploymentAppType: DeploymentAppTypes.HELM
helmReleaseMetaData: {
releaseClusterId: number
releaseNamespace: string
}
applicationMetadata?: never
}
)

interface ValidateMigrationDestinationDetailsDTO {
clusterName: string
clusterServerUrl: string
Expand All @@ -173,6 +192,11 @@ interface ValidateMigrationSourceDetailsDTO {
}
}

export interface ValidateMigrationSourceServiceParamsType {
migrateToDevtronFormState: MigrateToDevtronFormState
appId: number
}

export interface ValidateMigrationSourceDTO {
isLinkable: boolean
errorDetail: {
Expand Down Expand Up @@ -200,10 +224,14 @@ export interface MigrateToDevtronFormState {
triggerType: (typeof TriggerType)[keyof typeof TriggerType]
}

// Will generalize this type as per helm in next PR of migrating helm release to devtron
export interface MigrateArgoAppToCDPipelineRequiredPayloadType
extends Omit<ValidateMigrateToDevtronPayloadType, 'appId'>,
Pick<MigrateToDevtronFormState, 'triggerType'>,
Pick<CDFormType, 'environmentId' | 'environmentName' | 'namespace'> {}
extends Pick<MigrateToDevtronFormState, 'triggerType'>,
Pick<CDFormType, 'environmentId' | 'environmentName' | 'namespace'>,
ValidationPayloadApplicationMetaDataType {
deploymentAppName: ValidateMigrateToDevtronPayloadType['deploymentAppName']
deploymentAppType: DeploymentAppTypes
}

export interface TriggerTypeRadioProps {
value: (typeof TriggerType)[keyof typeof TriggerType]
Expand Down
3 changes: 0 additions & 3 deletions src/components/cluster/Cluster.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,10 @@ class ClusterList extends Component<ClusterListProps, any> {
<Drawer position="right" width="1000px" onEscape={this.handleRedirectToClusterList}>
<ClusterForm
{...getSSHConfig(this.state)}
id={null}
cluster_name={this.state.cluster_name}
server_url={this.state.server_url}
active
config={{}}
toggleEditMode={() => {}}
reload={this.initialise}
prometheus_url=""
prometheusAuth={this.state.prometheus}
Expand Down Expand Up @@ -851,7 +849,6 @@ const Cluster = ({
toggleEditMode={toggleEditMode}
toggleClusterDetails
isVirtualCluster={isVirtualCluster}
handleCloseCreateClusterForm={handleToggleEditMode}
isProd={isProd}
/>
</div>
Expand Down
6 changes: 3 additions & 3 deletions src/components/cluster/ClusterForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,12 @@ const PrometheusRequiredFieldInfo = () => {
}

export default function ClusterForm({
id,
id = null,
cluster_name,
server_url,
active,
config,
toggleEditMode,
toggleEditMode = noop,
reload,
prometheus_url,
prometheusAuth,
Expand All @@ -130,7 +130,7 @@ export default function ClusterForm({
isTlsConnection,
toggleCheckTlsConnection,
setTlsConnectionFalse,
handleCloseCreateClusterForm,
handleCloseCreateClusterForm = noop,
toggleKubeConfigFile,
isKubeConfigFile,
isClusterDetails,
Expand Down
17 changes: 13 additions & 4 deletions src/components/cluster/cluster.type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

import { RouteComponentProps } from 'react-router-dom'
import { Dispatch, SetStateAction } from 'react'
import { SERVER_MODE_TYPE } from '../../config'
import { OptionType } from '../app/types'

Expand Down Expand Up @@ -180,13 +181,10 @@ export type ClusterFormProps = {
* @default false
*/
isProd?: boolean
handleCloseCreateClusterForm: () => void
id: number
cluster_name: string
server_url: string
active: boolean
config: any
toggleEditMode: any
reload: () => void
prometheus_url: string
prometheusAuth: any
Expand All @@ -206,7 +204,18 @@ export type ClusterFormProps = {
isClusterDetails: boolean
toggleClusterDetails: any
isVirtualCluster: boolean
}
} & (
| {
id: number
toggleEditMode: Dispatch<SetStateAction<boolean>>
handleCloseCreateClusterForm?: never
}
| {
handleCloseCreateClusterForm: () => void
id?: never
toggleEditMode?: never
}
)

export interface AddClusterFormPrefilledInfoType {
serverURL: string
Expand Down

0 comments on commit 40cb7d6

Please sign in to comment.