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 구성원이 주목하는 질문입니다.

다음과 같은 방법으로 모든 컨텐츠 가져오기 fabric.api

제거

모든 유용한 수입품은 이제 최상위 수준에서 얻을 수 있습니다. 예를 들어, from fabric import Connection 바로 그거야.

연결 매개 변수 글로벌 구성( env.host_string, env.host, env.port, env.user) and call global methods which implicitly reference them (run/sudo / 등)

제거

기본 API는 이제 OOP:Instantiate를 올바르게 사용할 수 있습니다. fabric.connection.Connection 객체를 호출하고 메서드를 호출합니다.이러한 객체는 모든 연결 상태(사용자, 호스트, 게이트웨이 등)를 캡슐화하며 자체 SSH 클라이언트 인스턴스를 가집니다.

사용자, 호스트, 포트 등을 설정하는 방법으로 직렬화된 《호스트 문자열》을 강조합니다.

마이그레이션됨/삭제됨

fabric.connection.Connection can accept a shorthand 《host string》-like argument, but the primary API is now explicit user, host, port, etc keyword arguments.

또한 v1에서 호스트 문자열이 필요한 많은 매개 변수/설정/등이 이제 필요합니다. fabric.connection.Connection 예.

호스트 문자열의 전역 이름 지정 목록으로 《Roles》 사용

포트

이 수요는 이제 fabric.group.Group 개체(일부 수량을 포장합니다. fabric.connection.Connection 《모든 멤버에 대해 한 가지 작업》 메서드가 있는 인스턴스입니다.)원하는 대로 컨텐츠를 작성하고 구성할 수 있습니다.

See the line items for --roles (CLI 매개 변수, 옵션 및 동작), env.roles (fabric.env 참조물) and @roles (작업 함수 및 장식기) for the status of those specifics.

작업 함수 및 장식기

주석

거의 모든 작업 관련 기능은 Invoke에서 구현됩니다. 자세한 내용은 해당 작업을 참조하십시오. execution 그리고 namespaces 파일.

기본적으로 작업은 fabfile.py 사용자의 현재 작업 디렉토리에서 파일 시스템 루트 디렉토리로 찾습니다.

포트

이러한 동작은 오늘날 기본적으로 동일하지만 약간의 수정 및 향상(예: 로드 프로세스를 보다 엄격하게 제어하고, 사용자 정의 로더 로더 로직을 구현하기 위한 API 후크) - 을 참조하십시오. loading-collections .)

《클래식》 스타일의 암시적 작업 함수 누락 @task 의기투합하다

제거

V1에서라도 이러한 기능은 이제 Invoke를 통해 임의 작업/네임스페이스 만들기를 보다 명확하게 기록할 수 있습니다. Task 그리고 Collection 바로 그거야.

《새로운》 스타일 @task - 코스메틱된 모듈 레벨 작업 함수

포트

초강대국이 생겼음에도 불구하고, 대체로 똑같습니다. @task 여전히 괄호 없이 사용할 수 있지만, 이 중 v1은 하나뿐입니다. task_class 매개변수, Invoke에는 여러 가지 네임스페이스 및 파서 팁과 실행 관련 옵션이 있습니다.

임의의 작업 함수 매개 변수(즉, def mytask(any, thing, at, all) )

포트

《작업은 이제 사용되어야 합니다.》라는 제목의 행 항목이 있습니다. Context (바닐라 호출) 또는 fabric.connection.Connection (Fabric) 개체를 첫 번째 미세조정으로 사용합니다.이전과 마찬가지로 함수 서명의 나머지 부분은 전적으로 사용자에 의해 결정되며 &는 CLI 플래그로 자동 변환됩니다.

이는 보다 깨끗하고 이해하기 쉬운/디버깅 및 더 많은 사용자가 커버할 수 있는 API 구조를 얻기 위해 v1의 〈퀵 DSL’을 극히 일부 희생했다.

부작용으로 인해 함수 모듈과 메서드 클래스의 차이점을 줄일 수 있습니다. 따라서 사용자는 보다 쉽게 전자에서 시작하여 요구 사항이 증가/변화될 때 후자로 마이그레이션할 수 있습니다.

가져오기-크롤링을 통한 암시적 작업 트리 생성

마이그레이션됨/삭제됨

네임스페이스 구성은 이제 더 명확해집니다. 예를 들어, fabfile.py 더 이상 자동으로 검색되지 않고 작업 트리에 자동으로 추가됩니다.

However, the root fabfile.py is automatically loaded (using Collection.from_module), preserving the simple/common case. See task-namespaces for details.

명시적 네임스페이스 객체의 사용은 사용자가 결과 트리를 제어할 수 있기 때문에 나중에 가져온 모듈 스캔을 복원(선택)할 수 있습니다.

@hosts 그리고 @roles 지정된 작업에 사용되는 호스트 또는 호스트 그룹 대상을 결정하는 기본 목록

Pending

이러한 장식자들은 Fabric 1의 《DSL》 맥락에 상당 부분 속하며, 어떤 형태로 회귀할 수 있고 더 늦기 보다는 더 일찍 돌아올 수 있음에도 불구하고 우선적으로 재작성을 하지 않았다.

@serial/@parallel/@runs_once

포트/멈춤

병렬 실행은 현재 API 레벨에서 제공됩니다. fabric.group.Group 하위 클래스(예: fabric.group.ThreadingGroup 그러나 전체 세션 및/또는 작업을 병렬로 실행(또는 병렬 제외)하도록 지정하는 것은 아직 해결되지 않았습니다.

이 문제는 SSH 대상만이 아니라 더 높은 수준에서 해결되어야 하므로 호출 레벨 티켓에 연결됩니다.

execute 표현식 및 기타 실행 메커니즘을 준수하면서 다른 작업에서 명명된 작업을 호출하는 데 사용됩니다(단순히 함수로 호출하는 것이 아님).

Pending

이것은 재작성에서 가장 《누락된 기능》 중 하나이며, link는 Invoke의 트래커입니다.

Task 프로그래밍 방식으로 작업을 만드는 클래스(일부 함수 객체 및 @task 장식사)

포트

V1과 많은 구현 디테일을 공유하지는 않았지만 현대 Fabric(Invoke를 통해)이 하나를 공개했다 Task 클래스, 이 클래스는 Collection 데코레이터가 필요 없는 작업 트리를 완전히 절차적으로 만들 수 있습니다.

CLI 매개 변수, 옵션 및 동작

작업 매개 변수를 사용자 지정 콜론/쉼표로 구분된 CLI 매개 변수로 공개(예: fab mytask:posarg,kwarg=val

제거

이제 CLI 매개 변수는 GNU/POSIX 스타일의 긴 플래그와 짧은 플래그(단축 플래그 결합, 공백 또는 등호 추가 값, 옵션 값 등)를 포함합니다.보다 invoking-tasks 바로 그거야.

작업 정의 이름이 명령줄에 직접 반영됩니다(예: 작업). def journald_logs() , 명령줄 인수는 다음과 같습니다. fab journald_logs

제거

이제 작업 이름이 밑줄에서 하이픈으로 변환됩니다.예.임무 def journald_logs() 현재 계산 결과는 다음과 같습니다. fab journald-logs 명령줄에 있습니다.

단일 명령줄에서 여러 작업을 호출하는 기능(예: fab task1 task2

포트

잘 쓰이네요!

python -m fabric as stand-in for fab

포트

2.2에서 이식합니다.

-a/--no_agent 자동 SSH 에이전트 키 선택 사용 안 함

제거

에이전트를 영구적으로 비활성화하려면 구성 값을 설정합니다. connect_kwargs.allow_agent 오다 False ; 임시로 비활성화하려면 설정을 취소하십시오. SSH_AUTH_SOCK 환경 변수

-A/--forward-agent 에이전트를 원격측으로 전달할 수 있도록 하는 데 사용됩니다.

제거

이 명령의 구성 및 kwarg 버전이 마이그레이션되었지만 현재 CLI 플래그가 없습니다.일반적인 《셸 환경 변수를 사용하여 런타임 시 구성 값 설정》 절이 적합하므로 may 옮겨지지 않을 것이라는 것은 상황에 달려 있다.

--abort-on-prompts 대화식 프롬프트를 예외로 변환(일시 중지 세션 방지에 도움이 됨)

제거

대화형 프롬프트의 소멸에 대한 의 설명을 참조하십시오. 일반/개념적 바로 그거야.세션에 대한 프롬프트가 없으면 이 옵션은 필요하지 않습니다.

-c/--config 대체 구성 파일 경로를 지정할 수 있습니다.

포트

--config lives on, but the short flag is now -f (-c now determines which collection module name is sought by the task loader.)

--colorize-errors (및 env.colorize_errors ) 오류 출력의 ANSI 음영 처리 사용

Pending

아직까지는 색깔 작업이 거의 없고, 이것은 누락될 수 있는 부분 중 하나이다.V1에서 사용하는 빈도를 잘 모르기 때문에 다시 나타나지 않을 수도 있지만, 일반적으로 추가적인 출력 벡터로 색상을 사용하는 것이 좋기 때문에…

-d/--display 지정된 명령에 대한 정보를 표시할 수 있습니다.

포트

이것은 현재 더 표준적인 -h/--help 을(를) 사용하여 다음과 같은 《방향》을 지정할 수 있습니다. fab -h mytask 또는 fab mytask -h 바로 그거야.

-D/--disable-known-hosts Paramiko의 사용자 레벨 자동 로드 끄기 known_hosts 파일

Pending

아직 이식되지 않았고, 이식 가능성이 매우 높다.

-e/--eagerly-disconnect (및 env.eagerly_disconnect ) 을(를) 통해 작업 실행이 완료되면 호스트와의 접속이 즉시 끊어지도록 실행 시스템에 알립니다.

포트/멈춤

더 이상 명시적 연결 캐시가 없으므로 긴급히 연결을 끊을 필요가 없습니다.그러나 조사와 잠재적인 기능 전환은 아직 미해결로 남아 있다.

-f/--fabfile 대체 Fabfile 위치를 선택하려면 다음을 수행합니다.

포트

이제 -c/--collection 그리고 -r/--search-root 보다 loading-collections 바로 그거야.

-g/--gateway (및 env.gateway ) 글로벌 SSH 게이트웨이 호스트 문자열 선택

Pending

사용자는 전역을 설정할 수 있습니다. gateway 환경 변수 구성 옵션을 사용하면 언뜻 전용 CLI 옵션이 필요하지 않습니다.그러나 이 메서드는 문자열 값만 설정할 수 있는 반면 문자열 값은 ProxyCommand 스타일 게이트웨이, 그러니까 아니 V1의 --gateway (호스트 문자열을 가져와 다음으로 변환 ProxyJump 스타일 게이트웨이)를 참조하십시오.

따라서 이 점에 유의할 수 있는 충분한 사용자가 있다면 v1 동작을 크게 모방하는 Feature-Add: 문자열이 되는 첫 번째 매개 변수를 고려합니다. fabric.connection.Connection 그런 다음 결과 오브젝트가 다음과 같이 설정됩니다. gateway 바로 그거야.

--gss-auth/--gss-deleg/--gss-kex

제거

이 코드들은 이식할 가치가 없을 만큼 많이 사용되지 않는 것 같습니다. 특히 이들은 일반적인 《Paramiko 레벨 연결 패스스루》의 보호 우산에 속하기 때문입니다. connect_kwargs 구성 옵션(필요한 경우 다른 구성 값과 마찬가지로 런타임 시 셸 환경 변수를 통해 설정할 수 있습니다.)

--hide/--show 출력 표시 전역 조정

제거

시스템 및 환경 변수를 구성하여 구성할 수 있습니다.

-H/--hosts

포트

이전과 거의 동일한 방식으로 작동합니다. 지정된 경우 각 호스트에 대해 주어진 작업을 한 번에 하나씩 단축합니다.

-i SSH 키 파일 이름 선택

포트

시도할 키 목록을 빌드하기 위해 여러 번 제공하는 기능을 포함하여 v1과 동일한 방식으로 작동합니다.

-I/--initial-password-prompt 초기 실행 전 암호 힌트 요청

포트

It’s now --prompt-for-login-password, –prompt-for-sudo-password or --prompt-for-passphrase, depending on whether you were using the former to fill in passwords or key passphrases (or both.)

--initial-sudo-password-prompt 초기 실행 전 sudo 암호 프롬프트 요청

포트

이것이 바로 지금 --prompt-for-sudo-password 바로 그거야.그래도 좀 입이 뻥긋한데 그래도 4자나 빠졌어!

-k/--no-keys which prevents Paramiko’s automatic loading of key files such as ~/.ssh/id_rsa

제거

환경 변수 설정 사용 connect_kwargs.look_for_keys 구성 값 설정 False 바로 그거야.

--keepalive 네트워크 연결 유지 설정

Pending

아직 이식되지 않았습니다.

-l/--list 작업을 나열하는 데 사용되며, -F/--list-format 리스트 표시 형식 조정

포트

이제 리워드 JSON 목록-포맷이 생겼어!그나저나, 그것은 대체 -F short/--shortlist 바로 그거야.

--linewise 대충 바이트 단위로 버퍼링하는 대신 행별 버퍼링을 위한 출력

제거

이것은 실제로 현대의 명령에 따라 코드를 실행해 세상을 바라보는 방식에 맞지 않기 때문에 사라졌다.

-n/--connection-attempts 다중 연결 재시도 제어

Pending

아직 이식되지 않았습니다.

--no-pty 에서 자동 PTY 할당을 사용하지 않으려면 run

포트

지금 -p/--pty 기본 동작이 변경되었기 때문입니다.

--password/--sudo-password 로그인/sudo 암호 값을 지정할 수 있습니다.

제거

이는 일반적으로 처음부터 안전하지 않으며, 현재 관련 구성 값을 설정할 수 있는 다른 많은 방법이 있으므로 적어도 현재에는 없어지고 있습니다.

-P/--parallel 글로벌 병렬성 활성화

Pending

주변의 노트를 보세요. @parallel작업 함수 및 장식기 바로 그거야.

--port 기본 SSH 포트 설정

제거

우리의 직감은 이것이 시스템을 구성하는 env var 계층에 남겨 두거나, port Kwarg On (코와그가 켜짐) fabric.connection.Connection ; 그러나, 그것은 돌아올 길을 찾을지도 모른다.

r/--reject-unknown-hosts Paramiko의 알려진 호스트 동작 수정

Pending

아직 이식되지 않았습니다.

-R/--roles 글로벌 호스트 목록 대상 선택

Pending

아래 설명과 같이 API 조직 , 역할 목록은 새로운 API에만 적용되며 글로벌 또는 CLI 수준에서 작동하는지 여부를 탐색하고 있습니다.

--set key=value 설정 fabric.state.env 런타임 VAR

제거

쉘 환경 변수에 대한 새로운 지원은 상당 부분 제거되었습니다(그렇게만 하면 됨). INVOKE_KEY=value fab mytask 또는 유사) 구성 값을 설정하는 CLI 플래그 방법이 나중에 다시 나타날 수 있지만

-s/--shell 기본 셸 경로를 덮어쓰려면

제거

이렇게 하려면 구성 시스템을 사용하십시오.

--shortlist 간단한/컴퓨터 친화적인 목록 출력

포트

보다 --list/--list-format - 이제 JSON 형식으로 변경.바퀴를 재발명하는 것은 의미가 없다.

--skip-bad-hosts (및 env.skip_bad_hosts ) 문제가 있는 호스트 우회

Pending

아직 이식되지 않았습니다.

--skip-unknown-tasks 그리고 env.skip_unknown_tasks CLI 호출 시 거짓 작업 이름 자동 건너뛰기

제거

이것이 주는 느낌은 주로 부풀어 오르는데, 다시 구현하기 위해 파서를 크게 변경해야 할 수도 있기 때문에 지금은 필요하지 않습니다.

--ssh-config-path 그리고 env.ssh_config_path SSH 구성 파일 선택

포트

이것이 바로 지금 -S/--ssh-config 바로 그거야.

--system-known-hosts 시스템 전체에서 로드를 트리거하려면 다음과 같이 하십시오. known_hosts 파일

Pending /삭제

이는 자체 CLI 플래그로 반환될 가능성이 높지 않지만 구성 값으로 반환될 가능성이 높습니다.

-t/--timeout 연결 제한 시간 제어

포트

이것은 이제 패라미코 수준에서 직접 연결 매개변수의 일부입니다. connect_kwargs 값을 구성합니다.

-T/--command-timeout

Pending

의 참고 사항 참조 쉘 명령 실행 (local /run/``sudo`) 에둘러 timeout 거친 사람.

-u/--user 글로벌 기본 사용자 이름을 설정하려면 다음과 같이 하십시오.

제거

대부분의 경우 실제 런타임에 대한 환경 변수 또는 사용자/프로젝트 수준 프로파일과 같은 필요에 따라 구성을 사용해야 하지만 반환될 수 있습니다.

-w/--warn-only 경고 및 중단 동작을 토글하려면 다음을 수행합니다.

포트

변경하지 않고 그대로 마이그레이션합니다.

-x/--exclude-hosts (및 env.exclude_hosts ) 다른 방법으로 선택한 대상을 제외합니다.

Pending

마이그레이션되지 않았으며 전역(수동으로 인스턴스화된) 접속/그룹 선택에 대한 심층적인 수정을 기다리고 있습니다.

-z/--pool-size 병렬 모드 작업 대기열 풀 크기 설정

제거

지금은 작업 대기열이 없습니다. 적어도 현재는 그렇습니다.그것을 대체하는 것이 무엇이든(이미 구현된 스레딩 모델을 제외하고) 크게 달라 보일 수 있습니다.

쉘 명령 실행 (local /run/``sudo`)

일반 정보

공유 동작 run/sudo 또는 모두 run/sudo /로컬.다음 절에서는 각 함수의 차이점에 대해 설명합니다.

local and run/sudo 천차만별 API와 구현

제거

모든 명령 실행은 이제 통합됨, 세 가지 기능 모두(지금은 fabric.connection.Connection 하지만, local 또한 다음과 같은 방법으로 사용할 수 있습니다. invoke.run 독립적 사용의 경우) 동일한 기본 프로토콜 및 로직( Runner 클래스 계층 구조), 프로세스 생성 및 파이프 소비와 같은 낮은 레벨 세부 정보만 다릅니다.

예를 들어 v1의 경우 local 하위 프로세스 출력 표시와 캡처 중 하나를 선택해야 합니다. 현대 local 마치 run 그리고 이 두 가지를 동시에 합니다.

자동 응답 프롬프트, 통과 env.prompts 및/또는 sudo 내부 구조

포트

The the the the env.prompts 기능은 이미 매우 충실하여, 하나의 구성 요소들을 형성하고 있다. Watchers 모든 ( 로컬 또는 원격 !) 에서 사용할 수 있습니다 .명령을 실행하는 입력 스트림 및 출력 스트림입니다.

게다가, sudo 이 프레임워크를 사용하기 위해 다시 쓰여졌습니다. 코어에서 구현을 제공할 수 있을 만큼 유용하지만, 더 이상 사용자가 공용 API를 사용하여 직접 할 수 없는 일을 하지 않습니다.

fabric.context_managers.cd/lcd (및 prefix ) 수행된 주석의 범위 변경 허용

포트/멈춤

These are now methods on Context (Context.cd, Context.prefix) but need work in its subclass fabric.connection.Connection (quite possibly including recreating lcd) so that local vs remote state are separated.

fabric.context_managers.shell_env and its specific expression path (plus env.shell_env, env.path and env.path_behavior), for modifying remote environment variables (locally, one would just modify os.environ.)

포트

컨텍스트 관리자는 환경 변수를 모든 범위에서 설정할 수 있는 유일한 방법입니다. 현대 구조에서 하위 프로세스 셸 환경은 각 호출에 의해 제어됩니다(직접 fabric.connection.Connection.run 형제자매와 통과하다. env Kwarg) and 여러 호출(정적 또는 런타임 작업을 통해 시스템 구성)에 걸쳐 있습니다.

작업을 통해 하위 프로세스 출력 및 기타 활동을 제어하여 텍스트 표시 fabric.state.output (directly or via fabric.context_managers.hide, show or quiet as well as the quiet kwarg to run/sudo ; 추가 utils.puts/fastprint )

포트/멈춤

《출력 수준》의 핵심 개념은 더 이상 존재하지 않으며 좋지 않은 출력 수준의 로깅 모듈(stdlib 또는 기타)이 단기간에 다시 구현될 수 있습니다.

명령 실행 방법(예: run 보류 hide 터미널의 kwarg에 복사되는 하위 프로세스 흐름을 제어합니다. echo 명령을 실행하기 전에 kwarg를 인쇄할지 여부를 조정합니다.이 모든 것은 구성 시스템을 존중한다.

timeout 코바그와 CommandTimeout 에 설명된 명령을 위반하는 런타임 시간 초과 시 예외 발생

Pending

명령 시간 초과는 마이그레이션되지 않았지만 나중에 (호출 계층에서) 추가될 수 있습니다.

pty Kwarg 및 Kwarg env.always_use_pty , 명령을 의사 터미널에서 실행할지 아니면 직접 호출할지를 제어합니다

포트

이 점은 보존을 포함하여 완전히 이식되었다(그리고 그것의 동작은 자주 개선되었다). pty Kwarg 및 구성 값을 단순으로 업데이트 run.pty 바로 그거야.하지만, 중요한 변화 중 하나는 Pty 분배가 지금 False 기본적으로 True 바로 그거야.

Fabric 0.x와 1.x가 이 값을 변경했습니다. Fabric 1의 긴 수명 주기 동안 이 두 가지 기본값이 모두 일부 또는 대부분의 사용자에게 적용되지 않음이 분명하므로 기본값을 반환하도록 선택했습니다. False 왜냐하면 그것은 더 깨끗하고 낭비가 덜하기 때문입니다.

combine_stderr (Kwarg 및 Kwarg env.combine_stderr ) Paramiko가 원격 stdout과 stderr를 stdout 스트림으로 뜨개질하는지 제어

제거

이것은 매우 유용하지 않고 종종 개념적인 문제로 이어집니다. pty (유사 터미널은 본질적으로 항상 이 두 스트림을 함께 그룹화하기 때문입니다.)

이러한 두 스트림의 사용자를 병합하거나 명령에서 셸 리디렉션을 사용하거나 설정을 사용하는 것이 좋습니다. pty=True 바로 그거야.

warn_only 0이 아닌 반환 코드의 자동 중단 방지를 위한 Kwarg

포트

이것이 바로 지금 warn , kwarg 및 구성 값을 입력합니다.기본 설정으로 계속됨 False 바로 그거야.

stdout 그리고 stderr 기본 stdout/err미러링 대상을 재할당하는 데 사용되는 kwargs입니다. 그렇지 않으면 기본적으로 해당 sys 위원

포트

이것들은 모두 지금 out_stream 그리고 err_stream 하지만 다른 면에서는 비슷한 성질을 유지한다.그것들은 또한 새로운 것을 수반하는데, 이것은 사후에 상당히 명백해 보인다. in_stream 바로 그거야.

capture_buffer_size Arg & 링 버퍼를 사용하여 캡처된 표준 출력/표준 오류를 저장하여 총 크기 제한

Pending

기존 Runner 구현에서는 일반 리스트를 캡처 버퍼로 사용하지만 언제든지 링 버퍼나 유사한 버퍼로 업그레이드해야 합니다.

반환 값은 다음과 같은 추가 속성을 가진 유사한 문자열의 객체입니다. succeeded 그리고 return_code 그 위에 뿌리다

포트

반환 값은 더 이상 반개인 API가 있는 유사한 문자열 유형이 아니라 유형입니다. Result 바로 그거야.기존 속성 문자열과 동일한 모든 정보가 공개됩니다. 그러나 실제 차이점은 문자열로 위장하지 않는다는 것입니다.

그러나 여전히 부울 값처럼 동작합니다 - 표준 출력이 있는 것이 아니라 종료 코드와 0의 관계를 반영할 뿐입니다.

open_shell 대화형 친화적인 원격 쉘 세션( run (역사적으로 잘하지 못함)

포트

기술적으로는 《제거》하지만, 이는 단순히 새로운 버전의 run 이미 크게 향상되었으며 최소한 이전과 마찬가지로 대화식 세션을 처리할 수 있습니다. open_shell 그래, 그게 더 아니라면. c.run("/my/favorite/shell", pty=True) 네가 필요한 것은 충분할 것이다.

run

shell / env.use_shell designating whether or not to wrap commands within an explicit call to e.g. /bin/sh -c 'real command'; plus their attendant options like shell_escape

제거

`sudo`가 아닌 원격 실행에는 명시적인 케이스 패키징이 실제로 필요한 적이 없습니다. 거의 모든 경우 원격 SSH 데몬은 연결된 사용자의 로그인 케이스에 명령 문자열을 전달합니다.포장은 다른 부분에서 매우 실수하기 쉽고 우울한 이스케이프 규칙이 필요하기 때문에 우리는 이 사용 사례에서 그것을 포기했다.

참조: 대응 라인 항목 local 그리고 sudo 그들의 상황이 다르기 때문입니다.(현재는 모두 같은 기초를 가지고 있기 때문에, fabric.connection.Connection.run 불응 shell Kwarg-그것은 전혀 그것에 대해 아무것도 하지 않을 것이다.)

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.

shell / env.use_shell designating whether or not to wrap commands within an explicit call to e.g. /bin/sh -c 'real command'

Pending /삭제

아래 위의 참고 사항 참조 run 셸 패키징을 일반적인 전략으로 사용하는 방법에 대한 자세한 내용(불행히도) sudo , 명령 문자열이 전달되기 때문에 중요한 명령(즉, 개별 프로그램의 argv가 아닌 실제 쉘 구문을 사용하는 모든 명령)에 대한 수동 패킹이 여전히 필요합니다. sudo 프로그램.

우리는 업그레이드를 원한다. sudo 이렇게 하면 일반적으로 가장 좋고 이스케이프가 필요 없는 셸 포장을 수행할 수 있습니다. 《Pending》 링크를 참조하십시오.

user 매개변수(및 env.sudo_user )을(를) 사용하여 다음과 같은 방법으로 호출할 수 있습니다. sudo -u <user> (기본적으로 루트가 아닌)

포트

아직 여기 있고, 여전히 user 바로 그거야.

group Sudo’d 명령을 제어하는 유효한 그룹의 매개 변수

Pending

이것은 아직 이식되지 않았다.

local

새 버전에 대한 자세한 내용은 이 섹션의 맨 위에 있는 《일반》 주석을 참조하십시오. local 바로 그거야.다음은 몇 가지 구체적인 추가 배우입니다.

shell 어떤 셸을 물어볼 kwarg를 지정합니다. subprocess.Popen 쓰다

포트

기본적으로 v1과 동일하지만, 현재 어떤 경우에는 os.execve 대체 subprocess.Popen 바로 그거야.행동 대동소이: 껍데기 포장 없음(기존 버전에서처럼 run ), 운영 체제에서 어떤 실제 프로그램을 실행할 것인지만 알립니다.

유틸리티

오류 처리 통과 abort 그리고 warn

포트

오래된 기능은 지나치게 《모든 것이 DSL》의 방향으로 편향되어 있다 & 그것이 어떻게 노련한 Pythonist를 방해하는지 상쇄할 충분한 가치를 제공하지 못했다.

이러한 함수는 삭제되고 대신 《예외만 발생》(유용한 옵션 중 하나가 Invoke Exit ) 이상 처리가 얇은 패커가 아닌 파이썬(Python) 양식에 가깝다는 느낌을 주기 때문이다. sys.exit 아니면 어쩔 수 없이 except SystemExit: 바라건대, 이것은 SystemExit 너만의 코드가 제안되었어!

ANSI 색상 도우미 fabric.colors 독립 실행형 라이브러리 없이 ANSI 색상의 텍스트를 쉽게 인쇄할 수 있도록 허용

제거

설명에 나와 있는 라이브러리와 같이 훌륭한 터미널 메시지 라이브러리 중 하나에 대해 형편없는 복제를 할 필요는 없을 것 같습니다. #101 ) 그래서 우리는 하지 않았다.

즉, 앞으로 내부 색상 지원을 제공할 수 있는 그런 라이브러리를 제공할 가능성이 높아 보이는데, 그때가 되면 〈내장된〉 색상 길잡이가 다시 쉽게 실현될 것입니다.

with char_buffered 로컬 스트림을 문자에 의해 버퍼링할 수 있도록 하는 컨텍스트 관리자

포트

이것이 바로 지금 character_buffered 바로 그거야.

docs.unwrap_tasks 패키지의 작업 함수에서 문서 문자열 추출

포트

V1은 파이프라인의 Fabric에서 특정 〈UNWRAP_TASKS〉 도움말 함수를 구축하기 위해 Sphinx를 사용해야 합니다. 이제 새로운 기능만 활성화하면 됩니다. invocations.autodoc 확장 리스트의 Sphinx 미니 플러그인. 자세한 내용은 링크를 참조하십시오.

network.normalize, denormalize and parse_host_string, ostensibly internals but sometimes exposed to users for dealing with host strings

제거

호스트 문자열과 관련된 다른 툴과 마찬가지로 이러한 툴은 더 이상 존재하지 않아 쓸모가 없습니다. fabric.connection.Connection 이제 주요 API 포커스가 있으며 모든 호스트 문자열 구성 요소에 대해 별도의 속성이 있습니다.

utils.indent 텍스트 들여쓰기/줄바꿈(일반적이지 않음)

보류 중

아직 마이그레이션되지 않았습니다. 이상적으로는 Invoke에서 타사 라이브러리를 제공합니다.

reboot 원격 시스템 재부팅 및 재연결

제거

아직 현대 Fabric에 대해 동등하게 작성되지 않았습니다. Connection/Client 오브젝트가 명시적이므로 동일한 매개변수를 사용하여 새 오브젝트를 인스턴스화하기만 하면 됩니다. 이와 유사한 오브젝트를 수동으로 호출하지 않으려면 재부트할 수 있는 시간 초과 매개 변수가 충분할 수 있습니다. time.sleep .)

충분한 수요가 있는 것처럼 보이면 반환할 가능성이 희박하고, 그럴 경우 보다 일반적인 재연결과 관련된 것일 가능성이 높습니다. fabric.connection.Connection 다음을 통해 셸 다시 시작 명령을 실행하는 사용자를 담당하는 메소드입니다. sudo 그들 스스로.

require 의 일부 키를 확인하는 데 사용됩니다. env 값을 설정하거나 값을 기재하여 다음을 수행할 수 있습니다. provided_by= 작업 목록 설정

제거

이것은 이식되지 않았고, 부분적으로는 유지 관리원들이 스스로 그것을 사용한 적이 없고 직접 재실현될 가능성이 거의 없기 때문이다.그러나 핵심 사용 사례인 《특정 작업을 실행하는 데 사용할 수 있는 데이터 요구》가 다가오는 종속성 프레임에 다시 나타날 수 있습니다.

prompt for prompting the user & storing the entered data (optionally with validation) directly into env

제거

닮다 require 은(는) 더 적은 기능인 것 같습니다(특히 동급에 비해). confirm )으로 변환되지 않았습니다.만약 그것이 돌아온다면, invocations 네, 그게 바로 confirm 결과는 다음과 같습니다.

네트워킹

env.gateway SSH 홉 게이트웨이 설정

포트

이것이 오늘날의 gateway Kwarg to fabric.connection.Connection , 그리고 새로운 지원에 대한 ProxyJump 스타일 게이트웨이, 무한 중첩 가능!다른 것이 되어야 합니다. fabric.connection.Connection 호스트 문자열이 아닌 개체입니다.

(SSH 구성 기반이 아닌 런타임을 지정할 수 있음 ProxyCommand -스타일 문자열 gateway 대신 Kwarg은 보통처럼 행동합니다. ProxyCommand .)

ssh_config - 구동 ProxyCommand 지지

포트

이것은 v1에서처럼 계속 작동할 것이다.

with remote_tunnel(...): 포트 전달

포트

이것이 바로 지금 fabric.connection.Connection.forward_local 왜냐하면 그 이유는 앞으로 나아가다 A 본토 포트가 원격 터미널에 연결되어 있습니다.(새로 추가된 것은 논리적 역, fabric.connection.Connection.forward_remote .)

NetworkError 일부 네트워크 관련 오류에서 발생

제거

V1에서 이것은 (부분적으로 구현된) 초기 《어떤 오류 시 sys.exit만 있으면 된다!》의 후퇴.행동거지.현대 원단은 예외에 대한 우호성이 훨씬 강하다; 이런 상황은 유발될 수 있다 NetworkError V1에서는 이제 진짜 밑바닥 이상이 될 뿐이고 보통 Paramiko나 stdlib에서 나온다.

env.keepalive 네트워크 활성 값을 설정할 수 있습니다.

Pending

아직 이식되지 않았습니다.

env.connection_attempts 연결 재시도 설정

Pending

아직 이식되지 않았습니다.

env.timeout 연결 시간 초과 제어

포트

이제 시스템을 구성하거나 직접 제어할 수 있습니다. fabric.connection.Connection 바로 그거야.

인증

주석

일부 env V1의 키는 파라미코로 통하는 키일 뿐입니다 SSHClient.connect 방법.현대 Fabric을 사용하면 이 메서드에 전달되는 매개 변수를 명시적으로 제어할 수 있습니다. connect_kwargs configuration 하위 트리, 다음 표에서 이 방법을 자주 설명합니다.

env.key_filename

포트

쓰다 connect_kwargs 바로 그거야.

env.password

포트

쓰다 connect_kwargs 바로 그거야.

또한 이 작업은 이중 연결 작업을 수행하는 데 사용됩니다. and Sudo 암호, 후자는 현재 다음 위치에 있습니다. sudo.password 세트.

env.gss_(auth|deleg|kex)

포트

쓰다 connect_kwargs 바로 그거야.

env.key , 특정 유형이 자동으로 결정되어 인스턴스화되어 사용할 개인 키 데이터를 저장하는 문자열 또는 파일 개체입니다. pkey Kwarg 연결

제거

Paramiko 레벨 API에 대해 불필요한(오류가 발생하기 쉬운) 혼동으로 인해 삭제되었습니다. 사용자는 현재 처리 중인 키 유형을 이미 알고 인스턴스화해야 합니다. PKey 하위 클래스, 결과 위치 connect_kwargs.pkey 바로 그거야.

env.no_agent , Paramiko의 명칭 변경/거꾸로 allow_agent Kwarg 연결

포트

(으)로 설정 True 이제 간단하게 설정해야 한다. connect_kwargs.allow_agent 오다 False 대신.

env.no_keys , 다음과 유사 no_agent 네, 그냥 맞아요. look_for_keys Kwarg 연결

포트

쓰다 connect_kwargs.look_for_keys 대신(다음으로 설정됨) False Paramiko의 기본 키 조회 동작을 비활성화합니다.)

env.passwords (및 env.sudo_passwords ) 호스트 문자열이 입력한 딕셔너리에 연결/sudo 암호를 저장합니다.

포트/멈춤

각각 fabric.connection.Connection 개체는 자체 개체를 사용할 수 있습니다. connect_kwargs 인스턴스화 시 부여되며 각 호스트에 대한 암호 구성이 이미 허용되었습니다.

그러나 암시적 구성으로 변환되는 값을 설정하는 보다 간단한 방법이 필요할 수 있습니다. fabric.connection.Connection 객체, 이러한 기능은 여전히 보류 중입니다.

구성 IdentityFile …의 ssh_config

포트

여전히 영광이고, 또 새로 상을 받은 무리의 ssh_config 설정; ssh-config 바로 그거야.

파일 전송

다음과 같은 기능 세분화가 적용됩니다. put 및/또는 get V1의 《operation》 함수입니다.

로컬 및 원격 사용자가 소유한 단일 파일 전송

포트

두 방향의 기본 파일 전송은 효율적이며 다음과 같은 방법으로 제공됩니다. fabric.connection.Connection.get /Fabric.connection.Connection.put`(코드가 별도로 담당하는 클래스로 나뉘어져 있지만, `fabric.transfer.Transfer .)

