From a1a8e5f83966205ad632d1ecef2b2ea7f9c88a49 Mon Sep 17 00:00:00 2001 From: Varad Ahirwadkar Date: Wed, 15 May 2024 22:31:49 -0700 Subject: [PATCH] Deprecating instance-id and instance-name Signed-off-by: Varad Ahirwadkar --- README.md | 2 +- cmd/create/create.go | 5 ++- cmd/create/port/port.go | 8 +++- cmd/delete/delete.go | 5 ++- cmd/delete/port/port.go | 8 +++- cmd/dhcp-sync/dhcp-sync.go | 10 +++-- cmd/dhcpserver/cmd.go | 8 +++- cmd/dhcpserver/create.go | 2 +- cmd/dhcpserver/delete.go | 2 +- cmd/dhcpserver/get.go | 2 +- cmd/dhcpserver/list.go | 2 +- cmd/get/events/events.go | 6 +-- cmd/get/get.go | 8 +++- cmd/get/peravailability/peravailability.go | 10 ++--- cmd/get/ports/ports.go | 6 +-- cmd/image/import/import.go | 21 ++++++---- cmd/image/sync/mock/sync_client_generated.go | 1 + cmd/image/upload/upload.go | 31 +++++++------- cmd/purge/images/images.go | 4 +- cmd/purge/keys/keys.go | 2 +- cmd/purge/networks/networks.go | 2 +- cmd/purge/purge.go | 34 ++++++++------- cmd/purge/vms/vms.go | 2 +- cmd/purge/volumes/volumes.go | 2 +- ...How to Import Image to PowerVS Instance.md | 20 ++++----- pkg/options.go | 42 +++++++++---------- .../convert-upload-images-powervs | 2 +- .../image-create-and-upload-sample/README.md | 2 +- .../image-create-and-upload-sample/config.sh | 2 +- .../image_create_and_upload_script.sh | 2 +- 30 files changed, 144 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index 022df209..365fb90d 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ The typical image workflow comprises of the following steps: - How to convert RHEL qcow2 to ova image format - [guide](docs/RHEL%20Qcow2%20to%20OVA.md) - How to convert RHCOS(Red Hat CoreOS) qcow2 to ova image format - [guide](docs/RHCOS%20Qcow2%20to%20OVA.md) - Advanced scenarios for Qcow2 to ova image conversion - [guide](docs/Advanced%20Scenarios%20for%20Qcow2%20to%20OVA.md) -- How to import image to PowerVS instance from COS - [guide](docs/How%20to%20Import%20Image%20to%20PowerVS%20Instance.md) +- How to import image to PowerVS workspace from COS - [guide](docs/How%20to%20Import%20Image%20to%20PowerVS%20Instance.md) - How to upload image to COS bucket using pvsadm - [guide](docs/How%20to%20Upload%20Image%20to%20COS.md) - How to build DHCP supported centos image - [guide](docs/Build%20DHCP%20enabled%20Centos%20Images.md) diff --git a/cmd/create/create.go b/cmd/create/create.go index 0760b1e6..5173878f 100644 --- a/cmd/create/create.go +++ b/cmd/create/create.go @@ -30,6 +30,7 @@ var Cmd = &cobra.Command{ func init() { Cmd.AddCommand(port.Cmd) - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") - _ = Cmd.MarkPersistentFlagRequired("instance-id") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") + Cmd.PersistentFlags().MarkDeprecated("instance-id", "instance-id is deprecated, workspace-id should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "workspace-id", "", "", "Workspace ID of the PowerVS workspace") } diff --git a/cmd/create/port/port.go b/cmd/create/port/port.go index ebf9c5d5..99e4c3bc 100644 --- a/cmd/create/port/port.go +++ b/cmd/create/port/port.go @@ -35,6 +35,12 @@ var Cmd = &cobra.Command{ Use: "port", Short: "Create PowerVS network port", Long: `Create PowerVS network port`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if pkg.Options.WorkspaceID == "" { + return fmt.Errorf("--workspace-id required") + } + return nil + }, RunE: func(cmd *cobra.Command, args []string) error { opt := pkg.Options @@ -44,7 +50,7 @@ var Cmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/delete/delete.go b/cmd/delete/delete.go index 12161f52..126f79b5 100644 --- a/cmd/delete/delete.go +++ b/cmd/delete/delete.go @@ -30,6 +30,7 @@ var Cmd = &cobra.Command{ func init() { Cmd.AddCommand(port.Cmd) - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") - _ = Cmd.MarkPersistentFlagRequired("instance-id") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") + Cmd.PersistentFlags().MarkDeprecated("instance-id", "instance-id is deprecated, workspace-id should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "workspace-id", "", "", "Workspace ID of the PowerVS instance") } diff --git a/cmd/delete/port/port.go b/cmd/delete/port/port.go index ba7cf58f..2f3dc5a3 100644 --- a/cmd/delete/port/port.go +++ b/cmd/delete/port/port.go @@ -34,6 +34,12 @@ var Cmd = &cobra.Command{ Use: "port", Short: "Delete PowerVS network port", Long: `Delete PowerVS network port`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if pkg.Options.WorkspaceID == "" { + return fmt.Errorf("--workspace-id required") + } + return nil + }, RunE: func(cmd *cobra.Command, args []string) error { opt := pkg.Options @@ -43,7 +49,7 @@ var Cmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/dhcp-sync/dhcp-sync.go b/cmd/dhcp-sync/dhcp-sync.go index 76d9b652..8c506fe5 100644 --- a/cmd/dhcp-sync/dhcp-sync.go +++ b/cmd/dhcp-sync/dhcp-sync.go @@ -87,7 +87,7 @@ func syncDHCPD() { klog.Fatalf("failed to create a session with IBM cloud: %v", err) } - pvmclient, err := client.NewPVMClientWithEnv(c, pkg.Options.InstanceID, "", "prod") + pvmclient, err := client.NewPVMClientWithEnv(c, pkg.Options.WorkspaceID, "", "prod") if err != nil { klog.Fatalf("failed to create a PVM client: %v", err) } @@ -159,8 +159,8 @@ var Cmd = &cobra.Command{ Long: `dhcp-sync tool is a tool populating the dhcpd.conf file from the PowerVS network and restart the dhcpd service.`, GroupID: "dhcp", PreRunE: func(cmd *cobra.Command, args []string) error { - if pkg.Options.InstanceID == "" { - return fmt.Errorf("--instance-id is required") + if pkg.Options.WorkspaceID == "" { + return fmt.Errorf("--workspace-id is required") } if pkg.Options.APIKey == "" { return fmt.Errorf("api-key can't be empty, pass the token via --api-key or set IBMCLOUD_API_KEY environment variable") @@ -211,7 +211,9 @@ var Cmd = &cobra.Command{ } func init() { - Cmd.Flags().StringVarP(&pkg.Options.InstanceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") + Cmd.Flags().StringVarP(&pkg.Options.WorkspaceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") + Cmd.Flags().MarkDeprecated("instance-id", "instance-id is deprecated, workspace-id should be used") + Cmd.Flags().StringVarP(&pkg.Options.WorkspaceID, "workspace-id", "w", "", "Workspace ID of the PowerVS instance") Cmd.Flags().StringVar(&networkID, "network-id", "", "Network ID to be monitored") Cmd.Flags().StringVar(&file, "file", "/etc/dhcp/dhcpd.conf", "DHCP conf file") Cmd.Flags().StringVar(&gateway, "gateway", "", "Override the gateway value with") diff --git a/cmd/dhcpserver/cmd.go b/cmd/dhcpserver/cmd.go index 3b4859d4..244f1850 100644 --- a/cmd/dhcpserver/cmd.go +++ b/cmd/dhcpserver/cmd.go @@ -30,6 +30,9 @@ var Cmd = &cobra.Command{ if pkg.Options.APIKey == "" { return fmt.Errorf("api-key can't be empty, pass the token via --api-key or set IBMCLOUD_API_KEY environment variable") } + if pkg.Options.WorkspaceID == "" { + return fmt.Errorf("--workspace-id required") + } return nil }, RunE: func(cmd *cobra.Command, args []string) error { @@ -43,6 +46,7 @@ func init() { Cmd.AddCommand(getCmd) Cmd.AddCommand(deleteCmd) - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") - _ = Cmd.MarkPersistentFlagRequired("instance-id") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") + Cmd.PersistentFlags().MarkDeprecated("instance-id", "instance-id is deprecated, workspace-id should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "workspace-id", "", "", "Workspace ID of the PowerVS instance") } diff --git a/cmd/dhcpserver/create.go b/cmd/dhcpserver/create.go index d49c745f..0a331291 100644 --- a/cmd/dhcpserver/create.go +++ b/cmd/dhcpserver/create.go @@ -45,7 +45,7 @@ var createCmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/dhcpserver/delete.go b/cmd/dhcpserver/delete.go index af98cb5d..effa541e 100644 --- a/cmd/dhcpserver/delete.go +++ b/cmd/dhcpserver/delete.go @@ -38,7 +38,7 @@ var deleteCmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/dhcpserver/get.go b/cmd/dhcpserver/get.go index 98aa1074..45795d76 100644 --- a/cmd/dhcpserver/get.go +++ b/cmd/dhcpserver/get.go @@ -42,7 +42,7 @@ var getCmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/dhcpserver/list.go b/cmd/dhcpserver/list.go index 96c28a66..94ac4d87 100644 --- a/cmd/dhcpserver/list.go +++ b/cmd/dhcpserver/list.go @@ -38,7 +38,7 @@ var listCmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/get/events/events.go b/cmd/get/events/events.go index e6aaf19a..e74be022 100644 --- a/cmd/get/events/events.go +++ b/cmd/get/events/events.go @@ -35,8 +35,8 @@ var Cmd = &cobra.Command{ Short: "Get Powervs events", Long: `Get the PowerVS events`, PreRunE: func(cmd *cobra.Command, args []string) error { - if pkg.Options.InstanceID == "" && pkg.Options.InstanceName == "" { - return fmt.Errorf("--instance-id or --instance-name required") + if pkg.Options.WorkspaceID == "" && pkg.Options.WorkspaceName == "" { + return fmt.Errorf("--workspace-id or --workspace-name required") } return nil }, @@ -49,7 +49,7 @@ var Cmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/get/get.go b/cmd/get/get.go index e6aaee2e..2fcd444c 100644 --- a/cmd/get/get.go +++ b/cmd/get/get.go @@ -36,6 +36,10 @@ func init() { Cmd.AddCommand(events.Cmd) Cmd.AddCommand(peravailability.Cmd) Cmd.AddCommand(ports.Cmd) - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceName, "instance-name", "n", "", "Instance name of the PowerVS") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") + Cmd.PersistentFlags().MarkDeprecated("instance-id", "instance-id is deprecated, workspace-id should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceName, "instance-name", "n", "", "Instance name of the PowerVS") + Cmd.PersistentFlags().MarkDeprecated("instance-name", "instance-name is deprecated, workspace-name should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "workspace-id", "", "", "Workspace ID of the PowerVS instance") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceName, "workspace-name", "", "", "Workspace name of the PowerVS") } diff --git a/cmd/get/peravailability/peravailability.go b/cmd/get/peravailability/peravailability.go index ee923715..8443c8b7 100644 --- a/cmd/get/peravailability/peravailability.go +++ b/cmd/get/peravailability/peravailability.go @@ -32,8 +32,8 @@ var Cmd = &cobra.Command{ Short: "List regions that support PER", Long: "List regions that support Power Edge Router (PER)", PreRunE: func(cmd *cobra.Command, args []string) error { - if pkg.Options.InstanceID == "" && pkg.Options.InstanceName == "" { - return fmt.Errorf("--instance-id or --instance-name required") + if pkg.Options.WorkspaceID == "" && pkg.Options.WorkspaceName == "" { + return fmt.Errorf("--workspace-id or --workspace-name required") } return nil }, @@ -46,7 +46,7 @@ var Cmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } @@ -64,9 +64,9 @@ var Cmd = &cobra.Command{ } } if !supportsPER { - klog.Infof("%s, where the current instance is present does not support PER.", pvmclient.Zone) + klog.Infof("%s, where the current workspace is present does not support PER.", pvmclient.Zone) } else { - klog.Infof("%s, where the current instance is present supports PER.", pvmclient.Zone) + klog.Infof("%s, where the current workspace is present supports PER.", pvmclient.Zone) } sort.Strings(perEnabledRegions) klog.Infof("The following zones/datacenters have support for PER:%v.More information at https://cloud.ibm.com/docs/overview?topic=overview-locations", perEnabledRegions) diff --git a/cmd/get/ports/ports.go b/cmd/get/ports/ports.go index 00757a07..90ddc004 100644 --- a/cmd/get/ports/ports.go +++ b/cmd/get/ports/ports.go @@ -35,8 +35,8 @@ var Cmd = &cobra.Command{ Short: "Get PowerVS network ports", Long: `Get PowerVS network ports`, PreRunE: func(cmd *cobra.Command, args []string) error { - if pkg.Options.InstanceID == "" && pkg.Options.InstanceName == "" { - return fmt.Errorf("--instance-id or --instance-name required") + if pkg.Options.WorkspaceID == "" && pkg.Options.WorkspaceName == "" { + return fmt.Errorf("--workspace-id or --workspace-name required") } return nil }, @@ -49,7 +49,7 @@ var Cmd = &cobra.Command{ return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/image/import/import.go b/cmd/image/import/import.go index a45263b5..3a020071 100644 --- a/cmd/image/import/import.go +++ b/cmd/image/import/import.go @@ -64,8 +64,8 @@ func findCOSInstanceDetails(resources []models.ServiceInstanceV2, bxCli *client. var Cmd = &cobra.Command{ Use: "import", - Short: "Import the image into PowerVS instances", - Long: `Import the image into PowerVS instances + Short: "Import the image into PowerVS workpace", + Long: `Import the image into PowerVS workpace pvsadm image import --help for information # Set the API key or feed the --api-key commandline argument @@ -90,11 +90,11 @@ pvsadm image import -n upstream-core-lon04 -b --pvs-storagetype --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r # import image from a public IBM Cloud Storage bucket -pvsadm image import -n upstream-core-lon04 -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r --public-bucket +pvsadm image import -n upstream-core-lon04 -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r --public-bucket `, PreRunE: func(cmd *cobra.Command, args []string) error { - if pkg.ImageCMDOptions.InstanceID == "" && pkg.ImageCMDOptions.InstanceName == "" { - return fmt.Errorf("--pvs-instance-name or --pvs-instance-id required") + if pkg.ImageCMDOptions.WorkspaceID == "" && pkg.ImageCMDOptions.WorkspaceName == "" { + return fmt.Errorf("--workspace-name or --workspace-id required") } case1 := pkg.ImageCMDOptions.AccessKey == "" && pkg.ImageCMDOptions.SecretKey != "" @@ -174,7 +174,7 @@ pvsadm image import -n upstream-core-lon04 -b --object rhel-83-100 opt.SecretKey = cred["secret_access_key"].(string) } - pvmclient, err := client.NewPVMClientWithEnv(bxCli, opt.InstanceID, opt.InstanceName, pkg.Options.Environment) + pvmclient, err := client.NewPVMClientWithEnv(bxCli, opt.WorkspaceID, opt.WorkspaceName, pkg.Options.Environment) if err != nil { return err } @@ -242,8 +242,13 @@ pvsadm image import -n upstream-core-lon04 -b --object rhel-83-100 } func init() { - Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.InstanceName, "pvs-instance-name", "n", "", "PowerVS Instance name.") - Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.InstanceID, "pvs-instance-id", "i", "", "PowerVS Instance ID.") + // TODO pvs-instance-name and pvs-instance-id is deprecated and will be removed in a future release + Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.WorkspaceName, "pvs-instance-name", "n", "", "PowerVS Instance name.") + Cmd.Flags().MarkDeprecated("pvs-instance-name", "pvs-instance-name is deprecated, workspace-name should be used") + Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.WorkspaceID, "pvs-instance-id", "i", "", "PowerVS Instance ID.") + Cmd.Flags().MarkDeprecated("pvs-instance-id", "pvs-instance-id is deprecated, workspace-id should be used") + Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.WorkspaceName, "workspace-name", "", "", "PowerVS Workspace name.") + Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.WorkspaceID, "workspace-id", "", "", "PowerVS Workspace ID.") Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.BucketName, "bucket", "b", "", "Cloud Object Storage bucket name.") Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.COSInstanceName, "cos-instance-name", "s", "", "Cloud Object Storage instance name.") // TODO It's deprecated and will be removed in a future release diff --git a/cmd/image/sync/mock/sync_client_generated.go b/cmd/image/sync/mock/sync_client_generated.go index e109cf72..92ea897f 100644 --- a/cmd/image/sync/mock/sync_client_generated.go +++ b/cmd/image/sync/mock/sync_client_generated.go @@ -19,6 +19,7 @@ // // mockgen -source=./sync_client.go -destination=./mock/sync_client_generated.go -package=mock -copyright_file=../../../hack/copyright_file // + // Package mock is a generated GoMock package. package mock diff --git a/cmd/image/upload/upload.go b/cmd/image/upload/upload.go index 709f4f7a..08b417b9 100644 --- a/cmd/image/upload/upload.go +++ b/cmd/image/upload/upload.go @@ -119,8 +119,8 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } //check if bucket exists - if opt.InstanceName != "" { - s3Cli, err = client.NewS3Client(bxCli, opt.InstanceName, opt.Region) + if opt.COSInstanceName != "" { + s3Cli, err = client.NewS3Client(bxCli, opt.COSInstanceName, opt.Region) if err != nil { return err } @@ -131,7 +131,7 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } if !bucketExists { - klog.Infof("Bucket %s not found in the instance %s provided", opt.BucketName, opt.InstanceName) + klog.Infof("Bucket %s not found in the instance %s provided", opt.BucketName, opt.COSInstanceName) } } else if len(instances) != 0 { @@ -148,8 +148,8 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } if bucketExists { - opt.InstanceName = instanceName - klog.Infof("Found bucket %s in the %s instance", opt.BucketName, opt.InstanceName) + opt.COSInstanceName = instanceName + klog.Infof("Found bucket %s in the %s instance", opt.BucketName, opt.COSInstanceName) break } } @@ -158,7 +158,7 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } // Ask if user likes to use existing instance - if opt.InstanceName == "" && len(instances) != 0 { + if opt.COSInstanceName == "" && len(instances) != 0 { klog.Infof("Bucket %s not found in the account provided", opt.BucketName) if utils.AskConfirmation(UseExistingPromptMessage) { availableInstances := []string{} @@ -169,13 +169,13 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio if err != nil { return err } - opt.InstanceName = selectedInstance - klog.Infof("Selected InstanceName is %s", opt.InstanceName) + opt.COSInstanceName = selectedInstance + klog.Infof("Selected InstanceName is %s", opt.COSInstanceName) } } //Create a new instance - if opt.InstanceName == "" { + if opt.COSInstanceName == "" { if !utils.AskConfirmation(CreatePromptMessage) { return fmt.Errorf("create Cloud Object Storage instance either offline or use the pvsadm command") } @@ -200,10 +200,10 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } } - opt.InstanceName = utils.ReadUserInput("Type Name of the Cloud Object Storage instance:") - klog.Infof("Creating a new cos %s instance", opt.InstanceName) + opt.COSInstanceName = utils.ReadUserInput("Type Name of the Cloud Object Storage instance:") + klog.Infof("Creating a new cos %s instance", opt.COSInstanceName) - _, err = bxCli.CreateServiceInstance(opt.InstanceName, ServiceType, opt.ServicePlan, + _, err = bxCli.CreateServiceInstance(opt.COSInstanceName, ServiceType, opt.ServicePlan, opt.ResourceGrp, ResourceGroupAPIRegion) if err != nil { return err @@ -211,7 +211,7 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } //create s3 client - s3Cli, err = client.NewS3Client(bxCli, opt.InstanceName, opt.Region) + s3Cli, err = client.NewS3Client(bxCli, opt.COSInstanceName, opt.Region) if err != nil { return err } @@ -226,7 +226,7 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio } else { //Create a new bucket klog.Infof("Creating a new bucket %s", opt.BucketName) - s3Cli, err = client.NewS3Client(bxCli, opt.InstanceName, opt.Region) + s3Cli, err = client.NewS3Client(bxCli, opt.COSInstanceName, opt.Region) if err != nil { return err } @@ -249,7 +249,8 @@ pvsadm image upload --bucket bucket1320 -f centos-8-latest.ova.gz --bucket-regio func init() { Cmd.Flags().StringVar(&pkg.ImageCMDOptions.ResourceGrp, "resource-group", "", "Name of user resource group.") Cmd.Flags().StringVar(&pkg.ImageCMDOptions.ServicePlan, "cos-serviceplan", "standard", "Cloud Object Storage Class type, available values are [standard, lite].") - Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.InstanceName, "cos-instance-name", "n", "", "Cloud Object Storage instance name.") + Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.COSInstanceName, "cos-instance-name", "n", "", "Cloud Object Storage instance name.") + Cmd.Flags().MarkShorthandDeprecated("cos-instance-name", "please use --cos-instance-name") Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.BucketName, "bucket", "b", "", "Cloud Object Storage bucket name.") Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.ImageName, "file", "f", "", "The PATH to the file to upload.") Cmd.Flags().StringVarP(&pkg.ImageCMDOptions.ObjectName, "cos-object-name", "o", "", "Cloud Object Storage Object Name(Default: filename from --file|-f option)") diff --git a/cmd/purge/images/images.go b/cmd/purge/images/images.go index b794b34f..c1001c80 100644 --- a/cmd/purge/images/images.go +++ b/cmd/purge/images/images.go @@ -34,7 +34,7 @@ var Cmd = &cobra.Command{ pvsadm purge --help for information `, RunE: func(cmd *cobra.Command, args []string) error { - klog.Infof("Purge the images for the instance: %v", pkg.Options.InstanceID) + klog.Infof("Purge the images for the workspace: %v", pkg.Options.WorkspaceID) opt := pkg.Options c, err := client.NewClientWithEnv(opt.APIKey, opt.Environment, opt.Debug) @@ -43,7 +43,7 @@ pvsadm purge --help for information return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, pkg.Options.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, pkg.Options.Environment) if err != nil { return err } diff --git a/cmd/purge/keys/keys.go b/cmd/purge/keys/keys.go index dc858132..10f6e6e5 100644 --- a/cmd/purge/keys/keys.go +++ b/cmd/purge/keys/keys.go @@ -50,7 +50,7 @@ pvsadm purge --help for information return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, opt.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, opt.Environment) if err != nil { return err } diff --git a/cmd/purge/networks/networks.go b/cmd/purge/networks/networks.go index 8b852d94..822619f9 100644 --- a/cmd/purge/networks/networks.go +++ b/cmd/purge/networks/networks.go @@ -45,7 +45,7 @@ pvsadm purge --help for information return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, pkg.Options.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, pkg.Options.Environment) if err != nil { return err } diff --git a/cmd/purge/purge.go b/cmd/purge/purge.go index 03f0b0f1..ffdf13fb 100644 --- a/cmd/purge/purge.go +++ b/cmd/purge/purge.go @@ -37,37 +37,37 @@ export IBMCLOUD_API_KEY= Examples: # Delete all the virtual machines which are created before 4hrs - pvsadm purge vms --instance-name upstream-core --before 4h + pvsadm purge vms --workspace-name upstream-core --before 4h # Delete all the virtual machines created since 24hrs - pvsadm purge vms --instance-name upstream-core --since 24h + pvsadm purge vms --workspace-name upstream-core --since 24h # Delete all the volumes which aren't assigned to any virtual machines - pvsadm purge volumes --instance-name upstream-core + pvsadm purge volumes --workspace-name upstream-core # Delete all the networks and ignore if any errors during the delete operation - pvsadm purge networks --instance-name upstream-core --ignore-errors + pvsadm purge networks --workspace-name upstream-core --ignore-errors # Delete all the networks along with the instances and their assigned ports - pvsadm purge networks --instance-name upstream-core --instances true --ports true + pvsadm purge networks --workspace-name upstream-core --instances true --ports true # Delete all the images without asking any confirmation - pvsadm purge images --instance-name upstream-core --no-prompt + pvsadm purge images --workspace-name upstream-core --no-prompt # Delete all the images with debugging logs for IBM cloud APIs - pvsadm purge images --instance-name upstream-core --debug + pvsadm purge images --workspace-name upstream-core --debug # Delete all the virtual machines starts with k8s-cluster- - pvsadm purge vms --instance-name upstream-core --regexp "^k8s-cluster-.*" + pvsadm purge vms --workspace-name upstream-core --regexp "^k8s-cluster-.*" # List the purgeable candidate virtual machines and exit without deleting - pvsadm purge vms --instance-name upstream-core --dry-run + pvsadm purge vms --workspace-name upstream-core --dry-run # Delete all the ssh keys which are created before 12hrs - pvsadm purge keys --instance-name upstream-core --before 12h --regexp "^rdr-.*" + pvsadm purge keys --workspace-name upstream-core --before 12h --regexp "^rdr-.*" # Delete all the ssh keys starts with rdr- - pvsadm purge keys --instance-name upstream-core --regexp "^rdr-.*" + pvsadm purge keys --workspace-name upstream-core --regexp "^rdr-.*" `, GroupID: "resource", PersistentPreRunE: func(cmd *cobra.Command, args []string) error { @@ -84,8 +84,8 @@ Examples: if pkg.Options.Since != 0 && pkg.Options.Before != 0 { return fmt.Errorf("--since and --before options can not be set at a time") } - if pkg.Options.InstanceID == "" && pkg.Options.InstanceName == "" { - return fmt.Errorf("--instance-id or --instance-name required") + if pkg.Options.WorkspaceID == "" && pkg.Options.WorkspaceName == "" { + return fmt.Errorf("--workspace-id or --workspace-name required") } return nil }, @@ -97,8 +97,12 @@ func init() { Cmd.AddCommand(networks.Cmd) Cmd.AddCommand(volumes.Cmd) Cmd.AddCommand(keys.Cmd) - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceID, "instance-id", "i", "", "Instance ID of the PowerVS instance") - Cmd.PersistentFlags().StringVarP(&pkg.Options.InstanceName, "instance-name", "n", "", "Instance name of the PowerVS") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "instance-id", "i", "", "Instance ID of the PowerVS workspace") + Cmd.PersistentFlags().MarkDeprecated("instance-id", "instance-id is deprecated, workspace-id should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceName, "instance-name", "n", "", "Instance name of the PowerVS") + Cmd.PersistentFlags().MarkDeprecated("instance-name", "instance-name is deprecated, workspace-name should be used") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceID, "workspace-id", "", "", "Workspace ID of the PowerVS workspace") + Cmd.PersistentFlags().StringVarP(&pkg.Options.WorkspaceName, "workspace-name", "", "", "Workspace name of the PowerVS workspace") Cmd.PersistentFlags().BoolVar(&pkg.Options.DryRun, "dry-run", false, "dry run the action and don't delete the actual resources") Cmd.PersistentFlags().DurationVar(&pkg.Options.Since, "since", 0*time.Second, "Remove resources since mentioned duration(format: 99h99m00s), mutually exclusive with --before") Cmd.PersistentFlags().DurationVar(&pkg.Options.Before, "before", 0*time.Second, "Remove resources before mentioned duration(format: 99h99m00s), mutually exclusive with --since") diff --git a/cmd/purge/vms/vms.go b/cmd/purge/vms/vms.go index 277a62e6..0f14d23e 100644 --- a/cmd/purge/vms/vms.go +++ b/cmd/purge/vms/vms.go @@ -42,7 +42,7 @@ pvsadm purge --help for information return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, pkg.Options.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, pkg.Options.Environment) if err != nil { return err } diff --git a/cmd/purge/volumes/volumes.go b/cmd/purge/volumes/volumes.go index 5c392203..0fc40c3f 100644 --- a/cmd/purge/volumes/volumes.go +++ b/cmd/purge/volumes/volumes.go @@ -45,7 +45,7 @@ pvsadm purge --help for information return err } - pvmclient, err := client.NewPVMClientWithEnv(c, opt.InstanceID, opt.InstanceName, pkg.Options.Environment) + pvmclient, err := client.NewPVMClientWithEnv(c, opt.WorkspaceID, opt.WorkspaceName, pkg.Options.Environment) if err != nil { return err } diff --git a/docs/How to Import Image to PowerVS Instance.md b/docs/How to Import Image to PowerVS Instance.md index c5de1ca7..ca87c290 100644 --- a/docs/How to Import Image to PowerVS Instance.md +++ b/docs/How to Import Image to PowerVS Instance.md @@ -1,11 +1,11 @@ # Overview -This guide talks about how to import image to PowerVs instance using pvsadm. +This guide talks about how to import image to PowerVs workspace using pvsadm. # Prerequisite - pvsadm tool - IBMCLOUD_API_KEY. [How to create api key](https://cloud.ibm.com/docs/account?topic=account-userapikey#create_user_key) - S3 BucketName, Bucket Region, ObjectName -- PowerVS Instance Name/PowerVS Instance ID. +- PowerVS Workspace Name/PowerVS Workspace ID. # Image import Command help ```shell @@ -15,8 +15,8 @@ Flags: -b, --bucket string Cloud Storage bucket name -h, --help help for import --image-name string Name to give imported image - -i, --instance-id string Instance ID of the PowerVS instance - -n, --instance-name string Instance name of the PowerVS + --workspace-id string Instance ID of the PowerVS workspace + --workspace-name string Instance name of the PowerVS -o, --object-name string Cloud Storage image filename -r, --region string COS bucket location -p, --public-bucket Cloud Storage public bucket @@ -26,7 +26,7 @@ Flags: ``` -# Importing Image to PowerVS instance from S3 Bucket using pvsadm +# Importing Image to PowerVS workspace from S3 Bucket using pvsadm Set the API key variable ```shell @@ -36,29 +36,29 @@ $export IBMCLOUD_API_KEY= ### case 1: Importing the image using auto-generated s3 credential ```shell -$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r +$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r ``` ### case 2: Importing the image using accesskey and secretkey ```shell -$pvsadm image import -n -b --accesskey --secretkey --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r +$pvsadm image import -n -b --accesskey --secretkey --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r ``` ### case 3: If user wants to specify the PowerVS storage type for importing the image ```shell -$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r --storagetype +$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r --storagetype ``` ### case 4: If user wants to specify type of OS ```shell -$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r +$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r ``` ### case 5: Importing the image from public bucket ```shell -$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r --public-bucket +$pvsadm image import -n -b --object rhel-83-10032020.ova.gz --pvs-image-name test-image -r --public-bucket ``` diff --git a/pkg/options.go b/pkg/options.go index bbff8dfe..49d3820a 100644 --- a/pkg/options.go +++ b/pkg/options.go @@ -19,20 +19,20 @@ import "time" var Options = &options{} type options struct { - InstanceID string - APIKey string - Environment string - Region string - Zone string - DryRun bool - Debug bool - Since time.Duration - Before time.Duration - InstanceName string - NoPrompt bool - IgnoreErrors bool - AuditFile string - Expr string + WorkspaceID string + APIKey string + Environment string + Region string + Zone string + DryRun bool + Debug bool + Since time.Duration + Before time.Duration + WorkspaceName string + NoPrompt bool + IgnoreErrors bool + AuditFile string + Expr string } // Options for pvsadm image command @@ -56,19 +56,19 @@ type imageCMDOptions struct { CloudConfigDefault bool OSPasswordSkip bool //upload options - InstanceName string - Region string - BucketName string - ResourceGrp string - ServicePlan string - ObjectName string + WorkspaceName string + Region string + BucketName string + ResourceGrp string + ServicePlan string + ObjectName string //import options COSInstanceName string ImageFilename string AccessKey string SecretKey string StorageType string - InstanceID string + WorkspaceID string ServiceCredName string Public bool Watch bool diff --git a/samples/convert-upload-images-powervs/convert-upload-images-powervs b/samples/convert-upload-images-powervs/convert-upload-images-powervs index 58cfc96d..554fb430 100755 --- a/samples/convert-upload-images-powervs/convert-upload-images-powervs +++ b/samples/convert-upload-images-powervs/convert-upload-images-powervs @@ -493,7 +493,7 @@ function import_image_remote { for i in $(seq 1 "$NO_OF_RETRY"); do echo "Attempt: $i/$NO_OF_RETRY" LOG_FILE="logs/import_image_remote_${service_name}_${i}_${LOGFILE}.log" - import_cmd="cd \"$REMOTE_TEMP_DIR\"; pvsadm image import --pvs-instance-name \"$service_name\" --bucket \"$cos_bucket_name\" --bucket-region \"$cos_bucket_region\" --object \"$object_name\" --pvs-image-name \"$image_name\" --api-key \"$IBMCLOUD_API_KEY\" -w --watch-timeout 2h " + import_cmd="cd \"$REMOTE_TEMP_DIR\"; pvsadm image import --workspace-name \"$service_name\" --bucket \"$cos_bucket_name\" --bucket-region \"$cos_bucket_region\" --object \"$object_name\" --pvs-image-name \"$image_name\" --api-key \"$IBMCLOUD_API_KEY\" -w --watch-timeout 2h " if [ -n "${access_key}" ] && [ -n "${secret_key}" ] ; then import_cmd+="--accesskey \"$access_key\" --secretkey \"$secret_key\" " fi diff --git a/samples/image-create-and-upload-sample/README.md b/samples/image-create-and-upload-sample/README.md index c528fe22..93c8c2e1 100644 --- a/samples/image-create-and-upload-sample/README.md +++ b/samples/image-create-and-upload-sample/README.md @@ -1,5 +1,5 @@ #### Overview -The `image_create_and_upload_script` helps to create ova image from qcow2 image, upload the images to a bucket (new/existing) and import them as boot image to pvs instance using the pvsadm tool +The `image_create_and_upload_script` helps to create ova image from qcow2 image, upload the images to a bucket (new/existing) and import them as boot image to pvs workspace using the pvsadm tool #### Prerequisite 1. Access to shell on IBM Power® logical partition (LPAR) running RHEL 8.x or CentOS 8.x with internet connectivity and minimum 250GB of free disk space 2. Need a valid RedHat subscription for the RHEL image conversion diff --git a/samples/image-create-and-upload-sample/config.sh b/samples/image-create-and-upload-sample/config.sh index 3f97dc7e..ac2dc3e2 100644 --- a/samples/image-create-and-upload-sample/config.sh +++ b/samples/image-create-and-upload-sample/config.sh @@ -21,4 +21,4 @@ RHEL_PASSWORD="" #Rhel Password required for rhel image conversion BUCKET_NAME="test-bucket" #Bucket name for uploading image. (Can be a new or an existing bucket) BUCKET_REGION="us-south" #Region where the bucket is present RESOURCE_GROUP="default" #Resource group required while uploading image -PVS_INSTANCE_NAME="" #PVS instance name where the image needs to be imported +WORKSPACE_NAME="" #PVS workspace name where the image needs to be imported diff --git a/samples/image-create-and-upload-sample/image_create_and_upload_script.sh b/samples/image-create-and-upload-sample/image_create_and_upload_script.sh index 15dea1a8..f2f2ad5e 100644 --- a/samples/image-create-and-upload-sample/image_create_and_upload_script.sh +++ b/samples/image-create-and-upload-sample/image_create_and_upload_script.sh @@ -59,7 +59,7 @@ function create_and_upload_image() { echo "Uploading $DISTRO image" pvsadm image upload --bucket $BUCKET_NAME --file $OBJECT_NAME --bucket-region $BUCKET_REGION --resource-group $RESOURCE_GROUP echo "Importing $DISTRO Image" - pvsadm image import --pvs-instance-name $PVS_INSTANCE_NAME --bucket $BUCKET_NAME --object $OBJECT_NAME --pvs-image-name $IMAGE_NAME --bucket-region $BUCKET_REGION + pvsadm image import --workspace-name $WORKSPACE_NAME --bucket $BUCKET_NAME --object $OBJECT_NAME --pvs-image-name $IMAGE_NAME --bucket-region $BUCKET_REGION } dnf install -y qemu-img cloud-utils-growpart