github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/jobserver/list_inputs.go (about) 1 package jobserver 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/pf-qiu/concourse/v6/atc" 8 "github.com/pf-qiu/concourse/v6/atc/api/present" 9 "github.com/pf-qiu/concourse/v6/atc/db" 10 ) 11 12 func (s *Server) ListJobInputs(pipeline db.Pipeline) http.Handler { 13 logger := s.logger.Session("list-job-inputs") 14 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 15 w.Header().Set("Content-Type", "application/json") 16 jobName := r.FormValue(":job_name") 17 18 job, found, err := pipeline.Job(jobName) 19 if err != nil { 20 logger.Error("failed-to-get-job", err) 21 w.WriteHeader(http.StatusInternalServerError) 22 return 23 } 24 25 if !found { 26 w.WriteHeader(http.StatusNotFound) 27 return 28 } 29 30 resources, err := pipeline.Resources() 31 if err != nil { 32 logger.Error("failed-to-get-resources", err) 33 w.WriteHeader(http.StatusInternalServerError) 34 return 35 } 36 37 buildInputs, found, err := job.GetFullNextBuildInputs() 38 if err != nil { 39 logger.Error("failed-to-get-next-build-inputs", err) 40 w.WriteHeader(http.StatusInternalServerError) 41 return 42 } 43 44 if !found { 45 w.WriteHeader(http.StatusNotFound) 46 return 47 } 48 49 jobConfig, err := job.Config() 50 if err != nil { 51 logger.Error("failed-to-get-job-config", err) 52 w.WriteHeader(http.StatusInternalServerError) 53 return 54 } 55 56 jobInputs := jobConfig.Inputs() 57 58 inputs := make([]atc.BuildInput, len(buildInputs)) 59 60 for i, input := range buildInputs { 61 var config atc.JobInputParams 62 for _, jobInput := range jobInputs { 63 if jobInput.Name == input.Name { 64 config = jobInput 65 break 66 } 67 } 68 69 resource, found := resources.Lookup(config.Resource) 70 if !found { 71 logger.Debug("resource-is-not-found") 72 w.WriteHeader(http.StatusInternalServerError) 73 return 74 } 75 76 inputs[i] = present.BuildInput(input, config, resource) 77 } 78 79 err = json.NewEncoder(w).Encode(inputs) 80 if err != nil { 81 logger.Error("failed-to-encode-build-inputs", err) 82 w.WriteHeader(http.StatusInternalServerError) 83 } 84 }) 85 }