Commit d4249333 authored by 张俊's avatar 张俊

一键部署

parent 43e277ee
......@@ -69,7 +69,7 @@
<p class="formname">接口编码:</p>
<el-input v-model="form.code"></el-input>
</el-form-item>
<el-form-item v-if="now_user==2" prop="people" :rules="[
<!-- <el-form-item v-if="now_user==2" prop="people" :rules="[
{ required: true, message: '请输入发布人', trigger: 'blur' },
]">
<p class="formname">发布人:</p>
......@@ -80,7 +80,7 @@
]">
<p class="formname">联系方式:</p>
<el-input v-model="form.phone"></el-input>
</el-form-item>
</el-form-item> -->
<el-form-item prop="resource">
<p class="formname">开放程度:</p>
<el-radio-group v-model="form.resource">
......@@ -395,6 +395,7 @@ export default {
if (valid) {
this.setService()
} else {
this.$message.error('请填写完整表单')
console.log('error submit!!');
return false;
}
......
......@@ -36,7 +36,7 @@
<el-option
v-for="item in area_options"
:key="item.value"
:label="item.label"
:label="item.text"
:value="item.value"
>
</el-option>
......@@ -50,7 +50,7 @@
</el-form-item>
</el-form>
<div class="apass_button step_action">
<el-button type="primary" @click="sub_yy_form('step1_form')">
<el-button type="primary" :disabled="is_loading" @click="sub_yy_form('step1_form',1)">
下一步
</el-button>
</div>
......@@ -66,36 +66,35 @@
ref="step2_form"
class="step_form"
label-position="top"
:model="app_set"
:rules="app_set_rules"
>
<el-form-item label="标题:" prop="title">
<div v-for="(item,index) in step2_arr" :key="index+10000">
<el-form-item :label="item.text" v-if="item.type=='text'">
<el-input
v-model="app_set.title"
placeholder="请输入标题"
v-model="item.value"
></el-input>
</el-form-item>
<el-form-item label="镜像版本:" prop="vision">
<el-form-item :label="item.text" v-if="item.type=='radio'">
<div
:class="{ select_box: true, is_select: app_set.vision == vision }"
v-for="vision in vision_arr"
:class="{ select_box: true, is_select: item.val == vision }"
v-for="vision in item.value"
:key="vision"
@click="app_set.vision = vision"
@click="change_appset(item,'val',vision)"
>
{{ vision }}
{{ vision}}
</div>
</el-form-item>
<el-form-item label="资源限制-内存:" prop="memory" class="limitsd">
<el-form-item :label="item.text+'-内存:'" class="limitsd" v-if="item.type=='resource'">
<el-input
type="number"
class="limitinput"
v-model="app_set.memory"
v-model="item.memory"
placeholder="请输入内存"
></el-input>
<el-select
v-model="app_set.memory_type"
v-model="item.memory_type"
class="timeslect"
placeholder="请选择内存"
>
......@@ -109,22 +108,22 @@
</el-select>
</el-form-item>
<el-form-item label="资源限制-CPU:" prop="cpu">
<el-form-item :label="item.text+'-CPU:'" v-if="item.type=='resource'">
<el-input
type="number"
v-model="app_set.cpu"
v-model="item.cpu"
placeholder="请输入标题"
>
<template slot="append">M</template>
</el-input>
</el-form-item>
<el-form-item label="是否监控:" prop="watch">
<el-form-item :label="item.text" v-if="item.type=='switch'">
<div
class="openbgc"
@click="openstart"
@click="openstart(item,'value')"
:style="
!app_set.watch
!item.value
? {
backgroundImage:
'url(' + require('@/assets/imgs/btn_off_hov.png') + ')',
......@@ -133,19 +132,21 @@
"
></div>
</el-form-item>
<el-form-item label="储存容量:" prop="save_memory">
<el-form-item :label="item.text" v-if="item.type=='storage'">
<div
:class="{
select_box: true,
is_select: app_set.save_memory == save,
is_select: item.storage == save,
}"
v-for="save in save_arr"
v-for="save in save_arr[item.dwtype]"
:key="save"
@click="app_set.save_memory = save"
@click="change_appset(item,'storage',save)"
>
{{ save }}
</div>
</el-form-item>
</div>
</el-form>
<div class="senior_box" @click="senior_flag = true" v-if="!senior_flag">
高级配置
......@@ -154,7 +155,7 @@
<el-button type="primary" plain @click="preStep">
上一步
</el-button>
<el-button type="primary" @click="sub_yy_form('step2_form')">
<el-button type="primary" :disabled="is_loading" @click="sub_app_set()">
下一步
</el-button>
</div>
......@@ -164,13 +165,13 @@
>
高级配置:
</p>
<v-apaas-code v-show="senior_flag" :datas="app_set.code"></v-apaas-code>
<v-apaas-code v-if="senior_flag" :datas="app_set_code"></v-apaas-code>
<div class="apass_button step_action" v-if="senior_flag">
<el-button type="primary" plain @click="deal_code(0)">
取消
</el-button>
<el-button type="primary" @click="deal_code(1)">
保存
<el-button type="primary" :disabled="is_loading" @click="deal_code(1)">
下一步
</el-button>
</div>
</app-build-step>
......@@ -208,6 +209,7 @@ import appBuildSteps from "@/components/app-build-steps/app-build-steps";
import appBuildStep from "@/components/app-build-steps/app-build-step";
import apassDialog from "@/components/apass-dialog";
import codes from "@/components/codes";
import yaml from "js-yaml";
var checkNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error("不能为空"));
......@@ -250,16 +252,8 @@ export default {
namespace: "",
name: "",
},
app_set: {
title: "",
vision: "",
memory: "",
memory_type: 1,
cpu: "",
watch: 0,
save_memory: "",
code: "",
},
app_set: {},
app_set_info: {},
area_options: [
{
name: "12312",
......@@ -268,24 +262,37 @@ export default {
],
vision_arr: ["1.0.1", "10.1.2", "2.2.3"],
save_arr: [
"2GI",
"4GI",
"8GI",
"16GI",
"32GI",
"64GI",
"128GI",
"256GI",
"512GI",
[
"2Gi",
"4Gi",
"8Gi",
"16Gi",
"32Gi",
"64Gi",
"128Gi",
"256Gi",
"512Gi",
],
[
"2TB",
"4TB",
"8TB",
"16TB",
"32TB",
"64TB",
"128TB",
"256TB",
"512TB",
],
],
memory_arr: [
{
value: 1,
label: "MI",
value: 'Mi',
label: "Mi",
},
{
value: 2,
label: "GI",
value: 'Gi',
label: "Gi",
},
],
image_rules: {
......@@ -297,6 +304,9 @@ export default {
{ validator: checkName, trigger: "blur" },
],
},
app_set_code:'',
is_change:false,
is_loading:false,
app_set_rules: {
title: [{ required: true, message: "请输入标题", trigger: "blur" }],
memory: [
......@@ -345,38 +355,215 @@ export default {
state: 2,
},
],
step2_arr:[],
}),
methods: {
get_name_space(){
this.$http
.get(`/apaas/hubApi/market/namespaces`)
.then((response) => {
console.log(response);
this.area_options = response.data.data
});
},
get_step_info() {
this.$http
.get(`/apaas/hubApi/market/step/${this.$route.params.app_id}`)
.then((response) => {
console.log(JSON.parse(response.data.data));
let step2_arr = JSON.parse(response.data.data).configInfo
console.log(step2_arr);
step2_arr.forEach(e => {
if(e.type=='radio'){
e['val'] = e.value[0]
// this.deal_key_value(this.app_set_info,e.name,e.type,e.value[0])
}else if(e.type=='storage'){
e['dwtype'] = e.storage.indexOf('Gi')==-1?1:0
// this.deal_key_value(this.app_set_info,e.name,e.type,e.storage)
}else if(e.type=='resource'){
let memory = e.memory
let cpu = e.cpu
e['memory_type'] = memory.indexOf('Mi')==-1?'Gi':'Mi'
e['memory'] = parseInt(memory)
e['cpu'] = parseInt(cpu)
// this.deal_key_value(this.app_set_info,e.name,'resource',[memory,cpu])
}else{
// this.deal_key_value(this.app_set_info,e.name,e.type,e.value)
}
});
this.step2_arr=step2_arr;
console.log(this.app_set_info);
});
},
get_step_file(){
this.$http
.get(`/apaas/hubApi/market/values/${this.$route.params.app_id}`)
.then((response) => {
this.app_set_code = response.data.data
})
},
change_appset(obj,key,val){
console.log(key,val);
this.$set(obj,key,val)
},
deal_key_value(key_string,type,value){
var key_arr = key_string.split('.')
var temp = this.app_set_info
key_arr.forEach((e,index) => {
if(key_arr.length-1==index){
if(type == 'resource'){
temp[e] = {
limits:{
memory: value[1]+value[0],
cpu:value[2]+'m'
},
requests:{
memory: value[1]+value[0],
cpu:value[2]+'m'
}
}
}else if(type == 'storage'){
temp[e] = {
"volumeClaimTemplate":{
"spec":{
"storageClassName":"nfs-client",
"accessModes":[
"ReadWriteOnce"],
"resources":{
"requests":{
"storage":value
}
}
},
"selector":{
}
}
}
}else{
temp[e] = value
}
}else{
if(temp[e]){
}else{
temp[e] = {}
}
temp = temp[e]
}
});
},
deal_key_text(obj,key_string){
var key_arr = key_string.split('.')
var temp = obj;
key_arr.forEach((e,index) => {
if(key_arr.length-1==index){
}else{
temp = temp[e]
}
});
},
deal_code(n) {
if (n) {
this.begin_code = this.app_set.code;
} else {
this.app_set.code = this.begin_code;
//调用接口
this.change_form_aploy(0)
}
this.senior_flag = false;
},
sub_yy_form(formName) {
change_form_aploy(n){
this.is_loading = true
if(n==1){
//表单提交
var temp = {
"app_id": parseInt(this.$route.params.app_id),
"up_userid": this.$store.state.userInfo.user_id,
"name": this.baseInfoForm.name,
"namespace": this.baseInfoForm.namespace,
"uu": this.evtUuid,
"values": this.app_set_info
}
}else{
//编辑提交
var temp = {
"app_id": parseInt(this.$route.params.app_id),
"up_userid": this.$store.state.userInfo.user_id,
"name": this.baseInfoForm.name,
"namespace": this.baseInfoForm.namespace,
"uu": this.evtUuid,
"values": yaml.load(this.app_set_code)
}
}
this.$http
.post(`/apaas/hubApi/market/build`,temp)
.then((response) => {
this.is_loading = false
if(response.data.data){
this.$message.success('开始部署成功')
this.nextStep()
}
}).catch(()=>{
this.is_loading = false
})
},
sub_yy_form(formName,n) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.nextStep();
if(n==1){
this.get_work_name()
}else if(n==2){
this.sub_app_set()
}
} else {
console.log("error submit!!");
return false;
}
});
},
openstart() {
if (this.app_set.watch) {
this.app_set.watch = 0;
get_work_name(){
this.is_loading = true
this.$http
.get(`/apaas/hubApi/market/exist/${this.baseInfoForm.namespace}?name=${this.baseInfoForm.name}`)
.then((response) => {
console.log(response);
this.is_loading = false
if(response.data.success){
if(response.data.data){
this.$message.error('工作名称已存在')
}else{
this.nextStep();
}
}
}).catch(()=>{
this.is_loading = false
})
},
sub_app_set(){
this.is_loading = true
this.step2_arr.forEach(e => {
if(e.type=='radio'){
this.deal_key_value(e.name,e.type,e.val)
}else if(e.type=='storage'){
this.deal_key_value(e.name,e.type,e.storage)
}else if(e.type=='resource'){
let memory = e.memory
let cpu = e.cpu
this.deal_key_value(e.name,'resource',[e.memory_type,e.memory,e.cpu])
}else{
this.deal_key_value(e.name,e.type,e.value)
}
});
console.log(this.app_set_info);
console.log(this.step2_arr);
//表单提交调用接口
this.change_form_aploy(1)
},
openstart(item,key) {
if (item[key]) {
this.$set(item,key,false)
// item[key] = false;
} else {
this.app_set.watch = 1;
// item[key] = true;
this.$set(item,key,true)
}
},
preStep() {
......@@ -466,7 +653,9 @@ export default {
},
created() {
this.getStatus();
this.get_name_space();
this.get_step_info();
this.get_step_file();
},
};
</script>
......@@ -496,7 +685,6 @@ export default {
}
.select_box {
height: 35px;
width: 80px;
line-height: 35px;
background-color: #f7f8f9;
border-radius: 6px;
......@@ -506,6 +694,7 @@ export default {
float: left;
margin-right: 10px;
cursor: pointer;
padding: 0 20px;
}
.is_select {
background-color: #515fe7;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment