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

Method statePush

cli/state.go:88–161  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

86}
87
88func (r *RootCmd) statePush() *serpent.Command {
89 var buildNumber int64
90 var noBuild bool
91 cmd := &serpent.Command{
92 Use: "push <workspace> <file>",
93 Short: "Push a Terraform state file to a workspace.",
94 Middleware: serpent.Chain(
95 serpent.RequireNArgs(2),
96 ),
97 Handler: func(inv *serpent.Invocation) error {
98 client, err := r.InitClient(inv)
99 if err != nil {
100 return err
101 }
102 workspace, err := client.ResolveWorkspace(inv.Context(), inv.Args[0])
103 if err != nil {
104 return err
105 }
106 var build codersdk.WorkspaceBuild
107 if buildNumber == 0 {
108 build = workspace.LatestBuild
109 } else {
110 owner, workspace, err := codersdk.SplitWorkspaceIdentifier(inv.Args[0])
111 if err != nil {
112 return err
113 }
114 build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(inv.Context(), owner, workspace, strconv.FormatInt((buildNumber), 10))
115 if err != nil {
116 return err
117 }
118 }
119
120 var state []byte
121 if inv.Args[1] == "-" {
122 state, err = io.ReadAll(inv.Stdin)
123 } else {
124 state, err = os.ReadFile(inv.Args[1])
125 }
126 if err != nil {
127 return err
128 }
129
130 if noBuild {
131 // Update state directly without triggering a build.
132 err = client.UpdateWorkspaceBuildState(inv.Context(), build.ID, state)
133 if err != nil {
134 return err
135 }
136 _, _ = fmt.Fprintln(inv.Stdout, "State updated successfully.")
137 return nil
138 }
139
140 build, err = client.CreateWorkspaceBuild(inv.Context(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{
141 TemplateVersionID: build.TemplateVersionID,
142 Transition: build.Transition,
143 ProvisionerState: state,
144 })
145 if err != nil {

Callers 1

stateMethod · 0.95

Calls 11

InitClientMethod · 0.95
SplitWorkspaceIdentifierFunction · 0.92
WorkspaceBuildFunction · 0.92
buildNumberOptionFunction · 0.85
ResolveWorkspaceMethod · 0.80
CreateWorkspaceBuildMethod · 0.80
ContextMethod · 0.65
ReadFileMethod · 0.65
ReadAllMethod · 0.45

Tested by

no test coverage detected