-
-
Notifications
You must be signed in to change notification settings - Fork 82
/
describe_affected.go
113 lines (88 loc) 路 2.47 KB
/
describe_affected.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package exec
import (
"errors"
"fmt"
"github.com/spf13/cobra"
cfg "github.com/cloudposse/atmos/pkg/config"
"github.com/cloudposse/atmos/pkg/schema"
u "github.com/cloudposse/atmos/pkg/utils"
)
// ExecuteDescribeAffectedCmd executes `describe affected` command
func ExecuteDescribeAffectedCmd(cmd *cobra.Command, args []string) error {
info, err := processCommandLineArgs("", cmd, args, nil)
if err != nil {
return err
}
cliConfig, err := cfg.InitCliConfig(info, true)
if err != nil {
return err
}
// Process flags
flags := cmd.Flags()
ref, err := flags.GetString("ref")
if err != nil {
return err
}
sha, err := flags.GetString("sha")
if err != nil {
return err
}
repoPath, err := flags.GetString("repo-path")
if err != nil {
return err
}
format, err := flags.GetString("format")
if err != nil {
return err
}
if format != "" && format != "yaml" && format != "json" {
return fmt.Errorf("invalid '--format' flag '%s'. Valid values are 'json' (default) and 'yaml'", format)
}
if format == "" {
format = "json"
}
file, err := flags.GetString("file")
if err != nil {
return err
}
verbose, err := flags.GetBool("verbose")
if err != nil {
return err
}
sshKeyPath, err := flags.GetString("ssh-key")
if err != nil {
return err
}
sshKeyPassword, err := flags.GetString("ssh-key-password")
if err != nil {
return err
}
includeSpaceliftAdminStacks, err := flags.GetBool("include-spacelift-admin-stacks")
if err != nil {
return err
}
cloneTargetRef, err := flags.GetBool("clone-target-ref")
if err != nil {
return err
}
if repoPath != "" && (ref != "" || sha != "" || sshKeyPath != "" || sshKeyPassword != "") {
return errors.New("if the '--repo-path' flag is specified, the '--ref', '--sha', '--ssh-key' and '--ssh-key-password' flags can't be used")
}
var affected []schema.Affected
if repoPath != "" {
affected, err = ExecuteDescribeAffectedWithTargetRepoPath(cliConfig, repoPath, verbose, includeSpaceliftAdminStacks)
} else if cloneTargetRef {
affected, err = ExecuteDescribeAffectedWithTargetRefClone(cliConfig, ref, sha, sshKeyPath, sshKeyPassword, verbose, includeSpaceliftAdminStacks)
} else {
affected, err = ExecuteDescribeAffectedWithTargetRefCheckout(cliConfig, ref, sha, verbose, includeSpaceliftAdminStacks)
}
if err != nil {
return err
}
u.LogTrace(cliConfig, fmt.Sprintf("\nAffected components and stacks: \n"))
err = printOrWriteToFile(format, file, affected)
if err != nil {
return err
}
return nil
}