From 663a1f82e381cb6290de6c189ca233bc48e99cc0 Mon Sep 17 00:00:00 2001 From: Samuel Rowe Date: Wed, 3 Aug 2022 12:55:26 +0530 Subject: [PATCH 1/6] feat(frontend): added `rollbackConfig` to `IEditServiceForm` interface --- services/frontend/src/types/index.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/frontend/src/types/index.ts b/services/frontend/src/types/index.ts index 8dfa319..222b038 100644 --- a/services/frontend/src/types/index.ts +++ b/services/frontend/src/types/index.ts @@ -183,10 +183,10 @@ export interface IService { rollback_config?: { parallelism?: number; delay?: string; - failure_action?: string; + failure_action?: "continue" | "pause"; monitor?: string; max_failure_ratio?: string; - order?: string; + order?: "stop-first" | "start-first"; }; update_config?: { parallelism?: number; @@ -429,6 +429,14 @@ export interface IEditServiceForm { maxAttempts: string; window: string; }; + rollbackConfig: { + parallelism: string; + delay: string; + failureAction: "" | "continue" | "pause"; + monitor: string; + maxFailureRatio: string; + order: "" | "stop-first" | "start-first"; + }; labels: { key: string; value: string; From 7c1256a75d0be4d8c0bf835fdf165033d4b81608 Mon Sep 17 00:00:00 2001 From: Samuel Rowe Date: Wed, 3 Aug 2022 12:55:48 +0530 Subject: [PATCH 2/6] feat(frontend): updated form utilities to support `rollbackConfig` object in service --- .../components/Modal/service/form-utils.ts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/services/frontend/src/components/Modal/service/form-utils.ts b/services/frontend/src/components/Modal/service/form-utils.ts index 3fc0230..1c79086 100644 --- a/services/frontend/src/components/Modal/service/form-utils.ts +++ b/services/frontend/src/components/Modal/service/form-utils.ts @@ -84,6 +84,14 @@ const initialValues: IEditServiceForm = { maxAttempts: "", window: "" }, + rollbackConfig: { + parallelism: "", + delay: "", + failureAction: "", + monitor: "", + maxFailureRatio: "", + order: "" + }, labels: [] }, imageName: "", @@ -185,6 +193,14 @@ export const validationSchema = yup.object({ maxAttempts: yup.string(), window: yup.string() }), + rollbackConfig: yup.object({ + parallelism: yup.string(), + delay: yup.string(), + failureAction: yup.string().oneOf(["", "continue", "pause"]), + monitor: yup.string(), + maxFailureRatio: yup.string(), + order: yup.string().oneOf(["", "stop-first", "start-first"]) + }), labels: yup.array( yup.object({ key: yup.string().required("Key is required"), @@ -362,6 +378,28 @@ export const getInitialValues = (node?: IServiceNodeItem): IEditServiceForm => { initialValues.deploy.restartPolicy.window } : initialValues.deploy.restartPolicy, + rollbackConfig: deploy.rollback_config + ? { + parallelism: + deploy.rollback_config.parallelism?.toString() ?? + initialValues.deploy.rollbackConfig.parallelism, + delay: + deploy.rollback_config.delay ?? + initialValues.deploy.rollbackConfig.delay, + failureAction: + deploy.rollback_config.failure_action ?? + initialValues.deploy.rollbackConfig.failureAction, + monitor: + deploy.rollback_config.monitor ?? + initialValues.deploy.rollbackConfig.monitor, + maxFailureRatio: + deploy.rollback_config.max_failure_ratio ?? + initialValues.deploy.rollbackConfig.maxFailureRatio, + order: + deploy.rollback_config.order ?? + initialValues.deploy.rollbackConfig.order + } + : initialValues.deploy.rollbackConfig, labels: extractObjectOrArray("=", "key", "value", deploy.labels) ?? initialValues.deploy.labels @@ -483,6 +521,14 @@ export const getFinalValues = ( maxAttempts: pruneNumber(parseInt(deploy.restartPolicy.maxAttempts)), window: pruneString(deploy.restartPolicy.window) }), + rollback_config: pruneObject({ + parallelism: pruneNumber(parseInt(deploy.rollbackConfig.parallelism)), + delay: pruneString(deploy.rollbackConfig.delay), + failure_action: pruneString(deploy.rollbackConfig.failureAction), + monitor: pruneString(deploy.rollbackConfig.monitor), + max_failure_ratio: pruneString(deploy.rollbackConfig.maxFailureRatio), + order: pruneString(deploy.rollbackConfig.order) + }), labels: packArrayAsObject(deploy.labels, "key", "value") }), image: `${values.imageName}${ From bf7647a5a2bc2d8305651dc4dff7d52be3202cfd Mon Sep 17 00:00:00 2001 From: Samuel Rowe Date: Wed, 3 Aug 2022 12:56:06 +0530 Subject: [PATCH 3/6] feat(frontend): added fields for rollback config --- .../src/components/Modal/service/Deploy.tsx | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/services/frontend/src/components/Modal/service/Deploy.tsx b/services/frontend/src/components/Modal/service/Deploy.tsx index 120bf39..92dcb4b 100644 --- a/services/frontend/src/components/Modal/service/Deploy.tsx +++ b/services/frontend/src/components/Modal/service/Deploy.tsx @@ -153,6 +153,52 @@ const Deploy = () => { + + + + + + + + + + + + + + Date: Wed, 3 Aug 2022 13:07:50 +0530 Subject: [PATCH 4/6] feat(frontend): added `updateConfig` to `IEditServiceForm` interface --- services/frontend/src/types/index.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/frontend/src/types/index.ts b/services/frontend/src/types/index.ts index 222b038..913acf3 100644 --- a/services/frontend/src/types/index.ts +++ b/services/frontend/src/types/index.ts @@ -191,10 +191,10 @@ export interface IService { update_config?: { parallelism?: number; delay?: string; - failure_action?: string; + failure_action?: "continue" | "pause"; monitor?: string; max_failure_ratio?: string; - order?: string; + order?: "stop-first" | "start-first"; }; }; device_cgroup_rules: string[]; @@ -437,6 +437,14 @@ export interface IEditServiceForm { maxFailureRatio: string; order: "" | "stop-first" | "start-first"; }; + updateConfig: { + parallelism: string; + delay: string; + failureAction: "" | "continue" | "pause"; + monitor: string; + maxFailureRatio: string; + order: "" | "stop-first" | "start-first"; + }; labels: { key: string; value: string; From d26f86ce35fe1b71e24538363f14ee3c1b7bea77 Mon Sep 17 00:00:00 2001 From: Samuel Rowe Date: Wed, 3 Aug 2022 13:08:15 +0530 Subject: [PATCH 5/6] feat(frontend): updated form utilities to support `updateConfig` object in service --- .../components/Modal/service/form-utils.ts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/services/frontend/src/components/Modal/service/form-utils.ts b/services/frontend/src/components/Modal/service/form-utils.ts index 1c79086..14cbc15 100644 --- a/services/frontend/src/components/Modal/service/form-utils.ts +++ b/services/frontend/src/components/Modal/service/form-utils.ts @@ -92,6 +92,14 @@ const initialValues: IEditServiceForm = { maxFailureRatio: "", order: "" }, + updateConfig: { + parallelism: "", + delay: "", + failureAction: "", + monitor: "", + maxFailureRatio: "", + order: "" + }, labels: [] }, imageName: "", @@ -201,6 +209,14 @@ export const validationSchema = yup.object({ maxFailureRatio: yup.string(), order: yup.string().oneOf(["", "stop-first", "start-first"]) }), + updateConfig: yup.object({ + parallelism: yup.string(), + delay: yup.string(), + failureAction: yup.string().oneOf(["", "continue", "pause"]), + monitor: yup.string(), + maxFailureRatio: yup.string(), + order: yup.string().oneOf(["", "stop-first", "start-first"]) + }), labels: yup.array( yup.object({ key: yup.string().required("Key is required"), @@ -400,6 +416,28 @@ export const getInitialValues = (node?: IServiceNodeItem): IEditServiceForm => { initialValues.deploy.rollbackConfig.order } : initialValues.deploy.rollbackConfig, + updateConfig: deploy.update_config + ? { + parallelism: + deploy.update_config.parallelism?.toString() ?? + initialValues.deploy.updateConfig.parallelism, + delay: + deploy.update_config.delay ?? + initialValues.deploy.updateConfig.delay, + failureAction: + deploy.update_config.failure_action ?? + initialValues.deploy.updateConfig.failureAction, + monitor: + deploy.update_config.monitor ?? + initialValues.deploy.updateConfig.monitor, + maxFailureRatio: + deploy.update_config.max_failure_ratio ?? + initialValues.deploy.updateConfig.maxFailureRatio, + order: + deploy.update_config.order ?? + initialValues.deploy.updateConfig.order + } + : initialValues.deploy.updateConfig, labels: extractObjectOrArray("=", "key", "value", deploy.labels) ?? initialValues.deploy.labels @@ -529,6 +567,14 @@ export const getFinalValues = ( max_failure_ratio: pruneString(deploy.rollbackConfig.maxFailureRatio), order: pruneString(deploy.rollbackConfig.order) }), + update_config: pruneObject({ + parallelism: pruneNumber(parseInt(deploy.updateConfig.parallelism)), + delay: pruneString(deploy.updateConfig.delay), + failure_action: pruneString(deploy.updateConfig.failureAction), + monitor: pruneString(deploy.updateConfig.monitor), + max_failure_ratio: pruneString(deploy.updateConfig.maxFailureRatio), + order: pruneString(deploy.updateConfig.order) + }), labels: packArrayAsObject(deploy.labels, "key", "value") }), image: `${values.imageName}${ From bf26ee6fc1d5c1fe7a012b39787052176eb80dd4 Mon Sep 17 00:00:00 2001 From: Samuel Rowe Date: Wed, 3 Aug 2022 13:08:35 +0530 Subject: [PATCH 6/6] feat(frontend): added fields for update config --- .../src/components/Modal/service/Deploy.tsx | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/services/frontend/src/components/Modal/service/Deploy.tsx b/services/frontend/src/components/Modal/service/Deploy.tsx index 92dcb4b..411b508 100644 --- a/services/frontend/src/components/Modal/service/Deploy.tsx +++ b/services/frontend/src/components/Modal/service/Deploy.tsx @@ -199,6 +199,49 @@ const Deploy = () => { /> + + + + + + + + + + + + + +