Python

Fabric 如何定義復雜的 env.hosts

  • May 23, 2017

我正在為我的部署工具開發 Fabric,並將命令分發到多個主機上。但我不知道如何在我的 fabfile.py 中定義一個複雜的主機

例如:我有 4 台伺服器。伺服器A,伺服器B,伺服器C,伺服器D

def prod():
   env.hosts = ["serverA', "serverB" ]

def dev():
   env.hosts = ["serverC' "serverD"]

def all():
   prod()
   dev()

我是否可以在所有主機上執行命令而無需再次定義?

EX: fab all {command}

您可以查看為您的環境定義角色

from fabric.api import env, run
from fabric.decorators import task

env.roledefs = {
   'prod': ['ServerA', 'ServerB'],
   'dev': ['ServerC', 'ServerD'],
   'envC': ['ServerE', 'ServerF']
}

env.roledefs['all'] = [h for r in env.roledefs.values() for h in r]


@task
def hostname():
   run('hostname -f')

這意味著您現在必須像這樣發出您的結構呼叫:

fab -R prod hostname
fab -R dev hostname
fab -R all hostname
fab -R dev,envC hostname

引用自:https://serverfault.com/questions/567104