Skip to content

Commit 886e430

Browse files
authored
Enable docker space creation (#971)
* add gray docker icon and update SVG - Added space_docker_gray.svg icon - Updated space_docker.svg fill color - Commented out template count in Docker radio * add Docker template selection - Add fetchDockerTemplates method - Implement Docker template radio buttons - Display secrets and variables for selected template - Update localization for new fields * Add Docker support - Add Docker template handling - Include Docker variables and secrets * refactor(NewApplicationSpace): remove commented code Removed commented-out template code for clarity.
1 parent 3375015 commit 886e430

File tree

5 files changed

+97
-7
lines changed

5 files changed

+97
-7
lines changed
Lines changed: 1 addition & 3 deletions
Loading
Lines changed: 5 additions & 0 deletions
Loading

frontend/src/components/application_spaces/NewApplicationSpace.vue

Lines changed: 85 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,19 +225,18 @@
225225
<p class="font-semibold text-md">Nginx</p>
226226
</el-radio>
227227
<el-radio
228-
v-if="!userStore.isAdmin"
229228
class="rounded-md !border-[2px] !h-[120px] flex justify-center"
230229
size="large"
231230
label="docker"
232-
disabled
231+
@click="fetchDockerTemplates"
233232
border
234233
>
235234
<SvgIcon
236235
name="space_docker"
237236
class="m-auto"
238237
/>
239238
<p class="font-semibold text-md">Docker</p>
240-
<p class="text-xs">11 templates</p>
239+
<!-- <p class="text-xs">11 templates</p> -->
241240
</el-radio>
242241
<el-radio
243242
disabled
@@ -255,6 +254,47 @@
255254
</el-radio>
256255
</el-radio-group>
257256
</el-form-item>
257+
<div v-if="dataForm.sdk === 'docker'">
258+
<p class="text-gray-600 mb-1.5 font-light">
259+
{{ $t('application_spaces.new.chooseTemplate') }}
260+
</p>
261+
262+
<el-radio-group
263+
v-model="dockerTemplate"
264+
class="flex flex-wrap gap-2 mb-6"
265+
>
266+
<el-radio-button v-for="template in dockerTemplates"
267+
:label="template.name"
268+
:value="template.name"
269+
size="large"
270+
border
271+
/>
272+
</el-radio-group>
273+
274+
<div v-if="dockerTemplate" class="mb-6">
275+
<div v-if="currentDockerTemplates.secrets">
276+
<p class="text-gray-700 text-sm leading-5">{{ t('application_spaces.new.spaceSecrets') }}</p>
277+
<div
278+
v-for="secret in JSON.parse(currentDockerTemplates.secrets)"
279+
:key="secret.name">
280+
<div class="flex justify-between items-center my-2 pl-4">
281+
<label :for="secret.name" class="text-gray-600 mb-1.5 font-light text-xs w-[40%]">{{ secret.name }}</label>
282+
<el-input v-model="dockerSecrets[secret.name]" size="small"></el-input>
283+
</div>
284+
</div>
285+
</div>
286+
287+
<div v-if="currentDockerTemplates.variables">
288+
<p class="text-gray-700 text-sm leading-5">{{ t('application_spaces.new.spaceVariables') }}</p>
289+
<div v-for="variable in JSON.parse(currentDockerTemplates.variables)" :key="variable.name">
290+
<div class="flex justify-between items-center my-2 pl-4">
291+
<label :for="variable.name" class="text-gray-600 mb-1.5 font-light text-xs w-[40%]">{{ variable.name }}</label>
292+
<el-input v-model="dockerVariables[variable.name]" size="small"></el-input>
293+
</div>
294+
</div>
295+
</div>
296+
</div>
297+
</div>
258298
<el-form-item
259299
:label="t('endpoints.new.cluster')"
260300
class="w-full"
@@ -332,7 +372,7 @@
332372
</template>
333373

334374
<script setup>
335-
import { ref, onMounted, inject } from 'vue'
375+
import { ref, onMounted, inject, computed } from 'vue'
336376
import { ElInput, ElMessage } from 'element-plus'
337377
import { useI18n } from 'vue-i18n'
338378
import useFetchApi from '../../packs/useFetchApi'
@@ -349,6 +389,27 @@
349389
const images = ref([])
350390
const { t } = useI18n()
351391
const nameRule = inject('nameRule')
392+
const dockerTemplates = ref([])
393+
const dockerTemplate = ref('')
394+
const dockerVariables = ref({})
395+
const dockerSecrets = ref({})
396+
397+
const currentDockerTemplates = computed(() => {
398+
const currentTemplate = dockerTemplates.value.find((template) => template.name === dockerTemplate.value)
399+
if (currentTemplate && currentTemplate.variables) {
400+
dockerVariables.value = JSON.parse(currentTemplate.variables).reduce((accumulator, current) => {
401+
accumulator[current.name] = current.value
402+
return accumulator
403+
}, {})
404+
}
405+
if (currentTemplate && currentTemplate.secrets) {
406+
dockerSecrets.value = JSON.parse(currentTemplate.secrets).reduce((accumulator, current) => {
407+
accumulator[current.name] = current.value
408+
return accumulator
409+
}, {})
410+
}
411+
return (currentTemplate || {})
412+
})
352413
353414
const dataForm = ref({
354415
owner: '',
@@ -511,6 +572,13 @@
511572
cluster_id: dataForm.value.space_cluster,
512573
private: dataForm.value.visibility === 'private'
513574
}
575+
576+
if (dataForm.value.sdk === 'docker') {
577+
params.template = dockerTemplate.value
578+
params.variables = JSON.stringify(dockerVariables.value)
579+
params.secrets = JSON.stringify(dockerSecrets.value)
580+
}
581+
514582
const options = {
515583
headers: { 'Content-Type': 'application/json' },
516584
body: JSON.stringify(params)
@@ -531,6 +599,19 @@
531599
}
532600
}
533601
602+
const fetchDockerTemplates = async () => {
603+
try {
604+
const { data, error } = await useFetchApi('space_templates/docker').json()
605+
if (data.value) {
606+
dockerTemplates.value = data.value.data
607+
} else {
608+
ElMessage.warning(error.value.msg)
609+
}
610+
} catch (error) {
611+
ElMessage.warning(error)
612+
}
613+
}
614+
534615
onMounted(() => {
535616
fetchClusters()
536617
})

frontend/src/locales/en_js/application_spaces.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ export const application_spaces = {
7979
createFail: "Application Space creation failed",
8080
spaceEnName: "Space name",
8181
cluster: "Region",
82+
chooseTemplate: "Choose a template",
83+
spaceSecrets: "Space Secrets",
84+
spaceVariables: "Space Variables"
8285
},
8386
edit: {
8487
cloudResource: 'Cloud resource',

frontend/src/locales/zh_js/application_spaces.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ export const application_spaces = {
7979
createFail: "应用空间创建失败",
8080
spaceEnName: "应用空间英文名称",
8181
cluster: "区域",
82+
chooseTemplate: "选择一个模版",
83+
spaceSecrets: "空间密钥",
84+
spaceVariables: "空间变量"
8285
},
8386
edit: {
8487
cloudResource: '空间云资源',

0 commit comments

Comments
 (0)