MCPcopy Index your code
hub / github.com/coder/coder / statePull

Method statePull

cli/state.go:29–77  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

27}
28
29func (r *RootCmd) statePull() *serpent.Command {
30 var buildNumber int64
31 cmd := &serpent.Command{
32 Use: "pull <workspace> [file]",
33 Short: "Pull a Terraform state file from a workspace.",
34 Middleware: serpent.Chain(
35 serpent.RequireRangeArgs(1, 2),
36 ),
37 Handler: func(inv *serpent.Invocation) error {
38 client, err := r.InitClient(inv)
39 if err != nil {
40 return err
41 }
42 var build codersdk.WorkspaceBuild
43 if buildNumber == 0 {
44 workspace, err := client.ResolveWorkspace(inv.Context(), inv.Args[0])
45 if err != nil {
46 return err
47 }
48 build = workspace.LatestBuild
49 } else {
50 owner, workspace, err := codersdk.SplitWorkspaceIdentifier(inv.Args[0])
51 if err != nil {
52 return err
53 }
54 build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(inv.Context(), owner, workspace, strconv.FormatInt(buildNumber, 10))
55 if err != nil {
56 return err
57 }
58 }
59
60 state, err := client.WorkspaceBuildState(inv.Context(), build.ID)
61 if err != nil {
62 return err
63 }
64
65 if len(inv.Args) < 2 {
66 _, _ = fmt.Fprintln(inv.Stdout, string(state))
67 return nil
68 }
69
70 return os.WriteFile(inv.Args[1], state, 0o600)
71 },
72 }
73 cmd.Options = serpent.OptionSet{
74 buildNumberOption(&buildNumber),
75 }
76 return cmd
77}
78
79func buildNumberOption(n *int64) serpent.Option {
80 return serpent.Option{

Callers 1

stateMethod · 0.95

Calls 8

InitClientMethod · 0.95
SplitWorkspaceIdentifierFunction · 0.92
buildNumberOptionFunction · 0.85
ResolveWorkspaceMethod · 0.80
WorkspaceBuildStateMethod · 0.80
ContextMethod · 0.65
WriteFileMethod · 0.65

Tested by

no test coverage detected