2012-12-18 25 views
4

我試圖使用Python的'boto'模塊將卷從一個實例複製到另一個實例。該過程的一部分是識別附加到實例的卷。有幾種方法可以解決這個問題。例如,我可以使用列表理解:我可以通過boto中的instance_id過濾卷嗎?

from boto.ec2 import connect_to_region 
conn = connect_to_region('us-east-1') 
all_volumes = conn.get_all_volumes() 
instance_volumes = [v for v in all_volumes if v.attach_data.instance_id = "<instanceID>"] 

這個工作,並且對我的目的工作足夠好。同樣,我很好奇,如果有一種方法可以使用get_all_volumes()built-in filtering來獲得相同的結果。例如,如果我正在尋找他的「名稱」標籤匹配某種模式的情況下,我可以這樣做:

filters = {'tag:Name': '<name>'} 
reservations = self.conn.get_all_instances(filters=filters) 
instances = [i for r in reservations for i in r.instances] 

get_all_volumes()也有類似的過濾參數,但我不能讓它在boto.ec2.volume.Volume.attach_data.instance_id工作。我是否錯過了某些顯而易見的內容,或者是在不可能的捲上通過instance_id過濾?

回答

11

是的,您可以使用服務器端篩選器將DescribeVolumes的結果限制爲僅附加到特定實例ID的卷。

from boto.ec2 import connect_to_region 
conn = connect_to_region('us-east-1') 

volumes = conn.get_all_volumes(filters={'attachment.instance-id': 'i-11111111'}) 

會將卷限制爲與實例i-11111111相關的卷。您還可以提供實例ID的列表作爲字典中的值。

相關問題