From: Ruoyu Ying Date: Wed, 5 Jan 2022 01:25:58 +0000 (-0500) Subject: Fix various issues in device registration X-Git-Tag: 21.12.03~9 X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=commitdiff_plain;h=349f4c61aeb2bfad9476fd0d021eb926c8f0f168;p=icn%2Fsdwan.git Fix various issues in device registration * delete ipsec proposal while unregistering device * check counter party before setup edge-edge tunnels * remove global variable ips Change-Id: I9dd1afc7057eb4e31f23095114b0bce258f4a277 Signed-off-by: Ruoyu --- diff --git a/central-controller/src/scc/pkg/manager/device_objectmanager.go b/central-controller/src/scc/pkg/manager/device_objectmanager.go index 547beea..be64fbb 100644 --- a/central-controller/src/scc/pkg/manager/device_objectmanager.go +++ b/central-controller/src/scc/pkg/manager/device_objectmanager.go @@ -36,7 +36,6 @@ import ( const SCC_RESOURCE = "scc_ipsec_resource" const RegStatus = "RegStatus" -var ips []string var task *runner.Task type DeviceObjectKey struct { @@ -159,6 +158,10 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro log.Println("Using overlay ip " + oip) to.Status.Ip = oip + resutil := NewResUtil() + scc := module.EmptyObject{ + Metadata: module.ObjectMetaData{"local", "", "", ""}} + // Get all proposal resources proposal := GetManagerset().Proposal proposals, err := proposal.GetObjects(m) @@ -168,12 +171,11 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro } var all_proposal []string - var proposalresource []*resource.ProposalResource for i := 0; i < len(proposals); i++ { proposal_obj := proposals[i].(*module.ProposalObject) all_proposal = append(all_proposal, proposal_obj.Metadata.Name) pr := proposal_obj.ToResource() - proposalresource = append(proposalresource, pr) + resutil.AddResource(&scc, "create", pr) } //Extract SCC cert/key @@ -212,24 +214,14 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro Connections: scc_conn, } - scc := module.EmptyObject{ - Metadata: module.ObjectMetaData{"local", "", "", ""}} - // Add and deploy resource - resutil := NewResUtil() resutil.AddResource(&scc, "create", &scc_ipsec_resource) - for i := 0; i < len(proposalresource); i++ { - resutil.AddResource(&scc, "create", proposalresource[i]) - } - resutil.Deploy(overlay_name, "localto"+to.Metadata.Name, "YAML") //Reserve ipsec resource to device object res_str, err := resource.GetResourceBuilder().ToString(&scc_ipsec_resource) to.Status.Data[SCC_RESOURCE] = res_str - ips = append(ips, oip) - } return nil @@ -318,6 +310,21 @@ func (c *DeviceObjectManager) DeleteObject(m map[string]string) error { r_str := to.Status.Data["scc_ipsec_resource"] r, _ := resource.GetResourceBuilder().ToObject(r_str) resutils.AddResource(&scc, "create", r) + + // Get all proposal resources + proposal := GetManagerset().Proposal + proposals, err := proposal.GetObjects(m) + if len(proposals) == 0 || err != nil { + log.Println("Missing Proposal in the overlay") + return pkgerrors.New("Error in getting proposals") + } + + for i := 0; i < len(proposals); i++ { + proposal_obj := proposals[i].(*module.ProposalObject) + pr := proposal_obj.ToResource() + resutils.AddResource(&scc, "create", pr) + } + resutils.Undeploy(overlay_name) } @@ -358,7 +365,7 @@ func (c *DeviceObjectManager) PostRegister(m map[string]string, t module.Control to.Status.Data[RegStatus] = "failed" } - kube_config, _, err = kubeutil.checkKubeConfigAvail(kube_config, ips, DEFAULT_K8S_API_SERVER_PORT) + kube_config, _, err = kubeutil.checkKubeConfigAvail(kube_config, []string{to.Status.Ip}, DEFAULT_K8S_API_SERVER_PORT) if err != nil { //TODO: check the error type, and if is unauthorized then switch the status to failed. return err @@ -403,7 +410,7 @@ func (c *DeviceObjectManager) PostRegister(m map[string]string, t module.Control //Maybe because of cert not ready or other reasons. for i := 0; i < len(devices); i++ { dev := devices[i].(*module.DeviceObject) - if to.Status.Mode == 1 || dev.Status.Mode == 1 { + if (dev.Metadata.Name != to.Metadata.Name) && (to.Status.Mode == 1 || dev.Status.Mode == 1) { err = overlay_manager.SetupConnection(m, to, dev, DEVICETODEVICE, NameSpaceName, false) if err != nil { return err