func createServiceInstance(w http.ResponseWriter, r *http.Request, t auth.Token) (err error) {
	serviceName := r.URL.Query().Get(":service")
	srv, err := getService(serviceName)
	if err != nil {
		return err
	}
	instance := service.ServiceInstance{
		ServiceName: serviceName,
		// for compatibility
		PlanName:  InputValue(r, "plan"),
		TeamOwner: InputValue(r, "owner"),
	}
	err = ParseInput(r, &instance)
	if err != nil {
		return err
	}
	tags, _ := InputValues(r, "tag")
	instance.Tags = append(instance.Tags, tags...) // for compatibility
	var teamOwner string
	if instance.TeamOwner == "" {
		teamOwner, err = permission.TeamForPermission(t, permission.PermServiceInstanceCreate)
		if err != nil {
			return err
		}
		instance.TeamOwner = teamOwner
	}
	allowed := permission.Check(t, permission.PermServiceInstanceCreate,
		permission.Context(permTypes.CtxTeam, instance.TeamOwner),
	)
	if !allowed {
		return permission.ErrUnauthorized
	}
	if srv.IsRestricted {
		allowed := permission.Check(t, permission.PermServiceRead,
			contextsForService(&srv)...,
		)
		if !allowed {
			return permission.ErrUnauthorized
		}
	}
	evt, err := event.New(&event.Opts{
		Target:     serviceInstanceTarget(serviceName, instance.Name),
		Kind:       permission.PermServiceInstanceCreate,
		Owner:      t,
		CustomData: event.FormToCustomData(InputFields(r)),
		Allowed: event.Allowed(permission.PermServiceInstanceReadEvents,
			contextsForServiceInstance(&instance, srv.Name)...),
	})
	if err != nil {
		return err
	}
	defer func() { evt.Done(err) }()
	requestID := requestIDHeader(r)
	err = service.CreateServiceInstance(instance, &srv, evt, requestID)
	if err == service.ErrInstanceNameAlreadyExists {
		return &tsuruErrors.HTTP{
			Code:    http.StatusConflict,
			Message: err.Error(),
		}
	}
	if err == service.ErrInvalidInstanceName {
		return &tsuruErrors.HTTP{
			Code:    http.StatusBadRequest,
			Message: err.Error(),
		}
	}
	if err == nil {
		w.WriteHeader(http.StatusCreated)
	}
	return err
}
func createServiceInstance(w http.ResponseWriter, r *http.Request, t auth.Token) (err error) {
	serviceName := r.URL.Query().Get(":service")
	srv, err := getService(serviceName)
	if err != nil {
		return err
	}
	instance := service.ServiceInstance{
		ServiceName: serviceName,
		
		PlanName:  InputValue(r, "plan"),
		TeamOwner: InputValue(r, "owner"),
	}
	err = ParseInput(r, &instance)
	if err != nil {
		return err
	}
	tags, _ := InputValues(r, "tag")
	instance.Tags = append(instance.Tags, tags...) 
	var teamOwner string
	if instance.TeamOwner == "" {
		teamOwner, err = permission.TeamForPermission(t, permission.PermServiceInstanceCreate)
		if err != nil {
			return err
		}
		instance.TeamOwner = teamOwner
	}
	allowed := permission.Check(t, permission.PermServiceInstanceCreate,
		permission.Context(permTypes.CtxTeam, instance.TeamOwner),
	)
	if !allowed {
		return permission.ErrUnauthorized
	}
	if srv.IsRestricted {
		allowed := permission.Check(t, permission.PermServiceRead,
			contextsForService(&srv)...,
		)
		if !allowed {
			return permission.ErrUnauthorized
		}
	}
	evt, err := event.New(&event.Opts{
		Target:     serviceInstanceTarget(serviceName, instance.Name),
		Kind:       permission.PermServiceInstanceCreate,
		Owner:      t,
		CustomData: event.FormToCustomData(InputFields(r)),
		Allowed: event.Allowed(permission.PermServiceInstanceReadEvents,
			contextsForServiceInstance(&instance, srv.Name)...),
	})
	if err != nil {
		return err
	}
	defer func() { evt.Done(err) }()
	requestID := requestIDHeader(r)
	err = service.CreateServiceInstance(instance, &srv, evt, requestID)
	if err == service.ErrInstanceNameAlreadyExists {
		return &tsuruErrors.HTTP{
			Code:    http.StatusConflict,
			Message: err.Error(),
		}
	}
	if err == service.ErrInvalidInstanceName {
		return &tsuruErrors.HTTP{
			Code:    http.StatusBadRequest,
			Message: err.Error(),
		}
	}
	if err == nil {
		w.WriteHeader(http.StatusCreated)
	}
	return err
}
func createServiceInstance ( w http . ResponseWriter , r * http . Request , t auth . Token ) ( err error ) { serviceName := r . URL . Query ( ) . Get ( " " ) srv , err := getService ( serviceName ) if err != nil { return err } instance := service . ServiceInstance { ServiceName : serviceName , // for compatibility PlanName : InputValue ( r , " " ) , TeamOwner : InputValue ( r , " " ) , } err = ParseInput ( r , & instance ) if err != nil { return err } tags , _ := InputValues ( r , " " ) instance . Tags = append ( instance . Tags , tags ... ) // for compatibility var teamOwner string if instance . TeamOwner == " " { teamOwner , err = permission . TeamForPermission ( t , permission . PermServiceInstanceCreate ) if err != nil { return err } instance . TeamOwner = teamOwner } allowed := permission . Check ( t , permission . PermServiceInstanceCreate , permission . Context ( permTypes . CtxTeam , instance . TeamOwner ) , ) if ! allowed { return permission . ErrUnauthorized } if srv . IsRestricted { allowed := permission . Check ( t , permission . PermServiceRead , contextsForService ( & srv ) ... , ) if ! allowed { return permission . ErrUnauthorized } } evt , err := event . New ( & event . Opts { Target : serviceInstanceTarget ( serviceName , instance . Name ) , Kind : permission . PermServiceInstanceCreate , Owner : t , CustomData : event . FormToCustomData ( InputFields ( r ) ) , Allowed : event . Allowed ( permission . PermServiceInstanceReadEvents , contextsForServiceInstance ( & instance , srv . Name ) ... ) , } ) if err != nil { return err } defer func ( ) { evt . Done ( err ) } ( ) requestID := requestIDHeader ( r ) err = service . CreateServiceInstance ( instance , & srv , evt , requestID ) if err == service . ErrInstanceNameAlreadyExists { return & tsuruErrors . HTTP { Code : http . StatusConflict , Message : err . Error ( ) , } } if err == service . ErrInvalidInstanceName { return & tsuruErrors . HTTP { Code : http . StatusBadRequest , Message : err . Error ( ) , } } if err == nil { w . WriteHeader ( http . StatusCreated ) } return err }
// title: service instance create
// path: /services/{service}/instances
// method: POST
// consume: application/x-www-form-urlencoded
// responses:
//   201: Service created
//   400: Invalid data
//   401: Unauthorized
//   409: Service already exists
title : service instance create path : / services / { service } / instances method : POST consume : application / x - www - form - urlencoded responses : 201 : Service created 400 : Invalid data 401 : Unauthorized 409 : Service already exists