Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@
} else {
//查询最新一次的发布单,如果存在运行中则终止
orderList, _ := e.wrapEDASClient.ListRecentChangeOrderInfo(appID)
if len(orderList.ChangeOrder) > 0 && orderList.ChangeOrder[0].Status == 1 {
if orderList != nil && len(orderList.ChangeOrder) > 0 && orderList.ChangeOrder[0].Status == 1 {

Check warning on line 118 in internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go#L118

Added line #L118 was not covered by tests
e.wrapEDASClient.AbortChangeOrder(orderList.ChangeOrder[0].ChangeOrderId)
}

Expand All @@ -140,12 +140,37 @@
}

func (e *EDAS) resolveServiceSelector(appName, sgID, serviceName string) map[string]string {
var deployment *appsv1.Deployment
if currentDeployment, err := e.wrapEDASClient.GetAppDeployment(appName); err == nil {
deployment = currentDeployment
l := e.l.WithField("func", "resolveServiceSelector")

Check warning on line 143 in internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go#L143

Added line #L143 was not covered by tests

for i := 0; i < 3; i++ {
if dep, err := e.wrapEDASClient.GetAppDeployment(appName); err == nil && dep != nil {
selector := resolveServiceSelectorFromDeployment(dep, sgID, serviceName)
l.Infof("resolved selector from edas api, appName: %s, selector: %v", appName, selector)
return selector
} else if err != nil {
l.Warnf("failed to get deployment from edas api, appName: %s, attempt: %d, err: %v", appName, i+1, err)

Check warning on line 151 in internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go#L145-L151

Added lines #L145 - L151 were not covered by tests
}

if i < 2 {
time.Sleep(5 * time.Second)

Check warning on line 155 in internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go#L154-L155

Added lines #L154 - L155 were not covered by tests
}
}

// EDAS API 全部失败,通过 k8s API 最终兜底
l.Warnf("edas api all retries exhausted, falling back to k8s api, appName: %s", appName)
if dep, err := e.wrapClientSet.GetDeployment(context.Background(), appName); err == nil && dep != nil {
selector := resolveServiceSelectorFromDeployment(dep, sgID, serviceName)
l.Infof("resolved selector from k8s api fallback, appName: %s, selector: %v", appName, selector)
return selector
} else if err != nil {
l.Errorf("failed to get deployment from k8s api, appName: %s, err: %v", appName, err)

Check warning on line 166 in internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go#L160-L166

Added lines #L160 - L166 were not covered by tests
}

return resolveServiceSelectorFromDeployment(deployment, sgID, serviceName)
l.Errorf("failed to resolve selector from all sources, appName: %s, using default selector", appName)
return map[string]string{
types.LabelServiceName: serviceName,
types.LabelServiceGroupID: sgID,

Check warning on line 172 in internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/edas_app_flow.go#L169-L172

Added lines #L169 - L172 were not covered by tests
}
}

func resolveServiceSelectorFromDeployment(deployment *appsv1.Deployment, sgID, serviceName string) map[string]string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"strings"

"github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1"
apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

Expand Down Expand Up @@ -90,3 +91,18 @@
l.Debugf("old service list : %+v", services)
return nil
}

// GetDeployment get deployment by name via k8s API.
// EDAS may alter the deployment name in k8s, so use list + contains match.
func (e *wrapKubernetes) GetDeployment(ctx context.Context, name string) (*appsv1.Deployment, error) {
deployList, err := e.cs.AppsV1().Deployments(e.namespace).List(ctx, metav1.ListOptions{})
if err != nil {
return nil, err

Check warning on line 100 in internal/tools/orchestrator/scheduler/executor/plugins/edas/wrapclient/kubernetes/deployment.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/wrapclient/kubernetes/deployment.go#L97-L100

Added lines #L97 - L100 were not covered by tests
}
for i := range deployList.Items {
if strings.Contains(deployList.Items[i].Name, name) {
return &deployList.Items[i], nil

Check warning on line 104 in internal/tools/orchestrator/scheduler/executor/plugins/edas/wrapclient/kubernetes/deployment.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/wrapclient/kubernetes/deployment.go#L102-L104

Added lines #L102 - L104 were not covered by tests
}
}
return nil, errors.Errorf("deployment contains %q not found", name)

Check warning on line 107 in internal/tools/orchestrator/scheduler/executor/plugins/edas/wrapclient/kubernetes/deployment.go

View check run for this annotation

Codecov / codecov/patch

internal/tools/orchestrator/scheduler/executor/plugins/edas/wrapclient/kubernetes/deployment.go#L107

Added line #L107 was not covered by tests
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"context"

"github.com/sirupsen/logrus"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes"

Expand All @@ -30,6 +31,7 @@ import (
type Interface interface {
GetK8sService(name string) (*corev1.Service, error)
GetK8sDeployList(group string, services *[]apistructs.Service) error
GetDeployment(ctx context.Context, name string) (*appsv1.Deployment, error)
CreateK8sService(appName string, selectors map[string]string, ports []int) error
CreateOrUpdateK8sService(ctx context.Context, appName string, selectors map[string]string, ports []int) error
DeleteK8sService(appName string) error
Expand Down
Loading