2016-06-10 8 views
1

Ich baue eine kleine Flasche App, um automatische Bereitstellung für ein anderes Projekt, an dem ich arbeite, zu behandeln.POST zu google apis compute engine gibt 400

Hierbei wird eine gcloud Firewall-Regel mit googleapis festgelegt.

Ich habe die folgende Dokumentation befolgt.

https://cloud.google.com/compute/docs/reference/latest/firewalls/insert

Wenn ich meinen POST-Aufruf in der folgenden Art und Weise zu machen.

headers = { 
    'Authorization': 'Bearer {}'.format(access_token) 
} 
    name = unique_identifier + "-rule" 
    payload = { 
      "kind": "compute#firewall", 
      "name": name, 
      "sourceRanges": [ 
      "0.0.0.0/0" 
      ], 
      "sourceTags": [ 
      unique_identifier 
      ], 
      "allowed": [ 
       { 
       "IPProtocol": "tcp", 
       "ports": [ 
       port_number 
       ] 
       } 
      ] 
     } 
    data = json.dumps(payload) 
    r = requests.post("https://www.googleapis.com/compute/v1/projects/apollo-rocket-chat/global/firewalls?key={MY_API_KEY}", data=data, headers=headers) 

Dabei sind Portnummer und Unique_identifier Strings. access_token wird unter Verwendung eines Dienstkontos abgerufen, das ich eingerichtet habe. Ich bin zuversichtlich, dass das Token gut ist, da ich mit dem Token einen GET-Aufruf an eine geschützte Ressource durchführen kann.

Ich benutze Python 3.5.

Die Antwort auf diesen POST lautet wie folgt.

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "required", 
    "message": "Required field 'resource' not specified" 
    } 
    ], 
    "code": 400, 
    "message": "Required field 'resource' not specified" 
} 
} 

Die Fehlermeldung behauptet, dass mir ein Feld fehlt, obwohl ich alle erforderlichen Felder, die unter dem folgenden Link angegeben sind, habe.

https://cloud.google.com/compute/docs/reference/latest/firewalls/insert#request-body

Was genau mache ich falsch?

Antwort

0

Ich habe es herausgefunden. Ich entfernte.

data = json.dumps(payload) 

und geändert

r = requests.post("https://www.googleapis.com/compute/v1/projects/apollo-rocket-chat/global/firewalls?key={MY_API_KEY}", data=data, headers=headers) 

zu

r = requests.post("https://www.googleapis.com/compute/v1/projects/apollo-rocket-chat/global/firewalls?key={MY_API_KEY}", json=data, headers=headers) 
Verwandte Themen