@@ -7,31 +7,38 @@ import (
77 "fmt"
88 "io"
99 "net/http"
10+
11+ "k8s.io/klog/v2"
1012)
1113
12- const nfsFlagRouteTemplate = "%s/projects/%s/storage/nfs/is-using-nfs"
14+ const (
15+ nfsFlagRouteTemplate = "%s/projects/%s/storage/nfs/is-using-nfs"
16+ vastUseSecondaryClusterFlagRouteTemplate = "%s/projects/%s/storage/nfs/vast-use-secondary-cluster"
17+ DEBUG = 8
18+ )
1319
1420var (
15- errCreateNfsFlagRequest = errors .New ("failed to create NFS flag request" )
16- errGetNfsFlag = errors .New ("failed to get NFS flag" )
17- errReadNfsResponse = errors .New ("failed to read NFS flag response" )
18- errUnmarshalNfsFlag = errors .New ("failed to unmarshal NFS flag response" )
21+ errCreateFlagRequest = errors .New ("failed to create flag request" )
22+ errGetFlag = errors .New ("failed to get flag" )
23+ errReadFlagResponse = errors .New ("failed to read flag response" )
24+ errUnmarshalFlag = errors .New ("failed to unmarshal flag response" )
1925)
2026
2127type NfsFlagResponse struct {
2228 Status bool `json:"status"`
2329}
2430
25- // GetNFSFlag returns true if the project has NFS enabled.
26- func GetNFSFlag (ctx context.Context , crusoeHTTPClient * http.Client , apiEndpoint , projectID string ) (bool , error ) {
27- nfsFlagRoute := fmt .Sprintf (nfsFlagRouteTemplate , apiEndpoint , projectID )
28- req , err := http .NewRequestWithContext (ctx , http .MethodGet , nfsFlagRoute , http .NoBody )
31+ // getFlag is a helper function to fetch a boolean flag from the API.
32+ func getFlag (ctx context.Context , crusoeHTTPClient * http.Client , flagRoute string ) (bool , error ) {
33+ klog .Infof ("Fetching flag from URL: %s" , flagRoute )
34+
35+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , flagRoute , http .NoBody )
2936 if err != nil {
30- return false , fmt .Errorf ("%w: %w" , errCreateNfsFlagRequest , err )
37+ return false , fmt .Errorf ("%w: %w" , errCreateFlagRequest , err )
3138 }
3239 resp , err := crusoeHTTPClient .Do (req )
3340 if err != nil {
34- return false , fmt .Errorf ("%w: %w" , errGetNfsFlag , err )
41+ return false , fmt .Errorf ("%w: %w" , errGetFlag , err )
3542 }
3643
3744 if resp != nil && resp .Body != nil {
@@ -40,15 +47,42 @@ func GetNFSFlag(ctx context.Context, crusoeHTTPClient *http.Client, apiEndpoint,
4047
4148 bodyBytes , err := io .ReadAll (resp .Body )
4249 if err != nil {
43- return false , fmt .Errorf ("%w: %w" , errReadNfsResponse , err )
50+ return false , fmt .Errorf ("%w: %w" , errReadFlagResponse , err )
51+ }
52+
53+ klog .Infof ("Flag API response - Status: %d, Content-Type: %s, Body length: %d bytes" ,
54+ resp .StatusCode , resp .Header .Get ("Content-Type" ), len (bodyBytes ))
55+ klog .V (DEBUG ).Infof ("Flag API raw response body: %q" , string (bodyBytes ))
56+
57+ // Check HTTP status code before unmarshaling
58+ if resp .StatusCode != http .StatusOK {
59+ return false , fmt .Errorf ("%w: HTTP %d: %s" , errGetFlag , resp .StatusCode , string (bodyBytes ))
4460 }
4561
46- var nfsFlag NfsFlagResponse
62+ var flagResponse NfsFlagResponse
4763
48- unmarshalErr := json .Unmarshal (bodyBytes , & nfsFlag )
64+ unmarshalErr := json .Unmarshal (bodyBytes , & flagResponse )
4965 if unmarshalErr != nil {
50- return false , fmt .Errorf ("%w: %w" , errUnmarshalNfsFlag , unmarshalErr )
66+ return false , fmt .Errorf ("%w: %w (response body: %q) " , errUnmarshalFlag , unmarshalErr , string ( bodyBytes ) )
5167 }
5268
53- return nfsFlag .Status , nil
69+ return flagResponse .Status , nil
70+ }
71+
72+ // GetNFSFlag returns true if the project has NFS enabled.
73+ func GetNFSFlag (ctx context.Context , crusoeHTTPClient * http.Client , apiEndpoint , projectID string ) (bool , error ) {
74+ nfsFlagRoute := fmt .Sprintf (nfsFlagRouteTemplate , apiEndpoint , projectID )
75+
76+ return getFlag (ctx , crusoeHTTPClient , nfsFlagRoute )
77+ }
78+
79+ // GetVastUseSecondaryClusterFlag returns true if the project has the vast-use-secondary-cluster flag enabled.
80+ func GetVastUseSecondaryClusterFlag (
81+ ctx context.Context ,
82+ crusoeHTTPClient * http.Client ,
83+ apiEndpoint , projectID string ,
84+ ) (bool , error ) {
85+ flagRoute := fmt .Sprintf (vastUseSecondaryClusterFlagRouteTemplate , apiEndpoint , projectID )
86+
87+ return getFlag (ctx , crusoeHTTPClient , flagRoute )
5488}
0 commit comments