Skip to content

Commit

Permalink
removed Vault-Cli from content commands
Browse files Browse the repository at this point in the history
  • Loading branch information
Dominik Przybyl committed Sep 30, 2024
1 parent 70e5c70 commit f6adf2c
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 187 deletions.
24 changes: 9 additions & 15 deletions cmd/aem/content.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ func (c *CLI) contentDownloadCmd() *cobra.Command {
filterRoots := determineFilterRoots(cmd)
filterFile, _ := cmd.Flags().GetString("filter-file")
clean, _ := cmd.Flags().GetBool("clean")
vault, _ := cmd.Flags().GetBool("vault")
if err = c.aem.ContentManager().Download(instance, targetFile, clean, vault, pkg.PackageCreateOpts{
if err = c.aem.ContentManager().Download(instance, targetFile, clean, pkg.PackageCreateOpts{
PID: pid,
FilterRoots: filterRoots,
FilterFile: filterFile,
Expand All @@ -104,7 +103,6 @@ func (c *CLI) contentDownloadCmd() *cobra.Command {
cmd.Flags().StringP("filter-file", "f", "", "Vault filter file path")
cmd.MarkFlagsOneRequired("filter-roots", "filter-file")
cmd.Flags().Bool("clean", false, "Normalize content after downloading")
cmd.Flags().Bool("vault", false, "Use Vault-Cli to download content")
return cmd
}

Expand Down Expand Up @@ -133,10 +131,9 @@ func (c *CLI) contentPullCmd() *cobra.Command {
filterFile, _ := cmd.Flags().GetString("filter-file")
excludePatterns := determineExcludePatterns(cmd)
clean, _ := cmd.Flags().GetBool("clean")
vault, _ := cmd.Flags().GetBool("vault")
replace, _ := cmd.Flags().GetBool("replace")
if dir != "" {
if err = c.aem.ContentManager().PullDir(instance, dir, clean, vault, replace, pkg.PackageCreateOpts{
if err = c.aem.ContentManager().PullDir(instance, dir, clean, replace, pkg.PackageCreateOpts{
PID: fmt.Sprintf("aemc:content-pull:%s-SNAPSHOT", timex.FileTimestampForNow()),
FilterRoots: filterRoots,
FilterFile: filterFile,
Expand All @@ -146,7 +143,7 @@ func (c *CLI) contentPullCmd() *cobra.Command {
}
c.SetOutput("dir", dir)
} else if file != "" {
if err = c.aem.ContentManager().PullFile(instance, file, clean, vault, pkg.PackageCreateOpts{
if err = c.aem.ContentManager().PullFile(instance, file, clean, pkg.PackageCreateOpts{
PID: fmt.Sprintf("aemc:content-pull:%s-SNAPSHOT", timex.FileTimestampForNow()),
FilterRoots: filterRoots,
ExcludePatterns: excludePatterns,
Expand All @@ -167,7 +164,6 @@ func (c *CLI) contentPullCmd() *cobra.Command {
cmd.Flags().StringP("filter-file", "f", "", "Vault filter file path")
cmd.MarkFlagsMutuallyExclusive("filter-roots", "filter-file")
cmd.Flags().Bool("clean", false, "Normalize content after downloading")
cmd.Flags().Bool("vault", false, "Use Vault-Cli to download content")
cmd.Flags().Bool("replace", false, "Replace content after downloading")
return cmd
}
Expand Down Expand Up @@ -197,11 +193,14 @@ func (c *CLI) contentPushCmd() *cobra.Command {
if path == "" {
path = file
}
if !pathx.Exists(path) {
c.Error(fmt.Errorf("cannot push content as it does not exist '%s'", path))
return
}
filterRoots := determineFilterRoots(cmd)
excludePatterns := determineExcludePatterns(cmd)
clean, _ := cmd.Flags().GetBool("clean")
vault, _ := cmd.Flags().GetBool("vault")
if err = c.aem.ContentManager().Push(instances, path, clean, vault, pkg.PackageCreateOpts{
if err = c.aem.ContentManager().Push(instances, clean, pkg.PackageCreateOpts{
PID: fmt.Sprintf("aemc:content-push:%s-SNAPSHOT", timex.FileTimestampForNow()),
FilterRoots: filterRoots,
ExcludePatterns: excludePatterns,
Expand All @@ -223,7 +222,6 @@ func (c *CLI) contentPushCmd() *cobra.Command {
cmd.Flags().StringP("path", "p", "", "JCR root path or local file path")
cmd.MarkFlagsOneRequired("dir", "file", "path")
cmd.Flags().Bool("clean", false, "Normalize content while uploading")
cmd.Flags().Bool("vault", false, "Use Vault-Cli to upload content")
return cmd
}

Expand All @@ -246,9 +244,7 @@ func (c *CLI) contentCopyCmd() *cobra.Command {
filterRoots := determineFilterRoots(cmd)
filterFile, _ := cmd.Flags().GetString("filter-file")
clean, _ := cmd.Flags().GetBool("clean")
vault, _ := cmd.Flags().GetBool("vault")
rcpArgs, _ := cmd.Flags().GetString("rcp-args")
if err = c.aem.ContentManager().Copy(instance, targetInstances, clean, vault, rcpArgs, pkg.PackageCreateOpts{
if err = c.aem.ContentManager().Copy(instance, targetInstances, clean, pkg.PackageCreateOpts{
PID: fmt.Sprintf("aemc:content-copy:%s-SNAPSHOT", timex.FileTimestampForNow()),
FilterRoots: filterRoots,
FilterFile: filterFile,
Expand All @@ -266,8 +262,6 @@ func (c *CLI) contentCopyCmd() *cobra.Command {
cmd.Flags().StringP("filter-file", "f", "", "Vault filter file path")
cmd.MarkFlagsOneRequired("filter-roots", "filter-file")
cmd.Flags().Bool("clean", false, "Normalize content while copying")
cmd.Flags().Bool("vault", false, "Use Vault-Cli to copy content")
cmd.Flags().String("rcp-args", "", "Override RCP arguments when copying via Vault-Cli")
return cmd
}

Expand Down
1 change: 1 addition & 0 deletions cmd/aem/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ func (c *CLI) rootCmd() *cobra.Command {
cmd.AddCommand(c.fileCmd())
cmd.AddCommand(c.authCmd())
cmd.AddCommand(c.contentCmd())
cmd.AddCommand(c.vaultCmd())
c.rootFlags(cmd)
return cmd
}
Expand Down
29 changes: 29 additions & 0 deletions cmd/aem/vault.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package main

import (
"github.com/spf13/cobra"
"github.com/wttech/aemc/pkg"
"os"
)

func (c *CLI) vaultCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "vlt",
Short: "Executes Vault-Cli commands",
Run: func(cmd *cobra.Command, args []string) {
vaultCli := pkg.NewVaultCli(c.aem)
vaultCliArgs := os.Args[1:]
_ = vaultCli.CommandShell(vaultCliArgs)
},
Args: cobra.ArbitraryArgs,
FParseErrWhitelist: cobra.FParseErrWhitelist{
UnknownFlags: true,
},
}
cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
aem := pkg.NewAEM(c.config)
vaultCli := pkg.NewVaultCli(aem)
_ = vaultCli.CommandShell(args)
})
return cmd
}
174 changes: 49 additions & 125 deletions pkg/content_manager.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package pkg

import (
"fmt"
"github.com/wttech/aemc/pkg/common/filex"
"github.com/wttech/aemc/pkg/common/pathx"
"github.com/wttech/aemc/pkg/content"
"github.com/wttech/aemc/pkg/pkg"
"os"
"path/filepath"
"regexp"
Expand All @@ -19,14 +17,12 @@ const (
type ContentManager struct {
aem *AEM
contentManager *content.Manager
vaultCli *VaultCli
}

func NewContentManager(aem *AEM) *ContentManager {
return &ContentManager{
aem: aem,
contentManager: content.NewManager(aem.baseOpts),
vaultCli: NewVaultCli(aem),
}
}

Expand All @@ -41,27 +37,14 @@ func (cm *ContentManager) Clean(path string) error {
return cm.contentManager.Clean(path)
}

func (cm *ContentManager) pullContent(instance *Instance, workDir string, vault bool, opts PackageCreateOpts) error {
if vault {
if err := copyPackageAllFiles(workDir, opts); err != nil {
return err
}
filterFile := filepath.Join(workDir, pkg.MetaPath, pkg.VltDir, FilterXML)
if err := cm.vaultCli.PullContent(instance, workDir, filterFile); err != nil {
return err
}
if err := cm.contentManager.DeleteFiles(filepath.Join(workDir, content.JCRRoot)); err != nil {
return err
}
} else {
pkgFile := pathx.RandomFileName(cm.tmpDir(), "content_pull", ".zip")
defer func() { _ = pathx.DeleteIfExists(pkgFile) }()
if err := cm.downloadByPkgMgr(instance, pkgFile, opts); err != nil {
return err
}
if err := content.Unzip(pkgFile, workDir); err != nil {
return err
}
func (cm *ContentManager) pullContent(instance *Instance, workDir string, opts PackageCreateOpts) error {
pkgFile := pathx.RandomFileName(cm.tmpDir(), "content_pull", ".zip")
defer func() { _ = pathx.DeleteIfExists(pkgFile) }()
if err := cm.downloadByPkgMgr(instance, pkgFile, opts); err != nil {
return err
}
if err := content.Unzip(pkgFile, workDir); err != nil {
return err
}
return nil
}
Expand All @@ -81,30 +64,31 @@ func (cm *ContentManager) downloadByPkgMgr(instance *Instance, localFile string,
return nil
}

func (cm *ContentManager) Download(instance *Instance, localFile string, clean bool, vault bool, opts PackageCreateOpts) error {
func (cm *ContentManager) Download(instance *Instance, localFile string, clean bool, opts PackageCreateOpts) error {
workDir := pathx.RandomDir(cm.tmpDir(), "content_download")
defer func() { _ = pathx.DeleteIfExists(workDir) }()
if !clean && !vault {
return cm.downloadByPkgMgr(instance, localFile, opts)
}
if err := cm.pullContent(instance, workDir, vault, opts); err != nil {
return err
}
if clean {
if err := cm.pullContent(instance, workDir, opts); err != nil {
return err
}
if err := cm.contentManager.Clean(filepath.Join(workDir, content.JCRRoot)); err != nil {
return err
}
}
if err := content.Zip(workDir, localFile); err != nil {
return err
if err := content.Zip(workDir, localFile); err != nil {
return err
}
} else {
if err := cm.downloadByPkgMgr(instance, localFile, opts); err != nil {
return err
}
}
return nil
}

func (cm *ContentManager) PullDir(instance *Instance, dir string, clean bool, vault bool, replace bool, opts PackageCreateOpts) error {
func (cm *ContentManager) PullDir(instance *Instance, dir string, clean bool, replace bool, opts PackageCreateOpts) error {
workDir := pathx.RandomDir(cm.tmpDir(), "content_pull")
defer func() { _ = pathx.DeleteIfExists(workDir) }()
if err := cm.pullContent(instance, workDir, vault, opts); err != nil {
if err := cm.pullContent(instance, workDir, opts); err != nil {
return err
}
if replace {
Expand All @@ -124,10 +108,10 @@ func (cm *ContentManager) PullDir(instance *Instance, dir string, clean bool, va
return nil
}

func (cm *ContentManager) PullFile(instance *Instance, file string, clean bool, vault bool, opts PackageCreateOpts) error {
func (cm *ContentManager) PullFile(instance *Instance, file string, clean bool, opts PackageCreateOpts) error {
workDir := pathx.RandomDir(cm.tmpDir(), "content_pull")
defer func() { _ = pathx.DeleteIfExists(workDir) }()
if err := cm.pullContent(instance, workDir, vault, opts); err != nil {
if err := cm.pullContent(instance, workDir, opts); err != nil {
return err
}
syncFile := DetermineSyncFile(file)
Expand All @@ -148,23 +132,15 @@ func (cm *ContentManager) PullFile(instance *Instance, file string, clean bool,
return nil
}

func (cm *ContentManager) pushContent(instances []Instance, vault bool, opts PackageCreateOpts) error {
func (cm *ContentManager) pushContent(instances []Instance, pkgFile string) error {
_, err := InstanceProcess(cm.aem, instances, func(instance Instance) (any, error) {
if vault {
mainDir, _, _ := strings.Cut(opts.ContentPath, content.JCRRoot)
jcrPath := DetermineFilterRoot(opts.ContentPath)
if err := cm.vaultCli.PushContent(&instance, mainDir, jcrPath); err != nil {
return nil, err
}
} else {
remotePath, err := instance.PackageManager().Create(opts)
defer func() { _ = instance.PackageManager().Delete(remotePath) }()
if err != nil {
return nil, err
}
if err = instance.PackageManager().Install(remotePath); err != nil {
return nil, err
}
remotePath, err := instance.PackageManager().Upload(pkgFile)
defer func() { _ = instance.PackageManager().Delete(remotePath) }()
if err != nil {
return nil, err
}
if err = instance.PackageManager().Install(remotePath); err != nil {
return nil, err
}
return nil, nil
})
Expand All @@ -174,94 +150,42 @@ func (cm *ContentManager) pushContent(instances []Instance, vault bool, opts Pac
return nil
}

func (cm *ContentManager) Push(instances []Instance, path string, clean bool, vault bool, opts PackageCreateOpts) error {
if !pathx.Exists(path) {
return fmt.Errorf("cannot push content as it does not exist '%s'", path)
}
func (cm *ContentManager) Push(instances []Instance, clean bool, opts PackageCreateOpts) error {
workDir := pathx.RandomDir(cm.tmpDir(), "content_push")
defer func() { _ = pathx.DeleteIfExists(workDir) }()
if clean || vault && pathx.IsFile(path) {
if err := copyPackageAllFiles(workDir, opts); err != nil {
pkgFile := pathx.RandomFileName(cm.tmpDir(), "content_push", ".zip")
defer func() {
_ = pathx.DeleteIfExists(workDir)
_ = pathx.DeleteIfExists(pkgFile)
}()
if err := copyPackageAllFiles(workDir, opts); err != nil {
return err
}
if clean {
if err := cm.contentManager.Clean(filepath.Join(workDir, content.JCRRoot)); err != nil {
return err
}
if clean {
if err := cm.contentManager.Clean(filepath.Join(workDir, content.JCRRoot)); err != nil {
return err
}
}
opts.ContentPath = filepath.Join(workDir, content.JCRRoot)
}
if err := cm.pushContent(instances, vault, opts); err != nil {
if err := content.Zip(workDir, pkgFile); err != nil {
return err
}
if err := cm.pushContent(instances, pkgFile); err != nil {
return err
}
return nil
}

func (cm *ContentManager) copyByPkgMgr(srcInstance *Instance, destInstances []Instance, clean bool, opts PackageCreateOpts) error {
func (cm *ContentManager) Copy(srcInstance *Instance, destInstances []Instance, clean bool, opts PackageCreateOpts) error {
pkgFile := pathx.RandomFileName(cm.tmpDir(), "content_copy", ".zip")
defer func() { _ = pathx.DeleteIfExists(pkgFile) }()
if err := cm.Download(srcInstance, pkgFile, clean, false, opts); err != nil {
if err := cm.Download(srcInstance, pkgFile, clean, opts); err != nil {
return err
}
_, err := InstanceProcess(cm.aem, destInstances, func(destInstance Instance) (any, error) {
remotePath, err := destInstance.PackageManager().Upload(pkgFile)
defer func() { _ = destInstance.PackageManager().Delete(remotePath) }()
if err != nil {
return nil, err
}
if err = destInstance.PackageManager().Install(remotePath); err != nil {
return nil, err
}
return nil, err
})
if err != nil {
if err := cm.pushContent(destInstances, pkgFile); err != nil {
return err
}
return nil
}

func (cm *ContentManager) copyByVaultCli(srcInstance *Instance, destInstances []Instance, clean bool, rcpArgs string, opts PackageCreateOpts) error {
if clean || opts.FilterFile != "" {
workDir := pathx.RandomDir(cm.tmpDir(), "content_copy")
defer func() { _ = pathx.DeleteIfExists(workDir) }()
if err := cm.pullContent(srcInstance, workDir, true, opts); err != nil {
return err
}
if clean {
if err := cm.contentManager.Clean(filepath.Join(workDir, content.JCRRoot)); err != nil {
return err
}
}
opts.ContentPath = filepath.Join(workDir, content.JCRRoot)
if err := cm.pushContent(destInstances, true, opts); err != nil {
return err
}
} else {
if rcpArgs == "" {
rcpArgs = "-b 100 -r -u"
}
_, err := InstanceProcess(cm.aem, destInstances, func(destInstance Instance) (any, error) {
for _, filterRoot := range opts.FilterRoots {
if err := cm.vaultCli.CopyContent(srcInstance, &destInstance, strings.Fields(rcpArgs), filterRoot); err != nil {
return nil, err
}
}
return nil, nil
})
if err != nil {
return err
}
}
return nil
}

func (cm *ContentManager) Copy(srcInstance *Instance, destInstances []Instance, clean bool, vault bool, rcpArgs string, opts PackageCreateOpts) error {
if vault {
return cm.copyByVaultCli(srcInstance, destInstances, clean, rcpArgs, opts)
}
return cm.copyByPkgMgr(srcInstance, destInstances, clean, opts)
}

func DetermineSyncFile(file string) string {
if regexp.MustCompile(FlattenFilePattern).MatchString(file) {
return filepath.Join(strings.ReplaceAll(file, content.XmlFileSuffix, ""), content.JCRContentFile)
Expand Down
Loading

0 comments on commit f6adf2c

Please sign in to comment.