Skip to content

Commit 25d7e88

Browse files
authored
feat(domain): add domain hosts managements (#1421)
1 parent d3ce378 commit 25d7e88

File tree

1 file changed

+230
-0
lines changed

1 file changed

+230
-0
lines changed

api/domain/v2beta1/domain_sdk.go

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,42 @@ func (enum *DomainStatus) UnmarshalJSON(data []byte) error {
513513
return nil
514514
}
515515

516+
type HostStatus string
517+
518+
const (
519+
// HostStatusUnknownStatus is [insert doc].
520+
HostStatusUnknownStatus = HostStatus("unknown_status")
521+
// HostStatusActive is [insert doc].
522+
HostStatusActive = HostStatus("active")
523+
// HostStatusUpdating is [insert doc].
524+
HostStatusUpdating = HostStatus("updating")
525+
// HostStatusDeleting is [insert doc].
526+
HostStatusDeleting = HostStatus("deleting")
527+
)
528+
529+
func (enum HostStatus) String() string {
530+
if enum == "" {
531+
// return default value if empty
532+
return "unknown_status"
533+
}
534+
return string(enum)
535+
}
536+
537+
func (enum HostStatus) MarshalJSON() ([]byte, error) {
538+
return []byte(fmt.Sprintf(`"%s"`, enum)), nil
539+
}
540+
541+
func (enum *HostStatus) UnmarshalJSON(data []byte) error {
542+
tmp := ""
543+
544+
if err := json.Unmarshal(data, &tmp); err != nil {
545+
return err
546+
}
547+
548+
*enum = HostStatus(HostStatus(tmp).String())
549+
return nil
550+
}
551+
516552
type LanguageCode string
517553

518554
const (
@@ -968,6 +1004,12 @@ const (
9681004
TaskTypeDeleteDomainExpired = TaskType("delete_domain_expired")
9691005
// TaskTypeDeleteExternalDomain is [insert doc].
9701006
TaskTypeDeleteExternalDomain = TaskType("delete_external_domain")
1007+
// TaskTypeCreateHost is [insert doc].
1008+
TaskTypeCreateHost = TaskType("create_host")
1009+
// TaskTypeUpdateHost is [insert doc].
1010+
TaskTypeUpdateHost = TaskType("update_host")
1011+
// TaskTypeDeleteHost is [insert doc].
1012+
TaskTypeDeleteHost = TaskType("delete_host")
9711013
)
9721014

9731015
func (enum TaskType) String() string {
@@ -1351,6 +1393,18 @@ type GetDomainAuthCodeResponse struct {
13511393
AuthCode string `json:"auth_code"`
13521394
}
13531395

1396+
type Host struct {
1397+
Domain string `json:"domain"`
1398+
1399+
Name string `json:"name"`
1400+
1401+
IPs []net.IP `json:"ips"`
1402+
// Status:
1403+
//
1404+
// Default value: unknown_status
1405+
Status HostStatus `json:"status"`
1406+
}
1407+
13541408
type ImportProviderDNSZoneRequestOnlineV1 struct {
13551409
Token string `json:"token"`
13561410
}
@@ -1428,6 +1482,13 @@ type ListDNSZonesResponse struct {
14281482
DNSZones []*DNSZone `json:"dns_zones"`
14291483
}
14301484

1485+
// ListDomainHostsResponse: list domain hosts response
1486+
type ListDomainHostsResponse struct {
1487+
TotalCount uint32 `json:"total_count"`
1488+
1489+
Hosts []*Host `json:"hosts"`
1490+
}
1491+
14311492
// ListDomainsResponse: list domains response
14321493
type ListDomainsResponse struct {
14331494
TotalCount uint32 `json:"total_count"`
@@ -3751,6 +3812,156 @@ func (s *RegistrarAPI) SearchAvailableDomains(req *RegistrarAPISearchAvailableDo
37513812
return &resp, nil
37523813
}
37533814

3815+
type RegistrarAPICreateDomainHostRequest struct {
3816+
Domain string `json:"-"`
3817+
3818+
Name string `json:"name"`
3819+
3820+
IPs []net.IP `json:"ips"`
3821+
}
3822+
3823+
// CreateDomainHost: create domain hostname with glue IPs
3824+
func (s *RegistrarAPI) CreateDomainHost(req *RegistrarAPICreateDomainHostRequest, opts ...scw.RequestOption) (*Host, error) {
3825+
var err error
3826+
3827+
if fmt.Sprint(req.Domain) == "" {
3828+
return nil, errors.New("field Domain cannot be empty in request")
3829+
}
3830+
3831+
scwReq := &scw.ScalewayRequest{
3832+
Method: "POST",
3833+
Path: "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/hosts",
3834+
Headers: http.Header{},
3835+
}
3836+
3837+
err = scwReq.SetBody(req)
3838+
if err != nil {
3839+
return nil, err
3840+
}
3841+
3842+
var resp Host
3843+
3844+
err = s.client.Do(scwReq, &resp, opts...)
3845+
if err != nil {
3846+
return nil, err
3847+
}
3848+
return &resp, nil
3849+
}
3850+
3851+
type RegistrarAPIListDomainHostsRequest struct {
3852+
Domain string `json:"-"`
3853+
3854+
Page *int32 `json:"-"`
3855+
3856+
PageSize *uint32 `json:"-"`
3857+
}
3858+
3859+
// ListDomainHosts: list domain hostnames with they glue IPs
3860+
func (s *RegistrarAPI) ListDomainHosts(req *RegistrarAPIListDomainHostsRequest, opts ...scw.RequestOption) (*ListDomainHostsResponse, error) {
3861+
var err error
3862+
3863+
defaultPageSize, exist := s.client.GetDefaultPageSize()
3864+
if (req.PageSize == nil || *req.PageSize == 0) && exist {
3865+
req.PageSize = &defaultPageSize
3866+
}
3867+
3868+
query := url.Values{}
3869+
parameter.AddToQuery(query, "page", req.Page)
3870+
parameter.AddToQuery(query, "page_size", req.PageSize)
3871+
3872+
if fmt.Sprint(req.Domain) == "" {
3873+
return nil, errors.New("field Domain cannot be empty in request")
3874+
}
3875+
3876+
scwReq := &scw.ScalewayRequest{
3877+
Method: "GET",
3878+
Path: "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/hosts",
3879+
Query: query,
3880+
Headers: http.Header{},
3881+
}
3882+
3883+
var resp ListDomainHostsResponse
3884+
3885+
err = s.client.Do(scwReq, &resp, opts...)
3886+
if err != nil {
3887+
return nil, err
3888+
}
3889+
return &resp, nil
3890+
}
3891+
3892+
type RegistrarAPIUpdateDomainHostRequest struct {
3893+
Domain string `json:"-"`
3894+
3895+
Name string `json:"-"`
3896+
3897+
IPs *[]string `json:"ips"`
3898+
}
3899+
3900+
// UpdateDomainHost: update domain hostname with glue IPs
3901+
func (s *RegistrarAPI) UpdateDomainHost(req *RegistrarAPIUpdateDomainHostRequest, opts ...scw.RequestOption) (*Host, error) {
3902+
var err error
3903+
3904+
if fmt.Sprint(req.Domain) == "" {
3905+
return nil, errors.New("field Domain cannot be empty in request")
3906+
}
3907+
3908+
if fmt.Sprint(req.Name) == "" {
3909+
return nil, errors.New("field Name cannot be empty in request")
3910+
}
3911+
3912+
scwReq := &scw.ScalewayRequest{
3913+
Method: "PATCH",
3914+
Path: "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/hosts/" + fmt.Sprint(req.Name) + "",
3915+
Headers: http.Header{},
3916+
}
3917+
3918+
err = scwReq.SetBody(req)
3919+
if err != nil {
3920+
return nil, err
3921+
}
3922+
3923+
var resp Host
3924+
3925+
err = s.client.Do(scwReq, &resp, opts...)
3926+
if err != nil {
3927+
return nil, err
3928+
}
3929+
return &resp, nil
3930+
}
3931+
3932+
type RegistrarAPIDeleteDomainHostRequest struct {
3933+
Domain string `json:"-"`
3934+
3935+
Name string `json:"-"`
3936+
}
3937+
3938+
// DeleteDomainHost: delete domain hostname
3939+
func (s *RegistrarAPI) DeleteDomainHost(req *RegistrarAPIDeleteDomainHostRequest, opts ...scw.RequestOption) (*Host, error) {
3940+
var err error
3941+
3942+
if fmt.Sprint(req.Domain) == "" {
3943+
return nil, errors.New("field Domain cannot be empty in request")
3944+
}
3945+
3946+
if fmt.Sprint(req.Name) == "" {
3947+
return nil, errors.New("field Name cannot be empty in request")
3948+
}
3949+
3950+
scwReq := &scw.ScalewayRequest{
3951+
Method: "DELETE",
3952+
Path: "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/hosts/" + fmt.Sprint(req.Name) + "",
3953+
Headers: http.Header{},
3954+
}
3955+
3956+
var resp Host
3957+
3958+
err = s.client.Do(scwReq, &resp, opts...)
3959+
if err != nil {
3960+
return nil, err
3961+
}
3962+
return &resp, nil
3963+
}
3964+
37543965
// UnsafeGetTotalCount should not be used
37553966
// Internal usage only
37563967
func (r *ListDNSZonesResponse) UnsafeGetTotalCount() uint32 {
@@ -3921,3 +4132,22 @@ func (r *ListRenewableDomainsResponse) UnsafeAppend(res interface{}) (uint32, er
39214132
r.TotalCount += uint32(len(results.Domains))
39224133
return uint32(len(results.Domains)), nil
39234134
}
4135+
4136+
// UnsafeGetTotalCount should not be used
4137+
// Internal usage only
4138+
func (r *ListDomainHostsResponse) UnsafeGetTotalCount() uint32 {
4139+
return r.TotalCount
4140+
}
4141+
4142+
// UnsafeAppend should not be used
4143+
// Internal usage only
4144+
func (r *ListDomainHostsResponse) UnsafeAppend(res interface{}) (uint32, error) {
4145+
results, ok := res.(*ListDomainHostsResponse)
4146+
if !ok {
4147+
return 0, errors.New("%T type cannot be appended to type %T", res, r)
4148+
}
4149+
4150+
r.Hosts = append(r.Hosts, results.Hosts...)
4151+
r.TotalCount += uint32(len(results.Hosts))
4152+
return uint32(len(results.Hosts)), nil
4153+
}

0 commit comments

Comments
 (0)