l-109 重构状态更新02

master
dongming 2 years ago
parent 3067f3380f
commit 2b170abcc7

@ -82,6 +82,10 @@ type MsbDeploymentStatus struct {
// Conditions 处于这个阶段的原因
// +optional
Conditions []Condition `json:"conditions,omitempty"`
// ObservedGeneration 观测一次reconcile产生的变化如果有变化自加最终判断是否变更如果变更则请求apiserver整整的跟新否则不做任何更新
// +optional
ObservedGeneration int32 `json:"observedGeneration,omitempty"`
}
// 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.
func (in *MsbDeploymentSpec) DeepCopyInto(out *MsbDeploymentSpec) {
*out = *in
if in.StartCmd != nil {
in, out := &in.StartCmd, &out.StartCmd
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Args != nil {
in, out := &in.Args, &out.Args
*out = make([]string, len(*in))

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

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

@ -1,67 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="e2e" tests="64" failures="0" errors="0" time="121.981">
<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="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist msbdeployment" classname="e2e" time="0.094424609"></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="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist service" classname="e2e" time="0.020537996"></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="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="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="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should be delete mod ingress success" classname="e2e" time="3.018160558"></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="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist deployment" classname="e2e" time="0.02501178"></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="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 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 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 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 nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport gt nodeport, must failed" classname="e2e" time="0.400739363"></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="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist msbdeployment" classname="e2e" time="0.047014388"></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="Update msbdeployment mod nodeport to Ingress Update msbdeployment mod nodeport to ingress Should be exist service" classname="e2e" time="0.305929798"></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="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="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 Delete msbdeployment n2i Should be delete mod nodeport success" classname="e2e" time="3.024724638"></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 Delete msbdeployment n2i Should not be exist deployment" classname="e2e" time="0.009170037"></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 Delete msbdeployment n2i Should not be exist ingress" classname="e2e" time="0.012239742"></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="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="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="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="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be create mod ingress success" classname="e2e" time="1.008714575"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist msbdeployment" classname="e2e" time="0.024582708"></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 Create msbdeployment mod ingress Should be exist service" classname="e2e" time="0.01792106"></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 Delete msbdeployment mod ingress Should be delete mod ingress success" classname="e2e" time="3.216211016"></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 ingress Delete msbdeployment mod ingress Should not be exist deployment" classname="e2e" time="0.019502564"></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 ingress Delete msbdeployment mod ingress Should not be exist ingress" classname="e2e" time="0.019365736"></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="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist msbdeployment" classname="e2e" time="0.045138304"></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="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist issuer" classname="e2e" time="0.024182935"></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="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="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="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="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="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="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="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.211645719"></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.013374307"></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.402955863"></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.009313032"></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.007583344"></testcase>
<testcase name="Create msbdeployment mod nodeport Delete msbdeployment mod nodeport Should not be exist ingress" classname="e2e" time="0.007653508"></testcase>
<testsuite name="e2e" tests="64" failures="0" errors="0" time="109.125">
<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="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist msbdeployment" classname="e2e" time="0.032308961"></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="Create msbdeployment mod ingress with tls Create msbdeployment mod ingress with tls Should be exist issuer" classname="e2e" time="0.025461398"></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="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="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="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="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="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="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="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 Create msbdeployment mod ingress Should be create mod ingress success" classname="e2e" time="1.225955715"></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 ingress Create msbdeployment mod ingress Should be exist deployment" classname="e2e" time="0.010331642"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist service" classname="e2e" time="0.353561755"></testcase>
<testcase name="Create msbdeployment mod ingress Create msbdeployment mod ingress Should be exist ingress" classname="e2e" time="0.401696824"></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="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist msbdeployment" classname="e2e" time="0.03643279"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist deployment" classname="e2e" time="0.025111098"></testcase>
<testcase name="Create msbdeployment mod ingress Delete msbdeployment mod ingress Should not be exist service" classname="e2e" time="0.018181285"></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 create mod nodeport success" classname="e2e" time="1.017580932"></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 Update msbdeployment mod nodeport to ingress Should be exist deployment" classname="e2e" time="0.016441073"></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 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 Update msbdeployment mod nodeport to ingress Should be update to ingress success" classname="e2e" time="1.214198213"></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="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should be delete mod nodeport success" classname="e2e" time="3.022204257"></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="Update msbdeployment mod nodeport to Ingress Delete msbdeployment n2i Should not be exist deployment" classname="e2e" time="0.032176544"></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="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 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 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 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 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 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 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 nodeport must failed Create msbdeployment mod nodeport Should be create mod nodeport gt nodeport, must failed" classname="e2e" time="0.236045376"></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="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist msbdeployment" classname="e2e" time="0.019118689"></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="Update msbdeployment mod ingress to Nodeport Update msbdeployment mod ingress to nodeport Should be exist service" classname="e2e" time="0.356895436"></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="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="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="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should be delete mod ingress success" classname="e2e" time="3.025269131"></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="Update msbdeployment mod ingress to Nodeport Delete msbdeployment i2n Should not be exist deployment" classname="e2e" time="0.019366476"></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="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 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 exist msbdeployment" classname="e2e" time="0.05290632"></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 service" classname="e2e" time="0.162780539"></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 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 not be exist msbdeployment" classname="e2e" time="0.026401071"></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 service" classname="e2e" time="0.024828727"></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 ingress must failed Create msbdeployment mod ingress no domain Should be create mod ingress no domain failed" classname="e2e" time="0.086156018"></testcase>
</testsuite>
Loading…
Cancel
Save