From 293af5de29dd9071ac15eefd7adc276fbdcf3d6f Mon Sep 17 00:00:00 2001 From: sophia Date: Fri, 30 Jul 2021 13:27:04 -0500 Subject: [PATCH] Fill in target index implementation --- internal/core/target.go | 14 ++++++ internal/core/target_index.go | 86 +++++++++++++++++++++-------------- 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/internal/core/target.go b/internal/core/target.go index a25d7eb2f..9ac2905f3 100644 --- a/internal/core/target.go +++ b/internal/core/target.go @@ -298,6 +298,20 @@ func (t *Target) doOperation( return doOperation(ctx, log, t, op) } +func NewTarget(ctx context.Context, opts ...TargetOption) (target *Target, err error) { + target = &Target{ + ctx: ctx, + } + // Apply any options + for _, opt := range opts { + err := opt(target) + if err != nil { + return nil, err + } + } + return +} + type TargetOption func(*Target) error func WithTargetName(name string) TargetOption { diff --git a/internal/core/target_index.go b/internal/core/target_index.go index 9170f0026..843dc87f5 100644 --- a/internal/core/target_index.go +++ b/internal/core/target_index.go @@ -21,50 +21,70 @@ type TargetIndex struct { } func (t *TargetIndex) Delete(target core.Target) (err error) { - // This is not going to work since no deleting requires - // also having a project to delete a target from. - // Doesn't seem possible to get a project id from a core component - tid, err := target.ResourceId() - if err != nil { - return err - } - tname, err := target.Name() - if err != nil { - return err - } _, err = t.client.DeleteTarget( t.ctx, &vagrant_server.DeleteTargetRequest{ - Target: &vagrant_plugin_sdk.Ref_Target{ - ResourceId: tid, - Name: tname, - // Project: &vagrant_plugin_sdk.Ref_Project{} - }, + Target: target.Ref().(*vagrant_plugin_sdk.Ref_Target), }, ) return } -func (m *TargetIndex) Get(uuid string) (entry core.Target, err error) { - return nil, nil -} - -func (m *TargetIndex) Includes(uuid string) (exists bool, err error) { - return false, nil -} - -func (t *TargetIndex) Set(entry core.Target) (updatedEntry core.Target, err error) { - // updatedTarget, err = t.client.UpsertTarget( - // t.ctx, - // &vagrant_server.UpsertTargetRequest{ - // Target: &vagrant_server.Target{}, - // }, - // ) +func (t *TargetIndex) Get(uuid string) (entry core.Target, err error) { + target, err := t.client.GetTarget( + t.ctx, + &vagrant_server.GetTargetRequest{ + Target: &vagrant_plugin_sdk.Ref_Target{ResourceId: uuid}, + }, + ) + refTarget := &vagrant_plugin_sdk.Ref_Target{ + ResourceId: target.Target.ResourceId, + Project: target.Target.Project, + Name: target.Target.Name, + } + // TODO: check if this actually gets back a full target + entry, err = NewTarget( + t.ctx, + WithTargetRef(refTarget), + ) return } -func (m *TargetIndex) Recover(entry core.Target) (updatedEntry core.Target, err error) { - return nil, nil +func (t *TargetIndex) Includes(uuid string) (exists bool, err error) { + resp, err := t.client.GetTarget( + t.ctx, + &vagrant_server.GetTargetRequest{ + Target: &vagrant_plugin_sdk.Ref_Target{ResourceId: uuid}, + }, + ) + if err != nil { + return false, err + } + // TODO: Not sure what should be returned by the api + // if there is not Target found. For now assuming that + // if a target is not found, no error is returned, + // and the resp is nil + if resp == nil { + exists = false + } else { + exists = true + } + return +} + +func (t *TargetIndex) Set(entry core.Target) (updatedEntry core.Target, err error) { + updatedTarget, err := t.client.UpsertTarget( + t.ctx, + &vagrant_server.UpsertTargetRequest{ + Target: &vagrant_server.Target{}, + }, + ) + // TODO: check if this actually gets back a full target + updatedEntry, err = NewTarget( + t.ctx, + WithTargetName(updatedTarget.Target.Name), + ) + return } var _ core.TargetIndex = (*TargetIndex)(nil)