私はAMI作成を自動化するプロジェクトに取り組んでいます。 要件:AMIは 3.ブレーク我々が再起動したくないAMIの作成が失敗した場合、ループや成功 4.を繰り返し、すべてのインスタンスブレークwhileループifth条件付き
するための手順を作成するまで1. AMIに 2.待機を作成しますAMIを作成するときのインスタンスです。
問題:if条件にbreakステートメントを追加すると、スクリプトが内部whileループを終了しません。誰かがコードを修正するのを助けてくれますか?
#!/usr/bin/env python
import sys
import boto
import boto.ec2
import datetime
import time
list_1 = ['instance1','instance2']
conn = boto.ec2.connect_to_region('us-west-1',aws_access_key_id = '<access_key>',aws_secret_access_key = '<secret_key>')
def create_img(a, b):
try:
print "Starting AMI creation for : %s" % inst.tags['Name']
img_id = conn.create_image(a, b, description='backup', no_reboot=True, dry_run=False)
except boto.exception.BotoServerError, e:
print e.error_message
return(img_id)
reservations = conn.get_all_instances()
for res in reservations:
for inst in res.instances:
if 'Name' in inst.tags and inst.tags['Name'] in list_1:
print "%s (%s) [%s]" % (inst.tags['Name'], inst.id, inst.state)
name = inst.tags['Name'] + '-' + datetime.datetime.now().strftime("%Y%m%d%H%M")
ami_id = create_img(inst.id, name)
img = conn.get_all_images(filters={'image_id' : ami_id})[0]
if img.state == 'failed':
print "AMI creation failed for instance: %s" % inst.tags['Name']
elif img.state == 'pending':
while True:
if img.state == 'failed':
print "AMI creation failed for instance: %s" % inst.tags['Name']
break
elif img.state == 'available':
print "AMI creation completed for instance: %s" % inst.tags['Name']
break
else:
time.sleep(60)
elif img.state == 'available':
print "AMI creation completed for instance: %s" % inst.tags['Name']
else:
print "Couldn't find the AMI"
印刷は何ですか? – stark
AMIが作成されましたが、ループは終了せず、次のインスタンスには移動しませんでした。 出力 - > instance1(i-xxxxx)[実行中] インスタンス1のAMI作成の開始 – user6136315