diff --git a/pkg/adapters/alibabacloudslb/alibabacloudslb_controller.go b/pkg/adapters/alibabacloudslb/alibabacloudslb_controller.go index 7db38db..c70a3b0 100644 --- a/pkg/adapters/alibabacloudslb/alibabacloudslb_controller.go +++ b/pkg/adapters/alibabacloudslb/alibabacloudslb_controller.go @@ -122,7 +122,7 @@ func (r *SlbControllerAdapter) GetExpectedEmployee(ctx context.Context, employer expected := make([]controllerframe.IEmployee, len(podList.Items)) for idx, pod := range podList.Items { - status := AlibabaSlbPodStatus{ + status := &AlibabaSlbPodStatus{ EmployeeID: pod.Status.PodIP, EmployeeName: pod.Name, } @@ -170,7 +170,7 @@ func (r *SlbControllerAdapter) GetCurrentEmployee(ctx context.Context, employer current := make([]controllerframe.IEmployee, len(podList.Items)) for idx, pod := range podList.Items { - status := AlibabaSlbPodStatus{ + status := &AlibabaSlbPodStatus{ EmployeeID: pod.Status.PodIP, EmployeeName: pod.Name, } diff --git a/pkg/adapters/alibabacloudslb/types.go b/pkg/adapters/alibabacloudslb/types.go index 7c98a03..05b046c 100644 --- a/pkg/adapters/alibabacloudslb/types.go +++ b/pkg/adapters/alibabacloudslb/types.go @@ -23,7 +23,7 @@ import ( "kusionstack.io/resourceconsist/pkg/frame/controller" ) -var _ controller.IEmployee = AlibabaSlbPodStatus{} +var _ controller.IEmployee = &AlibabaSlbPodStatus{} type AlibabaSlbPodStatus struct { EmployeeID string @@ -35,19 +35,23 @@ type PodExtraStatus struct { TrafficOn bool } -func (a AlibabaSlbPodStatus) GetEmployeeId() string { +func (a *AlibabaSlbPodStatus) GetEmployeeId() string { return a.EmployeeID } -func (a AlibabaSlbPodStatus) GetEmployeeName() string { +func (a *AlibabaSlbPodStatus) GetEmployeeName() string { return a.EmployeeName } -func (a AlibabaSlbPodStatus) GetEmployeeStatuses() interface{} { +func (a *AlibabaSlbPodStatus) GetEmployeeStatuses() interface{} { return a.EmployeeStatuses } -func (a AlibabaSlbPodStatus) EmployeeEqual(employeeStatus controller.IEmployee) (bool, error) { +func (a *AlibabaSlbPodStatus) SetEmployeeStatuses(employeeStatus interface{}) { + a.EmployeeStatuses = employeeStatus.(controller.PodEmployeeStatuses) +} + +func (a *AlibabaSlbPodStatus) EmployeeEqual(employeeStatus controller.IEmployee) (bool, error) { if a.EmployeeName != employeeStatus.GetEmployeeName() { return false, nil } diff --git a/pkg/frame/controller/resourceconsist_controller_suite_test.go b/pkg/frame/controller/resourceconsist_controller_suite_test.go index a201a46..0d33af0 100644 --- a/pkg/frame/controller/resourceconsist_controller_suite_test.go +++ b/pkg/frame/controller/resourceconsist_controller_suite_test.go @@ -107,7 +107,7 @@ func (r *DemoControllerAdapter) GetExpectedEmployer(ctx context.Context, employe return nil, nil } var expect []IEmployer - expect = append(expect, DemoServiceStatus{ + expect = append(expect, &DemoServiceStatus{ EmployerId: employer.GetName(), EmployerStatuses: DemoServiceDetails{ RemoteVIP: "demo-remote-VIP", @@ -140,9 +140,9 @@ func (r *DemoControllerAdapter) CreateEmployer(ctx context.Context, employer cli return toCreates, nil, nil } - toCreateDemoServiceStatus := make([]DemoServiceStatus, len(toCreates)) + toCreateDemoServiceStatus := make([]*DemoServiceStatus, len(toCreates)) for idx, create := range toCreates { - createDemoServiceStatus, ok := create.(DemoServiceStatus) + createDemoServiceStatus, ok := create.(*DemoServiceStatus) if !ok { return nil, toCreates, fmt.Errorf("toCreates employer is not DemoServiceStatus") } @@ -163,9 +163,9 @@ func (r *DemoControllerAdapter) UpdateEmployer(ctx context.Context, employer cli return toUpdates, nil, nil } - toUpdateDemoServiceStatus := make([]DemoServiceStatus, len(toUpdates)) + toUpdateDemoServiceStatus := make([]*DemoServiceStatus, len(toUpdates)) for idx, update := range toUpdates { - updateDemoServiceStatus, ok := update.(DemoServiceStatus) + updateDemoServiceStatus, ok := update.(*DemoServiceStatus) if !ok { return nil, toUpdates, fmt.Errorf("toUpdates employer is not DemoServiceStatus") } @@ -186,9 +186,9 @@ func (r *DemoControllerAdapter) DeleteEmployer(ctx context.Context, employer cli return toDeletes, nil, nil } - toDeleteDemoServiceStatus := make([]DemoServiceStatus, len(toDeletes)) + toDeleteDemoServiceStatus := make([]*DemoServiceStatus, len(toDeletes)) for idx, update := range toDeletes { - deleteDemoServiceStatus, ok := update.(DemoServiceStatus) + deleteDemoServiceStatus, ok := update.(*DemoServiceStatus) if !ok { return nil, toDeletes, fmt.Errorf("toDeletes employer is not DemoServiceStatus") } @@ -228,7 +228,7 @@ func (r *DemoControllerAdapter) GetExpectedEmployee(ctx context.Context, employe if !pod.DeletionTimestamp.IsZero() { continue } - status := DemoPodStatus{ + status := &DemoPodStatus{ EmployeeId: pod.Name, EmployeeName: pod.Name, } @@ -274,10 +274,10 @@ func (r *DemoControllerAdapter) CreateEmployees(ctx context.Context, employer cl if len(toCreates) == 0 { return toCreates, nil, nil } - toCreateDemoPodStatuses := make([]DemoPodStatus, len(toCreates)) + toCreateDemoPodStatuses := make([]*DemoPodStatus, len(toCreates)) for idx, toCreate := range toCreates { - podStatus, ok := toCreate.(DemoPodStatus) + podStatus, ok := toCreate.(*DemoPodStatus) if !ok { return nil, toCreates, fmt.Errorf("toCreate is not DemoPodStatus") } @@ -299,10 +299,10 @@ func (r *DemoControllerAdapter) UpdateEmployees(ctx context.Context, employer cl return toUpdates, nil, nil } - toUpdateDemoPodStatuses := make([]DemoPodStatus, len(toUpdates)) + toUpdateDemoPodStatuses := make([]*DemoPodStatus, len(toUpdates)) for idx, toUpdate := range toUpdates { - podStatus, ok := toUpdate.(DemoPodStatus) + podStatus, ok := toUpdate.(*DemoPodStatus) if !ok { return nil, toUpdates, fmt.Errorf("toUpdate is not DemoPodStatus") } @@ -324,10 +324,10 @@ func (r *DemoControllerAdapter) DeleteEmployees(ctx context.Context, employer cl return toDeletes, nil, nil } - toDeleteDemoPodStatuses := make([]DemoPodStatus, len(toDeletes)) + toDeleteDemoPodStatuses := make([]*DemoPodStatus, len(toDeletes)) for idx, toDelete := range toDeletes { - podStatus, ok := toDelete.(DemoPodStatus) + podStatus, ok := toDelete.(*DemoPodStatus) if !ok { return nil, toDeletes, fmt.Errorf("toDelete is not DemoPodStatus") } @@ -344,8 +344,8 @@ func (r *DemoControllerAdapter) DeleteEmployees(ctx context.Context, employer cl return toDeletes, nil, nil } -var _ IEmployer = DemoServiceStatus{} -var _ IEmployee = DemoPodStatus{} +var _ IEmployer = &DemoServiceStatus{} +var _ IEmployee = &DemoPodStatus{} type DemoServiceStatus struct { EmployerId string @@ -357,15 +357,19 @@ type DemoServiceDetails struct { RemoteVIPQPS int } -func (d DemoServiceStatus) GetEmployerId() string { +func (d *DemoServiceStatus) GetEmployerId() string { return d.EmployerId } -func (d DemoServiceStatus) GetEmployerStatuses() interface{} { +func (d *DemoServiceStatus) GetEmployerStatuses() interface{} { return d.EmployerStatuses } -func (d DemoServiceStatus) EmployerEqual(employer IEmployer) (bool, error) { +func (d *DemoServiceStatus) SetEmployerStatuses(employerStatus interface{}) { + d.EmployerStatuses = employerStatus.(DemoServiceDetails) +} + +func (d *DemoServiceStatus) EmployerEqual(employer IEmployer) (bool, error) { if d.EmployerId != employer.GetEmployerId() { return false, nil } @@ -382,19 +386,23 @@ type DemoPodStatus struct { EmployeeStatuses PodEmployeeStatuses } -func (d DemoPodStatus) GetEmployeeId() string { +func (d *DemoPodStatus) GetEmployeeId() string { return d.EmployeeId } -func (d DemoPodStatus) GetEmployeeName() string { +func (d *DemoPodStatus) GetEmployeeName() string { return d.EmployeeName } -func (d DemoPodStatus) GetEmployeeStatuses() interface{} { +func (d *DemoPodStatus) GetEmployeeStatuses() interface{} { return d.EmployeeStatuses } -func (d DemoPodStatus) EmployeeEqual(employeeStatus IEmployee) (bool, error) { +func (d *DemoPodStatus) SetEmployeeStatuses(employeeStatus interface{}) { + d.EmployeeStatuses = employeeStatus.(PodEmployeeStatuses) +} + +func (d *DemoPodStatus) EmployeeEqual(employeeStatus IEmployee) (bool, error) { if d.EmployeeName != employeeStatus.GetEmployeeName() { return false, nil } @@ -425,12 +433,12 @@ type DemoResourceProviderClient struct { } type DemoResourceVipOps struct { - VipStatuses []DemoServiceStatus + VipStatuses []*DemoServiceStatus MockData bool } type DemoResourceRsOps struct { - RsStatuses []DemoPodStatus + RsStatuses []*DemoPodStatus MockData bool } @@ -467,9 +475,9 @@ func (d *DemoResourceProviderClient) DeleteVip(req *DemoResourceVipOps) (*DemoRe func (d *DemoResourceProviderClient) QueryVip(req *DemoResourceVipOps) (*DemoResourceVipOps, error) { args := d.Called(req) if !args.Get(0).(*DemoResourceVipOps).MockData { - vipStatuses := make([]DemoServiceStatus, 0) + vipStatuses := make([]*DemoServiceStatus, 0) demoResourceVipStatusInProvider.Range(func(key, value any) bool { - vipStatuses = append(vipStatuses, DemoServiceStatus{ + vipStatuses = append(vipStatuses, &DemoServiceStatus{ EmployerId: key.(string), EmployerStatuses: value.(DemoServiceDetails), }) @@ -515,9 +523,9 @@ func (d *DemoResourceProviderClient) DeleteRealServer(req *DemoResourceRsOps) (* func (d *DemoResourceProviderClient) QueryRealServer(req *DemoResourceRsOps) (*DemoResourceRsOps, error) { args := d.Called(req) if !args.Get(0).(*DemoResourceRsOps).MockData { - rsStatuses := make([]DemoPodStatus, 0) + rsStatuses := make([]*DemoPodStatus, 0) demoResourceRsStatusInProvider.Range(func(key, value any) bool { - rsStatuses = append(rsStatuses, value.(DemoPodStatus)) + rsStatuses = append(rsStatuses, value.(*DemoPodStatus)) return true }) return &DemoResourceRsOps{ diff --git a/pkg/frame/controller/resourceconsit_controller_test.go b/pkg/frame/controller/resourceconsit_controller_test.go index 21c8208..c5cd752 100644 --- a/pkg/frame/controller/resourceconsit_controller_test.go +++ b/pkg/frame/controller/resourceconsit_controller_test.go @@ -285,9 +285,9 @@ var _ = Describe("resource-consist-controller", func() { Eventually(func() bool { details, exist := demoResourceRsStatusInProvider.Load(pod.Name) - return exist && details.(DemoPodStatus).GetEmployeeName() == pod.Name && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 100 && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == true + return exist && details.(*DemoPodStatus).GetEmployeeName() == pod.Name && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 100 && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == true }, 3*time.Second, 100*time.Millisecond).Should(BeTrue()) Eventually(func() bool { @@ -344,9 +344,9 @@ var _ = Describe("resource-consist-controller", func() { Eventually(func() bool { details, exist := demoResourceRsStatusInProvider.Load(pod.Name) - return exist && details.(DemoPodStatus).GetEmployeeName() == pod.Name && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 0 && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == false + return exist && details.(*DemoPodStatus).GetEmployeeName() == pod.Name && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 0 && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == false }, 3*time.Second, 100*time.Millisecond).Should(BeTrue()) Eventually(func() bool { @@ -373,9 +373,9 @@ var _ = Describe("resource-consist-controller", func() { Eventually(func() bool { details, exist := demoResourceRsStatusInProvider.Load(pod.Name) - return exist && details.(DemoPodStatus).GetEmployeeName() == pod.Name && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 100 && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == true + return exist && details.(*DemoPodStatus).GetEmployeeName() == pod.Name && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 100 && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == true }, 3*time.Second, 100*time.Millisecond).Should(BeTrue()) }) @@ -551,7 +551,7 @@ var _ = Describe("resource-consist-controller", func() { return false }, 3*time.Second, 100*time.Millisecond).Should(BeTrue()) - demoResourceRsStatusInProvider.Store(pod2.Name, DemoPodStatus{ + demoResourceRsStatusInProvider.Store(pod2.Name, &DemoPodStatus{ EmployeeId: pod2.Name, EmployeeName: pod2.Name, EmployeeStatuses: PodEmployeeStatuses{ @@ -567,9 +567,9 @@ var _ = Describe("resource-consist-controller", func() { Eventually(func() bool { details, exist := demoResourceRsStatusInProvider.Load(pod2.Name) - return exist && details.(DemoPodStatus).GetEmployeeName() == pod2.Name && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 0 && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == false + return exist && details.(*DemoPodStatus).GetEmployeeName() == pod2.Name && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 0 && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == false }, 3*time.Second, 100*time.Millisecond).Should(BeTrue()) }) @@ -708,9 +708,9 @@ var _ = Describe("resource-consist-controller", func() { Eventually(func() bool { details, exist := demoResourceRsStatusInProvider.Load(pod3.Name) - return exist && details.(DemoPodStatus).GetEmployeeName() == pod3.Name && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 100 && - details.(DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == true + return exist && details.(*DemoPodStatus).GetEmployeeName() == pod3.Name && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficWeight == 100 && + details.(*DemoPodStatus).GetEmployeeStatuses().(PodEmployeeStatuses).ExtraStatus.(PodExtraStatus).TrafficOn == true }, 3*time.Second, 100*time.Millisecond).Should(BeTrue()) Eventually(func() bool { diff --git a/pkg/frame/controller/types.go b/pkg/frame/controller/types.go index c83fe95..ee7e772 100644 --- a/pkg/frame/controller/types.go +++ b/pkg/frame/controller/types.go @@ -126,6 +126,7 @@ type ReconcileAdapter interface { type IEmployer interface { GetEmployerId() string GetEmployerStatuses() interface{} + SetEmployerStatuses(employerStatuses interface{}) EmployerEqual(employer IEmployer) (bool, error) } @@ -137,6 +138,7 @@ type IEmployee interface { // GetEmployeeName need to be implemented if follow Lifecycle GetEmployeeName() string GetEmployeeStatuses() interface{} + SetEmployeeStatuses(employeeStatuses interface{}) EmployeeEqual(employee IEmployee) (bool, error) }