Skip to content

Commit

Permalink
chore: CRUD support
Browse files Browse the repository at this point in the history
  • Loading branch information
wtrocki committed Jul 30, 2021
1 parent 7d8cbd5 commit 3951214
Show file tree
Hide file tree
Showing 9 changed files with 196 additions and 138 deletions.
17 changes: 16 additions & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,21 @@
"args": [
"version"
]
}
},
{
"name": "Artifact Delete",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/cmd/rhoas",
"env": {},
"args": [
"service-registry",
"artifact",
"delete",
"--group=tgdsfgdfg",
"--yes"
]
},
]
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ require (
github.com/openconfig/goyang v0.2.7
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
github.com/pkg/errors v0.9.1
github.com/redhat-developer/app-services-sdk-go v0.9.0
github.com/redhat-developer/app-services-sdk-go v0.9.1
github.com/redhat-developer/service-binding-operator v0.8.0
github.com/spf13/cobra v1.2.1
github.com/spf13/pflag v1.0.5
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -566,8 +566,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/redhat-developer/app-services-sdk-go v0.9.0 h1:m9Y7xxuLCw+CdaK6AaF3y/qIVYHRBJEOWjVUqRHYVzg=
github.com/redhat-developer/app-services-sdk-go v0.9.0/go.mod h1:X7S6t/ePwn6NQ8/ouA+VwiojWjGfDL6jytsL5LyA4Wc=
github.com/redhat-developer/app-services-sdk-go v0.9.1 h1:KD764Qycc66OGzKzP37yMpjsj6H972pSpLyuVbdIE20=
github.com/redhat-developer/app-services-sdk-go v0.9.1/go.mod h1:X7S6t/ePwn6NQ8/ouA+VwiojWjGfDL6jytsL5LyA4Wc=
github.com/redhat-developer/service-binding-operator v0.8.0 h1:33nrUwKm+Osr8I/g9qZZ6Hf41dfePfZndS02/xyAYiI=
github.com/redhat-developer/service-binding-operator v0.8.0/go.mod h1:Z3fFouJGqy08JVWBFgb9ZyDcddcqx+AUIuMOeMFU8pQ=
github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY=
Expand Down
1 change: 1 addition & 0 deletions pkg/api/srs/error.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package srs

// TODO Move to SDK
import (
"errors"
"fmt"
Expand Down
3 changes: 1 addition & 2 deletions pkg/cmd/registry/artifacts/crud/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func NewCreateCommand(f *factory.Factory) *cobra.Command {
// TODO validate artifact types

if !cfg.HasServiceRegistry() {
return fmt.Errorf("No service Registry selected. Use rhoas registry use to select your registry")
return fmt.Errorf("No service Registry selected. Use 'rhoas service-registry use' use to select your registry")
}

opts.registryID = fmt.Sprint(cfg.Services.ServiceRegistry.InstanceID)
Expand All @@ -97,7 +97,6 @@ func NewCreateCommand(f *factory.Factory) *cobra.Command {
cmd.Flags().StringVarP(&opts.artifact, "artifact", "a", "", "Id of the artifact")
cmd.Flags().StringVarP(&opts.group, "group", "g", "", "Id of the artifact")
cmd.Flags().StringVarP(&opts.artifactType, "type", "t", "", "Type of artifact")
cmd.Flags().StringVarP(&opts.version, "version", "", "", "Force specific version of the artifact")
cmd.Flags().StringVarP(&opts.registryID, "registryId", "", "", "Id of the registry to be used. By default uses currently selected registry.")

flagutil.EnableOutputFlagCompletion(cmd)
Expand Down
134 changes: 66 additions & 68 deletions pkg/cmd/registry/artifacts/crud/delete/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,32 @@ import (
"errors"
"fmt"

flagutil "github.com/redhat-developer/app-services-cli/pkg/cmdutil/flags"

"github.com/redhat-developer/app-services-cli/pkg/connection"
"github.com/redhat-developer/app-services-cli/pkg/localize"
"github.com/redhat-developer/app-services-cli/pkg/serviceregistry"

"github.com/redhat-developer/app-services-cli/pkg/iostreams"
"github.com/redhat-developer/app-services-cli/pkg/serviceregistry/registryinstanceerror"

"github.com/redhat-developer/app-services-cli/pkg/logging"

"github.com/AlecAivazis/survey/v2"
"github.com/redhat-developer/app-services-cli/internal/config"
"github.com/redhat-developer/app-services-cli/pkg/cmd/factory"
"github.com/redhat-developer/app-services-cli/pkg/cmd/flag"
"github.com/redhat-developer/app-services-cli/pkg/cmd/registry/artifacts/util"
"github.com/spf13/cobra"

srsmgmtv1client "github.com/redhat-developer/app-services-sdk-go/registrymgmt/apiv1/client"
)

type options struct {
id string
name string
force bool
type Options struct {
artifact string
group string

registryID string

outputFormat string
force bool

IO *iostreams.IOStreams
Config config.IConfig
Expand All @@ -35,7 +40,7 @@ type options struct {
}

func NewDeleteCommand(f *factory.Factory) *cobra.Command {
opts := &options{
opts := &Options{
Config: f.Config,
Connection: f.Connection,
Logger: f.Logger,
Expand All @@ -54,15 +59,16 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {
return flag.RequiredWhenNonInteractiveError("yes")
}

if len(args) > 0 {
opts.name = args[0]
validOutputFormats := flagutil.ValidOutputFormats
if opts.outputFormat != "" && !flagutil.IsValidInput(opts.outputFormat, validOutputFormats...) {
return flag.InvalidValueError("output", opts.outputFormat, validOutputFormats...)
}

if opts.name != "" && opts.id != "" {
return errors.New(opts.localizer.MustLocalize("service.error.idAndNameCannotBeUsed"))
if len(args) > 0 {
opts.artifact = args[0]
}

if opts.id != "" || opts.name != "" {
if opts.registryID != "" {
return runDelete(opts)
}

Expand All @@ -71,100 +77,92 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {
return err
}

var serviceRegistryConfig *config.ServiceRegistryConfig
if cfg.Services.ServiceRegistry == serviceRegistryConfig || cfg.Services.ServiceRegistry.InstanceID == "" {
return errors.New(opts.localizer.MustLocalize("registry.common.error.noServiceSelected"))
if !cfg.HasServiceRegistry() {
return fmt.Errorf("No service Registry selected. Use 'rhoas service-registry use' use to select your registry")
}

opts.id = fmt.Sprint(cfg.Services.ServiceRegistry.InstanceID)

opts.registryID = fmt.Sprint(cfg.Services.ServiceRegistry.InstanceID)
return runDelete(opts)
},
}

cmd.Flags().StringVar(&opts.id, "id", "", opts.localizer.MustLocalize("registry.common.flag.id"))
cmd.Flags().BoolVarP(&opts.force, "yes", "y", false, opts.localizer.MustLocalize("registry.common.flag.yes"))
cmd.Flags().BoolVarP(&opts.force, "yes", "y", false, "Delete without prompt")
cmd.Flags().StringVarP(&opts.outputFormat, "output", "o", "json", opts.localizer.MustLocalize("registry.cmd.flag.output.description"))

cmd.Flags().StringVarP(&opts.artifact, "artifact", "a", "", "Id of the artifact")
cmd.Flags().StringVarP(&opts.group, "group", "g", "", "Id of the artifact")
cmd.Flags().StringVarP(&opts.registryID, "registryId", "", "", "Id of the registry to be used. By default uses currently selected registry.")

return cmd
}

func runDelete(opts *options) error {
func runDelete(opts *Options) error {
logger, err := opts.Logger()
if err != nil {
return err
}

cfg, err := opts.Config.Load()
conn, err := opts.Connection(connection.DefaultConfigRequireMasAuth)
if err != nil {
return err
}

connection, err := opts.Connection(connection.DefaultConfigSkipMasAuth)
dataAPI, _, err := conn.API().ServiceRegistryInstance(opts.registryID)
if err != nil {
return err
}

api := connection.API()
if opts.group == "" {
logger.Info("Group was not specified. Using 'default' artifacts group.")
opts.group = util.DefaultArtifactGroup
}

var registry *srsmgmtv1client.RegistryRest
ctx := context.Background()
if opts.name != "" {
registry, _, err = serviceregistry.GetServiceRegistryByName(ctx, api.ServiceRegistryMgmt(), opts.name)
if opts.artifact == "" {
logger.Info("Artifact was not specified. Command will delete all artifacts in the group")
err = confirmDelete(opts, "Do you want to delete ALL ARTIFACTS from group "+opts.group)
if err != nil {
return err
return nil
}
ctx := context.Background()
request := dataAPI.ArtifactsApi.DeleteArtifactsInGroup(ctx, opts.group)
_, err = request.Execute()
if err != nil {
return registryinstanceerror.TransformError(err)
}
logger.Info("Artifacts in group" + opts.group + "deleted: ")
} else {
registry, _, err = serviceregistry.GetServiceRegistryByID(ctx, api.ServiceRegistryMgmt(), opts.id)
logger.Info("Deleting artifact " + opts.artifact)
err = confirmDelete(opts, "Do you want to delete artifact "+opts.artifact+" from group "+opts.group)
if err != nil {
return err
return nil
}
ctx := context.Background()
request := dataAPI.ArtifactsApi.DeleteArtifact(ctx, opts.group, opts.artifact)

_, err := request.Execute()
if err != nil {
return registryinstanceerror.TransformError(err)
}
logger.Info("Artifact deleted: " + opts.artifact)
}

registryName := registry.GetName()
logger.Info(opts.localizer.MustLocalize("registry.delete.log.info.deletingService", localize.NewEntry("Name", registryName)))
logger.Info("")
return nil
}

func confirmDelete(opts *Options, message string) error {
if !opts.force {
promptConfirmName := &survey.Input{
Message: opts.localizer.MustLocalize("registry.delete.input.confirmName.message"),
var shouldContinue bool
confirm := &survey.Confirm{
Message: message,
}

var confirmedName string
err = survey.AskOne(promptConfirmName, &confirmedName)
err := survey.AskOne(confirm, &shouldContinue)
if err != nil {
return err
}

if confirmedName != registryName {
logger.Info(opts.localizer.MustLocalize("registry.delete.log.info.incorrectNameConfirmation"))
return nil
if !shouldContinue {
return errors.New("")
}
}

logger.Debug("Deleting Service registry", fmt.Sprintf("\"%s\"", registryName))

a := api.ServiceRegistryMgmt().DeleteRegistry(context.Background(), registry.GetId())
_, err = a.Execute()

if err != nil {
return err
}

logger.Info(opts.localizer.MustLocalize("registry.delete.log.info.deleteSuccess", localize.NewEntry("Name", registryName)))

currentContextRegistry := cfg.Services.ServiceRegistry
// this is not the current cluster, our work here is done
if currentContextRegistry == nil || currentContextRegistry.InstanceID != opts.id {
return nil
}

// the service that was deleted is set as the user's current cluster
// since it was deleted it should be removed from the config
cfg.Services.ServiceRegistry = nil
err = opts.Config.Save(cfg)
if err != nil {
return err
}

return nil
}
Loading

0 comments on commit 3951214

Please sign in to comment.