2017-04-17 136 views
0

我有這個python腳本,下面列出了AWS EC2實例的實例ID,狀態和類型 。這工作正常,你可以看到下面。Flask Jinja2 for循環

[[email protected] ec2]# cat ec2.py 
#!/usr/bin/env python 

import boto3 

ec2client = boto3.client('ec2') 
response = ec2client.describe_instances() 

for reservation in response["Reservations"]: 
     for instance in reservation["Instances"]: 
       print "{0}\t{1}\t{2}".format(instance["InstanceId"], 
instance["State"]["Name"], instance["InstanceType"]) 

[[email protected] ec2]# ./ec2.py 
i-xxxxxxxxxxxxxxxxx  stopped t2.small 
i-yyyyyyyyyyyyyyyyy  running t2.medium 
i-zzzzzzzzzzzzzzzzz  stopped t2.medium 
i-bbbbbbbbbbbbbbbbb  stopped t2.small 
i-ccccccccccccccccc  running t2.medium 

現在我試圖在使用Flask的網頁上顯示上面的輸出。但我是 得到錯誤說「」「 文件」/flask/ec2/app.py「,第15行,在list_instances instances = reservations [」實例「] TypeError:列表索引必須是整數,而不是str 」 「」

這是我做的到現在

[[email protected] ec2]# cat app.py 
import boto3 
from flask import Flask, render_template 

app = Flask(__name__) 


ec2client = boto3.client('ec2') 
response = ec2client.describe_instances() 

@app.route("/") 
def list_instances(): 
     reservations = response["Reservations"] 
     instances = reservations["Instances"] 
     return render_template("ec2.html", instances=instances) 

if __name__ == '__main__': 
    app.run(port=5000, debug=True, host="0.0.0.0") 

[[email protected] ec2]# cat templates/ec2.html 
<html> 
<head> 
     <title>EC2 List</title> 
</head> 

<body> 
<h1>EC2 List</h1> 
{% for instance in instances %} 
<p>{{ instance }}</p> 
{% endfor %} 
</body> 
</html> 

有人可以幫我解決這個錯誤,並得到所需要的輸出?

回答

1

在您的示例中reservations是一個列表,因此您應該在嘗試訪問reservation['Instances']之前使用for reservation in reservations對它進行迭代。

+0

現在感謝它的工作。我在 app.py中使用了'instances = response [「Reservations」]',然後循環到我的html中的實例。 – user3847894