|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
28-08-2015, 03:56 PM | #1 |
Guest
Trả Lời: n/a
|
Fabric – Giúp Sys admin quản lý hệ thống một cách dễ dàng.
Fabric – Giúp Sys admin quản lý hệ thống một cách dễ dàng.
Tham khảo: http://azsysadmin.com/fabric-giup-sys-admin-quan-ly-thong-mot-cach-de-dang/ Làm thế nào các bạn có thể tự động hóa công việc của mình giúp các bạn có nhiều thời gian để làm việc khác hay nghiên cứu tìm hiểu những công nghệ mới. Tôi sẽ giới thiệu cho các bạn một công cụ, nói đúng hơn đó là một thư viện python giúp các bạn có thể thực thi script và quản lý các server một cách dễ dàng nhất. Vì sao nó lại cần trong khi ở ngoài kia có hàng tá những công cụ quản lý như ansible, puppet , chef … 1. Đơn giản, nếu bạn cần một cái gì đó nhanh gọn lẹ, thì đây là sự lựa chọn tốt nhất. 2. Nếu các bạn thích tự làm ra những script quản lý, thích tự mình làm ra một thứ gì đó mà không sử dụng của những người khác thì đây là một thư viện để các bạn dùng để thực hiện. Tôi thường dùng fabric để chạy command bash shell. Và thêm một câu hỏi nữa Tại sao không dùng bash shell để chạy ssh mà dùng fabric làm gì ? Câu trả lời đối với tôi: – Out put nó rõ ràng hơn, đẹp hơn. – Thích code python hơn bash shell. Fabric còn những cái hay ho khác, chạy song song các task với nhau. Phân chia role cho từng server … Thật ra thì bash shell có thể làm được, nhưng bạn phải xử lý rất nhiều. Vấn đề sử dụng gì không quan trọng vấn đề các bạn có thể làm cho nhanh gọn lẹ là được. Với tôi thì thì chọn Fabric. Install Fabric: Để install fabric thì yêu cầu Python từ version 2.5 trở lên: 1. Upgrade Python wget http://www.python.org/ftp/python/2.7...-2.7.3.tar.bz2 tar xf Python-2.7.3.tar.bz2 cd Python-2.7.3 ./configure --prefix=/usr/local make && make altinstall 1 2 3 4 5 wget http://www.python.org/ftp/python/2.7...-2.7.3.tar.bz2 tar xf Python-2.7.3.tar.bz2 cd Python-2.7.3 ./configure --prefix=/usr/local make && make altinstall Lưu ý: Check python đang sử dụng version nào python -V Nếu vẫn sử dụng tạo soft link: python -> /usr/local/bin/python2.7 2. setuptools-0.6c11.tar.gz tar fx setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py install 1 2 3 tar fx setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py install 3. paramiko-1.9.0 tar fx paramiko-1.9.0.tar.gz cd paramiko-1.9.0 python setup.py install 1 2 3 tar fx paramiko-1.9.0.tar.gz cd paramiko-1.9.0 python setup.py install 4. pycrypto-2.6.tar.gz tar fx pycrypto-2.6.tar.gz cd pycrypto-2.6 python setup.py install 1 2 3 tar fx pycrypto-2.6.tar.gz cd pycrypto-2.6 python setup.py install 5. fabric-master.tar.gz tar fx fabric-master.tar.gz cd fabric-master python setup.py install 1 2 3 tar fx fabric-master.tar.gz cd fabric-master python setup.py install Vậy là xong rồi: Để sử dụng fabric các bạn phải làm như sau: Tạo một file gọi là fabfile.py . Đây là file mặc định của fabric. Và nó sẽ tìm trong thư mục hiện tại của bạn mà bạn định type fab. Nếu các bạn muốn chạy một file fabfile.py ở một nơi nào đó thì các bạn phải dùng -f. Ví dụ: fab -f /usr/script/fabfile.py host_type Để sử dụng thư viện thì bạn phải import thư viện fabric vào: from fabric.api import * Mọi thứ, cho nó tiện. Nhưng vấn đề gặp phải sẽ mất thời gian import. Nhưng mình nghĩ với những script đơn giản, thì bạn làm vậy cho nhanh. from fabric.api import run def host_type(): run(‘uname -s’) Ví dụ bây giờ mình muốn run command “uname -s ” trên máy remote host có IP là 10.0.0.10 fab -H 10.0.0.10 host_type 1 fab -H 10.0.0.10 host_type Vậy là done rồi. Quá dễ đúng không. Bây h muốn làm một dãy IP thì làm sao. Thì fabric cho mình một list. env.hosts = []. Các bạn có thể dùng python đọc IP list rồi gán vào trong một cái mảng . Vậy thôi. Một chú ý nữa. Thường thì run command ở chính máy fabric, thì phải dùng key. Bạn có thể dùng local command để run ở máy đang run fabric. Nhưng muốn capture output thì phải dùng thế này. Thêm capture=True vào nữa. version = local(“git -C {0} describe –tags”.format(path),capture=True) Nếu các bạn không muốn tạo bấm lệnh fab mà bằng python. Thì làm như ví dụ bên dưới. Ví dụ: #!/usr/bin/python from fabric.api import * from fabric.tasks import execute # Khai bao mot mang dia chi IP remote host hosts = ['10.10.10.1','10.10.10.2','10.10.10.3','10.10.10.4 '] # Ham read file tren remote host def readfile(): output = run("cat /tmp/test.csv") return output #Remove thong tin tren remote host def remove(arg1,agr2): run("/usr/test.sh %s %s" %(arg1, agr2)) if __name__ == '__main__': # Thu thi task readfile tren 4 con server output = execute(readfile,hosts = hosts) for ip,content in output.iteritems(): if content != '': lines = content.split('\r\n') for line in lines: arr = line.split('\t') arg1 = arr[0] agr2 = arr[1] if ip == '10.10.10.1': #thuc thi task remove tren host 10.10.10.5 execute(remove,arg1,agr2,hosts = ['10.10.10.5']) elif ip == '10.10.10.2': #thuc thi task remove tren host 10.10.10.6 execute(remove,arg1,agr2,hosts = ['10.10.10.6']) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #!/usr/bin/python from fabric.api import * from fabric.tasks import execute # Khai bao mot mang dia chi IP remote host hosts = ['10.10.10.1','10.10.10.2','10.10.10.3','10.10.10.4 '] # Ham read file tren remote host def readfile(): output = run("cat /tmp/test.csv") return output #Remove thong tin tren remote host def remove(arg1,agr2): run("/usr/test.sh %s %s" %(arg1, agr2)) if __name__ == '__main__': # Thu thi task readfile tren 4 con server output = execute(readfile,hosts = hosts) for ip,content in output.iteritems(): if content != '': lines = content.split('\r\n') for line in lines: arr = line.split('\t') arg1 = arr[0] agr2 = arr[1] if ip == '10.10.10.1': #thuc thi task remove tren host 10.10.10.5 execute(remove,arg1,agr2,hosts = ['10.10.10.5']) elif ip == '10.10.10.2': #thuc thi task remove tren host 10.10.10.6 execute(remove,arg1,agr2,hosts = ['10.10.10.6']) |
|
|