func (api *HTTPAPI) CreateProvider(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { pspec := &volume.ProviderSpec{} if err := httphelper.DecodeJSON(r, &pspec); err != nil { httphelper.Error(w, err) return } if pspec.ID == "" { pspec.ID = random.UUID() } if pspec.Kind == "" { httphelper.ValidationError(w, "kind", "must not be blank") return } var provider volume.Provider provider, err := volumemanager.NewProvider(pspec) if err == volume.UnknownProviderKind { httphelper.ValidationError(w, "kind", fmt.Sprintf("%q is not known", pspec.Kind)) return } if err := api.vman.AddProvider(pspec.ID, provider); err != nil { switch err { case volumemanager.ErrProviderExists: httphelper.ObjectExistsError(w, fmt.Sprintf("provider %q already exists", pspec.ID)) return default: httphelper.Error(w, err) return } } httphelper.JSON(w, 200, pspec) }
// servePutService creates a service. func (h *Handler) servePutService(w http.ResponseWriter, r *http.Request, params httprouter.Params) { // Retrieve the path parameter. service := params.ByName("service") if err := ValidServiceName(service); err != nil { hh.ValidationError(w, "", err.Error()) return } // Read config from the request. config := &discoverd.ServiceConfig{} if err := hh.DecodeJSON(r, config); err != nil { hh.Error(w, err) return } // Add the service to the store. if err := h.Store.AddService(service, config); err == ErrNotLeader { h.redirectToLeader(w, r) return } else if IsServiceExists(err) { hh.ObjectExistsError(w, err.Error()) return } else if err != nil { hh.Error(w, err) return } }
func (api *httpAPI) NewCredential(w http.ResponseWriter, req *http.Request, params httprouter.Params) { creds := &Credential{} if err := httphelper.DecodeJSON(req, &creds); err != nil { httphelper.Error(w, err) return } if creds.Type == "azure" { oauthCreds := make([]*OAuthCredential, 0, 2) for _, resource := range []string{azure.JSONAPIResource, azure.XMLAPIResource} { token, err := azure.OAuth2Config(creds.ID, creds.Endpoint, resource).Exchange(oauth2.NoContext, creds.Secret) if err != nil { httphelper.Error(w, err) return } oauthCreds = append(oauthCreds, &OAuthCredential{ ClientID: creds.ID, AccessToken: token.AccessToken, RefreshToken: token.RefreshToken, ExpiresAt: &token.Expiry, Scope: resource, }) } creds.Secret = "" creds.OAuthCreds = oauthCreds } if err := api.Installer.SaveCredentials(creds); err != nil { if err == credentialExistsError { httphelper.ObjectExistsError(w, err.Error()) return } httphelper.Error(w, err) return } w.WriteHeader(200) }
func (api *httpAPI) InstallHandler(w http.ResponseWriter, req *http.Request, params httprouter.Params) { var input *jsonInput if err := httphelper.DecodeJSON(req, &input); err != nil { httphelper.Error(w, err) return } api.InstallerStackMtx.Lock() defer api.InstallerStackMtx.Unlock() if len(api.InstallerStacks) > 0 { httphelper.ObjectExistsError(w, "install already started") return } var id = random.Hex(16) var creds aws.CredentialsProvider if input.Creds.AccessKeyID != "" && input.Creds.SecretAccessKey != "" { creds = aws.Creds(input.Creds.AccessKeyID, input.Creds.SecretAccessKey, "") } else { var err error creds, err = aws.EnvCreds() if err != nil { httphelper.ValidationError(w, "", err.Error()) return } } s := &httpInstaller{ ID: id, PromptOutChan: make(chan *httpPrompt), PromptInChan: make(chan *httpPrompt), logger: log.New(), api: api, } s.Stack = &Stack{ Creds: creds, Region: input.Region, InstanceType: input.InstanceType, NumInstances: input.NumInstances, VpcCidr: input.VpcCidr, SubnetCidr: input.SubnetCidr, PromptInput: s.PromptInput, YesNoPrompt: s.YesNoPrompt, } if err := s.Stack.RunAWS(); err != nil { httphelper.Error(w, err) return } api.InstallerStacks[id] = s go s.handleEvents() httphelper.JSON(w, 200, s) }
func (h *httpAPI) AddService(w http.ResponseWriter, r *http.Request, params httprouter.Params) { service := params.ByName("service") if err := ValidServiceName(service); err != nil { hh.ValidationError(w, "", err.Error()) return } config := &discoverd.ServiceConfig{} if err := hh.DecodeJSON(r, config); err != nil { hh.Error(w, err) return } if err := h.Store.AddService(service, config); err != nil { if IsServiceExists(err) { hh.ObjectExistsError(w, err.Error()) } else { hh.Error(w, err) } return } }