From 9809e46f4c9c3254d52644435f101276450146bc Mon Sep 17 00:00:00 2001 From: vipul-21 Date: Thu, 8 Sep 2022 09:47:10 -0700 Subject: [PATCH 1/5] Dropgz deploy cmd - Clearing the dest before writing into it to avoid race condition --- dropgz/README.md | 10 ++++++++++ dropgz/pkg/embed/payload.go | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 dropgz/README.md diff --git a/dropgz/README.md b/dropgz/README.md new file mode 100644 index 0000000000..7ca59da397 --- /dev/null +++ b/dropgz/README.md @@ -0,0 +1,10 @@ +### Running the dropgz locally + +Select the file(for example azure-ipam binary) you want to deploy using the dropgz. + +1. Copy the file (i.e azure-ipam) to the directory `/dropgz/pkg/embed/fs` +2. Add the sha of the file to the sum.txt file.(`sha256sum * > sum.txt`) +3. You need to gzip the file, so run the cmd `gzip --verbose --best --recursive azure-ipam` and rename the output .gz file to original file name. +4. Do the step 3 for `sum.txt` file as well. +5. go to dropgz directory and build it. (`go build .`) +6. You can now test the dropgz command locally. (`./dropgz deploy azure-ipam -o ./azure-ipam`) \ No newline at end of file diff --git a/dropgz/pkg/embed/payload.go b/dropgz/pkg/embed/payload.go index 7e5341a593..952d65da26 100644 --- a/dropgz/pkg/embed/payload.go +++ b/dropgz/pkg/embed/payload.go @@ -15,8 +15,9 @@ import ( ) const ( - cwd = "fs" - pathPrefix = cwd + string(filepath.Separator) + cwd = "fs" + pathPrefix = cwd + string(filepath.Separator) + OLD_FILE_SUFFIX = ".old" ) var ErrArgsMismatched = errors.New("mismatched argument count") @@ -86,6 +87,17 @@ func deploy(src, dest string) error { return err } defer rc.Close() + if _, err := os.Stat(dest); err == nil || !os.IsNotExist(err) { + old_file_dest := dest + OLD_FILE_SUFFIX + if err = os.RemoveAll(old_file_dest); err != nil { + return errors.Wrapf(err, "not able to remove the %s", &old_file_dest) + } + if err = os.Rename(dest, old_file_dest); err != nil { + return errors.Wrapf(err, "not able to rename the %s to %s", dest, old_file_dest) + } + } else { + return err + } target, err := os.OpenFile(dest, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o755) //nolint:gomnd // executable file bitmask if err != nil { return errors.Wrapf(err, "failed to create file %s", dest) From f1db0b09e7af753312433a2a483a970396ef958a Mon Sep 17 00:00:00 2001 From: vipul-21 Date: Thu, 8 Sep 2022 10:06:12 -0700 Subject: [PATCH 2/5] Matching the wrapped comment with the rest of the file --- dropgz/pkg/embed/payload.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dropgz/pkg/embed/payload.go b/dropgz/pkg/embed/payload.go index 952d65da26..4d2d51af81 100644 --- a/dropgz/pkg/embed/payload.go +++ b/dropgz/pkg/embed/payload.go @@ -90,10 +90,10 @@ func deploy(src, dest string) error { if _, err := os.Stat(dest); err == nil || !os.IsNotExist(err) { old_file_dest := dest + OLD_FILE_SUFFIX if err = os.RemoveAll(old_file_dest); err != nil { - return errors.Wrapf(err, "not able to remove the %s", &old_file_dest) + return errors.Wrapf(err, "failed to remove the %s", old_file_dest) } if err = os.Rename(dest, old_file_dest); err != nil { - return errors.Wrapf(err, "not able to rename the %s to %s", dest, old_file_dest) + return errors.Wrapf(err, "failed to rename the %s to %s", dest, old_file_dest) } } else { return err From c56a792056263c4efc10ff2d7d622d3163dadc2b Mon Sep 17 00:00:00 2001 From: vipul-21 Date: Thu, 8 Sep 2022 12:51:26 -0700 Subject: [PATCH 3/5] Variable name changes and updating condition to follow line of sight style --- dropgz/pkg/embed/payload.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/dropgz/pkg/embed/payload.go b/dropgz/pkg/embed/payload.go index 4d2d51af81..b525e5f619 100644 --- a/dropgz/pkg/embed/payload.go +++ b/dropgz/pkg/embed/payload.go @@ -15,9 +15,9 @@ import ( ) const ( - cwd = "fs" - pathPrefix = cwd + string(filepath.Separator) - OLD_FILE_SUFFIX = ".old" + cwd = "fs" + pathPrefix = cwd + string(filepath.Separator) + oldFileSuffix = ".old" ) var ErrArgsMismatched = errors.New("mismatched argument count") @@ -87,16 +87,19 @@ func deploy(src, dest string) error { return err } defer rc.Close() - if _, err := os.Stat(dest); err == nil || !os.IsNotExist(err) { - old_file_dest := dest + OLD_FILE_SUFFIX - if err = os.RemoveAll(old_file_dest); err != nil { - return errors.Wrapf(err, "failed to remove the %s", old_file_dest) - } - if err = os.Rename(dest, old_file_dest); err != nil { - return errors.Wrapf(err, "failed to rename the %s to %s", dest, old_file_dest) + _, err = os.Stat(dest) + if err != nil { + if !os.IsNotExist(err) { + return err } } else { - return err + oldDest := dest + oldFileSuffix + if err = os.RemoveAll(oldDest); err != nil { + return errors.Wrapf(err, "failed to remove the %s", oldDest) + } + if err = os.Rename(dest, oldDest); err != nil { + return errors.Wrapf(err, "failed to rename the %s to %s", dest, oldDest) + } } target, err := os.OpenFile(dest, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o755) //nolint:gomnd // executable file bitmask if err != nil { From 7c134b587a1e1b8324033890fb8742ad1752c297 Mon Sep 17 00:00:00 2001 From: vipul-21 Date: Thu, 8 Sep 2022 12:56:14 -0700 Subject: [PATCH 4/5] removing the removall logic --- dropgz/pkg/embed/payload.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/dropgz/pkg/embed/payload.go b/dropgz/pkg/embed/payload.go index b525e5f619..d84b07848e 100644 --- a/dropgz/pkg/embed/payload.go +++ b/dropgz/pkg/embed/payload.go @@ -94,9 +94,6 @@ func deploy(src, dest string) error { } } else { oldDest := dest + oldFileSuffix - if err = os.RemoveAll(oldDest); err != nil { - return errors.Wrapf(err, "failed to remove the %s", oldDest) - } if err = os.Rename(dest, oldDest); err != nil { return errors.Wrapf(err, "failed to rename the %s to %s", dest, oldDest) } From 02230bf483a2f2a88423b05c13264990d01c676d Mon Sep 17 00:00:00 2001 From: vipul-21 Date: Sat, 10 Sep 2022 00:37:39 -0700 Subject: [PATCH 5/5] Renaming the dest only if it exists --- dropgz/pkg/embed/payload.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dropgz/pkg/embed/payload.go b/dropgz/pkg/embed/payload.go index d84b07848e..b36f8cb479 100644 --- a/dropgz/pkg/embed/payload.go +++ b/dropgz/pkg/embed/payload.go @@ -87,12 +87,8 @@ func deploy(src, dest string) error { return err } defer rc.Close() - _, err = os.Stat(dest) - if err != nil { - if !os.IsNotExist(err) { - return err - } - } else { + // check if the file exists at dest already and rename it as an old one + if _, err := os.Stat(dest); err == nil { oldDest := dest + oldFileSuffix if err = os.Rename(dest, oldDest); err != nil { return errors.Wrapf(err, "failed to rename the %s to %s", dest, oldDest)