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  }