Динамическая инвентаризация сценариев экземпляров EC2 с именем тега Ansible на основе его значений - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь написать пример кода 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 экземплярах. Мой вывод должен быть как дБ [172.31.24.232,172.31.21.244] приложение [172.31.30.42,172.31.26.116]

1 Ответ

0 голосов
/ 06 апреля 2019
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...