Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.5 KiB
153 lines
4.5 KiB
// |
|
// Copyright 2021, Serena Fang |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
// |
|
|
|
package gitlab |
|
|
|
import ( |
|
"fmt" |
|
"net/http" |
|
"time" |
|
) |
|
|
|
// InstanceClustersService handles communication with the |
|
// instance clusters related methods of the GitLab API. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/instance_clusters.html |
|
type InstanceClustersService struct { |
|
client *Client |
|
} |
|
|
|
// InstanceCluster represents a GitLab Instance Cluster. |
|
// |
|
// GitLab API docs: https://docs.gitlab.com/ee/api/instance_clusters.html |
|
type InstanceCluster struct { |
|
ID int `json:"id"` |
|
Name string `json:"name"` |
|
Domain string `json:"domain"` |
|
Managed bool `json:"managed"` |
|
CreatedAt *time.Time `json:"created_at"` |
|
ProviderType string `json:"provider_type"` |
|
PlatformType string `json:"platform_type"` |
|
EnvironmentScope string `json:"environment_scope"` |
|
ClusterType string `json:"cluster_type"` |
|
User *User `json:"user"` |
|
PlatformKubernetes *PlatformKubernetes `json:"platform_kubernetes"` |
|
ManagementProject *ManagementProject `json:"management_project"` |
|
} |
|
|
|
func (v InstanceCluster) String() string { |
|
return Stringify(v) |
|
} |
|
|
|
// ListClusters gets a list of all instance clusters. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/instance_clusters.html#list-instance-clusters |
|
func (s *InstanceClustersService) ListClusters(options ...RequestOptionFunc) ([]*InstanceCluster, *Response, error) { |
|
u := "admin/clusters" |
|
|
|
req, err := s.client.NewRequest(http.MethodGet, u, nil, options) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
|
|
var ics []*InstanceCluster |
|
resp, err := s.client.Do(req, &ics) |
|
if err != nil { |
|
return nil, resp, err |
|
} |
|
|
|
return ics, resp, err |
|
} |
|
|
|
// GetCluster gets an instance cluster. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/instance_clusters.html#get-a-single-instance-cluster |
|
func (s *InstanceClustersService) GetCluster(cluster int, options ...RequestOptionFunc) (*InstanceCluster, *Response, error) { |
|
u := fmt.Sprintf("admin/clusters/%d", cluster) |
|
|
|
req, err := s.client.NewRequest(http.MethodGet, u, nil, options) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
|
|
ic := new(InstanceCluster) |
|
resp, err := s.client.Do(req, &ic) |
|
if err != nil { |
|
return nil, resp, err |
|
} |
|
|
|
return ic, resp, err |
|
} |
|
|
|
// AddCluster adds an existing cluster to the instance. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/instance_clusters.html#add-existing-instance-cluster |
|
func (s *InstanceClustersService) AddCluster(opt *AddClusterOptions, options ...RequestOptionFunc) (*InstanceCluster, *Response, error) { |
|
u := "admin/clusters/add" |
|
|
|
req, err := s.client.NewRequest(http.MethodPost, u, opt, options) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
|
|
ic := new(InstanceCluster) |
|
resp, err := s.client.Do(req, ic) |
|
if err != nil { |
|
return nil, resp, err |
|
} |
|
|
|
return ic, resp, err |
|
} |
|
|
|
// EditCluster updates an existing instance cluster. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/instance_clusters.html#edit-instance-cluster |
|
func (s *InstanceClustersService) EditCluster(cluster int, opt *EditClusterOptions, options ...RequestOptionFunc) (*InstanceCluster, *Response, error) { |
|
u := fmt.Sprintf("admin/clusters/%d", cluster) |
|
|
|
req, err := s.client.NewRequest(http.MethodPut, u, opt, options) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
|
|
ic := new(InstanceCluster) |
|
resp, err := s.client.Do(req, ic) |
|
if err != nil { |
|
return nil, resp, err |
|
} |
|
|
|
return ic, resp, err |
|
} |
|
|
|
// DeleteCluster deletes an existing instance cluster. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/instance_clusters.html#delete-instance-cluster |
|
func (s *InstanceClustersService) DeleteCluster(cluster int, options ...RequestOptionFunc) (*Response, error) { |
|
u := fmt.Sprintf("admin/clusters/%d", cluster) |
|
|
|
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options) |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
return s.client.Do(req, nil) |
|
}
|
|
|