Skip to content

Commit b12051d

Browse files
feat(baremetal): add support for settings (#1039)
Co-authored-by: Rémy Léone <[email protected]>
1 parent 919703a commit b12051d

File tree

1 file changed

+208
-0
lines changed

1 file changed

+208
-0
lines changed

api/baremetal/v1/baremetal_sdk.go

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,38 @@ func (enum *ListServersRequestOrderBy) UnmarshalJSON(data []byte) error {
183183
return nil
184184
}
185185

186+
type ListSettingsRequestOrderBy string
187+
188+
const (
189+
// ListSettingsRequestOrderByCreatedAtAsc is [insert doc].
190+
ListSettingsRequestOrderByCreatedAtAsc = ListSettingsRequestOrderBy("created_at_asc")
191+
// ListSettingsRequestOrderByCreatedAtDesc is [insert doc].
192+
ListSettingsRequestOrderByCreatedAtDesc = ListSettingsRequestOrderBy("created_at_desc")
193+
)
194+
195+
func (enum ListSettingsRequestOrderBy) String() string {
196+
if enum == "" {
197+
// return default value if empty
198+
return "created_at_asc"
199+
}
200+
return string(enum)
201+
}
202+
203+
func (enum ListSettingsRequestOrderBy) MarshalJSON() ([]byte, error) {
204+
return []byte(fmt.Sprintf(`"%s"`, enum)), nil
205+
}
206+
207+
func (enum *ListSettingsRequestOrderBy) UnmarshalJSON(data []byte) error {
208+
tmp := ""
209+
210+
if err := json.Unmarshal(data, &tmp); err != nil {
211+
return err
212+
}
213+
214+
*enum = ListSettingsRequestOrderBy(ListSettingsRequestOrderBy(tmp).String())
215+
return nil
216+
}
217+
186218
type OfferStock string
187219

188220
const (
@@ -445,6 +477,38 @@ func (enum *ServerStatus) UnmarshalJSON(data []byte) error {
445477
return nil
446478
}
447479

480+
type SettingType string
481+
482+
const (
483+
// SettingTypeUnknown is [insert doc].
484+
SettingTypeUnknown = SettingType("unknown")
485+
// SettingTypeSMTP is [insert doc].
486+
SettingTypeSMTP = SettingType("smtp")
487+
)
488+
489+
func (enum SettingType) String() string {
490+
if enum == "" {
491+
// return default value if empty
492+
return "unknown"
493+
}
494+
return string(enum)
495+
}
496+
497+
func (enum SettingType) MarshalJSON() ([]byte, error) {
498+
return []byte(fmt.Sprintf(`"%s"`, enum)), nil
499+
}
500+
501+
func (enum *SettingType) UnmarshalJSON(data []byte) error {
502+
tmp := ""
503+
504+
if err := json.Unmarshal(data, &tmp); err != nil {
505+
return err
506+
}
507+
508+
*enum = SettingType(SettingType(tmp).String())
509+
return nil
510+
}
511+
448512
// BMCAccess: bmc access
449513
type BMCAccess struct {
450514
// URL: URL to access to the server console
@@ -559,6 +623,14 @@ type ListServersResponse struct {
559623
Servers []*Server `json:"servers"`
560624
}
561625

626+
// ListSettingsResponse: list settings response
627+
type ListSettingsResponse struct {
628+
// TotalCount: total count of matching sttings
629+
TotalCount uint32 `json:"total_count"`
630+
// Settings: settings that match filters
631+
Settings []*Setting `json:"settings"`
632+
}
633+
562634
// Memory: memory
563635
type Memory struct {
564636
Capacity scw.Size `json:"capacity"`
@@ -770,6 +842,20 @@ type ServerOption struct {
770842
Manageable bool `json:"manageable"`
771843
}
772844

845+
// Setting: setting
846+
type Setting struct {
847+
// ID: ID of the setting
848+
ID string `json:"id"`
849+
// Type: type of the setting
850+
//
851+
// Default value: unknown
852+
Type SettingType `json:"type"`
853+
// ProjectID: ID of the project ID
854+
ProjectID string `json:"project_id"`
855+
// Enabled: the setting is enable or disable
856+
Enabled bool `json:"enabled"`
857+
}
858+
773859
// Service API
774860

775861
type ListServersRequest struct {
@@ -1806,6 +1892,109 @@ func (s *API) ListOptions(req *ListOptionsRequest, opts ...scw.RequestOption) (*
18061892
return &resp, nil
18071893
}
18081894

1895+
type ListSettingsRequest struct {
1896+
Zone scw.Zone `json:"-"`
1897+
// Page: page number
1898+
Page *int32 `json:"-"`
1899+
// PageSize: set the maximum list size
1900+
PageSize *uint32 `json:"-"`
1901+
// OrderBy: order the response
1902+
//
1903+
// Default value: created_at_asc
1904+
OrderBy ListSettingsRequestOrderBy `json:"-"`
1905+
// ProjectID: ID of the project
1906+
ProjectID *string `json:"-"`
1907+
}
1908+
1909+
// ListSettings: list all settings
1910+
//
1911+
// Return all settings for a project ID.
1912+
func (s *API) ListSettings(req *ListSettingsRequest, opts ...scw.RequestOption) (*ListSettingsResponse, error) {
1913+
var err error
1914+
1915+
if req.Zone == "" {
1916+
defaultZone, _ := s.client.GetDefaultZone()
1917+
req.Zone = defaultZone
1918+
}
1919+
1920+
defaultPageSize, exist := s.client.GetDefaultPageSize()
1921+
if (req.PageSize == nil || *req.PageSize == 0) && exist {
1922+
req.PageSize = &defaultPageSize
1923+
}
1924+
1925+
query := url.Values{}
1926+
parameter.AddToQuery(query, "page", req.Page)
1927+
parameter.AddToQuery(query, "page_size", req.PageSize)
1928+
parameter.AddToQuery(query, "order_by", req.OrderBy)
1929+
parameter.AddToQuery(query, "project_id", req.ProjectID)
1930+
1931+
if fmt.Sprint(req.Zone) == "" {
1932+
return nil, errors.New("field Zone cannot be empty in request")
1933+
}
1934+
1935+
scwReq := &scw.ScalewayRequest{
1936+
Method: "GET",
1937+
Path: "/baremetal/v1/zones/" + fmt.Sprint(req.Zone) + "/settings",
1938+
Query: query,
1939+
Headers: http.Header{},
1940+
}
1941+
1942+
var resp ListSettingsResponse
1943+
1944+
err = s.client.Do(scwReq, &resp, opts...)
1945+
if err != nil {
1946+
return nil, err
1947+
}
1948+
return &resp, nil
1949+
}
1950+
1951+
type UpdateSettingRequest struct {
1952+
Zone scw.Zone `json:"-"`
1953+
// SettingID: ID of the setting
1954+
SettingID string `json:"-"`
1955+
// Enabled: enable/Disable the setting
1956+
Enabled *bool `json:"enabled"`
1957+
}
1958+
1959+
// UpdateSetting: update setting
1960+
//
1961+
// Update a setting for a project ID (enable or disable).
1962+
func (s *API) UpdateSetting(req *UpdateSettingRequest, opts ...scw.RequestOption) (*Setting, error) {
1963+
var err error
1964+
1965+
if req.Zone == "" {
1966+
defaultZone, _ := s.client.GetDefaultZone()
1967+
req.Zone = defaultZone
1968+
}
1969+
1970+
if fmt.Sprint(req.Zone) == "" {
1971+
return nil, errors.New("field Zone cannot be empty in request")
1972+
}
1973+
1974+
if fmt.Sprint(req.SettingID) == "" {
1975+
return nil, errors.New("field SettingID cannot be empty in request")
1976+
}
1977+
1978+
scwReq := &scw.ScalewayRequest{
1979+
Method: "PATCH",
1980+
Path: "/baremetal/v1/zones/" + fmt.Sprint(req.Zone) + "/settings/" + fmt.Sprint(req.SettingID) + "",
1981+
Headers: http.Header{},
1982+
}
1983+
1984+
err = scwReq.SetBody(req)
1985+
if err != nil {
1986+
return nil, err
1987+
}
1988+
1989+
var resp Setting
1990+
1991+
err = s.client.Do(scwReq, &resp, opts...)
1992+
if err != nil {
1993+
return nil, err
1994+
}
1995+
return &resp, nil
1996+
}
1997+
18091998
type ListOSRequest struct {
18101999
Zone scw.Zone `json:"-"`
18112000
// Page: page number
@@ -1973,6 +2162,25 @@ func (r *ListOptionsResponse) UnsafeAppend(res interface{}) (uint32, error) {
19732162
return uint32(len(results.Options)), nil
19742163
}
19752164

2165+
// UnsafeGetTotalCount should not be used
2166+
// Internal usage only
2167+
func (r *ListSettingsResponse) UnsafeGetTotalCount() uint32 {
2168+
return r.TotalCount
2169+
}
2170+
2171+
// UnsafeAppend should not be used
2172+
// Internal usage only
2173+
func (r *ListSettingsResponse) UnsafeAppend(res interface{}) (uint32, error) {
2174+
results, ok := res.(*ListSettingsResponse)
2175+
if !ok {
2176+
return 0, errors.New("%T type cannot be appended to type %T", res, r)
2177+
}
2178+
2179+
r.Settings = append(r.Settings, results.Settings...)
2180+
r.TotalCount += uint32(len(results.Settings))
2181+
return uint32(len(results.Settings)), nil
2182+
}
2183+
19762184
// UnsafeGetTotalCount should not be used
19772185
// Internal usage only
19782186
func (r *ListOSResponse) UnsafeGetTotalCount() uint32 {

0 commit comments

Comments
 (0)