0

Fabric には、SSH 接続先のコンピューターを指定するホスト設定があります。

アマゾン ウェブ サービスには、 botoなどのツールを使用して Python でクエリできる動的なインベントリが多くあります。

これら 2 つのサービスを組み合わせる方法はありますか? 理想的には、在庫ファイルとec2.pyのような外部ファイルを使用したansibleのアプローチと同じくらい単純なものが欲しかったのです。

より具体的には、このユースケース用の事前に作成されたソリューションはありますか? 理想的には、次のような簡単なものを実行したいと思います。

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
4

2 に答える 2

1

fabric と boto を同時に使用できます。まず、コンソールから aws_secret_key、aws_secret_access_key、およびデフォルトのリージョンをエクスポートする必要があります。ファブリック ファイル名は 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
于 2015-07-27T11:49:53.003 に答える