운영 관리자 Fabric 사용 방법

8532 단어 Fabric
Fabric 의 설치
Fabric 지원 pip,easy설치 또는 소스 코드 방식 으로 설치 하여 가방 의존 문 제 를 해결 하기 편리 합 니 다.(사용자 환경 에 따라 자체 적 으로 pip 또는 ease 를 선택 합 니 다.install)
pip install fabric
easy_install fabric
소스 코드 설 치 는 소개 하지 않 겠 습 니 다.
설치 결 과 를 검사 합 니 다.가 져 오기 모듈 에 이상 이 없 으 면 설치 성공 을 설명 합 니 다.
root@Python_S6:~# python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import fabric
>>>
홈 페이지 는 간단 한 입문 예 시 를 제공 했다.

root@Python_S6:/home/chart7/test/fabric# cat farbic.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import run
 
def host_type(): #        ,  run        'uname -s'  
  run('uname -s')
다음 그림 에서 보 듯 이 실행 결과
wKioL1R32_KhwHwaAAK-ROg7uYQ972.jpg
명령 은 기본 파일 이름 인 fabfile.py 를 참조 합 니 다.기본 파일 이름 이 아 닌 경우'-f'를 통 해 작성 해 야 합 니 다.예 를 들 어 fab-H 192.168.1.23,192.168.1.24-f hosttype.py host_type,관리자 와 대상 호스트 가 키 인증 신뢰 를 설정 하지 않 으 면 대상 호스트 에 해당 하 는 계 정 로그 인 암 호 를 입력 하 는 것 을 알려 줍 니 다.
1.fab 의 상용 매개 변수
fab 는 Fabric 프로그램의 명령 입구 로 서 다양한 매개 변수 호출 을 제공 합 니 다.명령 형식 은 다음 과 같 습 니 다.
fab [options] [:arg1,arg2=val2,host=foo,hosts='h1;h2',....]
다음은 자주 사용 하 는 매개 변 수 를 열거 하 였 으 며,더 많은 매개 변 수 는 fab-help 로 볼 수 있 습 니 다.
-l,정 의 된 작업 함수 이름 표시 하기;
-f,fab 입구 파일 을 지정 합 니 다.기본 입구 파일 이름 은 fabfile.py 입 니 다.
-g,게 이 트 웨 이 설 비 를 지정 합 니 다.예 를 들 어 보루 기 환경,보루 기 IP 를 입력 하면 됩 니 다.
-H,대상 호스트 를 지정 합 니 다.여러 대의 호스트 용','번호 구분';
-P,여러 호스트 작업 을 비동기 병렬 로 실행 합 니 다.기본적으로 직렬 로 실행 합 니 다.
-R,역할(역할)을 지정 하고 역할 명 으로 서로 다른 업무 팀 장 치 를 구분한다.
-t,장치 연결 시간 초과 설정;
-T,원 격 호스트 명령 실행 시간 초과 설정;
-w,명령 이 실 패 했 을 때 기본 종료 가 아 닌 경 고 를 보 냅 니 다.
2.fabfile 의 작성
fab 명령 은 우리 가 작성 한 fabfile.py(다른 파일 이름 은-f filename 참조 추가)와 결합 하여 사용 할 수 있 습 니 다.일부 명령 행 인 자 는 해당 하 는 방법 으로 대체 하여 더욱 유연 하 게 할 수 있 습 니 다.예 를 들 어"-H 192.168.1.23,192.168.1.24"와 같 습 니 다.우 리 는 env.hosts 를 정의 하여 실현 할 수 있 습 니 다.예 를 들 어"env.hosts=[192.168.1.23"와 같 습 니 다.192.168.1.24]"fabfile 의 주 체 는 여러 개의 사용자 정의 작업 함수 로 구성 되 어 있 으 며,서로 다른 작업 함수 가 서로 다른 조작 논 리 를 실현 하고 있 습 니 다.아래 에 상세 하 게 소개 합 니 다.
3.전역 속성 설정
env 대상 의 역할 은 fabfile 의 전역 설정 을 정의 하고 여러 속성 을 지원 하 는 것 입 니 다.대상 호스트,사용자,암호 역할 을 포함 하고 각 속성 은 다음 과 같 습 니 다.

env.host, , IP , Python , env.hosts=['192.168.1.23,192.168.1.24'].
env.exculde_hosts, , env.exclude_hosts=['192.168.1.23']
env.user, , env.user="root"
env.port, , env.port = '22'
env.password, , env.password='123456'
env.passwords, password , , , passwords , , , :env.passwords = {'[email protected]:22':'123456',
'[email protected]:22':'3234234',
'[email protected]:23':'09887',
}
env.gateway, ( , )IP, env.gateway = '192.168.1.1'
env.roledefs, , web db , :
env.roledefs = {
'webservers':['192.168.1.21','192.168.1.22','192.168.1.23'],
'dbservers':['192.168.1.24','192.168.1.25'],
}
인용 할 때 python 수정자 형식 으로 진행 합 니 다.캐릭터 수정자 아래 의 작업 함 수 는 그 역할 영역 입 니 다.다음은 예제 입 니 다.

