1.x에서 업그레이드¶
현대 아키텍처(2+)는 소프트웨어의 재구현 및 재구성을 거의 나타냅니다.꽤 오랜 시간이 흘렀습니다. broken in two , 청소, 더 명확함, 등등.경우에 따라 업그레이드에는 기본적인 검색과 교체만 필요하고, 다른 경우에는 더 많은 작업이 필요합니다.
이 문서를 주의 깊게 읽으면 완전히 업그레이드될 때까지 올바른 방향으로 안내됩니다.Fabric 1에 사용된 기능이 여기에 나열되지 않은 경우 딱지를 제출하십시오. on Github 우리는 가능한 한 빨리 업데이트 할 것이다.
경고
2.0 출시선부터 Fabric 2 예 not 100% 기능으로 1.x와 편승!일부 기능은 이미 명시적으로 삭제되었지만, 다른 기능이 아직 마이그레이션되지 않은 것은 시간 제한 때문이거나 이러한 기능을 현대 환경에서 재점검해야 하기 때문입니다.
다음 정보를 확인하십시오. 업그레이드 세부 정보 오류 보고서를 제출하기 전에 매우 상세한 목록을 포함하는 부분!
또한 참조 the roadmap 버전 관리 릴리스에 대한 추가 지침입니다.
업그레이드해야 하는 이유¶
우리는 고객의 업그레이드를 가치 있게 만들 수 있는 현대적인 원단의 몇 가지 구체적인 개선 사항을 강조합니다.
주석
이것들도 모두 문서의 나머지 부분에 나와 있으므로, 이미 팔았으면 그곳을 건너뜁니다.
Python3 호환(구체적으로 현재 2.7과 3.4+ 지원);
스레드 보안 - 동시성을 위해 더 이상 멀티 프로세싱이 필요하지 않습니다.
API는 다음과 같은 측면을 중심으로 재구성되었습니다.
fabric.connection.Connection
전역 모듈 상태가 아닌 객체명령줄 구문 분석기는 모든 작업에 대해 일반 GNU/POSIX 스타일 플래그 및 옵션을 사용할 수 있도록 완전히 개조되었습니다(더 이상 필요 없음).
fab mytask:weird=custom,arg=format
;임무 조직은 더 명확하고 유연하며, 〈마력’은 더 작다;
작업은 다른 작업이 항상 자신의 앞이나 뒤에 실행되도록 선언할 수 있습니다.
다양한 구성 파일 및 형식, 환경 변수, 각 사용자/프로젝트/모듈 구성 등을 위한 대규모 확장 구성
SSH 구성 파일 로드가 기본적으로 활성화됨 <시스템/사용자/런타임 파일 선택&>
Shell 명령 실행 API가 로컬 및 원격 메소드 호출 간에 일관성 유지 - 더 이상 구분되지 않음
local
그리고run
(물론 명령이 실행되는 위치를 제외하고!);보다 유연한 쉘 명령: 상호 작용 동작, 동기 캡처 및 표시(원격 프로세스뿐만 아니라 로컬 하위 프로세스에도 적용됨), 인코딩 제어 및 자동 응답
SSH 레이어에 Paramiko API를 사용하면 보다 투명해집니다. 예를 들어,
fabric.connection.Connection
다음을 위한 제어 허용SSHClient.connect
;게이트웨이/홉 호스트 기능 제공
ProxyJump
무한 중첩할 수 있는 프록시 명령 하위 프로세스가 없는 스타일 〈Native〉 옵션
호출할 《Sidegrading》¶
우리는 위에 이 점에 대한 주석을 링크했지만, 명확하게 다음과 같이 말한다: 현대 Fabric은 실제로 몇 개의 개별 라이브러리이며, SSH나 네트워크와 엄격한 관계가 없는 모든 것은 split out into the Invoke project 바로 그거야.
This means that if you’re in the group of users leveraging Fabric solely for
its task execution or local
, and never used run
, put
or
similar - you don’t need to use Fabric itself anymore and can simply
〈sidegrade〉 to Invoke instead.
여전히 이 문서를 통독하여 상황이 어떻게 변했는지 알고 싶으시지만, 다음과 같은 방법으로 처벌을 면할 수 있다는 점에 유의하십시오. pip install invoke
그리고 Fabric, Paramiko, 암호 의존성 또는 다른 어떤 것도 필요하지 않습니다.
Invoke 내부로부터 현대적 구조 사용¶
우리는 Fabric 1의 대부분의 사용 사례를 포괄할 때까지 현대 Fabric을 강화하여 fab
그리고 Fabfile 그 자체는, 어떻게 인바케 위에 구축되는지에 별로 관심이 없습니다.
그러나 그 전에 – 중·고급 사용자들에게는 그 자체로 매우 유용했습니다 - 현대 Fabric이 라이브러리나 다이렉트 API 사용을 염두에 두고 설계되었다는 사실입니다. CLI 요구 사항과 Fabric을 충족하기 위해 Invoke 세션의 API로 Invoke를 사용할 수 있습니다(경우에 따라).
다시 말해, 여러분은 fab
/Fabfiles(예: 임시 세션의 편리함을 필요로 하는 경우) --hosts
이런 식이죠.
두 구조 버전 모두 실행¶
단계적 업그레이드를 돕기 위해 다음과 같은 이름으로 현대식 구조를 설치할 수 있습니다. fabric2
(2.0+ 버전인 경우 제외 fabric
) 및 버전 1.x 설치와 함께 사용할 수 있습니다.
따라서 큰 코드 라이브러리를 가지고 있고 현대 버전으로 훌쩍 넘어가고 싶지 않다면, 두 개의 Fabric 1을 동시에 가질 수 있습니다. (fabric
, 이전에 설치한 대로) 및 현대식 구조(예: fabric2
)를 통해 Python 환경에도 상주할 수 있습니다.
주석
Fabric 1의 모든 코드를 버전 2 이상으로 마이그레이션하여 다음 설치 및 가져오기로 돌아갈 수 있도록 하는 것이 좋습니다. fabric
이름. fabric2
왜냐하면 다른 가방과 모듈은 미봉책일 뿐, 어떤 것도 없을 것이기 때문입니다. fabric3
또는 더 높다(특히 그 이름들 중 일부는 이미 지어졌기 때문이다!)
가져오는 방법 fabric2
패키지 버전, 현대식 스위칭 매트릭스를 fabric2 바로 그거야.
업그레이드 세부 정보¶
이것은 상세한 목록이다. all Fabric 1.x 기능과 1.x에 없는 새로운 호출 또는 Fabric-2 기능, 업그레이드가 필요한지 여부, 업그레이드 방법을 지정하고 현대 버전에서 아직 구현되지 않은 기능을 추적합니다.
대부분의 섹션은 다음과 같이 표로 세분화됩니다.
스위칭 매트릭스 1의 기능 또는 동작 |
상태, 자세한 내용은 아래 참조 |
마이그레이션 설명, 마이그레이션 원리 등 |
다음은 《Status》 열의 일반적인 값입니다. 이러한 값 중 일부는 약간 느슨하지만 모든 경우에 《메모》 열을 읽어야 합니다!또한 문제가 일정하지 않다는 점에 유의해야 합니다. 예를 들어, 충분한 사용자 요청이 있거나 문제를 해결하기에 충분한 사용 사례가 있는 경우 《제거》된 항목은 반환될 수 있습니다.
포트 : 사용 가능, 이름이 바뀌었거나 이동되었을 수 있음(흔히 이동 Invoke CodeBase.)
보류 중 : 적합하겠지만 아직 이식되지 않아 좋은 패치 후보. 이 항목은 해당 Github 티켓에 연결됩니다. - 새로운 것을 만들지 마세요!
제거 :명시적 not 이식(더 이상 시력에 부합하지 않고 유지 가치가 너무 떨어지는 등)으로 회복될 가능성은 거의 없습니다.
다음은 탐색을 위한 빠른 Native Directory입니다.
일반/개념적¶
현대 Fabric은 Python3와 완벽하게 호환됩니다; 그 대가는 Python2.5에 대한 지원(Fabric 1의 장기적인 특성)을 취소하는 것입니다 - 사실, 우리는 Python2.7 이전의 어떤 버전에 대한 지원도 포기했습니다.
CLI 작업을 위한 워크플로우는 여전히 주요 설계 목표이지만 라이브러리 사용 사례는 더 이상 2등 시민이 아닙니다. 반대로 라이브러리 기능은 먼저 설계되고 CLI/태스크 기능은 그 위에 구축됩니다.
또한 CLI 사용 사례에서 버전 1은 인증 비밀과 연결 매개 변수까지 지나치게 강조하는 〈게으름〉 인터랙티브 팁의 일부는 강력한 구성 메커니즘이 부족하기 때문이다.시간이 지남에 따라 혼란스러운 비대화형 행동과 어려운 디버깅/테스트 과정을 저울질할 가치가 없다는 것은 분명합니다.
현대의 Fabric은 시간 경과에 따라 v1에 추가된 기능을 기반으로 보다 깨끗한 접근 방식을 채택하여 구성 시스템 및/또는 시동(을) 걸다 시스템이 중간에 누락된 정보가 확인되면 메시지가 아닌 예외가 발생합니다.
Invoke 설계는 다음과 같습니다. explicit user-facing testing functionality ; 이전에 코드를 사용하여 Fabric을 위한 테스트를 작성할 수 있는 방법을 찾지 못했다면 이제는 훨씬 쉬웠을 것이다.
가능한 한 빨리 테스트를 작성하는 것이 좋습니다. 업그레이드 프로세스를 명확히 하고 프로세스를 보다 안전하게 만드는 데 도움이 될 것입니다!
API 조직¶
고급 코드 스트림 및 API 구성원이 주목하는 질문입니다.
다음과 같은 방법으로 모든 컨텐츠 가져오기 |
제거 |
모든 유용한 수입품은 이제 최상위 수준에서 얻을 수 있습니다. 예를 들어, |
연결 매개 변수 글로벌 구성( |
제거 |
기본 API는 이제 OOP:Instantiate를 올바르게 사용할 수 있습니다. |
사용자, 호스트, 포트 등을 설정하는 방법으로 직렬화된 《호스트 문자열》을 강조합니다. |
마이그레이션됨/삭제됨 |
또한 v1에서 호스트 문자열이 필요한 많은 매개 변수/설정/등이 이제 필요합니다. |
호스트 문자열의 전역 이름 지정 목록으로 《Roles》 사용 |
포트 |
이 수요는 이제 See the line items for |
작업 함수 및 장식기¶
주석
거의 모든 작업 관련 기능은 Invoke에서 구현됩니다. 자세한 내용은 해당 작업을 참조하십시오. execution 그리고 namespaces 파일.
기본적으로 작업은 |
포트 |
이러한 동작은 오늘날 기본적으로 동일하지만 약간의 수정 및 향상(예: 로드 프로세스를 보다 엄격하게 제어하고, 사용자 정의 로더 로더 로직을 구현하기 위한 API 후크) - 을 참조하십시오. loading-collections .) |
《클래식》 스타일의 암시적 작업 함수 누락 |
제거 |
V1에서라도 이러한 기능은 이제 Invoke를 통해 임의 작업/네임스페이스 만들기를 보다 명확하게 기록할 수 있습니다. |
《새로운》 스타일 |
포트 |
초강대국이 생겼음에도 불구하고, 대체로 똑같습니다. |
임의의 작업 함수 매개 변수(즉, |
포트 |
《작업은 이제 사용되어야 합니다.》라는 제목의 행 항목이 있습니다. 이는 보다 깨끗하고 이해하기 쉬운/디버깅 및 더 많은 사용자가 커버할 수 있는 API 구조를 얻기 위해 v1의 〈퀵 DSL’을 극히 일부 희생했다. 부작용으로 인해 함수 모듈과 메서드 클래스의 차이점을 줄일 수 있습니다. 따라서 사용자는 보다 쉽게 전자에서 시작하여 요구 사항이 증가/변화될 때 후자로 마이그레이션할 수 있습니다. |
가져오기-크롤링을 통한 암시적 작업 트리 생성 |
마이그레이션됨/삭제됨 |
네임스페이스 구성은 이제 더 명확해집니다. 예를 들어, However, the root 명시적 네임스페이스 객체의 사용은 사용자가 결과 트리를 제어할 수 있기 때문에 나중에 가져온 모듈 스캔을 복원(선택)할 수 있습니다. |
|
이러한 장식자들은 Fabric 1의 《DSL》 맥락에 상당 부분 속하며, 어떤 형태로 회귀할 수 있고 더 늦기 보다는 더 일찍 돌아올 수 있음에도 불구하고 우선적으로 재작성을 하지 않았다. |
|
|
포트/멈춤 |
병렬 실행은 현재 API 레벨에서 제공됩니다. 이 문제는 SSH 대상만이 아니라 더 높은 수준에서 해결되어야 하므로 호출 레벨 티켓에 연결됩니다. |
|
이것은 재작성에서 가장 《누락된 기능》 중 하나이며, link는 Invoke의 트래커입니다. |
|
|
포트 |
V1과 많은 구현 디테일을 공유하지는 않았지만 현대 Fabric(Invoke를 통해)이 하나를 공개했다 |
CLI 매개 변수, 옵션 및 동작¶
작업 매개 변수를 사용자 지정 콜론/쉼표로 구분된 CLI 매개 변수로 공개(예: |
제거 |
이제 CLI 매개 변수는 GNU/POSIX 스타일의 긴 플래그와 짧은 플래그(단축 플래그 결합, 공백 또는 등호 추가 값, 옵션 값 등)를 포함합니다.보다 invoking-tasks 바로 그거야. |
작업 정의 이름이 명령줄에 직접 반영됩니다(예: 작업). |
제거 |
이제 작업 이름이 밑줄에서 하이픈으로 변환됩니다.예.임무 |
단일 명령줄에서 여러 작업을 호출하는 기능(예: |
포트 |
잘 쓰이네요! |
|
포트 |
2.2에서 이식합니다. |
|
제거 |
에이전트를 영구적으로 비활성화하려면 구성 값을 설정합니다. |
|
제거 |
이 명령의 구성 및 kwarg 버전이 마이그레이션되었지만 현재 CLI 플래그가 없습니다.일반적인 《셸 환경 변수를 사용하여 런타임 시 구성 값 설정》 절이 적합하므로 may 옮겨지지 않을 것이라는 것은 상황에 달려 있다. |
|
제거 |
대화형 프롬프트의 소멸에 대한 의 설명을 참조하십시오. 일반/개념적 바로 그거야.세션에 대한 프롬프트가 없으면 이 옵션은 필요하지 않습니다. |
|
포트 |
|
|
아직까지는 색깔 작업이 거의 없고, 이것은 누락될 수 있는 부분 중 하나이다.V1에서 사용하는 빈도를 잘 모르기 때문에 다시 나타나지 않을 수도 있지만, 일반적으로 추가적인 출력 벡터로 색상을 사용하는 것이 좋기 때문에… |
|
|
포트 |
이것은 현재 더 표준적인 |
|
아직 이식되지 않았고, 이식 가능성이 매우 높다. |
|
|
포트/멈춤 |
더 이상 명시적 연결 캐시가 없으므로 긴급히 연결을 끊을 필요가 없습니다.그러나 조사와 잠재적인 기능 전환은 아직 미해결로 남아 있다. |
|
포트 |
이제 |
|
사용자는 전역을 설정할 수 있습니다. 따라서 이 점에 유의할 수 있는 충분한 사용자가 있다면 v1 동작을 크게 모방하는 Feature-Add: 문자열이 되는 첫 번째 매개 변수를 고려합니다. |
|
|
제거 |
이 코드들은 이식할 가치가 없을 만큼 많이 사용되지 않는 것 같습니다. 특히 이들은 일반적인 《Paramiko 레벨 연결 패스스루》의 보호 우산에 속하기 때문입니다. |
|
제거 |
시스템 및 환경 변수를 구성하여 구성할 수 있습니다. |
|
포트 |
이전과 거의 동일한 방식으로 작동합니다. 지정된 경우 각 호스트에 대해 주어진 작업을 한 번에 하나씩 단축합니다. |
|
포트 |
시도할 키 목록을 빌드하기 위해 여러 번 제공하는 기능을 포함하여 v1과 동일한 방식으로 작동합니다. |
|
포트 |
It’s now |
|
포트 |
이것이 바로 지금 |
|
제거 |
환경 변수 설정 사용 |
|
아직 이식되지 않았습니다. |
|
|
포트 |
이제 리워드 JSON 목록-포맷이 생겼어!그나저나, 그것은 대체 |
|
제거 |
이것은 실제로 현대의 명령에 따라 코드를 실행해 세상을 바라보는 방식에 맞지 않기 때문에 사라졌다. |
|
아직 이식되지 않았습니다. |
|
|
포트 |
지금 |
|
제거 |
이는 일반적으로 처음부터 안전하지 않으며, 현재 관련 구성 값을 설정할 수 있는 다른 많은 방법이 있으므로 적어도 현재에는 없어지고 있습니다. |
|
주변의 노트를 보세요. |
|
|
제거 |
우리의 직감은 이것이 시스템을 구성하는 env var 계층에 남겨 두거나, |
|
아직 이식되지 않았습니다. |
|
|
아래 설명과 같이 API 조직 , 역할 목록은 새로운 API에만 적용되며 글로벌 또는 CLI 수준에서 작동하는지 여부를 탐색하고 있습니다. |
|
|
제거 |
쉘 환경 변수에 대한 새로운 지원은 상당 부분 제거되었습니다(그렇게만 하면 됨). |
|
제거 |
이렇게 하려면 구성 시스템을 사용하십시오. |
|
포트 |
보다 |
|
아직 이식되지 않았습니다. |
|
|
제거 |
이것이 주는 느낌은 주로 부풀어 오르는데, 다시 구현하기 위해 파서를 크게 변경해야 할 수도 있기 때문에 지금은 필요하지 않습니다. |
|
포트 |
이것이 바로 지금 |
|
Pending /삭제 |
이는 자체 CLI 플래그로 반환될 가능성이 높지 않지만 구성 값으로 반환될 가능성이 높습니다. |
|
포트 |
이것은 이제 패라미코 수준에서 직접 연결 매개변수의 일부입니다. |
|
의 참고 사항 참조 쉘 명령 실행 (local /run/``sudo`) 에둘러 |
|
|
제거 |
대부분의 경우 실제 런타임에 대한 환경 변수 또는 사용자/프로젝트 수준 프로파일과 같은 필요에 따라 구성을 사용해야 하지만 반환될 수 있습니다. |
|
포트 |
변경하지 않고 그대로 마이그레이션합니다. |
|
마이그레이션되지 않았으며 전역(수동으로 인스턴스화된) 접속/그룹 선택에 대한 심층적인 수정을 기다리고 있습니다. |
|
|
제거 |
지금은 작업 대기열이 없습니다. 적어도 현재는 그렇습니다.그것을 대체하는 것이 무엇이든(이미 구현된 스레딩 모델을 제외하고) 크게 달라 보일 수 있습니다. |
쉘 명령 실행 (local
/run
/``sudo`)¶
일반 정보¶
공유 동작 run
/sudo
또는 모두 run
/sudo
/로컬
.다음 절에서는 각 함수의 차이점에 대해 설명합니다.
|
제거 |
모든 명령 실행은 이제 통합됨, 세 가지 기능 모두(지금은 예를 들어 v1의 경우 |
자동 응답 프롬프트, 통과 |
포트 |
The the the the 게다가, |
|
포트/멈춤 |
These are now methods on |
|
포트 |
컨텍스트 관리자는 환경 변수를 모든 범위에서 설정할 수 있는 유일한 방법입니다. 현대 구조에서 하위 프로세스 셸 환경은 각 호출에 의해 제어됩니다(직접 |
작업을 통해 하위 프로세스 출력 및 기타 활동을 제어하여 텍스트 표시 |
포트/멈춤 |
《출력 수준》의 핵심 개념은 더 이상 존재하지 않으며 좋지 않은 출력 수준의 로깅 모듈(stdlib 또는 기타)이 단기간에 다시 구현될 수 있습니다. 명령 실행 방법(예: |
|
명령 시간 초과는 마이그레이션되지 않았지만 나중에 (호출 계층에서) 추가될 수 있습니다. |
|
|
포트 |
이 점은 보존을 포함하여 완전히 이식되었다(그리고 그것의 동작은 자주 개선되었다). Fabric 0.x와 1.x가 이 값을 변경했습니다. Fabric 1의 긴 수명 주기 동안 이 두 가지 기본값이 모두 일부 또는 대부분의 사용자에게 적용되지 않음이 분명하므로 기본값을 반환하도록 선택했습니다. |
|
제거 |
이것은 매우 유용하지 않고 종종 개념적인 문제로 이어집니다. 이러한 두 스트림의 사용자를 병합하거나 명령에서 셸 리디렉션을 사용하거나 설정을 사용하는 것이 좋습니다. |
|
포트 |
이것이 바로 지금 |
|
포트 |
이것들은 모두 지금 |
|
기존 |
|
반환 값은 다음과 같은 추가 속성을 가진 유사한 문자열의 객체입니다. |
포트 |
반환 값은 더 이상 반개인 API가 있는 유사한 문자열 유형이 아니라 유형입니다. 그러나 여전히 부울 값처럼 동작합니다 - 표준 출력이 있는 것이 아니라 종료 코드와 0의 관계를 반영할 뿐입니다. |
|
포트 |
기술적으로는 《제거》하지만, 이는 단순히 새로운 버전의 |
run
¶
|
제거 |
`sudo`가 아닌 원격 실행에는 명시적인 케이스 패키징이 실제로 필요한 적이 없습니다. 거의 모든 경우 원격 SSH 데몬은 연결된 사용자의 로그인 케이스에 명령 문자열을 전달합니다.포장은 다른 부분에서 매우 실수하기 쉽고 우울한 이스케이프 규칙이 필요하기 때문에 우리는 이 사용 사례에서 그것을 포기했다. 참조: 대응 라인 항목 |
sudo
¶
Unless otherwise noted, all common run``+``sudo
args/functionality (e.g.
pty
, warn_only
etc) are covered above in the section on run
; the
below are sudo
specific.
|
Pending /삭제 |
아래 위의 참고 사항 참조 우리는 업그레이드를 원한다. |
|
포트 |
아직 여기 있고, 여전히 |
|
이것은 아직 이식되지 않았다. |
local
¶
새 버전에 대한 자세한 내용은 이 섹션의 맨 위에 있는 《일반》 주석을 참조하십시오. local
바로 그거야.다음은 몇 가지 구체적인 추가 배우입니다.
|
포트 |
기본적으로 v1과 동일하지만, 현재 어떤 경우에는 |
유틸리티¶
오류 처리 통과 |
포트 |
오래된 기능은 지나치게 《모든 것이 DSL》의 방향으로 편향되어 있다 & 그것이 어떻게 노련한 Pythonist를 방해하는지 상쇄할 충분한 가치를 제공하지 못했다. 이러한 함수는 삭제되고 대신 《예외만 발생》(유용한 옵션 중 하나가 Invoke |
ANSI 색상 도우미 |
제거 |
설명에 나와 있는 라이브러리와 같이 훌륭한 터미널 메시지 라이브러리 중 하나에 대해 형편없는 복제를 할 필요는 없을 것 같습니다. #101 ) 그래서 우리는 하지 않았다. 즉, 앞으로 내부 색상 지원을 제공할 수 있는 그런 라이브러리를 제공할 가능성이 높아 보이는데, 그때가 되면 〈내장된〉 색상 길잡이가 다시 쉽게 실현될 것입니다. |
|
포트 |
이것이 바로 지금 |
|
포트 |
V1은 파이프라인의 Fabric에서 특정 〈UNWRAP_TASKS〉 도움말 함수를 구축하기 위해 Sphinx를 사용해야 합니다. 이제 새로운 기능만 활성화하면 됩니다. invocations.autodoc 확장 리스트의 Sphinx 미니 플러그인. 자세한 내용은 링크를 참조하십시오. |
|
제거 |
호스트 문자열과 관련된 다른 툴과 마찬가지로 이러한 툴은 더 이상 존재하지 않아 쓸모가 없습니다. |
|
보류 중 |
아직 마이그레이션되지 않았습니다. 이상적으로는 Invoke에서 타사 라이브러리를 제공합니다. |
|
제거 |
아직 현대 Fabric에 대해 동등하게 작성되지 않았습니다. Connection/Client 오브젝트가 명시적이므로 동일한 매개변수를 사용하여 새 오브젝트를 인스턴스화하기만 하면 됩니다. 이와 유사한 오브젝트를 수동으로 호출하지 않으려면 재부트할 수 있는 시간 초과 매개 변수가 충분할 수 있습니다. 충분한 수요가 있는 것처럼 보이면 반환할 가능성이 희박하고, 그럴 경우 보다 일반적인 재연결과 관련된 것일 가능성이 높습니다. |
|
제거 |
이것은 이식되지 않았고, 부분적으로는 유지 관리원들이 스스로 그것을 사용한 적이 없고 직접 재실현될 가능성이 거의 없기 때문이다.그러나 핵심 사용 사례인 《특정 작업을 실행하는 데 사용할 수 있는 데이터 요구》가 다가오는 종속성 프레임에 다시 나타날 수 있습니다. |
|
제거 |
닮다 |
네트워킹¶
|
포트 |
이것이 오늘날의 (SSH 구성 기반이 아닌 런타임을 지정할 수 있음 |
|
포트 |
이것은 v1에서처럼 계속 작동할 것이다. |
|
포트 |
이것이 바로 지금 |
|
제거 |
V1에서 이것은 (부분적으로 구현된) 초기 《어떤 오류 시 sys.exit만 있으면 된다!》의 후퇴.행동거지.현대 원단은 예외에 대한 우호성이 훨씬 강하다; 이런 상황은 유발될 수 있다 |
|
아직 이식되지 않았습니다. |
|
|
아직 이식되지 않았습니다. |
|
|
포트 |
이제 시스템을 구성하거나 직접 제어할 수 있습니다. |
인증¶
주석
일부 env
V1의 키는 파라미코로 통하는 키일 뿐입니다 SSHClient.connect
방법.현대 Fabric을 사용하면 이 메서드에 전달되는 매개 변수를 명시적으로 제어할 수 있습니다. connect_kwargs
configuration 하위 트리, 다음 표에서 이 방법을 자주 설명합니다.
|
포트 |
쓰다 |
|
포트 |
쓰다 또한 이 작업은 이중 연결 작업을 수행하는 데 사용됩니다. and Sudo 암호, 후자는 현재 다음 위치에 있습니다. |
|
포트 |
쓰다 |
|
제거 |
Paramiko 레벨 API에 대해 불필요한(오류가 발생하기 쉬운) 혼동으로 인해 삭제되었습니다. 사용자는 현재 처리 중인 키 유형을 이미 알고 인스턴스화해야 합니다. |
|
포트 |
(으)로 설정 |
|
포트 |
쓰다 |
|
포트/멈춤 |
각각 그러나 암시적 구성으로 변환되는 값을 설정하는 보다 간단한 방법이 필요할 수 있습니다. |
구성 |
포트 |
여전히 영광이고, 또 새로 상을 받은 무리의 |
파일 전송¶
다음과 같은 기능 세분화가 적용됩니다. put
및/또는 get
V1의 《operation》 함수입니다.
로컬 및 원격 사용자가 소유한 단일 파일 전송 |
포트 |
두 방향의 기본 파일 전송은 효율적이며 다음과 같은 방법으로 제공됩니다. 이러한 메서드의 서명은 v1에 비해 위치 매개 변수의 본질에도 불구하고 지워졌습니다. ( |
암시적 《로컬 컨텍스트에 상대적》 비헤이비어를 생략하는 《Destination》 매개변수(예: |
포트 |
당신은 그것이 Python이기 때문에 여전히 명확해야 할 것이다. |
파일 경로 사용 or 전송 작업의 양쪽 끝에 있는 유사한 파일의 객체(예: 업로드 |
포트 |
그것은 보존할 수 있을 만큼 유용하고 간단한 수작이다. |
소스 파일 모드를 대상에 유지합니다(예: 대상의 umask에서 삭제되었던 실행 비트가 다시 추가되었는지 확인). |
포트 |
이것은 마이그레이션일 뿐만 아니라 이제 기본 동작입니다.필요한 경우 KWARG를 통해 비활성화할 수 있습니다. |
묶다 |
제거 |
이것은 확실히 v1에서 가장 지긋지긋한 부분 중 하나이며, 후속 호출로 인해 어떤 사용자 스스로 할 수 없는 일을 실제로 해 본 적이 없다. 만약 충분히 많은 사용자들이 그것의 손실을 갈망한다면, 우리는 may 재고하지만, 만약 우리가 그렇게 한다면, 단순화 및/또는 중간 파일을 다루지 않는 방법을 심각하게 고려할 것이다. |
반복 다중 파일 전송(예: |
제거 |
이것은 다른 V1의 가장 귀찮은 부분 중 하나는 시간이 지남에 따라 그것의 유지 부담이 재설계에 있어서 잘 되지 않는다는 사실을 훨씬 능가하는 것이 분명하다. |
구성¶
전반적으로 이전 구성에 비해 구성이 크게 개선되었습니다 . fabricrc
파일; 대부분의 구성 로직은 Invoke’s configuration system 는 전체 구성 계층 구조(코드 내 구성, 여러 구성 파일 위치, 환경 변수, CLI 플래그 등) 및 다양한 파일 형식을 제공합니다.현대식 스위칭 매트릭스에서 스위칭 매트릭스 1의 거의 모든 구성 경로는 구성 계층 구조에서 사용자의 요구 사항에 가장 적합한 모든 부분에 대한 작업이 됩니다.
Fabric의 최신 버전은 Invoke 설정에 대해 약간만 수정(또는 파라메트릭)했습니다. 을(를) 참고하십시오. our locally-specific config doc page 자세한 내용을 확인하십시오.
주석
제공된 v1에 대한 자세한 내용은 이 문서의 다른 부분을 참조하십시오. env
구성 시스템 외부의 객체 또는 메서드 키워드 매개 변수로 이동되었기 때문에 설정합니다.
수정 |
포트 |
글로벌 범위의 구성 변경을 실제로 구현하려면 구성 파일, 작업 컬렉션 레벨 구성 데이터 또는 호출 셸의 환경 변수를 사용합니다. |
로컬 범위 지정 |
포트/일시 중지 |
이와 관련된 대부분의 사용 사례들은 나머지 사용 사례들은 |
SSH 프로파일 로드(기본적으로 해제됨, |
포트 |
크게 개선됨: SSH 구성 파일 로드 on 기본적으로 can be changed )을 참조하십시오. OpenSSH와 같이 여러 소스가 로드되고 병합됩니다. ssh-config 바로 그거야. 또한 다음 기능에 대한 지원도 추가되었습니다. |
contrib
¶
구세대 contrib
모듈은 구조의 나머지 부분에서 핵심 지원을 제공하지 않고 사용자가 사용할 수 있는 것과 동일한 원어를 사용하여 구축된 《모범 사례》 기능을 나타냅니다.
현대 Fabric에서는 이 역할이 핵심 라이브러리에서 다른 독립 라이브러리로 이전되었으며, 이 라이브러리는 고유한 로고와 게시 프로세스를 가지고 있으며, 일반적으로 invocations (SSH를 사용하지 않는 로컬 지향 코드) 또는 patchwork (연결의 양쪽 끝을 명시적으로 처리하지 않는 코드는 로컬에서 작동하지만 주로 원격 지향 코드입니다.)
이러한 라이브러리는 여전히 진행 중입니다. 특히 대부분의 작업은 본질적으로 로컬 또는 원격이 아니지만 어느 한쪽에서도 작동할 수 있기 때문에 이러한 간극을 해소할 수 있는 최선의 방법을 결정해야 하기 때문입니다.
정의에 따라 모든 사용자가 사용할 수 있는 코어 API를 기반으로 구축되기 때문에 현재 개발 관심도가 낮고, 사용자들은 항상 많은 희생 없이 자신만의 버전을 구현할 수 있다(코어 라이브러리의 경우 그렇지 않다).코어 API가 안정화되면 이러한 컬렉션을 관리하기 위해 더 많은 작업을 투입하고자 합니다.
각각의 개별 큰 블록에서 무슨 일이 일어나는지에 대한 자세한 정보 fabric.contrib
다음 표에 나와 있습니다.
|
포트 |
이전 |
|
제거 |
강고가 그 이후 분명 크게 변했다는 점을 고려하면, 우리는 이것이 작성된 지 10년 만에 쓸모가 있는지조차 확신할 수 없다.만약 여러분이 읽고 있고 이 책이 사라지는 것에 대해 슬퍼하고 있다면, 우리에게 알려 주세요! |
|
포트/일시 중지 |
이 파일의 많은 유용한 함수가 마이그레이션되었습니다. 기타 |
|
포트 |
지금 |
|
제거 |
이는 이식할 가치가 없어 보인다; 〈내 로컬 비트 원격 복제’의 전반적인 패턴은 이미 반(反)패턴이라고 할 수 있다(vs.반복 배포가 가능한 위젯, 또는 적어도 원격 체크 아웃 VCS 태그) 이 길을 어떻게든 따라가야 한다면 rsync는 훨씬 더 현명한 선택입니다. |
fabric.env
참조물¶
V1의 많은/대부분의 멤버 fabric.env
위의 각 항목의 섹션에 설명되어 있습니다. not 다른 곳에 숨어서 여기 살아.이 모든 것들은 env.<name>
브라우저나 뷰어에서 쉽게 검색할 수 있습니다.
Env 변수의 극히 일부분이 공개적으로 기록된 적이 없습니다 & 따라서 암시적 사유입니다; 여기서는 이러한 변수를 나타내지 않습니다.
|
제거 |
하나의 개념이 사라지면 중단되며 최종 사용자에게 가장 합리적으로 보이는 예외를 제시하거나 사용하기만 하면 됩니다. |
|
포트/멈춤 |
직물의 그러나 이 API의 세부 정보(예: 작업을 통한 |
|
포트/멈춤 |
다음 참고 사항 참조 |
|
포트 |
이것이 바로 지금 |
|
포트 |
이것이 바로 지금 이 데이터의 원격 및 로컬 컨텍스트는 아직 설정되지 않았습니다. 정보 |
|
아직 이식되지 않았으며 역할/앵커 목록 전면 개혁의 일부로 처리될 수 있습니다. |
|
|
포트 |
속성 아래의 구성 옵션 |
|
제거 |
V1이 구성에 캐시할 가치가 있다고 생각하는 이유를 정확히 파악하지 못했습니다. 이 정보가 필요한 경우 가져오기 및 호출하기만 하면 됩니다. |
|
병렬 stdout/err을 구분하는 것은 여전히 진행 중인 작업입니다. 결국 실제 로깅을 통해 행별 로깅과 접두사를 재사용할 수도 있고, 연결된 각 로그 파일로 스트리밍하는 것과 같은 보다 간단한 방법을 시도할 수도 있습니다. |
|
|
포트 |
프롬프트 자동 응답은 이제 다음과 같이 공개적으로 구현됩니다. |
|
포트 |
로드된 작업 |
|
마이그레이션됨/삭제됨 |
Invoke의 인터럽트 캡처 동작은 현재 《항상 하위 프로세스에 인터럽트 문자만 보내고 계속》이며 하위 프로세스가 처리할 수 있도록 합니다. 사용자가 구성 변경을 통해 이 동작을 아직 구현하지 않았거나 구현하지 못할 수 있습니다. 이는 사용자가 원하는 사람이 있는지 여부에 따라 달라집니다. 이 동작은 v1에서 옵션으로 추가됩니다. 이는 뒤로 비교하기 위한 것입니다. 기술적으로는 하위 클래스화 및 재작성을 통해 중단 동작을 변경할 수도 있습니다. |
|
에 설명된 대로 API 조직 , 캐릭터는 하나의 개념으로 마이그레이션됩니다. 우리 may Userland에 영원히 위임하지만 만들기와 같은 일반적인 모범 사례 옵션인 것 같습니다. |
|
|
아직 마이그레이션되지는 않았지만, 몇 가지 더 작은 업데이트가 포함되어야 합니다. |
|
|
Sudo 명령 구성은 현재 실제 sudo 프롬프트의 구성만 표시합니다. |
|
|
포트 |
지금 |
|
제거 |
Fabric 1을 둘러싼 대부분의 다른 기능과 마찬가지로 직접 이동 |
|
포트 |
SSH 구성 로드가 기본적으로 켜져 있지만 이 옵션을 비활성화하는 옵션이 있습니다.보다 구성 더 많은 것을 위해. |
|
제거 |
단지 |
업그레이드 프로세스 예¶
이 섹션에서는 작고 중요한 Fabric 1 Fabfile을 최신 Fabric과 함께 사용할 수 있도록 업그레이드하는 방법에 대해 자세히 설명합니다.전체 기능 또는 개념의 전체 목록을 업그레이드하는 방법에 대한 자세한 내용은 을 참조하십시오. 업그레이드 세부 정보 바로 그거야.
샘플 원본 Fabfile¶
다음은 Fabric 1의 최종 자습서 조각 사본입니다(《현대》 Fabric 1 모범 사례에 맞게 약간 수정됨). 업그레이드를 위한 테스트 사례로 사용할 수 있습니다.
from fabric.api import abort, env, local, run, settings, task
from fabric.contrib.console import confirm
env.hosts = ['my-server']
@task
def test():
with settings(warn_only=True):
result = local('./manage.py test my_app', capture=True)
if result.failed and not confirm("Tests failed. Continue anyway?"):
abort("Aborting at user request.")
@task
def commit():
local("git add -p && git commit")
@task
def push():
local("git push")
@task
def prepare_deploy():
test()
commit()
push()
@task
def deploy():
code_dir = '/srv/django/myproject'
with settings(warn_only=True):
if run("test -d {}".format(code_dir)).failed:
cmd = "git clone user@vcshost:/path/to/repo/.git {}"
run(cmd.format(code_dir))
with cd(code_dir):
run("git pull")
run("touch app.wsgi")
우리는 그것을 직접 마이그레이션할 것입니다. 이것은 그 결과가 여전히 다음과 같다는 것을 의미합니다. fabfile.py
하지만 좀 더 라이브러리 지향적인 방식으로 코드를 작성해야 합니다. 포장되지 않은 함수처럼 @task
- 코드를 보다 쉽게 테스트하고 재사용할 수 있습니다.
수입¶
현대의 Fabric에서는 전역 함수가 아닌 객체 방법을 강조하기 때문에 그렇게 많은 함수를 가져올 필요가 거의 없습니다.필요한 것은 다음과 같습니다.
Exit
더 친근한 방법으로 요청합니다.sys.exit
;@task
은(는) SSH 전용이 아니므로 Invoke에서 왔습니다.confirm
을(를) 호출 라이브러리(SSH 전용이 아님)에서 가져옵니다.fabric.contrib
, 더 이상 존재하지 않음;
from invoke import task, Exit
from invocations.console import confirm
호스트 목록¶
사전 정의된 글로벌 호스트 목록은 더 이상 존재하지 않으며 직접적인 대안은 없습니다 .대신 사용자가 직접 실행 컨텍스트를 설정하고 명시적을 작성하도록 합니다. fabric.connection.Connection
및/또는 fabric.group.Group
오브젝트는 v1을 모방하는 내장 《캐릭터》 매핑에 불과하더라도 마찬가지입니다.간단한 사용 사례에 대해 --hosts
코어 옵션은 계속 사용할 수 있습니다.
주석
이것은 활발하게 개발되고 있는 분야이기 때문에 피드백을 환영한다.
현재 지정된 소스 코드 세그먼트에 대해 하드코딩된 호스트 이름은 다음과 같습니다. my-server
은(는) 이 Fabfile이 다음과 같이 호출된다고 가정합니다. fab -H my-server taskname
을 눌러 Fabfile 자체에 하드 코딩을 하지 않습니다.
테스트 작업¶
Fabfile의 첫 번째 작업은 API의 좋은 전달을 사용했습니다.여기서 이러한 변경 사항을 개괄적으로 설명하겠습니다. 하지만 모든 세부 사항은 업그레이드 세부 정보 )
함수를 이전과 거의 동일하게 선언하지만 명시적인 초기 컨텍스트 매개변수를 사용하여 매개변수의 값은
fabric.connection.Connection
객체는 런타임에 만들어집니다.네.사용
with settings(warn_only=True)
간단한 목수로 대신할 수 있습니다.local
전화를 걸다.That
local
call is now a method call on thefabric.connection.Connection
,fabric.connection.Connection.local
.capture
더 이상 유용한 논거가 아닙니다 . 이제 로컬 또는 원격에서 동시에 캡처하고 표시할 수 있습니다 .진짜가 아니라면 want 런타임 시 stdout/err을 미러링하는 로컬 하위 프로세스입니다.hide=True
(또는hide='stdout'
또는 기타)여러 버전 간의 Result 오브젝트는 매우 유사합니다. 현대 Fabric의 결과는 더 이상 《예》 문자열로 위장되지 않고 부울 값처럼 표현되며, 명령이 깨끗하게 종료되면 참으로, 그렇지 않으면 거짓으로 나타납니다.표시된 속성의 경우, 대부분의 동일한 정보를 사용할 수 있으며, 그 외에 더 많은 정보가 있습니다.
abort
더 이상 존재하지 않습니다. 귀하가 적절하다고 생각하는 예외를 사용해야 합니다.Exit
한 사람으로서sys.exit
등가물.(또는 직접 전화sys.exit
즉각적인 종료를 원하시면 CLI 기계에서도 손대지 않는 질문을 받으실 수 있습니다.)
결과:
@task
def test(c):
result = c.local('./manage.py test my_app', warn=True)
if not result and not confirm("Tests failed. Continue anyway?"):
raise Exit("Aborting at user request.")
기타 간단한 작업¶
다음 두 가지 작업은 간단한 절차입니다. 이제 글로벌을 대체하는 것이 무엇인지 알 수 있습니다. local
기능:
@task
def commit(c):
c.local("git add -p && git commit")
@task
def push(c):
c.local("git push")
다른 작업에서 작업 호출¶
이것은 호출 수준에서 변화하는 또 다른 영역이지만, 현재 v1에서 하는 것처럼 단순히 다른 작업을 함수로 호출할 수 있습니다.주요 차이점은 로드된 구성 파일 또는 CLI 플래그와 같은 구성 컨텍스트를 유지하기 위해 컨텍스트 객체를 전달하려는 것입니다.
@task
def prepare_deploy(c):
test(c)
commit(c)
push(c)
실제 원격 단계¶
참고로, 아직까지는 실제로 원단과 관련된 제품은 없습니다 - fabric.connection.Connection.local
다시 바인드했을 뿐이에요 Context.run
, Invoke의 로컬 하위 프로세스 실행 방법입니다.이제 실제 배포 단계로 넘어갑니다. fabric.connection.Connection.run
대신 원격 실행(모든 호스트에서 수행됨) fabric.connection.Connection
에 바인딩됨)을 참조하십시오.
with cd
원격에서는 아직 완전히 실현되지 않았지만, 우리는 곧 실현될 것으로 예상한다.이제 명령 체인으로 되돌아갑니다. &&
바로 그거야.
@task
def deploy(c):
code_dir = '/srv/django/myproject'
if not c.run("test -d {}".format(code_dir), warn=True):
cmd = "git clone user@vcshost:/path/to/repo/.git {}"
c.run(cmd.format(code_dir))
c.run("cd {} && git pull".format(code_dir))
c.run("cd {} && touch app.wsgi".format(code_dir))
모든 일¶
이제 최신 원단과 함께 사용할 수 있는 전체 업그레이드된 Fabfile이 있습니다.
from invoke import task, Exit
from invocations.console import confirm
@task
def test(c):
result = c.local('./manage.py test my_app', warn=True)
if not result and not confirm("Tests failed. Continue anyway?"):
raise Exit("Aborting at user request.")
@task
def commit(c):
c.local("git add -p && git commit")
@task
def push(c):
c.local("git push")
@task
def prepare_deploy(c):
test(c)
commit(c)
push(c)
@task
def deploy(c):
code_dir = '/srv/django/myproject'
if not c.run("test -d {}".format(code_dir), warn=True):
cmd = "git clone user@vcshost:/path/to/repo/.git {}"
c.run(cmd.format(code_dir))
c.run("cd {} && git pull".format(code_dir))
c.run("cd {} && touch app.wsgi".format(code_dir))