Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ generate: deps
mockgen --destination ./internal/mocks/network_pool_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/network_pools.go
mockgen --destination ./internal/mocks/cloud_instances_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/cloud_computing_instances.go
mockgen --destination ./internal/mocks/cloud_computing_regions_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/cloud_computing_regions.go
mockgen --destination ./internal/mocks/cloud_block_storage_volumes_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/cloud_block_storage_volumes.go
sed -i '' 's|github.com/serverscom/srvctl/vendor/github.com/serverscom/serverscom-go-client/pkg|github.com/serverscom/serverscom-go-client/pkg|g' \
./internal/mocks/ssh_service.go \
./internal/mocks/hosts_service.go \
Expand All @@ -36,5 +37,6 @@ generate: deps
./internal/mocks/kubernetes_clusters_service.go \
./internal/mocks/l2_segment_service.go \
./internal/mocks/network_pool_service.go \
./internal/mocks/cloud_block_storage_volumes_service.go \
./internal/mocks/cloud_instances_service.go \
./internal/mocks/cloud_computing_regions_service.go
117 changes: 117 additions & 0 deletions cmd/entities/cloud-volumes/add.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package cloudvolumes

import (
serverscom "github.com/serverscom/serverscom-go-client/pkg"
"github.com/serverscom/srvctl/cmd/base"
"github.com/spf13/cobra"
)

type AddFlags struct {
InputPath string
Name string
RegionID int
Size int
Description string
ImageID string
SnapshotID string
AttachInstanceID string
BackupID string
Labels []string
}

func newAddCmd(cmdContext *base.CmdContext) *cobra.Command {
flags := &AddFlags{}

cmd := &cobra.Command{
Use: "add --input <path>",
Short: "Add a cloud volume",
Long: "Add a new cloud volume to a Cloud region",
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
manager := cmdContext.GetManager()

ctx, cancel := base.SetupContext(cmd, manager)
defer cancel()

base.SetupProxy(cmd, manager)

input := &serverscom.CloudBlockStorageVolumeCreateInput{}

if flags.InputPath != "" {
if err := base.ReadInputJSON(flags.InputPath, cmd.InOrStdin(), input); err != nil {
return err
}
} else {
required := []string{"name", "region-id"}
if err := base.ValidateFlags(cmd, required); err != nil {
return err
}
}

if err := flags.FillInput(cmd, input); err != nil {
return err
}

scClient := cmdContext.GetClient().SetVerbose(manager.GetVerbose(cmd)).GetScClient()
volume, err := scClient.CloudBlockStorageVolumes.Create(ctx, *input)
if err != nil {
return err
}

if volume != nil {
formatter := cmdContext.GetOrCreateFormatter(cmd)
return formatter.Format(volume)
}
return nil
},
}

cmd.Flags().StringVarP(&flags.InputPath, "input", "i", "", "path to input file or '-' to read from stdin")
cmd.Flags().StringVarP(&flags.Name, "name", "n", "", "A name of the cloud volume")
cmd.Flags().IntVar(&flags.RegionID, "region-id", 0, "ID of the cloud region")
cmd.Flags().IntVar(&flags.Size, "size", 0, "Size of the volume in GB")
cmd.Flags().StringVar(&flags.Description, "description", "", "Description of the volume")
cmd.Flags().StringVar(&flags.ImageID, "image-id", "", "ID of the image to create volume from")
cmd.Flags().StringVar(&flags.SnapshotID, "snapshot-id", "", "ID of the snapshot to create volume from")
cmd.Flags().StringVar(&flags.AttachInstanceID, "attach-instance-id", "", "ID of the instance to attach volume to")
cmd.Flags().StringVar(&flags.BackupID, "backup-id", "", "ID of the backup to create volume from")
cmd.Flags().StringArrayVarP(&flags.Labels, "label", "l", []string{}, "string in key=value format")

return cmd
}

func (f *AddFlags) FillInput(cmd *cobra.Command, input *serverscom.CloudBlockStorageVolumeCreateInput) error {
if cmd.Flags().Changed("name") {
input.Name = f.Name
}
if cmd.Flags().Changed("region-id") {
input.RegionID = f.RegionID
}
if cmd.Flags().Changed("size") {
input.Size = f.Size
}
if cmd.Flags().Changed("description") {
input.Description = f.Description
}
if cmd.Flags().Changed("image-id") {
input.ImageID = f.ImageID
}
if cmd.Flags().Changed("snapshot-id") {
input.SnapshotID = f.SnapshotID
}
if cmd.Flags().Changed("attach-instance-id") {
input.AttachInstanceID = f.AttachInstanceID
}
if cmd.Flags().Changed("backup-id") {
input.BackupID = f.BackupID
}
if cmd.Flags().Changed("label") {
labelsMap, err := base.ParseLabels(f.Labels)
if err != nil {
return err
}
input.Labels = labelsMap
}

return nil
}
43 changes: 43 additions & 0 deletions cmd/entities/cloud-volumes/cloud_volumes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package cloudvolumes

import (
"log"

serverscom "github.com/serverscom/serverscom-go-client/pkg"
"github.com/serverscom/srvctl/cmd/base"
"github.com/serverscom/srvctl/internal/output/entities"
"github.com/spf13/cobra"
)

func NewCmd(cmdContext *base.CmdContext) *cobra.Command {
cloudVolumeEntity, err := entities.Registry.GetEntityFromValue(serverscom.CloudBlockStorageVolume{})
if err != nil {
log.Fatal(err)
}
entitiesMap := make(map[string]entities.EntityInterface)
entitiesMap["cloud-volumes"] = cloudVolumeEntity
cmd := &cobra.Command{
Use: "cloud-volumes",
Short: "Manage cloud volumes",
PersistentPreRunE: base.CombinePreRunE(
base.CheckFormatterFlags(cmdContext, entitiesMap),
base.CheckEmptyContexts(cmdContext),
),
Args: base.NoArgs,
Run: base.UsageRun,
}

cmd.AddCommand(
newListCmd(cmdContext),
newAddCmd(cmdContext),
newGetCmd(cmdContext),
newUpdateCmd(cmdContext),
newDeleteCmd(cmdContext),
newVolumeAttachCmd(cmdContext),
newVolumeDetachCmd(cmdContext),
)

base.AddFormatFlags(cmd)

return cmd
}
Loading
Loading