2012-07-22 39 views
5

Tôi đang viết một tập lệnh để khởi chạy thử nghiệm tạo tải trên một số máy chủ. Tôi có thể viết một kịch bản bash để bắt đầu nhiều phiên ssh, nhưng tôi đã hy vọng sẽ sử dụng một cái gì đó có cấu trúc hơn. Vì tôi sử dụng Python cho hầu hết các kịch bản của tôi, tôi nghĩ rằng Fabric trông giống như một lựa chọn tốt.Gửi các đối số khác nhau cho các máy chủ khác nhau trong Fabric

Vấn đề duy nhất là tôi cần truyền một lượng nhỏ dữ liệu máy chủ cụ thể với mỗi lệnh (thực sự chỉ là một id hoặc bộ đếm), và tôi muốn chạy chúng song song.

Nói cách khác, tôi muốn thực hiện một việc như sau, trong đó host_num khác (có thể chỉ tăng dần) cho mỗi máy chủ.

@parallel 
def launch(): 
    with cd('/working/dir'): 
     run("./start/script -id=%d", host_num) 

Điều này có thể thực hiện được trong Fabric? Nếu không, có một công cụ khác mà tôi có thể sử dụng để thực hiện điều tương tự không?

Trả lời

3

Bạn có thể kiểm tra đối với người dùng/máy chủ lưu trữ. Mỗi công việc đều biết về môi trường họ đang chạy trong:

env.hosts = ['[email protected]', '[email protected]'] 

@task 
def test(): 
    print '%(user)[email protected]%(host)s' % (env) 

    if env.host == 'host1.com': 
     id = 1 
    elif ... 

    run('echo "%s"' % (id)) 

Hãy thoải mái để viết nó trong cách thanh lịch hơn :) (một đề nghị là từ điển sử dụng tương tự cho trường hợp báo cáo cho việc tra cứu id)

+2

Cảm ơn. Nó quá tệ không có cơ chế tốt hơn - phương pháp này dường như không hoạt động tốt nếu bạn muốn chạy cùng một tập lệnh trên các bộ máy chủ khác nhau. – bsowell

+0

Điều này vẫn chạy song song? Tôi có cùng một thách thức, nhưng tôi có 20 máy chủ, được tách ra tại thời gian chạy (AWS EC2 trường hợp). Vì vậy, tôi không nghĩ rằng khó mã hóa các câu lệnh 'if-then' trước thời hạn sẽ hoạt động. –

2

Nếu bạn muốn một số nội tâm về máy chủ bạn đang chạy bên trong tác vụ, tôi sẽ đề xuất tham chiếu biến env.host. Mỗi công việc đều biết về trạng thái env của nó, mặc dù song song họ không chia sẻ trạng thái này, vì tất cả chúng đều chạy như nhánh. Ngoài ra còn có một số number of other env vars theo ý của bạn.

Các vấn đề liên quan