From 64862a06521d6336093014694cb7df0e635647a1 Mon Sep 17 00:00:00 2001 From: archanapholla <111001399+archanapholla@users.noreply.github.com> Date: Sat, 18 Mar 2023 23:48:19 -0500 Subject: [PATCH] Update Vpc object on change and improve logging. (#157) Signed-off-by: Archana Holla --- pkg/apiserver/webhook/unit-test.log | 0 pkg/controllers/inventory/inventory.go | 36 +++++++++++++++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) delete mode 100644 pkg/apiserver/webhook/unit-test.log diff --git a/pkg/apiserver/webhook/unit-test.log b/pkg/apiserver/webhook/unit-test.log deleted file mode 100644 index e69de29b..00000000 diff --git a/pkg/controllers/inventory/inventory.go b/pkg/controllers/inventory/inventory.go index 677faa84..3843a5ad 100644 --- a/pkg/controllers/inventory/inventory.go +++ b/pkg/controllers/inventory/inventory.go @@ -17,6 +17,7 @@ package inventory import ( "context" "fmt" + "reflect" "github.com/go-logr/logr" "k8s.io/apimachinery/pkg/fields" @@ -46,37 +47,52 @@ func InitInventory() *Inventory { } // BuildVpcCache using vpc list from cloud, update vpc cache(with vpcs applicable for the current cloud account). -func (inventory *Inventory) BuildVpcCache(vpcMap map[string]*runtimev1alpha1.Vpc, namespacedName *types.NamespacedName) error { +func (inventory *Inventory) BuildVpcCache(discoveredVpcMap map[string]*runtimev1alpha1.Vpc, namespacedName *types.NamespacedName) error { + var numVpcsToAdd, numVpcsToUpdate, numVpcsToDelete int vpcsInCache, _ := inventory.vpcStore.GetByIndex(common.VpcIndexerByAccountNameSpacedName, namespacedName.String()) // Remove vpcs in vpc cache which are not found in vpc list fetched from cloud. for _, i := range vpcsInCache { vpc := i.(*runtimev1alpha1.Vpc) - if _, found := vpcMap[vpc.Status.Id]; !found { - inventory.log.V(1).Info("Deleting vpc from vpc cache", "vpc id", vpc.Status.Id, "account", - namespacedName.String()) + if _, found := discoveredVpcMap[vpc.Status.Id]; !found { if err := inventory.vpcStore.Delete(fmt.Sprintf("%v/%v-%v", vpc.Namespace, vpc.Labels[common.VpcLabelAccountName], vpc.Status.Id)); err != nil { inventory.log.Error(err, "failed to delete vpc from vpc cache", "vpc id", vpc.Status.Id, "account", namespacedName.String()) + } else { + numVpcsToDelete++ } } } - for _, v := range vpcMap { + for _, discoveredVpc := range discoveredVpcMap { var err error - key := fmt.Sprintf("%v/%v-%v", v.Namespace, v.Labels[common.VpcLabelAccountName], v.Status.Id) - if _, found, _ := inventory.vpcStore.Get(key); !found { - err = inventory.vpcStore.Create(v) + key := fmt.Sprintf("%v/%v-%v", discoveredVpc.Namespace, discoveredVpc.Labels[common.VpcLabelAccountName], discoveredVpc.Status.Id) + if cachedObj, found, _ := inventory.vpcStore.Get(key); !found { + err = inventory.vpcStore.Create(discoveredVpc) + if err == nil { + numVpcsToAdd++ + } } else { - err = inventory.vpcStore.Update(v) + cachedVpc := cachedObj.(*runtimev1alpha1.Vpc) + if !reflect.DeepEqual(cachedVpc.Status, discoveredVpc.Status) { + err = inventory.vpcStore.Update(discoveredVpc) + if err == nil { + numVpcsToUpdate++ + } + } } if err != nil { return fmt.Errorf("failed to add vpc into vpc cache, vpc id: %s, error: %v", - v.Status.Id, err) + discoveredVpc.Status.Id, err) } } + if numVpcsToAdd != 0 || numVpcsToUpdate != 0 || numVpcsToDelete != 0 { + inventory.log.Info("Vpc poll statistics", "account", namespacedName, "added", numVpcsToAdd, + "update", numVpcsToUpdate, "delete", numVpcsToDelete) + } + return nil }