#python #boto3
#python #boto3
Вопрос:
Я пытаюсь написать пример кода на python, используя функцию Boto3, для проверки экземпляров Ec2 с именем тега ‘Ansible’ и его значением ‘DB’ или ‘APP’, он должен возвращать соответствующие частные IP-адреса значений этих тегов.
попытался изменить фильтр, добавив [] . В коде, который я нашел в ссылках youtube, нет [], даже после их добавления я получаю эту ошибку.
#!/bin/python
import boto3
import json
def get_hosts(ec2,fv):
f=[{'Name':'tag:Ansible','values':[fv]}]
hosts=[]
for each_in in ec2.instances.filter(Filters=[f]):
print each_in.private_ip_address
hosts.append(each_in.private_ip_address)
return hosts
def main():
ec2=boto3.resource("ec2")
db_group = get_hosts(ec2,"db")
app_group = get_hosts(ec2,"app")
if __name__ =="__main__":
main()
Например, у меня есть 4 экземпляра с именем тега Ansible, которые имеют значения типа ‘db’ в виде 2 экземпляров и ‘app’ еще в виде 2 экземпляров.
Мой вывод должен быть следующим
db [172.31.24.232,172.31.21.244]
приложение [172.31.30.42,172.31.26.116]
Ответ №1:
Below is the correct code and usage of filters.
#!/bin/python
import boto3
import json
def get_hosts(ec2,fv):
#f=[{'Name':'tag:Ansible','values':[fv]}]
hosts = []
#for each_in in ec2.instances.filter[Filters=[f]]:
#for each_in in ec2.describe_instances(Filters=[{'Name':'tag:Ansible','Values':[fv]}]):
instances = ec2.instances.filter(Filters=[{'Name': 'tag:Ansible', 'Values': [fv]}])
for instance in instances:
#print instance.private_ip_address
hosts.append(instance.private_ip_address)
return hosts
def main():
ec2=boto3.resource("ec2")
db_group = get_hosts(ec2,"db")
app_group = get_hosts(ec2,"app")
print "db :", db_group
print "app :",app_group
if __name__ =="__main__":
main()