2017-06-06 132 views
0

我正在创建一个基本的应用程序,该应用程序将在GCP项目上运行的实例列表输出到浏览器中,但在返回api调用的结果时遇到了一些问题在浏览器内部。将Google Cloud Platform API集成到Flask应用程序

我的瓶的应用程序看起来是这样的:

@app.route(API_ROOT + 'list') 
def list_all_running(): 
    return test_list.list_all_running_instances() 

,我试图返回看起来像这样

def list_all_running_instances(): 

    request = service.instances().list(project=project, zone='europe-west1-d') 
    while request is not None: 
     response = request.execute() 
     for instance in response['items']: 
      # if instance['status'] == 'RUNNING': 
      return instance 
     request = service.instances().list_next(previous_request=request, previous_response=response) 

这是this script缩短和改编版本下“列出的功能python'在页面底部的例子中。

问题是当我在flask中调用函数时,它只返回第一个实例运行。在原始的gcp api脚本示例中,它使用pprint而不是返回,这在控制台上可以正常工作,但我无法将pprint结果输出到浏览器。

任何人都可以推荐这样做的最佳方式?有没有一种方法可以通过Flask将pprint输出到浏览器中。我意识到,返回时它只会输出第一次迭代的结果,然后停止,因此这个问题。

正如你可以告诉我在Flask的相当新颖,所以如果这似乎是一个愚蠢的问题,很抱歉。

回答

0

问题是return声明完成list_all_running_instances函数的执行。你可以这样做:

def list_all_running_instances(): 

    request = service.instances().list(project=project, zone='europe-west1-d') 
    all_instances = [] 
    while request is not None: 
     response = request.execute() 
     all_instances.extend(response['items']) 
     request = service.instances().list_next(previous_request=request, previous_response=response) 
    return {'all_instances': all_instances} 
+0

伟大的东西,似乎做我需要它做的事情。谢谢! –

相关问题