이러한 메서드의 서명은 v1에 비해 위치 매개 변수의 본질에도 불구하고 지워졌습니다. (get(remote, local) 그리고 put(local, remote) 그대로 유지됩니다.

암시적 《로컬 컨텍스트에 상대적》 비헤이비어를 생략하는 《Destination》 매개변수(예: put('local.txt') 원격으로 암시적 업로드 $HOME/local.txt .)

포트

당신은 그것이 Python이기 때문에 여전히 명확해야 할 것이다.

파일 경로 사용 or 전송 작업의 양쪽 끝에 있는 유사한 파일의 객체(예: 업로드 StringIO (디스크 파일이 아님)

포트

그것은 보존할 수 있을 만큼 유용하고 간단한 수작이다.

소스 파일 모드를 대상에 유지합니다(예: 대상의 umask에서 삭제되었던 실행 비트가 다시 추가되었는지 확인).

포트

이것은 마이그레이션일 뿐만 아니라 이제 기본 동작입니다.필요한 경우 KWARG를 통해 비활성화할 수 있습니다.

묶다 sudo 파일 전송의 일부로 수행

제거

이것은 확실히 v1에서 가장 지긋지긋한 부분 중 하나이며, 후속 호출로 인해 어떤 사용자 스스로 할 수 없는 일을 실제로 해 본 적이 없다. sudo 그래서 우리는 그것을 이식하지 않기로 했다.

만약 충분히 많은 사용자들이 그것의 손실을 갈망한다면, 우리는 may 재고하지만, 만약 우리가 그렇게 한다면, 단순화 및/또는 중간 파일을 다루지 않는 방법을 심각하게 고려할 것이다.

반복 다중 파일 전송(예: put(a_directory) 전체 디렉토리 및 모든 컨텐트 업로드)

제거

이것은 다른 V1의 가장 귀찮은 부분 중 하나는 시간이 지남에 따라 그것의 유지 부담이 재설계에 있어서 잘 되지 않는다는 사실을 훨씬 능가하는 것이 분명하다. rsync YE OLD와 같은 아카이브 도구 및/또는 사용 tar +``gzip``.

구성

전반적으로 이전 구성에 비해 구성이 크게 개선되었습니다 . fabricrc 파일; 대부분의 구성 로직은 Invoke’s configuration system 는 전체 구성 계층 구조(코드 내 구성, 여러 구성 파일 위치, 환경 변수, CLI 플래그 등) 및 다양한 파일 형식을 제공합니다.현대식 스위칭 매트릭스에서 스위칭 매트릭스 1의 거의 모든 구성 경로는 구성 계층 구조에서 사용자의 요구 사항에 가장 적합한 모든 부분에 대한 작업이 됩니다.

Fabric의 최신 버전은 Invoke 설정에 대해 약간만 수정(또는 파라메트릭)했습니다. 을(를) 참고하십시오. our locally-specific config doc page 자세한 내용을 확인하십시오.

주석

제공된 v1에 대한 자세한 내용은 이 문서의 다른 부분을 참조하십시오. env 구성 시스템 외부의 객체 또는 메서드 키워드 매개 변수로 이동되었기 때문에 설정합니다.

수정 fabric.(api.)env 직접

포트

글로벌 범위의 구성 변경을 실제로 구현하려면 구성 파일, 작업 컬렉션 레벨 구성 데이터 또는 호출 셸의 환경 변수를 사용합니다.

로컬 범위 지정 fabric.env 변경 방법: with settings(...): 또는 그 장식자의 등가물, @with_settings

포트/일시 중지

이와 관련된 대부분의 사용 사례들은 settings 지금 한 가지 사실에 봉사하고 있는데, 그것은 바로 fabric.connection.Connection 객체가 각 호스트/연결 상태를 유지합니다. 암시적 글로벌 컨텍스트의 모드를 전환하는 것은 설계 안티 모드이며 더 이상 존재하지 않습니다.

나머지 사용 사례들은 fabric.connection.Connection (또는 해당 상위) 또는 이러한 메서드를 일시 중지합니다.

SSH 프로파일 로드(기본적으로 해제됨, ~/.ssh/config (다른 단일 경로로 구성되지 않은 경우)

포트

크게 개선됨: SSH 구성 파일 로드 on 기본적으로 can be changed )을 참조하십시오. OpenSSH와 같이 여러 소스가 로드되고 병합됩니다. ssh-config 바로 그거야.

또한 다음 기능에 대한 지원도 추가되었습니다. ssh_config V1에 의해 무시되는 지시어(예: ConnectTimeout 그리고 ProxyCommand , 미래를 내다보고, 우리는 가능한 한 많은 지원을 할 생각이다. ssh_config 합리적으로 가능한 경우.

contrib

구세대 contrib 모듈은 구조의 나머지 부분에서 핵심 지원을 제공하지 않고 사용자가 사용할 수 있는 것과 동일한 원어를 사용하여 구축된 《모범 사례》 기능을 나타냅니다.

현대 Fabric에서는 이 역할이 핵심 라이브러리에서 다른 독립 라이브러리로 이전되었으며, 이 라이브러리는 고유한 로고와 게시 프로세스를 가지고 있으며, 일반적으로 invocations (SSH를 사용하지 않는 로컬 지향 코드) 또는 patchwork (연결의 양쪽 끝을 명시적으로 처리하지 않는 코드는 로컬에서 작동하지만 주로 원격 지향 코드입니다.)

이러한 라이브러리는 여전히 진행 중입니다. 특히 대부분의 작업은 본질적으로 로컬 또는 원격이 아니지만 어느 한쪽에서도 작동할 수 있기 때문에 이러한 간극을 해소할 수 있는 최선의 방법을 결정해야 하기 때문입니다.

정의에 따라 모든 사용자가 사용할 수 있는 코어 API를 기반으로 구축되기 때문에 현재 개발 관심도가 낮고, 사용자들은 항상 많은 희생 없이 자신만의 버전을 구현할 수 있다(코어 라이브러리의 경우 그렇지 않다).코어 API가 안정화되면 이러한 컬렉션을 관리하기 위해 더 많은 작업을 투입하고자 합니다.

각각의 개별 큰 블록에서 무슨 일이 일어나는지에 대한 자세한 정보 fabric.contrib 다음 표에 나와 있습니다.

console.confirm 부울 값을 쉽게 반환하기 위한 확인 팁

포트

이전 invocations.console.confirm , 서명을 미세하게 조정하기만 하면 됩니다.

django.* , 로컬 Django 프로젝트와의 통합 지원Re:Django 모델 및 기타 코드 가져오기 및 사용

제거

강고가 그 이후 분명 크게 변했다는 점을 고려하면, 우리는 이것이 작성된 지 10년 만에 쓸모가 있는지조차 확신할 수 없다.만약 여러분이 읽고 있고 이 책이 사라지는 것에 대해 슬퍼하고 있다면, 우리에게 알려 주세요!

files.* (e.g. exists, append, contains etc) for interrogating and modifying remote files

포트/일시 중지

이 파일의 많은 유용한 함수가 마이그레이션되었습니다. patchwork.files 하지만 본질적으로 여전히 알파 상태에 있습니다.

기타 is_link, comment/uncomment 등은 아직 이식되지 않았습니다.만약 그렇다면, 그들은 결국 같은 장소에 나타날 가능성이 높다.

project.rsync_project 전체 호스트 프로젝트를 원격으로 동기화하는 데 사용

포트

지금 patchwork.transfers.rsync , 몇 가지 수정을 했다.

project.rsync_project 아카이브 및 SCP를 통해 호스트 프로젝트 업로드

제거

이는 이식할 가치가 없어 보인다; 〈내 로컬 비트 원격 복제’의 전반적인 패턴은 이미 반(反)패턴이라고 할 수 있다(vs.반복 배포가 가능한 위젯, 또는 적어도 원격 체크 아웃 VCS 태그) 이 길을 어떻게든 따라가야 한다면 rsync는 훨씬 더 현명한 선택입니다.

fabric.env 참조물

V1의 많은/대부분의 멤버 fabric.env 위의 각 항목의 섹션에 설명되어 있습니다. not 다른 곳에 숨어서 여기 살아.이 모든 것들은 env.<name> 브라우저나 뷰어에서 쉽게 검색할 수 있습니다.

Env 변수의 극히 일부분이 공개적으로 기록된 적이 없습니다 & 따라서 암시적 사유입니다; 여기서는 이러한 변수를 나타내지 않습니다.

env.abort_exception 사용할 예외 중단을 설정할 수 있습니다.

제거

하나의 개념이 사라지면 중단되며 최종 사용자에게 가장 합리적으로 보이는 예외를 제시하거나 사용하기만 하면 됩니다. Exit 바로 그거야.참조 유틸리티 바로 그거야.

env.all_hosts 그리고 env.tasks 실행 대상 나열

포트/멈춤

직물의 Executor 하위 클래스는 모든 CLI 분석 결과에 대한 참조를 저장합니다(다음 포함). --hosts 요청된 작업과 해당 매개 변수 등)을 통해 사용자가 해당 정보에 액세스할 수 있도록 하기 위한 것입니다.

그러나 이 API의 세부 정보(예: 작업을 통한 Context /Fabric.connection.Connection)은 여전히 변화 중이다.

env.command 현재 수행 중인 작업 이름 확인(사후에 부적절한 단어 사용…)

포트/멈춤

다음 참고 사항 참조 env.all_hosts 위 - CLI 구문 분석 결과에 대한 사용자 가시성도 여기에 동일하게 적용됩니다.

env.command_prefixes for visibility into (arguably also mutation of) the shell command prefixes to be applied to run/sudo

포트

이것이 바로 지금 command_prefixes 바로 그거야.

env.cwd 현재 예약된 작업 디렉토리에 주의

포트

이것이 바로 지금 command_cwds (예상 컨텍스트 관리자 중심의 사용 사례를 보다 잘 모델링하기 위해 단일 문자열이 아닌 목록입니다.)

이 데이터의 원격 및 로컬 컨텍스트는 아직 설정되지 않았습니다. 정보 with cd 근거 쉘 명령 실행 (local /run/``sudo`) 바로 그거야.

env.dedupe_hosts 병합된 호스트 목록에서 중복된 호스트의 데이터 중복 제거 여부를 제어합니다.

Pending

아직 이식되지 않았으며 역할/앵커 목록 전면 개혁의 일부로 처리될 수 있습니다.

env.echo_stdin (기록되지 않음) 표준 입력을 해제하는 기본 반향

포트

속성 아래의 구성 옵션 run 나무, 대략 같은 행동을 가지고 있다.

env.local_user 검색된 로컬 사용자 이름에 대한 읽기 전용 액세스

제거

V1이 구성에 캐시할 가치가 있다고 생각하는 이유를 정확히 파악하지 못했습니다. 이 정보가 필요한 경우 가져오기 및 호출하기만 하면 됩니다. fabric.util.get_local_user 바로 그거야.

env.output_prefix 호스트 문자열 접두어 행별 표시 여부 결정

Pending

병렬 stdout/err을 구분하는 것은 여전히 진행 중인 작업입니다. 결국 실제 로깅을 통해 행별 로깅과 접두사를 재사용할 수도 있고, 연결된 각 로그 파일로 스트리밍하는 것과 같은 보다 간단한 방법을 시도할 수도 있습니다.

env.prompts 프롬프트 자동 응답 제어

포트

프롬프트 자동 응답은 이제 다음과 같이 공개적으로 구현됩니다. StreamWatcher 그리고 Responder 인스턴스가 전달될 수 있는 클래스 계층 구조 run Kwarg를 통해 또는 구성에서 run.watchers 바로 그거야.

env.real_fabfile CLI 시스템 로드를 저장하는 읽기 전용 Fabfile 경로

포트

로드된 작업 Collection 모두 최상위 레벨에 저장됨 Program 객체 및 Executor 작업을 호출합니다. Collection Vbl.한 가지 loaded_from 속성은 이 정보를 사용합니다.

env.remote_interrupt 인터럽트 방법 제어(즉, 로컬 인터럽트) KeyboardInterrupt 캡처, 전달 또는 기타

마이그레이션됨/삭제됨

Invoke의 인터럽트 캡처 동작은 현재 《항상 하위 프로세스에 인터럽트 문자만 보내고 계속》이며 하위 프로세스가 처리할 수 있도록 합니다. ^C 하지만 그들은 이렇게 해야 합니다. 이것은 스위칭 매트릭스 1보다 개선되었고, 대략 설정과 맞먹는 수준입니다. env.remote_interrupt = True 바로 그거야.

사용자가 구성 변경을 통해 이 동작을 아직 구현하지 않았거나 구현하지 못할 수 있습니다. 이는 사용자가 원하는 사람이 있는지 여부에 따라 달라집니다. 이 동작은 v1에서 옵션으로 추가됩니다. 이는 뒤로 비교하기 위한 것입니다.

기술적으로는 하위 클래스화 및 재작성을 통해 중단 동작을 변경할 수도 있습니다. invoke.runners.Runner.send_interrupt 바로 그거야.

env.roles, env.roledefs and env.effective_roles controlling/exposing what roles are available or currently in play

Pending

에 설명된 대로 API 조직 , 캐릭터는 하나의 개념으로 마이그레이션됩니다. fabric.group.Group 하지만 그것들을 저장할 중앙어음교환소는 없습니다.

우리 may Userland에 영원히 위임하지만 만들기와 같은 일반적인 모범 사례 옵션인 것 같습니다. Groups 구성 하위 트리에서 데이터를 추출하여 Context 속성)이 2.x 이전 버전에 나타납니다.

env.ok_ret_codes 하위 프로세스 명령 재작성을 위한 기본 《0 좋음, 0이 아님》 오류 탐지

Pending

아직 마이그레이션되지는 않았지만, 몇 가지 더 작은 업데이트가 포함되어야 합니다. invoke.runners.Runner.generate_result 그리고 Result 바로 그거야.

env.sudo_prefix Sudo 이진 이름 및 만들 때 사용되는 플래그 결정 sudo 명령 문자열

Pending

Sudo 명령 구성은 현재 실제 sudo 프롬프트의 구성만 표시합니다.

env.sudo_prompt 설정 전달 sudo (및 구성된 암호로 자동으로 회신합니다.)

포트

지금 sudo.prompt 구성 시스템에 있습니다.

env.use_exceptions_for 예외를 발생시킬 작업을 기록하려면 다음을 수행합니다.

제거

Fabric 1을 둘러싼 대부분의 다른 기능과 마찬가지로 직접 이동 sys.exit 《안티 패턴 설계, 이것은 더 이상 존재하지 않습니다. 현대 Fabric은 사용자 수준 코드에 대한 예외를 숨기지 않습니다.

env.use_ssh_config 기본 SSH 구성 로드를 활성화하려면 다음과 같이 하십시오.

포트

SSH 구성 로드가 기본적으로 켜져 있지만 이 옵션을 비활성화하는 옵션이 있습니다.보다 구성 더 많은 것을 위해.

env.version 현재 구조 버전 번호를 표시합니다.

제거

단지 import fabric 및 참고 자료 fabric.__version__ (문자열) 또는 fabric.__version_info__ (튜플).

업그레이드 프로세스 예

이 섹션에서는 작고 중요한 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 the fabric.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))