Чтение файла JSON с использованием Python boto3 - PullRequest
0 голосов
/ 22 февраля 2020

Я использую следующий код для создания стека из servicecatalog и помещаю жестко закодированное значение в «provisoningParameters»:

from flask import Flask
import time
import boto3
from flask import Flask
from flask import request
from flask import jsonify, make_response
import requests
import json
import argparse

app = Flask(__name__)

@app.route('/createstack', methods=['POST'])
def post_createstack():
    content = request.get_json(force = True)
    response = createstack(content['ProductId'], content['ProvisionedProductName'], content['JsonFileName'])
    return make_response(str(response), 200)

def cluster(ProductId, ProvisionedProductName):
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        ProvisioningArtifactId = client.list_provisioning_artifacts(ProductId=ProductId)
        ArtifactId = ProvisioningArtifactId['ProvisioningArtifactDetails'][0]['Id']
        response = client.provision_product(ProductId=ProductId, ProvisionedProductName=ProvisionedProductName, ProvisioningArtifactId=ArtifactId, ProvisioningParameters=JsonFileName)
        print(response)
        return response
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        return(error)

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=8080)
curl -X POST -d '{"ProductId": "prod-ua5lk7mbx436q", "ProvisionedProductName": "test-pipeline", "JsonFileName": "devops-pipeline-params.json"}' http://0.0.0.0:8080/createstack

И я получаю ошибку

An error occurred processing this request: Parameter validation failed:
Invalid type for parameter ProvisioningParameters, value: devops-pipeline-params.json, type: <class 'str'>, valid types: <class 'list'>, <class 'tuple'>

Теперь я поместил все эти значения в json файл и сохранил файл в том же месте, где хранился скрипт выше (service.py)

Я сохранил следующую переменную в "devops-pipeline-params. json "

{
        "ParameterValue": "Standard", 
        "ParameterKey": "ServiceProfile"
    }, 
    {
        "ParameterValue": "External",
        "ParameterKey": "BuildLocation"
    },
    {
        "ParameterValue": "Disabled", 
        "ParameterKey": "SoapUIEnabled"
    }, 

1 Ответ

1 голос
/ 22 февраля 2020

Ваше сообщение об ошибке дает вам отличный ключ к ответу: Invalid type for parameter ProvisioningParameters, value: devops-pipeline-params.json, type: <class 'str'>, valid types: <class 'list'>, <class 'tuple'>

Таким образом, допустимыми типами являются <class 'list'>, <class 'tuple'>, что означает, что вы отформатировали devops-pipeline-params.json неверно. Согласно документации вы очень близки, просто разбейте ее на 3 списка, например:

[
    {
        "Value": "Standard",
        "Key": "ServiceProfile"
    }
],
[
    {
        "Value": "External",
        "Key": "BuildLocation"
    }
],
[
    {
        "Value": "Disabled",
        "Key": "SoapUIEnabled"
    },
]
...