diff options
Diffstat (limited to 'src/k8splugin/internal/app/instance.go')
-rw-r--r-- | src/k8splugin/internal/app/instance.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/k8splugin/internal/app/instance.go b/src/k8splugin/internal/app/instance.go index 6d0910d0..41eca211 100644 --- a/src/k8splugin/internal/app/instance.go +++ b/src/k8splugin/internal/app/instance.go @@ -53,6 +53,7 @@ type InstanceResponse struct { type InstanceManager interface { Create(i InstanceRequest) (InstanceResponse, error) Get(id string) (InstanceResponse, error) + Find(rbName string, ver string, profile string) ([]InstanceResponse, error) Delete(id string) error } @@ -176,6 +177,48 @@ func (v *InstanceClient) Get(id string) (InstanceResponse, error) { return InstanceResponse{}, pkgerrors.New("Error getting Instance") } +// Find returns the instances that match the given criteria +// If version is empty, it will return all instances for a given rbName +// If profile is empty, it will return all instances for a given rbName+version +func (v *InstanceClient) Find(rbName string, version string, profile string) ([]InstanceResponse, error) { + if rbName == "" { + return []InstanceResponse{}, pkgerrors.New("rbName is required and cannot be empty") + } + + values, err := db.DBconn.ReadAll(v.storeName, v.tagInst) + if err != nil || len(values) == 0 { + return []InstanceResponse{}, pkgerrors.Wrap(err, "Find Instance") + } + + response := []InstanceResponse{} + //values is a map[string][]byte + for _, value := range values { + resp := InstanceResponse{} + db.DBconn.Unmarshal(value, &resp) + if err != nil { + return []InstanceResponse{}, pkgerrors.Wrap(err, "Unmarshaling Instance Value") + } + + if resp.RBName == rbName { + + //Check if a version is provided and if it matches + if version != "" { + if resp.RBVersion == version { + //Check if a profilename matches or if it is not provided + if profile == "" || resp.ProfileName == profile { + response = append(response, resp) + } + } + } else { + //Append all versions as version is not provided + response = append(response, resp) + } + } + } + + return response, nil +} + // Delete the Instance from database func (v *InstanceClient) Delete(id string) error { inst, err := v.Get(id) |