| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- package api
- import (
- "context"
- "encoding/json"
- "fmt"
- "net/http"
- "strings"
- "github.com/porter-dev/porter/internal/models"
- )
- // GetProjectResponse is the response returned after querying for a
- // given project
- type GetProjectResponse models.ProjectExternal
- // GetProject retrieves a project by id
- func (c *Client) GetProject(ctx context.Context, projectID uint) (*GetProjectResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/projects/%d", c.BaseURL, projectID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &GetProjectResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // GetProjectClusterResponse is the response returned after querying for a
- // given project's cluster
- type GetProjectClusterResponse models.ClusterExternal
- // GetProjectCluster retrieves a project's cluster by id
- func (c *Client) GetProjectCluster(
- ctx context.Context,
- projectID uint,
- clusterID uint,
- ) (*GetProjectClusterResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/projects/%d/clusters/%d", c.BaseURL, projectID, clusterID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &GetProjectClusterResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // ListProjectClustersResponse lists the linked clusters for a project
- type ListProjectClustersResponse []models.ClusterExternal
- // ListProjectClusters creates a list of clusters for a given project
- func (c *Client) ListProjectClusters(
- ctx context.Context,
- projectID uint,
- ) (ListProjectClustersResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/projects/%d/clusters", c.BaseURL, projectID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := ListProjectClustersResponse{}
- if httpErr, err := c.sendRequest(req, &bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // CreateProjectRequest represents the accepted fields for creating a project
- type CreateProjectRequest struct {
- Name string `json:"name" form:"required"`
- }
- // CreateProjectResponse is the resulting project after creation
- type CreateProjectResponse models.ProjectExternal
- // CreateProject creates a project with the given request options
- func (c *Client) CreateProject(
- ctx context.Context,
- createProjectRequest *CreateProjectRequest,
- ) (*CreateProjectResponse, error) {
- data, err := json.Marshal(createProjectRequest)
- if err != nil {
- return nil, err
- }
- req, err := http.NewRequest(
- "POST",
- fmt.Sprintf("%s/projects", c.BaseURL),
- strings.NewReader(string(data)),
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &CreateProjectResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // CreateProjectCandidatesRequest creates a project service account candidate,
- // which can be resolved to create a service account
- type CreateProjectCandidatesRequest struct {
- Kubeconfig string `json:"kubeconfig"`
- IsLocal bool `json:"is_local"`
- }
- // CreateProjectCandidatesResponse is the list of candidates returned after
- // creating the candidates
- type CreateProjectCandidatesResponse []*models.ClusterCandidateExternal
- // CreateProjectCandidates creates a service account candidate for a given project,
- // accepting a kubeconfig that gets parsed into a candidate
- func (c *Client) CreateProjectCandidates(
- ctx context.Context,
- projectID uint,
- createCandidatesRequest *CreateProjectCandidatesRequest,
- ) (CreateProjectCandidatesResponse, error) {
- data, err := json.Marshal(createCandidatesRequest)
- if err != nil {
- return nil, err
- }
- req, err := http.NewRequest(
- "POST",
- fmt.Sprintf("%s/projects/%d/clusters/candidates", c.BaseURL, projectID),
- strings.NewReader(string(data)),
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := CreateProjectCandidatesResponse{}
- if httpErr, err := c.sendRequest(req, &bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // GetProjectCandidatesResponse is the list of service account candidates
- type GetProjectCandidatesResponse []*models.ClusterCandidateExternal
- // GetProjectCandidates returns the service account candidates for a given
- // project id
- func (c *Client) GetProjectCandidates(
- ctx context.Context,
- projectID uint,
- ) (GetProjectCandidatesResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/projects/%d/clusters/candidates", c.BaseURL, projectID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := GetProjectCandidatesResponse{}
- if httpErr, err := c.sendRequest(req, &bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // CreateProjectClusterResponse is the cluster that gets
- // returned after the candidate has been resolved
- type CreateProjectClusterResponse models.ClusterExternal
- // CreateProjectCluster creates a cluster given a project id
- // and a candidate id, which gets resolved using the list of actions
- func (c *Client) CreateProjectCluster(
- ctx context.Context,
- projectID uint,
- candidateID uint,
- createReq *models.ClusterResolverAll,
- ) (*CreateProjectClusterResponse, error) {
- data, err := json.Marshal(&createReq)
- if err != nil {
- return nil, err
- }
- req, err := http.NewRequest(
- "POST",
- fmt.Sprintf("%s/projects/%d/clusters/candidates/%d/resolve", c.BaseURL, projectID, candidateID),
- strings.NewReader(string(data)),
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &CreateProjectClusterResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // DeleteProjectResponse is the object returned after project deletion
- type DeleteProjectResponse models.ProjectExternal
- // DeleteProject deletes a project by id
- func (c *Client) DeleteProject(ctx context.Context, projectID uint) (*DeleteProjectResponse, error) {
- req, err := http.NewRequest(
- "DELETE",
- fmt.Sprintf("%s/projects/%d", c.BaseURL, projectID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &DeleteProjectResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
|