MCPcopy
hub / github.com/kubesphere/kubekey / ModuleHttpGetFile

Function ModuleHttpGetFile

pkg/modules/http_get_file/http_get_file.go:192–245  ·  view source on GitHub ↗
(ctx context.Context, opts internal.ExecOptions)

Source from the content-addressed store, hash-verified

190}
191
192func ModuleHttpGetFile(ctx context.Context, opts internal.ExecOptions) (string, string, error) {
193 // get host variable
194 ha, err := opts.GetAllVariables()
195 if err != nil {
196 return internal.StdoutFailed, internal.StderrGetHostVariable, err
197 }
198
199 // check args
200 args := variable.Extension2Variables(opts.Args)
201 // Parse module arguments.
202 httpArg, err := newHttpArgs(ctx, args, ha)
203 if err != nil {
204 return internal.StdoutFailed, internal.StderrParseArgument, err
205 }
206
207 destParam, err := variable.StringVar(ha, args, "dest")
208 if err != nil {
209 return internal.StdoutFailed, "\"dest\" in args should be string", err
210 }
211
212 // fetch file
213 parentDir := filepath.Dir(strings.TrimSpace(destParam))
214 if _, err := os.Stat(parentDir); os.IsNotExist(err) {
215 if err := os.MkdirAll(parentDir, os.ModePerm); err != nil {
216 return internal.StdoutFailed, "failed to create dest dir", err
217 }
218 }
219
220 tmpFile, err := os.CreateTemp(parentDir, "*.tmp")
221 if err != nil {
222 return internal.StdoutFailed, "failed to create dest file", err
223 }
224
225 tmpFilePath := tmpFile.Name()
226 defer func() {
227 _ = os.Remove(tmpFilePath)
228 }()
229
230 err = httpArg.FetchFile(ctx, tmpFile)
231 errC := tmpFile.Close()
232 if err != nil {
233 return internal.StdoutFailed, "failed to get http file", err
234 }
235 if errC != nil {
236 return internal.StdoutFailed, "failed to close tmp file", errC
237 }
238
239 err = os.Rename(tmpFilePath, destParam)
240 if err != nil {
241 return internal.StdoutFailed, "failed to rename file", err
242 }
243
244 return internal.StdoutSuccess, "", nil
245}

Callers 1

Calls 8

Extension2VariablesFunction · 0.92
StringVarFunction · 0.92
newHttpArgsFunction · 0.85
GetAllVariablesMethod · 0.80
StatMethod · 0.65
NameMethod · 0.65
FetchFileMethod · 0.65
CloseMethod · 0.65

Tested by 1