@@ -28,8 +28,9 @@ import (
2828
2929// Default values
3030var (
31- ComputeAPI string = "https://api.scaleway.com/"
32- AccountAPI string = "https://account.scaleway.com/"
31+ ComputeAPI string = "https://api.scaleway.com/"
32+ AccountAPI string = "https://account.scaleway.com/"
33+ MetadataAPI string = "http://169.254.42.42/"
3334)
3435
3536// ScalewayAPI is the interface used to communicate with the Scaleway API
@@ -55,8 +56,9 @@ type ScalewayAPI struct {
5556 // Cache is used to quickly resolve identifiers from names
5657 Cache * ScalewayCache
5758
58- client * http.Client
59- anonuuid anonuuid.AnonUUID
59+ client * http.Client
60+ anonuuid anonuuid.AnonUUID
61+ isMetadata bool
6062}
6163
6264// ScalewayAPIError represents a Scaleway API Error
@@ -1355,7 +1357,14 @@ type ScalewayUserdatas struct {
13551357
13561358// GetUserdatas gets list of userdata for a server
13571359func (s * ScalewayAPI ) GetUserdatas (serverID string ) (* ScalewayUserdatas , error ) {
1358- resp , err := s .GetResponse ("servers/" + serverID + "/user_data" )
1360+ var url string
1361+ if s .isMetadata {
1362+ url = "/user_data"
1363+ } else {
1364+ url = fmt .Sprintf ("servers/%s/user_data" , serverID )
1365+ }
1366+
1367+ resp , err := s .GetResponse (url )
13591368 if err != nil {
13601369 return nil , err
13611370 }
@@ -1381,7 +1390,14 @@ func (s *ScalewayAPI) GetUserdata(serverID string, key string) (*ScalewayUserdat
13811390 var data ScalewayUserdata
13821391 var err error
13831392
1384- resp , err := s .GetResponse ("servers/" + serverID + "/user_data/" + key )
1393+ var url string
1394+ if s .isMetadata {
1395+ url = fmt .Sprintf ("/user_data/%s" , key )
1396+ } else {
1397+ url = fmt .Sprintf ("servers/%s/user_data/%s" , serverID , key )
1398+ }
1399+
1400+ resp , err := s .GetResponse (url )
13851401 if err != nil {
13861402 return nil , err
13871403 }
@@ -1397,7 +1413,13 @@ func (s *ScalewayAPI) GetUserdata(serverID string, key string) (*ScalewayUserdat
13971413
13981414// PatchUserdata sets a user data
13991415func (s * ScalewayAPI ) PatchUserdata (serverID string , key string , value []byte ) error {
1400- resource := fmt .Sprintf ("servers/%s/user_data/%s" , serverID , key )
1416+ var resource string
1417+ if s .isMetadata {
1418+ resource = fmt .Sprintf ("/user_data/%s" , key )
1419+ } else {
1420+ resource = fmt .Sprintf ("servers/%s/user_data/%s" , serverID , key )
1421+ }
1422+
14011423 uri := fmt .Sprintf ("%s/%s" , strings .TrimRight (s .APIUrl , "/" ), resource )
14021424 payload := new (bytes.Buffer )
14031425 payload .Write (value )
@@ -1432,7 +1454,14 @@ func (s *ScalewayAPI) PatchUserdata(serverID string, key string, value []byte) e
14321454
14331455// DeleteUserdata deletes a server user_data
14341456func (s * ScalewayAPI ) DeleteUserdata (serverID string , key string ) error {
1435- resp , err := s .DeleteResponse (fmt .Sprintf ("servers/%s/user_data/%s" , serverID , key ))
1457+ var url string
1458+ if s .isMetadata {
1459+ url = fmt .Sprintf ("/user_data/%s" , key )
1460+ } else {
1461+ url = fmt .Sprintf ("servers/%s/user_data/%s" , serverID , key )
1462+ }
1463+
1464+ resp , err := s .DeleteResponse (url )
14361465 if err != nil {
14371466 return err
14381467 }
@@ -1687,6 +1716,18 @@ func (s *ScalewayAPI) DisableAccountAPI() {
16871716 s .APIUrl = s .ComputeAPI
16881717}
16891718
1719+ // EnableMetadataAPI enable metadataAPI
1720+ func (s * ScalewayAPI ) EnableMetadataAPI () {
1721+ s .APIUrl = MetadataAPI
1722+ s .isMetadata = true
1723+ }
1724+
1725+ // DisableMetadataAPI disable metadataAPI
1726+ func (s * ScalewayAPI ) DisableMetadataAPI () {
1727+ s .APIUrl = s .ComputeAPI
1728+ s .isMetadata = false
1729+ }
1730+
16901731// SetPassword register the password
16911732func (s * ScalewayAPI ) SetPassword (password string ) {
16921733 s .password = password
0 commit comments