diff --git a/api/container/v1beta1/container_sdk.go b/api/container/v1beta1/container_sdk.go index 571ca287f..55cff5329 100644 --- a/api/container/v1beta1/container_sdk.go +++ b/api/container/v1beta1/container_sdk.go @@ -205,6 +205,46 @@ func (enum *CronStatus) UnmarshalJSON(data []byte) error { return nil } +type DomainStatus string + +const ( + // DomainStatusUnknown is [insert doc]. + DomainStatusUnknown = DomainStatus("unknown") + // DomainStatusReady is [insert doc]. + DomainStatusReady = DomainStatus("ready") + // DomainStatusDeleting is [insert doc]. + DomainStatusDeleting = DomainStatus("deleting") + // DomainStatusError is [insert doc]. + DomainStatusError = DomainStatus("error") + // DomainStatusCreating is [insert doc]. + DomainStatusCreating = DomainStatus("creating") + // DomainStatusPending is [insert doc]. + DomainStatusPending = DomainStatus("pending") +) + +func (enum DomainStatus) String() string { + if enum == "" { + // return default value if empty + return "unknown" + } + return string(enum) +} + +func (enum DomainStatus) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf(`"%s"`, enum)), nil +} + +func (enum *DomainStatus) UnmarshalJSON(data []byte) error { + tmp := "" + + if err := json.Unmarshal(data, &tmp); err != nil { + return err + } + + *enum = DomainStatus(DomainStatus(tmp).String()) + return nil +} + type ListContainersRequestOrderBy string const ( @@ -273,6 +313,42 @@ func (enum *ListCronsRequestOrderBy) UnmarshalJSON(data []byte) error { return nil } +type ListDomainsRequestOrderBy string + +const ( + // ListDomainsRequestOrderByCreatedAtAsc is [insert doc]. + ListDomainsRequestOrderByCreatedAtAsc = ListDomainsRequestOrderBy("created_at_asc") + // ListDomainsRequestOrderByCreatedAtDesc is [insert doc]. + ListDomainsRequestOrderByCreatedAtDesc = ListDomainsRequestOrderBy("created_at_desc") + // ListDomainsRequestOrderByHostnameAsc is [insert doc]. + ListDomainsRequestOrderByHostnameAsc = ListDomainsRequestOrderBy("hostname_asc") + // ListDomainsRequestOrderByHostnameDesc is [insert doc]. + ListDomainsRequestOrderByHostnameDesc = ListDomainsRequestOrderBy("hostname_desc") +) + +func (enum ListDomainsRequestOrderBy) String() string { + if enum == "" { + // return default value if empty + return "created_at_asc" + } + return string(enum) +} + +func (enum ListDomainsRequestOrderBy) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf(`"%s"`, enum)), nil +} + +func (enum *ListDomainsRequestOrderBy) UnmarshalJSON(data []byte) error { + tmp := "" + + if err := json.Unmarshal(data, &tmp); err != nil { + return err + } + + *enum = ListDomainsRequestOrderBy(ListDomainsRequestOrderBy(tmp).String()) + return nil +} + type ListLogsRequestOrderBy string const ( @@ -475,6 +551,23 @@ type Cron struct { Status CronStatus `json:"status"` } +// Domain: domain +type Domain struct { + ID string `json:"id"` + + Hostname string `json:"hostname"` + + ContainerID string `json:"container_id"` + + URL string `json:"url"` + // Status: + // + // Default value: unknown + Status DomainStatus `json:"status"` + + ErrorMessage *string `json:"error_message"` +} + // ListContainersResponse: list containers response type ListContainersResponse struct { Containers []*Container `json:"containers"` @@ -489,6 +582,13 @@ type ListCronsResponse struct { TotalCount uint32 `json:"total_count"` } +// ListDomainsResponse: list domains response +type ListDomainsResponse struct { + Domains []*Domain `json:"domains"` + + TotalCount uint32 `json:"total_count"` +} + // ListLogsResponse: list logs response type ListLogsResponse struct { Logs []*Log `json:"logs"` @@ -1411,6 +1511,173 @@ func (s *API) ListLogs(req *ListLogsRequest, opts ...scw.RequestOption) (*ListLo return &resp, nil } +type ListDomainsRequest struct { + Region scw.Region `json:"-"` + + Page *int32 `json:"-"` + + PageSize *uint32 `json:"-"` + // OrderBy: + // + // Default value: created_at_asc + OrderBy ListDomainsRequestOrderBy `json:"-"` + + ContainerID string `json:"-"` +} + +func (s *API) ListDomains(req *ListDomainsRequest, opts ...scw.RequestOption) (*ListDomainsResponse, error) { + var err error + + if req.Region == "" { + defaultRegion, _ := s.client.GetDefaultRegion() + req.Region = defaultRegion + } + + defaultPageSize, exist := s.client.GetDefaultPageSize() + if (req.PageSize == nil || *req.PageSize == 0) && exist { + req.PageSize = &defaultPageSize + } + + query := url.Values{} + parameter.AddToQuery(query, "page", req.Page) + parameter.AddToQuery(query, "page_size", req.PageSize) + parameter.AddToQuery(query, "order_by", req.OrderBy) + parameter.AddToQuery(query, "container_id", req.ContainerID) + + if fmt.Sprint(req.Region) == "" { + return nil, errors.New("field Region cannot be empty in request") + } + + scwReq := &scw.ScalewayRequest{ + Method: "GET", + Path: "/containers/v1beta1/regions/" + fmt.Sprint(req.Region) + "/domains", + Query: query, + Headers: http.Header{}, + } + + var resp ListDomainsResponse + + err = s.client.Do(scwReq, &resp, opts...) + if err != nil { + return nil, err + } + return &resp, nil +} + +type GetDomainRequest struct { + Region scw.Region `json:"-"` + + DomainID string `json:"-"` +} + +func (s *API) GetDomain(req *GetDomainRequest, opts ...scw.RequestOption) (*Domain, error) { + var err error + + if req.Region == "" { + defaultRegion, _ := s.client.GetDefaultRegion() + req.Region = defaultRegion + } + + if fmt.Sprint(req.Region) == "" { + return nil, errors.New("field Region cannot be empty in request") + } + + if fmt.Sprint(req.DomainID) == "" { + return nil, errors.New("field DomainID cannot be empty in request") + } + + scwReq := &scw.ScalewayRequest{ + Method: "GET", + Path: "/containers/v1beta1/regions/" + fmt.Sprint(req.Region) + "/domains/" + fmt.Sprint(req.DomainID) + "", + Headers: http.Header{}, + } + + var resp Domain + + err = s.client.Do(scwReq, &resp, opts...) + if err != nil { + return nil, err + } + return &resp, nil +} + +type CreateDomainRequest struct { + Region scw.Region `json:"-"` + + Hostname string `json:"hostname"` + + ContainerID string `json:"container_id"` +} + +func (s *API) CreateDomain(req *CreateDomainRequest, opts ...scw.RequestOption) (*Domain, error) { + var err error + + if req.Region == "" { + defaultRegion, _ := s.client.GetDefaultRegion() + req.Region = defaultRegion + } + + if fmt.Sprint(req.Region) == "" { + return nil, errors.New("field Region cannot be empty in request") + } + + scwReq := &scw.ScalewayRequest{ + Method: "POST", + Path: "/containers/v1beta1/regions/" + fmt.Sprint(req.Region) + "/domains", + Headers: http.Header{}, + } + + err = scwReq.SetBody(req) + if err != nil { + return nil, err + } + + var resp Domain + + err = s.client.Do(scwReq, &resp, opts...) + if err != nil { + return nil, err + } + return &resp, nil +} + +type DeleteDomainRequest struct { + Region scw.Region `json:"-"` + + DomainID string `json:"-"` +} + +func (s *API) DeleteDomain(req *DeleteDomainRequest, opts ...scw.RequestOption) (*Domain, error) { + var err error + + if req.Region == "" { + defaultRegion, _ := s.client.GetDefaultRegion() + req.Region = defaultRegion + } + + if fmt.Sprint(req.Region) == "" { + return nil, errors.New("field Region cannot be empty in request") + } + + if fmt.Sprint(req.DomainID) == "" { + return nil, errors.New("field DomainID cannot be empty in request") + } + + scwReq := &scw.ScalewayRequest{ + Method: "DELETE", + Path: "/containers/v1beta1/regions/" + fmt.Sprint(req.Region) + "/domains/" + fmt.Sprint(req.DomainID) + "", + Headers: http.Header{}, + } + + var resp Domain + + err = s.client.Do(scwReq, &resp, opts...) + if err != nil { + return nil, err + } + return &resp, nil +} + type IssueJWTRequest struct { Region scw.Region `json:"-"` @@ -1529,3 +1796,22 @@ func (r *ListLogsResponse) UnsafeAppend(res interface{}) (uint32, error) { r.TotalCount += uint32(len(results.Logs)) return uint32(len(results.Logs)), nil } + +// UnsafeGetTotalCount should not be used +// Internal usage only +func (r *ListDomainsResponse) UnsafeGetTotalCount() uint32 { + return r.TotalCount +} + +// UnsafeAppend should not be used +// Internal usage only +func (r *ListDomainsResponse) UnsafeAppend(res interface{}) (uint32, error) { + results, ok := res.(*ListDomainsResponse) + if !ok { + return 0, errors.New("%T type cannot be appended to type %T", res, r) + } + + r.Domains = append(r.Domains, results.Domains...) + r.TotalCount += uint32(len(results.Domains)) + return uint32(len(results.Domains)), nil +}