133 lines
3.8 KiB
Vue
133 lines
3.8 KiB
Vue
<script>
|
|
import { GlAlert, GlModal, GlSprintf } from '@gitlab/ui';
|
|
import { __, s__ } from '~/locale';
|
|
import { CANARY_UPDATE_MODAL } from '../constants';
|
|
import updateCanaryIngress from '../graphql/mutations/update_canary_ingress.mutation.graphql';
|
|
|
|
export default {
|
|
components: {
|
|
GlAlert,
|
|
GlModal,
|
|
GlSprintf,
|
|
},
|
|
props: {
|
|
environment: {
|
|
type: Object,
|
|
required: false,
|
|
default: () => ({}),
|
|
},
|
|
weight: {
|
|
type: Number,
|
|
required: false,
|
|
default: 0,
|
|
},
|
|
visible: {
|
|
type: Boolean,
|
|
required: false,
|
|
default: false,
|
|
},
|
|
},
|
|
translations: {
|
|
title: s__('CanaryIngress|Change the ratio of canary deployments?'),
|
|
ratioChange: s__(
|
|
'CanaryIngress|You are changing the ratio of the canary rollout for %{environment} compared to the stable deployment to:',
|
|
),
|
|
stableWeight: s__('CanaryIngress|%{boldStart}Stable:%{boldEnd} %{stable}'),
|
|
canaryWeight: s__('CanaryIngress|%{boldStart}Canary:%{boldEnd} %{canary}'),
|
|
deploymentWarning: s__(
|
|
'CanaryIngress|Doing so will set a deployment change in progress. This temporarily blocks any further configuration until the deployment is finished.',
|
|
),
|
|
},
|
|
modal: {
|
|
modalId: CANARY_UPDATE_MODAL,
|
|
actionPrimary: {
|
|
text: s__('CanaryIngress|Change ratio'),
|
|
attributes: [{ variant: 'info' }],
|
|
},
|
|
actionCancel: { text: __('Cancel') },
|
|
static: true,
|
|
},
|
|
data() {
|
|
return { error: '', dismissed: true };
|
|
},
|
|
computed: {
|
|
stableWeight() {
|
|
return (100 - this.weight).toString();
|
|
},
|
|
canaryWeight() {
|
|
return this.weight.toString();
|
|
},
|
|
hasError() {
|
|
return Boolean(this.error);
|
|
},
|
|
environmentName() {
|
|
return this.environment?.name ?? '';
|
|
},
|
|
},
|
|
methods: {
|
|
submitCanaryChange() {
|
|
return this.$apollo
|
|
.mutate({
|
|
mutation: updateCanaryIngress,
|
|
variables: {
|
|
input: {
|
|
id: this.environment.global_id || this.environment.globalId,
|
|
weight: this.weight,
|
|
},
|
|
},
|
|
})
|
|
.then(
|
|
({
|
|
data: {
|
|
environmentsCanaryIngressUpdate: {
|
|
errors: [error],
|
|
},
|
|
},
|
|
}) => {
|
|
this.error = error;
|
|
},
|
|
)
|
|
.catch(() => {
|
|
this.error = __('Something went wrong. Please try again later');
|
|
});
|
|
},
|
|
dismiss() {
|
|
this.error = '';
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<template>
|
|
<div>
|
|
<gl-alert v-if="hasError" variant="danger" @dismiss="dismiss">{{ error }}</gl-alert>
|
|
<gl-modal v-bind="$options.modal" :visible="visible" @primary="submitCanaryChange">
|
|
<template #modal-title>{{ $options.translations.title }}</template>
|
|
<template #default>
|
|
<p>
|
|
<gl-sprintf :message="$options.translations.ratioChange">
|
|
<template #environment>{{ environmentName }}</template>
|
|
</gl-sprintf>
|
|
</p>
|
|
<ul class="gl-list-style-none gl-p-0">
|
|
<li>
|
|
<gl-sprintf :message="$options.translations.stableWeight">
|
|
<template #bold="{ content }">
|
|
<span class="gl-font-weight-bold">{{ content }}</span>
|
|
</template>
|
|
<template #stable>{{ stableWeight }}</template>
|
|
</gl-sprintf>
|
|
</li>
|
|
<li>
|
|
<gl-sprintf :message="$options.translations.canaryWeight">
|
|
<template #bold="{ content }">
|
|
<span class="gl-font-weight-bold">{{ content }}</span>
|
|
</template>
|
|
<template #canary>{{ canaryWeight }}</template>
|
|
</gl-sprintf>
|
|
</li>
|
|
</ul>
|
|
<p>{{ $options.translations.deploymentWarning }}</p>
|
|
</template>
|
|
</gl-modal>
|
|
</div>
|
|
</template>
|