@roles('webservers')
def webtask():
  run('/etc/init.d/nginx start')
@roles('dbservers'):
def dbtask():
  run('/etc/init.d/mysql start')
@roles('webservers','dbservers')
def publictask():
  run('uptime')
def deploy():
  execute(webtask)
  execute(dbtask)
  execute(publictask)
명령 에서 fab deploy 를 실행 하면 서로 다른 캐릭터 가 서로 다른 작업 함 수 를 수행 할 수 있 습 니 다.
상용 API
Fabric 은 간단 하지만 기능 이 강 한 fabric.api 명령 집합 을 제공 합 니 다.이렇게 API 를 간단하게 호출 하면 대부분의 응용 장면 수 요 를 완성 할 수 있 습 니 다.Fabric 은 자주 사용 하 는 방법 과 설명 을 다음 과 같이 지원 합 니 다.

local, , local:('uname -s');
lcd, , lcd:('/home');
cd, , cd:('/data/logs/');
run, , :run('free -m')
sudo,sudo , :sudo('/etc/init.d/httpd start');
put, , :put('/home/user.info','/data/user.info');
get, , :get('/home/user.info','/data/user.info');
prompt, , :prompt('please input user password:');
confirm, , :confirm('Test failed,Continue[Y/N]');
reboot, , reboot();
@task, , fab , fab , ;
@runs_once, , , ;
예시 1:로 컬 과 원 격 호스트 정보 보기
이 예제 에 서 는 로 컬()방법 으로 로 컬 명령 을 실행 하고"@runs"를 추가 합 니 다.once"수식 은 이 작업 함수 가 한 번 만 실 행 될 수 있 도록 보장 합 니 다.run()방법 으로 원 격 명령 을 실행 합 니 다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.43','192.168.1.23','192.168.1.24']
env.port = '22'
env.password = '123456'
 
@runs_once #        ,            
def local_task(): #      
  local('uname -a')
 
def remote_task():
  with cd('/data'): #with                   ,  cd /var && ls -l   
    run('ls -l')
fab 명령 을 통 해 각각 local 호출task 작업 함수 실행 효 과 는 다음 그림 과 같 습 니 다.
wKioL1R38guSh6BDAAGJEj-QZ_w798.jpg
결과[192.168.1.23]Executing task'localtask',그러나 사실상 호스트 192.168.1.23 에서 작업 을 수행 하 는 것 이 아니 라 Fabric 호스트 로 컬'uname-a'의 실행 효 과 를 되 돌려 줍 니 다.
remtoe 호출task 작업 함수 의 실행 결 과 는 다음 그림 과 같다.
wKioL1R38lzBIxVoAALuZIpWH6A197.jpg
예시 2;원 격 디 렉 터 리 목록 동적 가 져 오기
이 예제 에 서 는"@task"수정자 표지 입구 함수 go()를 사용 하여 외부 에"@runs"와 결합 할 수 있 습 니 다.once"부 호 는 사용자 의 입력 을 받 아들 이 기 를 기다 리 고 마지막 으로 worktask()작업 함 수 를 호출 하여 원 격 명령 을 실행 합 니 다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.23','192.168.1.24']
env.password = '123456'
@runs_once #        ,         
def input_raw():
  return prompt("please input direcotry name:",default="/home")
 
 
def worktask(dirname):
  run("ls -l %s" %dirname)
 
@task
def go():
  getdirname = input_raw()
  worktask(getdirname)
이 예제 에 서 는 원 격 디 렉 터 리 이름 을 동적 으로 입력 하여 디 렉 터 리 목록 을 가 져 오 는 기능 을 실현 합 니 다.한 번 만 입력 하고 모든 호스트 에 있 는 디 렉 터 리 의 목록 정 보 를 표시 하기 때문에 키 함수 input 을 호출 하 였 습 니 다.raw(동시 설정)@runsonce 수정자 가 이 목적 을 달성 하면 다음 그림 과 같이 실 행 됩 니 다.
wKiom1R4C2-hQWSdAAMmREL62Zo996.jpg
파일 업로드 및 실행

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.hosts=['192.168.1.23','192.168.1.24']
#            ,    env.passwords        
env.passwords = {
  '[email protected]:22': '123456',
  '[email protected]:22': '123456',
}
 
lpackpath="/home/a.tar.gz"
rpackpath="/tmp/install"
 
@task
def put_task():
  run("mkdir -p /tmp/install")
  with settings(warn_only=True):
    result = put(lpackpath, rpackpath)
  if result.failed and not confirm("put file failed, Continue[Y/N]?"):
    abort("Aborting file put task!")
 
@task
def run_task():
  with cd("/tmp/install"):
    run("tar -zxvf a.tar.gz")
 
@task
def go():
  put_task()
  run_task()

좋은 웹페이지 즐겨찾기