2014-10-16 4 views
0

Ткань имеет настройку hosts, чтобы указать, к каким компьютерам подключается SSH.Как получить доступ к динамическим инвентаризации EC2 с помощью Fabric?

У Amazon Web Services больше динамических ресурсов, которые можно запросить в python с помощью таких инструментов, как boto.

Есть ли способ объединить эти две службы? В идеале я хотел что-то простое, как подход ansible с файлом инвентаризации и с использованием внешнего файла, такого как ec2.py.

В частности, есть ли пребированное решение для этого варианта использования? В идеале я хотел бы запустить что-то простое, как это:

from fabric.api import env, task 
import ec2 
env.roledefs = ec2.Inventory() 

@task 
def command(): 
    run("lsb_release -a") 

И запустить его следующим образом, предполагая, что env.roledefs['nginx'] существует:

$ fab -R nginx command 

ответ

0

От http://docs.python-guide.org/en/latest/scenarios/admin/

Вы можете видеть, что если вы установите env.hosts = ['my_server1', 'my_server2']

Затем вы сможете настроить таргетинг на эти хосты.

С Бото, если вы просто есть функция, которая делает ec2_connection.get_only_instances (фильтр = { «тегов»: < любой>}) и возвращает список их имен DNS, вы сможете затем установить env.hosts = [< Список DNS-имен от ec2>]

Кусок торта!

1

Вы можете использовать ткань и boto одновременно. Сначала вам нужно экспортировать aws_secret_key, aws_secret_access_key и области по умолчанию из консоли. Имя файла Fabric должно быть fabfile.py и не должно быть ec2.py/other.

import boto, urllib2 
from boto.ec2 import connect_to_region 
from fabric.api import env, run, cd, settings, sudo 
from fabric.api import parallel 
import os 
import sys 
REGION  = os.environ.get("AWS_EC2_REGION") 
env.user  = "ec2-user" 
env.key_filename = ["/home/user/uswest.pem"] 
@task 
def command(): 
    run("lsb_release -a") 
def _create_connection(region): 
    print "Connecting to ", region 
    conn = connect_to_region(
     region_name = region, 
     aws_access_key_id=os.environ.get("AWS_ACCESS_KEY_ID"), 
     aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY") 
    ) 
    print "Connection with AWS established" 
    return connection 

Эта программа может быть выполнена с использованием следующей команды.

$ fab command 
+0

Вы получили это от http://abhishek-tiwari.com/hacking/interacting-with-tagged-ec2-instances-using-fabric? Кажется очень полезным, но мне придется поиграть с ним. –

Смежные вопросы