Skip to content

Commit

Permalink
Fix linter errors
Browse files Browse the repository at this point in the history
  • Loading branch information
kayrus committed Jul 15, 2024
1 parent 4ac06a9 commit 05dfd63
Show file tree
Hide file tree
Showing 11 changed files with 162 additions and 80 deletions.
26 changes: 15 additions & 11 deletions pkg/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ import (
"time"

"github.com/google/uuid"
"github.com/klauspost/compress/zlib"
"github.com/machinebox/progress"
"github.com/spf13/cobra"
"github.com/spf13/viper"

"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/backups"
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/volumes"
Expand All @@ -26,10 +31,6 @@ import (
"github.com/gophercloud/gophercloud/v2/openstack/objectstorage/v1/objects"
backups_utils "github.com/gophercloud/utils/v2/openstack/blockstorage/v3/backups"
images_utils "github.com/gophercloud/utils/v2/openstack/image/v2/images"
"github.com/klauspost/compress/zlib"
"github.com/machinebox/progress"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

var (
Expand Down Expand Up @@ -97,11 +98,11 @@ func waitForBackup(ctx context.Context, client *gophercloud.ServiceClient, id st
return backup, err
}

// calculate sha256 hashes in parallel
// calculate sha256 hashes in parallel.
func calcSha256Hash(myChunk []byte, sha256meta *sha256file, i int, done chan struct{}) {
var lenght int = len(myChunk)
var length int = len(myChunk)
var hashes int
if n, mod := lenght/sha256chunk, lenght%sha256chunk; mod > 0 {
if n, mod := length/sha256chunk, length%sha256chunk; mod > 0 {
hashes = n + 1
} else {
hashes = n
Expand All @@ -112,8 +113,8 @@ func calcSha256Hash(myChunk []byte, sha256meta *sha256file, i int, done chan str
defer wg.Done()
start := j * sha256chunk
end := start + sha256chunk
if end > lenght {
end = lenght
if end > length {
end = length
}
h[j] = sha256.Sum256(myChunk[start:end])
}
Expand All @@ -133,7 +134,7 @@ func calcSha256Hash(myChunk []byte, sha256meta *sha256file, i int, done chan str
close(done)
}

// calculate md5 hashes
// calculate md5 hashes.
func calcMd5Hash(myChunk []byte, meta *metadata, i int, done chan struct{}, chunkPath string) {
hash := md5.Sum(myChunk)
object := backupChunkEntry{
Expand Down Expand Up @@ -235,6 +236,7 @@ func (c *chunk) process(ctx context.Context) {
<-md5done
<-sha256done

//nolint:ineffassign
myChunk = nil
}

Expand Down Expand Up @@ -387,6 +389,7 @@ func uploadBackup(ctx context.Context, srcImgClient, srcObjClient, dstObjClient,
return nil, fmt.Errorf("failed to upload %s/%s data: %s", containerName, p, err)
}
// free up the heap
//nolint:ineffassign
buf = nil
runtime.GC()

Expand All @@ -406,6 +409,7 @@ func uploadBackup(ctx context.Context, srcImgClient, srcObjClient, dstObjClient,
return nil, fmt.Errorf("failed to upload %s/%s data: %s", containerName, p, err)
}
// free up the heap
//nolint:ineffassign
buf = nil
runtime.GC()

Expand Down Expand Up @@ -544,7 +548,7 @@ func getSourceData(ctx context.Context, srcImgClient, srcObjClient *gophercloud.
}, nil
}

// BackupCmd represents the backup command
// BackupCmd represents the backup command.
var BackupCmd = &cobra.Command{
Use: "backup",
}
Expand Down
9 changes: 5 additions & 4 deletions pkg/backup_clone.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,17 @@ import (
"syscall"

"github.com/google/uuid"
"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/backups"
backups_utils "github.com/gophercloud/utils/v2/openstack/blockstorage/v3/backups"
"github.com/majewsky/schwift/v2/gopherschwift"
"github.com/sapcc/go-bits/logg"
"github.com/sapcc/go-bits/secrets"
"github.com/sapcc/swift-http-import/pkg/actors"
"github.com/sapcc/swift-http-import/pkg/objects"
"github.com/spf13/cobra"
"github.com/spf13/viper"

"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/backups"
backups_utils "github.com/gophercloud/utils/v2/openstack/blockstorage/v3/backups"
)

func prepareSwiftConfig(ctx context.Context, srcObjectClient, dstObjectClient *gophercloud.ServiceClient, srcContainerName, dstContainerName, prefix string, threads uint) (*objects.Configuration, error) {
Expand Down Expand Up @@ -225,7 +226,7 @@ func cloneBackup(ctx context.Context, srcVolumeClient, srcObjectClient, dstVolum
return waitForBackup(ctx, dstVolumeClient, importResponse.ID, waitForBackupSec)
}

// BackupCmd represents the volume command
// BackupCloneCmd represents the backup clone command.
var BackupCloneCmd = &cobra.Command{
Use: "clone <name|id>",
Args: cobra.ExactArgs(1),
Expand Down
2 changes: 1 addition & 1 deletion pkg/backup_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func (r *metadata) MarshalJSON() ([]byte, error) {
}
sort.Ints(keys)

var obj []backupChunkEntry
obj := make([]backupChunkEntry, 0, len(keys))
for _, k := range keys {
obj = append(obj, r.Objects[k])
r.Objects[k] = nil
Expand Down
24 changes: 12 additions & 12 deletions pkg/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ import (
"net/http"
"time"

"github.com/machinebox/progress"
"github.com/spf13/cobra"
"github.com/spf13/viper"

"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/image/v2/imagedata"
"github.com/gophercloud/gophercloud/v2/openstack/image/v2/imageimport"
Expand All @@ -17,9 +21,6 @@ import (
"github.com/gophercloud/gophercloud/v2/openstack/objectstorage/v1/objects"
"github.com/gophercloud/gophercloud/v2/pagination"
images_utils "github.com/gophercloud/utils/v2/openstack/image/v2/images"
"github.com/machinebox/progress"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

var (
Expand Down Expand Up @@ -147,7 +148,7 @@ func waitForImageTask(ctx context.Context, client, swiftClient *gophercloud.Serv
return img, err
}

// this function may show confused size results due to Swift eventual consistency
// this function may show confused size results due to Swift eventual consistency.
func getContainerSize(ctx context.Context, client *gophercloud.ServiceClient, id string, srcSizeBytes int64) string {
if client != nil {
container, err := containers.Get(ctx, client, "glance_"+id, nil).Extract()
Expand Down Expand Up @@ -226,7 +227,7 @@ func expandImageProperties(v map[string]interface{}) map[string]string {
return properties
}

func generateTmpUrlKey(n int) string {
func generateTmpURLKey(n int) string {
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

r := rand.New(rand.NewSource(time.Now().UnixNano()))
Expand All @@ -244,20 +245,20 @@ func migrateImage(ctx context.Context, srcImageClient, dstImageClient, srcObject
objectName := srcImg.ID

if imageWebDownload {
tempUrlKey := containers.UpdateOpts{
TempURLKey: generateTmpUrlKey(20),
tempURLKey := containers.UpdateOpts{
TempURLKey: generateTmpURLKey(20),
}
_, err := containers.Update(ctx, srcObjectClient, containerName, tempUrlKey).Extract()
_, err := containers.Update(ctx, srcObjectClient, containerName, tempURLKey).Extract()
if err != nil {
return nil, fmt.Errorf("unable to set container temporary url key: %s", err)
}

tmpUrlOptions := objects.CreateTempURLOpts{
tmpURLOptions := objects.CreateTempURLOpts{
Method: "GET",
TTL: swiftTempURLTTL,
}

url, err = objects.CreateTempURL(ctx, srcObjectClient, containerName, objectName, tmpUrlOptions)
url, err = objects.CreateTempURL(ctx, srcObjectClient, containerName, objectName, tmpURLOptions)
if err != nil {
return nil, fmt.Errorf("unable to generate a temporary url for the %q container: %s", containerName, err)
}
Expand Down Expand Up @@ -315,7 +316,6 @@ func migrateImage(ctx context.Context, srcImageClient, dstImageClient, srcObject
err = imageimport.Create(ctx, dstImageClient, dstImg.ID, importOpts).ExtractErr()
if err != nil {
return nil, fmt.Errorf("error while importing url %q: %s", url, err)

}

dstImg, err = waitForImageTask(ctx, dstImageClient, dstObjectClient, dstImg.ID, srcImg.SizeBytes, waitForImageSec)
Expand Down Expand Up @@ -374,7 +374,7 @@ func migrateImage(ctx context.Context, srcImageClient, dstImageClient, srcObject
return dstImg, nil
}

// ImageCmd represents the image command
// ImageCmd represents the image command.
var ImageCmd = &cobra.Command{
Use: "image <name|id>",
Args: cobra.ExactArgs(1),
Expand Down
122 changes: 96 additions & 26 deletions pkg/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,16 @@ type Location struct {
}

var (
// RootCmd represents the base command when called without any subcommands
// RootCmd represents the base command when called without any subcommands.
RootCmd = &cobra.Command{
Use: "cyclone",
Short: "Clone OpenStack entities easily",
SilenceUsage: true,
}
cleanupFuncs []func(*sync.WaitGroup)
// unattended mode, assume yes to all questions
// unattended mode, assume yes to all questions.
yes bool
// unattended mode, assume no to all questions
// unattended mode, assume no to all questions.
no bool
)

Expand Down Expand Up @@ -108,29 +108,99 @@ func initRootCmdFlags() {
RootCmd.PersistentFlags().StringP("timeout-secret", "", "24h", "timeout to wait for a secret status")
RootCmd.PersistentFlags().StringP("timeout-security-group", "", "24h", "timeout to wait for a security group status")
RootCmd.PersistentFlags().BoolP("image-web-download", "", false, "use Glance web-download image import method")
viper.BindPFlag("debug", RootCmd.PersistentFlags().Lookup("debug"))
viper.BindPFlag("yes", RootCmd.PersistentFlags().Lookup("yes"))
viper.BindPFlag("no", RootCmd.PersistentFlags().Lookup("no"))
viper.BindPFlag("to-auth-url", RootCmd.PersistentFlags().Lookup("to-auth-url"))
viper.BindPFlag("to-region", RootCmd.PersistentFlags().Lookup("to-region"))
viper.BindPFlag("to-domain", RootCmd.PersistentFlags().Lookup("to-domain"))
viper.BindPFlag("to-project", RootCmd.PersistentFlags().Lookup("to-project"))
viper.BindPFlag("to-username", RootCmd.PersistentFlags().Lookup("to-username"))
viper.BindPFlag("to-password", RootCmd.PersistentFlags().Lookup("to-password"))
viper.BindPFlag("to-application-credential-name", RootCmd.PersistentFlags().Lookup("to-application-credential-name"))
viper.BindPFlag("to-application-credential-id", RootCmd.PersistentFlags().Lookup("to-application-credential-id"))
viper.BindPFlag("to-application-credential-secret", RootCmd.PersistentFlags().Lookup("to-application-credential-secret"))
viper.BindPFlag("timeout-image", RootCmd.PersistentFlags().Lookup("timeout-image"))
viper.BindPFlag("timeout-volume", RootCmd.PersistentFlags().Lookup("timeout-volume"))
viper.BindPFlag("timeout-server", RootCmd.PersistentFlags().Lookup("timeout-server"))
viper.BindPFlag("timeout-snapshot", RootCmd.PersistentFlags().Lookup("timeout-snapshot"))
viper.BindPFlag("timeout-backup", RootCmd.PersistentFlags().Lookup("timeout-backup"))
viper.BindPFlag("timeout-share", RootCmd.PersistentFlags().Lookup("timeout-share"))
viper.BindPFlag("timeout-share-snapshot", RootCmd.PersistentFlags().Lookup("timeout-share-snapshot"))
viper.BindPFlag("timeout-share-replica", RootCmd.PersistentFlags().Lookup("timeout-share-replica"))
viper.BindPFlag("timeout-secret", RootCmd.PersistentFlags().Lookup("timeout-secret"))
viper.BindPFlag("timeout-security-group", RootCmd.PersistentFlags().Lookup("timeout-security-group"))
viper.BindPFlag("image-web-download", RootCmd.PersistentFlags().Lookup("image-web-download"))

err := viper.BindPFlag("debug", RootCmd.PersistentFlags().Lookup("debug"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("yes", RootCmd.PersistentFlags().Lookup("yes"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("no", RootCmd.PersistentFlags().Lookup("no"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-auth-url", RootCmd.PersistentFlags().Lookup("to-auth-url"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-region", RootCmd.PersistentFlags().Lookup("to-region"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-domain", RootCmd.PersistentFlags().Lookup("to-domain"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-project", RootCmd.PersistentFlags().Lookup("to-project"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-username", RootCmd.PersistentFlags().Lookup("to-username"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-password", RootCmd.PersistentFlags().Lookup("to-password"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-application-credential-name", RootCmd.PersistentFlags().Lookup("to-application-credential-name"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-application-credential-id", RootCmd.PersistentFlags().Lookup("to-application-credential-id"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("to-application-credential-secret", RootCmd.PersistentFlags().Lookup("to-application-credential-secret"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-image", RootCmd.PersistentFlags().Lookup("timeout-image"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-volume", RootCmd.PersistentFlags().Lookup("timeout-volume"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-server", RootCmd.PersistentFlags().Lookup("timeout-server"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-snapshot", RootCmd.PersistentFlags().Lookup("timeout-snapshot"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-backup", RootCmd.PersistentFlags().Lookup("timeout-backup"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-share", RootCmd.PersistentFlags().Lookup("timeout-share"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-share-snapshot", RootCmd.PersistentFlags().Lookup("timeout-share-snapshot"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-share-replica", RootCmd.PersistentFlags().Lookup("timeout-share-replica"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-secret", RootCmd.PersistentFlags().Lookup("timeout-secret"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("timeout-security-group", RootCmd.PersistentFlags().Lookup("timeout-security-group"))
if err != nil {
panic(err)
}
err = viper.BindPFlag("image-web-download", RootCmd.PersistentFlags().Lookup("image-web-download"))
if err != nil {
panic(err)
}
}

func parseTimeoutArg(arg string, dst *float64, errors *[]error) {
Expand Down
11 changes: 6 additions & 5 deletions pkg/secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ import (
"strings"
"time"

"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/keymanager/v1/acls"
"github.com/gophercloud/gophercloud/v2/openstack/keymanager/v1/secrets"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/xhit/go-str2duration/v2"

"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/keymanager/v1/acls"
"github.com/gophercloud/gophercloud/v2/openstack/keymanager/v1/secrets"
)

var (
Expand Down Expand Up @@ -66,7 +67,7 @@ func waitForSecret(ctx context.Context, client *gophercloud.ServiceClient, id st
return true, nil
}

if !isSliceContainsStr(secretWaitStatuses, string(secret.Status)) {
if !isSliceContainsStr(secretWaitStatuses, secret.Status) {
return false, fmt.Errorf("secret status is %q", secret.Status)
}

Expand Down Expand Up @@ -228,7 +229,7 @@ func uuidFromSecretRef(ref string) string {
return ref[strings.LastIndex(ref, "/")+1:]
}

// SecretCmd represents the secret command
// SecretCmd represents the secret command.
var SecretCmd = &cobra.Command{
Use: "secret <name|id|url>",
Args: cobra.ExactArgs(1),
Expand Down
Loading

0 comments on commit 05dfd63

Please sign in to comment.