I now have an API that works roughly like this:
#define TOKENTIME 3600 #define PROJECT "mylittleproject" #define ZONE "eu-west1-c"
string jwt_secret = Stdio.File("googleserviceaccount.json", "r").read(); // // This hot-fetches the Google Compute API from the discovery file // provided by Google: // Web.Api.Google.Base api = Web.Api.Google.discover("compute", "v1");
void authenticated() { if (!api->auth->is_authenticated() || api->auth->expires->unix_time() - time(1) < TOKENTIME / 2) api->auth->get_token_from_jwt(jwt_secret); }
int main(int argc, array(string) argv) { api->auth->set_scope(api->valid_scopes[1]); authenticated(); // Lists all compute engine instances in this project/zone write("%O\n", api->resrc->instances->list( ([ "project":PROJECT, "zone":ZONE ]) )); return 0; }
Suggestions? Complaints? Wishes?