l-109 重构状态更新02

master
dongming 2 years ago
parent 3067f3380f
commit 2b170abcc7

@ -82,6 +82,10 @@ type MsbDeploymentStatus struct {
// Conditions 处于这个阶段的原因 // Conditions 处于这个阶段的原因
// +optional // +optional
Conditions []Condition `json:"conditions,omitempty"` Conditions []Condition `json:"conditions,omitempty"`
// ObservedGeneration 观测一次reconcile产生的变化如果有变化自加最终判断是否变更如果变更则请求apiserver整整的跟新否则不做任何更新
// +optional
ObservedGeneration int32 `json:"observedGeneration,omitempty"`
} }
// defines the observed state of Condition // defines the observed state of Condition

@ -119,6 +119,11 @@ func (in *MsbDeploymentList) DeepCopyObject() runtime.Object {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MsbDeploymentSpec) DeepCopyInto(out *MsbDeploymentSpec) { func (in *MsbDeploymentSpec) DeepCopyInto(out *MsbDeploymentSpec) {
*out = *in *out = *in
if in.StartCmd != nil {
in, out := &in.StartCmd, &out.StartCmd
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Args != nil { if in.Args != nil {
in, out := &in.Args, &out.Args in, out := &in.Args, &out.Args
*out = make([]string, len(*in)) *out = make([]string, len(*in))

@ -185,7 +185,9 @@ spec:
type: integer type: integer
startCmd: startCmd:
description: StartCmd 存储启动命令 description: StartCmd 存储启动命令
type: string items:
type: string
type: array
required: required:
- expose - expose
- image - image
@ -220,6 +222,10 @@ spec:
message: message:
description: Message 这个阶段的信息 description: Message 这个阶段的信息
type: string type: string
observedGeneration:
description: ObservedGeneration 观测一次reconcile产生的变化如果有变化自加最终判断是否变更如果变更则请求apiserver整整的跟新否则不做任何更新
format: int32
type: integer
phase: phase:
description: Phase 处于什么阶段 description: Phase 处于什么阶段
type: string type: string

@ -104,6 +104,17 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
// 防止污染缓存 // 防止污染缓存
mdCopy := md.DeepCopy() mdCopy := md.DeepCopy()
// 处理最终的返回
defer func() {
if r.Ready(mdCopy) {
_ = r.Client.Status().Update(ctx, mdCopy)
return
}
if mdCopy.Status.ObservedGeneration != md.Status.ObservedGeneration {
_ = r.Client.Status().Update(ctx, mdCopy)
}
}()
// ======= 处理 deployment ====== // ======= 处理 deployment ======
// 2. 获取deployment资源对象 // 2. 获取deployment资源对象
deploy := new(appsv1.Deployment) deploy := new(appsv1.Deployment)
@ -114,23 +125,19 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
if errCreate := r.createDeployment(ctx, mdCopy); err != nil { if errCreate := r.createDeployment(ctx, mdCopy); err != nil {
return ctrl.Result{}, errCreate return ctrl.Result{}, errCreate
} }
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeDeployment, myAppsv1.ConditionTypeDeployment,
fmt.Sprintf(myAppsv1.ConditionMessageDeploymentNotFmt, req.Name), fmt.Sprintf(myAppsv1.ConditionMessageDeploymentNotFmt, req.Name),
myAppsv1.ConditonStatusFalse, myAppsv1.ConditonStatusFalse,
myAppsv1.ConditionReasonDeploymentNotReady); errStatus != nil { myAppsv1.ConditionReasonDeploymentNotReady)
return ctrl.Result{}, errStatus
}
} else { } else {
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeDeployment, myAppsv1.ConditionTypeDeployment,
fmt.Sprintf("Deployment %s, err: %s", req.Name, err.Error()), fmt.Sprintf("Deployment %s, err: %s", req.Name, err.Error()),
myAppsv1.ConditonStatusFalse, myAppsv1.ConditonStatusFalse,
myAppsv1.ConditionReasonDeploymentNotReady); errStatus != nil { myAppsv1.ConditionReasonDeploymentNotReady)
return ctrl.Result{}, errStatus
}
return ctrl.Result{}, err return ctrl.Result{}, err
} }
} else { } else {
@ -140,23 +147,19 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
return ctrl.Result{}, err return ctrl.Result{}, err
} }
if deploy.Status.AvailableReplicas == mdCopy.Spec.Replicas { if deploy.Status.AvailableReplicas == mdCopy.Spec.Replicas {
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeDeployment, myAppsv1.ConditionTypeDeployment,
fmt.Sprintf(myAppsv1.ConditionMessageDeploymentOKFmt, req.Name), fmt.Sprintf(myAppsv1.ConditionMessageDeploymentOKFmt, req.Name),
myAppsv1.ConditonStatusTrue, myAppsv1.ConditonStatusTrue,
myAppsv1.ConditionReasonDeploymentReady); errStatus != nil { myAppsv1.ConditionReasonDeploymentReady)
return ctrl.Result{}, errStatus
}
} else { } else {
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeDeployment, myAppsv1.ConditionTypeDeployment,
fmt.Sprintf(myAppsv1.ConditionMessageDeploymentNotFmt, req.Name), fmt.Sprintf(myAppsv1.ConditionMessageDeploymentNotFmt, req.Name),
myAppsv1.ConditonStatusFalse, myAppsv1.ConditonStatusFalse,
myAppsv1.ConditionReasonDeploymentNotReady); errStatus != nil { myAppsv1.ConditionReasonDeploymentNotReady)
return ctrl.Result{}, errStatus
}
} }
} }
@ -170,14 +173,12 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
return ctrl.Result{}, err return ctrl.Result{}, err
} }
} else { } else {
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeService, myAppsv1.ConditionTypeService,
fmt.Sprintf("Service %s, err: %s", req.Name, err.Error()), fmt.Sprintf("Service %s, err: %s", req.Name, err.Error()),
myAppsv1.ConditonStatusFalse, myAppsv1.ConditonStatusFalse,
myAppsv1.ConditionReasonServiceNotReady); errStatus != nil { myAppsv1.ConditionReasonServiceNotReady)
return ctrl.Result{}, errStatus
}
return ctrl.Result{}, err return ctrl.Result{}, err
} }
} else { } else {
@ -187,14 +188,12 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
} }
// 检查 现有状态来更新 status // 检查 现有状态来更新 status
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeService, myAppsv1.ConditionTypeService,
fmt.Sprintf(myAppsv1.ConditionMessageServiceOKFmt, req.Name), fmt.Sprintf(myAppsv1.ConditionMessageServiceOKFmt, req.Name),
myAppsv1.ConditonStatusTrue, myAppsv1.ConditonStatusTrue,
myAppsv1.ConditionReasonServiceReady); errStatus != nil { myAppsv1.ConditionReasonServiceReady)
return ctrl.Result{}, errStatus
}
} }
// ======= 处理 ingress ========= // ======= 处理 ingress =========
@ -209,14 +208,12 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
if err := r.createIngress(ctx, mdCopy); err != nil { if err := r.createIngress(ctx, mdCopy); err != nil {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeIngress, myAppsv1.ConditionTypeIngress,
fmt.Sprintf(myAppsv1.ConditionMessageIngressNotFmt, req.Name), fmt.Sprintf(myAppsv1.ConditionMessageIngressNotFmt, req.Name),
myAppsv1.ConditonStatusFalse, myAppsv1.ConditonStatusFalse,
myAppsv1.ConditionReasonIngressNotReady); errStatus != nil { myAppsv1.ConditionReasonIngressNotReady)
return ctrl.Result{}, errStatus
}
if mdCopy.Spec.Expose.Tls { if mdCopy.Spec.Expose.Tls {
// 创建 issuers // 创建 issuers
if err := r.createIssuer(ctx, mdCopy); err != nil { if err := r.createIssuer(ctx, mdCopy); err != nil {
@ -234,14 +231,12 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
return ctrl.Result{}, nil return ctrl.Result{}, nil
} }
} else { } else {
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeIngress, myAppsv1.ConditionTypeIngress,
fmt.Sprintf("Ingress %s, err: %s", req.Name, err.Error()), fmt.Sprintf("Ingress %s, err: %s", req.Name, err.Error()),
myAppsv1.ConditonStatusFalse, myAppsv1.ConditonStatusFalse,
myAppsv1.ConditionReasonIngressNotReady); errStatus != nil { myAppsv1.ConditionReasonIngressNotReady)
return ctrl.Result{}, errStatus
}
return ctrl.Result{}, err return ctrl.Result{}, err
} }
} else { } else {
@ -252,14 +247,12 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
if err := r.updateIngress(ctx, mdCopy, ig); err != nil { if err := r.updateIngress(ctx, mdCopy, ig); err != nil {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
if _, errStatus := r.updateStatus(ctx, r.updateConditions(
mdCopy, mdCopy,
myAppsv1.ConditionTypeIngress, myAppsv1.ConditionTypeIngress,
fmt.Sprintf(myAppsv1.ConditionMessageIngressOKFmt, req.Name), fmt.Sprintf(myAppsv1.ConditionMessageIngressOKFmt, req.Name),
myAppsv1.ConditonStatusTrue, myAppsv1.ConditonStatusTrue,
myAppsv1.ConditionReasonIngressReady); errStatus != nil { myAppsv1.ConditionReasonIngressReady)
return ctrl.Result{}, errStatus
}
if mdCopy.Spec.Expose.Tls { if mdCopy.Spec.Expose.Tls {
// 创建 issuers // 创建 issuers
if err := r.createIssuer(ctx, mdCopy); err != nil { if err := r.createIssuer(ctx, mdCopy); err != nil {
@ -281,20 +274,10 @@ func (r *MsbDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Reques
} }
} }
// 最后检查状态时候最终完成 logger.Info("Reconcile is ended.")
if sus, errStatus := r.updateStatus(ctx, if !r.Ready(mdCopy) {
mdCopy,
"",
"",
"",
""); errStatus != nil {
return ctrl.Result{}, errStatus
} else if !sus {
logger.Info("Reconcile is ended.")
return ctrl.Result{RequeueAfter: WaitRequeue}, nil return ctrl.Result{RequeueAfter: WaitRequeue}, nil
} }
logger.Info("Reconcile is ended.")
return ctrl.Result{}, nil return ctrl.Result{}, nil
} }
@ -303,7 +286,7 @@ func (r *MsbDeploymentReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr). return ctrl.NewControllerManagedBy(mgr).
For(&myAppsv1.MsbDeployment{}). For(&myAppsv1.MsbDeployment{}).
Owns(&appsv1.Deployment{}). // 监控 deployment 类型,变更就触发 reconciler Owns(&appsv1.Deployment{}). // 监控 deployment 类型,变更就触发 reconciler
Owns(&corev1.Service{}). // 监控 service 类型,变更就触发 reconciler Owns(&corev1.Service{}). // 监控 service 类型,变更就触发 reconciler
Owns(&networkv1.Ingress{}). // 监控 ingress 类型,变更就触发 reconciler Owns(&networkv1.Ingress{}). // 监控 ingress 类型,变更就触发 reconciler
Complete(r) Complete(r)
} }
@ -410,43 +393,41 @@ func (r *MsbDeploymentReconciler) deleteIngress(ctx context.Context, md *myAppsv
return r.Client.Delete(ctx, &ig) return r.Client.Delete(ctx, &ig)
} }
// 处理status // 更新Condition并变更版本
// return: func (r *MsbDeploymentReconciler) updateConditions(md *myAppsv1.MsbDeployment, conditionType, message, status, reason string) {
// // 1. 获取 status
// bool: 资源是否完成,时候需要等待。如果是 true表示资源已经完成没不需要再次reconcile //status := md.Status
// 如果是 false表示资源还未完成需要重新入队 // 2. 获取 conditions 字段
// error执行 update 的状态 //conditions := status.Conditions
func (r *MsbDeploymentReconciler) updateStatus(ctx context.Context, md *myAppsv1.MsbDeployment, conditionType, message, status, reason string) (bool, error) { // 3. 根据当前的需求,获取指定的 condition
if conditionType != "" { var condition *myAppsv1.Condition
// 1. 获取 status for i := range md.Status.Conditions {
//status := md.Status // 4. 是否获取到
// 2. 获取 conditions 字段 if md.Status.Conditions[i].Type == conditionType {
//conditions := status.Conditions // 4.1 获取到了
// 3. 根据当前的需求,获取指定的 condition condition = &md.Status.Conditions[i]
var condition *myAppsv1.Condition
for i := range md.Status.Conditions {
// 4. 是否获取到
if md.Status.Conditions[i].Type == conditionType {
// 4.1 获取到了
condition = &md.Status.Conditions[i]
}
} }
if condition != nil { }
// 4.1.1 获取当前线上的 conditon 状态与存储的condition进行比较如果相同跳过。不同替换 if condition != nil {
if condition.Status != status || // 4.1.1 获取当前线上的 conditon 状态与存储的condition进行比较如果相同跳过。不同替换
condition.Message != message || if condition.Status != status ||
condition.Reason != reason { condition.Message != message ||
condition.Status = status condition.Reason != reason {
condition.Message = message condition.Status = status
condition.Reason = reason condition.Message = message
} condition.Reason = reason
} else { md.Status.ObservedGeneration += 1
// 4.2 没获取到创建这个conditon更新到conditons中
md.Status.Conditions = append(md.Status.Conditions,
createCondition(conditionType, message, status, reason))
} }
} else {
// 4.2 没获取到创建这个conditon更新到conditons中
md.Status.Conditions = append(md.Status.Conditions,
createCondition(conditionType, message, status, reason))
md.Status.ObservedGeneration += 1
} }
}
// Ready 判断本次 reconcile 是否达到预期
func (r *MsbDeploymentReconciler) Ready(md *myAppsv1.MsbDeployment) bool {
// 5. 继续处理其他的conditions // 5. 继续处理其他的conditions
m, re, p, sus := isSuccess(md.Status.Conditions) m, re, p, sus := isSuccess(md.Status.Conditions)
if sus { if sus {
@ -456,12 +437,16 @@ func (r *MsbDeploymentReconciler) updateStatus(ctx context.Context, md *myAppsv1
md.Status.Phase = myAppsv1.StatusPhaseComplete md.Status.Phase = myAppsv1.StatusPhaseComplete
} else { } else {
// 6.2 遍历所有的conditons 状态如果有任意一个condition不是完成的状态则将这个状态更新到总的 status 中。更待一定时间再次入队。 // 6.2 遍历所有的conditons 状态如果有任意一个condition不是完成的状态则将这个状态更新到总的 status 中。更待一定时间再次入队。
md.Status.Message = m if md.Status.Message != m ||
md.Status.Reason = re md.Status.Reason != re ||
md.Status.Phase = p md.Status.Phase != p {
md.Status.Message = m
md.Status.Reason = re
md.Status.Phase = p
md.Status.ObservedGeneration += 1
}
} }
// 7. 执行更新 return sus
return sus, r.Client.Status().Update(ctx, md)
} }
func isSuccess(conditions []myAppsv1.Condition) (message, reason, phase string, sus bool) { func isSuccess(conditions []myAppsv1.Condition) (message, reason, phase string, sus bool) {

@ -1,67 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<testsuite name="e2e" tests="64" failures="0" errors="0" time="121.981"> <testsuite name="e2e" tests="64" failures="0" errors="0" time="109.125">
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be create mod ingress success" classname="e2e" time="1.015628442"></testcase> <testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be create mod ingress with tls success" classname="e2e" time="3.022559889"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist msbdeployment" classname="e2e" time="0.094424609"></testcase> <testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist msbdeployment" classname="e2e" time="0.032308961"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist deployment" classname="e2e" time="0.020615509"></testcase> <testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist ingress, and have a tls setting" classname="e2e" time="0.034872611"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist service" classname="e2e" time="0.020537996"></testcase> <testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist issuer" classname="e2e" time="0.025461398"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist ingress" classname="e2e" time="0.017977009"></testcase> <testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist certificate" classname="e2e" time="0.024536388"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be update to nodeport success" classname="e2e" time="1.02410897"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should be delete mod ingress success" classname="e2e" time="3.01690593"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should not be exist ingress" classname="e2e" time="0.019909106"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist msbdeployment" classname="e2e" time="0.019755163"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should be delete mod ingress success" classname="e2e" time="3.018160558"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist deployment" classname="e2e" time="0.03127168"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist msbdeployment" classname="e2e" time="0.034140373"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist service" classname="e2e" time="0.023646105"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist deployment" classname="e2e" time="0.02501178"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist ingress" classname="e2e" time="0.021197081"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist service" classname="e2e" time="0.021885967"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist issuer" classname="e2e" time="0.104384323"></testcase>
<testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist ingress" classname="e2e" time="0.02506562"></testcase> <testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist certificate" classname="e2e" time="0.401023335"></testcase>
<testcase name="Create msbdeployment mod ingress must failed Create msbdeployment mod ingress no domain Should be create mod ingress no domain failed" classname="e2e" time="0.091343438"></testcase> <testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be create mod ingress success" classname="e2e" time="1.225955715"></testcase>
<testcase name="Create msbdeployment mod nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport no nodeport, must failed" classname="e2e" time="0.410633534"></testcase> <testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist msbdeployment" classname="e2e" time="0.009590279"></testcase>
<testcase name="Create msbdeployment mod nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport li nodeport, must failed" classname="e2e" time="0.388724558"></testcase> <testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist deployment" classname="e2e" time="0.010331642"></testcase>
<testcase name="Create msbdeployment mod nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport gt nodeport, must failed" classname="e2e" time="0.400739363"></testcase> <testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist service" classname="e2e" time="0.353561755"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be create mod nodeport success" classname="e2e" time="1.213148109"></testcase> <testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist ingress" classname="e2e" time="0.401696824"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist msbdeployment" classname="e2e" time="0.047014388"></testcase> <testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should be delete mod ingress success" classname="e2e" time="3.20492992"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist deployment" classname="e2e" time="0.034694042"></testcase> <testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist msbdeployment" classname="e2e" time="0.03643279"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist service" classname="e2e" time="0.305929798"></testcase> <testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist deployment" classname="e2e" time="0.025111098"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should not be exist ingress" classname="e2e" time="0.401786031"></testcase> <testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist service" classname="e2e" time="0.018181285"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be update to ingress success" classname="e2e" time="1.2137515190000001"></testcase> <testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist ingress" classname="e2e" time="0.020438962"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist ingress" classname="e2e" time="0.046462856"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be create mod nodeport success" classname="e2e" time="1.017580932"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should be delete mod nodeport success" classname="e2e" time="3.024724638"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist msbdeployment" classname="e2e" time="0.010714256"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist msbdeployment" classname="e2e" time="0.008113699"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist deployment" classname="e2e" time="0.016441073"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist deployment" classname="e2e" time="0.009170037"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist service" classname="e2e" time="0.255184402"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist service" classname="e2e" time="0.007824077"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should not be exist ingress" classname="e2e" time="0.400590063"></testcase>
<testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist ingress" classname="e2e" time="0.012239742"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be update to ingress success" classname="e2e" time="1.214198213"></testcase>
<testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no replicas Create msbdeployment mod ingress success" classname="e2e" time="1.012972533"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist ingress" classname="e2e" time="0.016829275"></testcase>
<testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no replicas Should be exist msbdeployment, and have a default replicas" classname="e2e" time="0.011586288"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should be delete mod nodeport success" classname="e2e" time="3.022204257"></testcase>
<testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no svcport Create msbdeployment mod ingress success" classname="e2e" time="1.009465166"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist msbdeployment" classname="e2e" time="0.112901185"></testcase>
<testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no svcport Should be exist msbdeployment, and have a default svcport" classname="e2e" time="0.00686519"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist deployment" classname="e2e" time="0.032176544"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be create mod ingress success" classname="e2e" time="1.008714575"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist service" classname="e2e" time="0.026723179"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist msbdeployment" classname="e2e" time="0.024582708"></testcase> <testcase name="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist ingress" classname="e2e" time="0.023081696"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist deployment" classname="e2e" time="0.033743407"></testcase> <testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no replicas Create msbdeployment mod ingress success" classname="e2e" time="1.03300364"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist service" classname="e2e" time="0.01792106"></testcase> <testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no replicas Should be exist msbdeployment, and have a default replicas" classname="e2e" time="0.02775176"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist ingress" classname="e2e" time="0.240049083"></testcase> <testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no svcport Create msbdeployment mod ingress success" classname="e2e" time="1.011596519"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should be delete mod ingress success" classname="e2e" time="3.216211016"></testcase> <testcase name="Create msbdeployment mod ingress default value Create msbdeployment mod ingress, but no svcport Should be exist msbdeployment, and have a default svcport" classname="e2e" time="0.057175599"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist msbdeployment" classname="e2e" time="0.021593733"></testcase> <testcase name="Create msbdeployment mod nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport no nodeport, must failed" classname="e2e" time="0.013858282"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist deployment" classname="e2e" time="0.019502564"></testcase> <testcase name="Create msbdeployment mod nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport li nodeport, must failed" classname="e2e" time="0.022844482"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist service" classname="e2e" time="0.040341771"></testcase> <testcase name="Create msbdeployment mod nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport gt nodeport, must failed" classname="e2e" time="0.236045376"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist ingress" classname="e2e" time="0.019365736"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be create mod ingress success" classname="e2e" time="1.216842624"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be create mod ingress with tls success" classname="e2e" time="3.015456521"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist msbdeployment" classname="e2e" time="0.019118689"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist msbdeployment" classname="e2e" time="0.045138304"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist deployment" classname="e2e" time="0.006906837"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist ingress, and have a tls setting" classname="e2e" time="0.016779042"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist service" classname="e2e" time="0.356895436"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist issuer" classname="e2e" time="0.024182935"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist ingress" classname="e2e" time="0.400860639"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist certificate" classname="e2e" time="0.023835327"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be update to nodeport success" classname="e2e" time="1.225811238"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should be delete mod ingress success" classname="e2e" time="3.018139056"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should not be exist ingress" classname="e2e" time="0.009133742"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist msbdeployment" classname="e2e" time="0.026686664"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should be delete mod ingress success" classname="e2e" time="3.025269131"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist deployment" classname="e2e" time="0.027368444"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist msbdeployment" classname="e2e" time="0.026153366"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist service" classname="e2e" time="0.021610069"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist deployment" classname="e2e" time="0.019366476"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist ingress" classname="e2e" time="0.037768686"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist service" classname="e2e" time="0.022820337"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist issuer" classname="e2e" time="0.086961024"></testcase> <testcase name="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist ingress" classname="e2e" time="0.022318766"></testcase>
<testcase name="Create msbdeployment mod ingress with tls Delete msbdeployment mod ingress with tls Should not be exist certificate" classname="e2e" time="0.400067644"></testcase> <testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be create mod nodeport success" classname="e2e" time="1.042805947"></testcase>
<testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be create mod nodeport success" classname="e2e" time="1.211645719"></testcase> <testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be exist msbdeployment" classname="e2e" time="0.05290632"></testcase>
<testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be exist msbdeployment" classname="e2e" time="0.098275974"></testcase> <testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be exist deployment" classname="e2e" time="0.037765152"></testcase>
<testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be exist deployment" classname="e2e" time="0.013374307"></testcase> <testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be exist service" classname="e2e" time="0.162780539"></testcase>
<testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should be exist service" classname="e2e" time="0.277268015"></testcase> <testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should not be exist ingress" classname="e2e" time="0.401055888"></testcase>
<testcase name="Create msbdeployment mod nodeport Create msbdeployment mod nodeport Should not be exist ingress" classname="e2e" time="0.402955863"></testcase> <testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should be delete mod nodeport success" classname="e2e" time="3.212194289"></testcase>
<testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should be delete mod nodeport success" classname="e2e" time="3.208081327"></testcase> <testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist msbdeployment" classname="e2e" time="0.026401071"></testcase>
<testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist msbdeployment" classname="e2e" time="0.009313032"></testcase> <testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist deployment" classname="e2e" time="0.024239397"></testcase>
<testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist deployment" classname="e2e" time="0.006400994"></testcase> <testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist service" classname="e2e" time="0.024828727"></testcase>
<testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist service" classname="e2e" time="0.007583344"></testcase> <testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist ingress" classname="e2e" time="0.034315432"></testcase>
<testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist ingress" classname="e2e" time="0.007653508"></testcase> <testcase name="Create msbdeployment mod ingress must failed Create msbdeployment mod ingress no domain Should be create mod ingress no domain failed" classname="e2e" time="0.086156018"></testcase>
</testsuite> </testsuite>
Loading…
Cancel
Save