From eeafbe495480e61c4e8c6b4f6fea4b3cc0437a41 Mon Sep 17 00:00:00 2001 From: sophia Date: Wed, 17 Nov 2021 11:07:20 -0600 Subject: [PATCH] Search for project and target before upserting --- .../server/singleprocess/state/project.go | 4 +--- internal/server/singleprocess/state/target.go | 23 ++++++++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/internal/server/singleprocess/state/project.go b/internal/server/singleprocess/state/project.go index edf92f91e..231acc70f 100644 --- a/internal/server/singleprocess/state/project.go +++ b/internal/server/singleprocess/state/project.go @@ -148,9 +148,7 @@ func (s *State) projectPut( s.log.Trace("storing project", "project", value, "basis", value.Basis) // Grab the stored project if it's available - existProject, err := s.projectGet(dbTxn, memTxn, &vagrant_plugin_sdk.Ref_Project{ - ResourceId: value.ResourceId, - }) + existProject, err := s.projectFind(dbTxn, memTxn, value) if err != nil { // ensure value is nil to identify non-existence existProject = nil diff --git a/internal/server/singleprocess/state/target.go b/internal/server/singleprocess/state/target.go index 6a9c7927d..568fe0ff3 100644 --- a/internal/server/singleprocess/state/target.go +++ b/internal/server/singleprocess/state/target.go @@ -170,12 +170,23 @@ func (s *State) targetPut( } if value.ResourceId == "" { - s.log.Trace("target has no resource id, assuming new target", - "target", value) - if value.ResourceId, err = s.newResourceId(); err != nil { - s.log.Error("failed to create resource id for target", "target", value, - "error", err) - return + // If no resource id is provided, try to find the target based on the name and project + foundTarget, erro := s.targetFind(dbTxn, memTxn, value) + // If an invalid return code is returned from find then an error occured + if _, ok := status.FromError(erro); !ok { + return erro + } + if foundTarget != nil { + value.ResourceId = foundTarget.ResourceId + value.Uuid = foundTarget.Uuid + } else { + s.log.Trace("target has no resource id and could not find matching target, assuming new target", + "target", value) + if value.ResourceId, err = s.newResourceId(); err != nil { + s.log.Error("failed to create resource id for target", "target", value, + "error", err) + return + } } if value.Uuid == "" { s.log.Trace("target has no uuid assigned, assigning...", "target", value)