1.xからのアップグレード

現代アーキテクチャ(2+)は,ソフトウェアの再実現と再構成をほぼ代表している.もうしばらくしています broken in two 整理して明確にすることなどです場合によっては、アップグレードは基本的な検索と置換だけを必要とし、他の場合には、より多くの仕事をする必要がある。

もしあなたが本文の枠をよく読んでいれば、それはあなたが完全にアップグレードするまで、あなたを正しい方向に導くだろう。Fabric 1で使用されている機能がここに記載されていない場合は、ペナルティリストを提出してください on Github 私たちはできるだけ早く更新します。

警告

2.0発配線から始まり、Fabric 2は not 100%の機能で1.xと対等に座る!いくつかの機能は明確に削除されているが,他の機能はまだ移植されていないか,時間制限のためか,これらの機能を現代環境で再検査する必要があるためである.

以下の情報を確認してください。 詳細をアップグレードする エラー報告書を提出する前に、非常に詳細なリストが含まれている部分!

また会いましょう the roadmap リリースリリース制御に関する他の説明。

なぜアップグレードするのですか?

私たちは前後を問わず現代生地のいくつかの具体的な改善を指摘したいです。これらの改善はあなたのアップグレードを価値があるかもしれません。

注釈

これらも文書の残りの部分にリストされているので、すでに売れていれば、そこをスキップしてください。

  • Python 3と互換性があります(具体的には、私たちは現在2.7と3.4+);

  • スレッドセキュリティ-同時を実現するために多くの処理を必要としない;

  • APIは以下の点について再構成されている. fabric.connection.Connection グローバルモジュール状態ではなくオブジェクト;

  • コマンドライン解析器は、各タスクに基づいて通常のGNU/POSIXスタイルフラグとオプションを使用することを可能にするように全面的に改造されています(もはや必要ありません fab mytask:weird=custom,arg=format );

  • 任務組織はより明確で柔軟で、“魔力”はもっと小さい。

  • タスクは、他のタスクが常にそれ自身の前または後に実行されることを宣言することができる。

  • 多くの拡張を構成し、複数のプロファイルおよびフォーマット、環境変数、各ユーザ/プロジェクト/モジュール構成などを可能にする。

  • デフォルトでSSHプロファイルロードを有効にします&システム/ユーザ/実行時ファイル選択;

  • シェルコマンドの実行APIはローカルとリモートのメソッド呼び出しにまたがって一致しています-区別しません local そして run (もちろん、命令の実行位置を除いて!);

  • シェルコマンドは、相互作用、同期捕捉、および表示(リモートプロセスだけではなく、ローカルサブプロセスに現在適用されています)、符号化制御、および自動応答;

  • ParamikoのAPIをSSH層に使用してより透明にする--例えば 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自体は、Invokeの上にどのように構築されているのかあまり気にしていません。

しかしながら,これまで-中上級ユーザにとってそれ自体が非常に有用であったことは,現代のFabricが設計時にライブラリや直接APIの使用を考慮していたことである. InvokeをあなたのInvokeタスク内の純粋なAPIとして使用して、あなたのCLI要件およびFabricを満たすことができます。

言い換えれば回避することができます fab /Fabfiles、自分が一時セッションに便利であることを非常に必要としていることを発見しない限り、例えば --hosts このようなものです

2つの構造バージョンを同時に実行します

段階的なアップグレードを助けるために、以下のような名前で現代構造をインストールする場合があります fabric2 (2.0+バージョンとしてを除く fabric )であり、バージョン1.xのインストールと一緒に使用することができる。

したがって、大きなコードライブラリを持っていて、現代版にジャンプしたくなければ、2つの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 移植された(視力に合わなくなった,維持価値が悪い,など),回復することは不可能であった。

以下は、ナビゲーション用の高速ローカルディレクトリです。

一般/概念的

  • 現代のFabricはPython 3と完全に互換性があります;コストはPython 2.5へのサポート(Fabric 1の長期特性)をキャンセルしました--実際、私たちはPython 2.7より早いバージョンのサポートを放棄しました。

  • CLIタスク向けワークフローは依然として主要な設計目標であるが,ライブラリ使用例はもはや二等市民ではなく,逆にライブラリ機能はまず設計されており,CLI/タスク機能はその上に構築されている.

  • また,CLI用例では,バージョン1は認証秘密さらには接続パラメータの“怠惰”インタラクション提示を強調しすぎており,強い配置機構が不足していることが原因である.時間の経過とともに,これは困惑した非インタラクション行動と困難なデバッグ/テストプロセスのトレードオフを行う価値がないことは明らかである.

    現代のFabricは、(時間とともにv 1に追加された機能に基づいて)よりきれいな方法を採用しているといえるが、ユーザが構成システムを利用することを奨励し、および/または スタートアップ システムが途中で欠落情報を決定すると,提示ではなく異常を引き起こす.

  • 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.

また,v 1ではホスト文字列の多くのパラメータ/設定/などが必要となる. fabric.connection.Connection 実例です。

ホスト文字列のグローバル命名リストとして“Roles”を使用する

ポート.ポート

この需要は現在 fabric.group.Group いくつかの数のものを包装しています fabric.connection.Connection “すべてのメンバに対して1つのことをする”方法の例を持つ.)ユーザはこれらのコンテンツを好きなように作成して組織することができる.

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 積み込み工.

除去

V 1においても,これらの機能は淘汰されようとしており,現在では任意のタスク/名前空間の作成をInvokeによりより明確に記述することができる. Task そして Collection それがそうです。

“新しい”スタイル @task -修飾されたモジュールレベルのタスク関数

ポート.ポート

ほぼ同じです超大国があったにもかかわらず @task 括弧なしで使用することができますが、v 1は1つしかありません task_class パラメータ,Invokeには多くの異なる名前空間と解析器提示および実行に関するオプションがある.

任意のタスク関数パラメータ(すなわち def mytask(any, thing, at, all)

ポート.ポート

それは自分の行動を持っていますなぜなら任務は今使わなければならないからです Context (ハーブの呼び出し)や fabric.connection.Connection (Fabric)オブジェクトをその最初の位置パラメータとする.従来と同様に,関数署名の残りの部分は完全にユーザによって決定&自動CLIフラグに変換される.

これは、よりきれいで、より理解/デバッグが容易であり、より多くのユーザがカバーすることができるAPI構造と交換するために、v 1の“高速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

これは書き換えで最も“欠落した機能”の1つであり,linkはInvokeのトラッカである.

Task プログラミング方式でタスクを作成するためのクラス(いくつかの関数オブジェクトを使用することと @task 装飾師)

ポート.ポート

多くの実現詳細はv 1と共有されていないが,現代のFabric(Invokeにより)は1つ公開されている. 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

今まで色の仕事はまだ少なく、これは欠落する可能性のある部分の一つだ。V 1においてその頻度が使用されるかどうかは決定されないので、再び出現しない可能性があるが、一般に、追加の出力ベクトルとして色を使用することが好きであるので…。

-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-rootloading-collections それがそうです。

-g/--gateway (に) env.gateway )グローバルSSHゲートウェイホスト文字列を選択する

Pending

ユーザはグローバルを設定することができる gateway 環境変数でオプションを配置することで,一見専用のCLIオプションを必要としなくなる.しかし、この方法では文字列値のみを設定することができ、文字列値のみを使用することができる ProxyCommand 様式ゲートウェイですから ダメだ 置換v 1の --gateway (ホスト文字列を取得して変換する ProxyJump スタイルゲートウェイ).

そこで,これに気づいたユーザが十分にいれば,v 1の振舞いを大きく模倣するFeature-Add:文字列が最初のパラメータとなることを考える. fabric.connection.Connection そして、この結果オブジェクトは、 gateway それがそうです。

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

除去

これらのコードは十分に使われていないようで、移植する価値はありません。特に、通常の“Paramikoレベル接続直通”の傘に属しているので、 connect_kwargs オプションを構成します。(必要であれば、任意の他の配置値のように、実行時にシェル環境変数で設定することができます。)

--hide/--show グローバル調整出力表示用

除去

これは,システムと環境変数を配置することで配置することができる.

-H/--hosts

ポート.ポート

動作方式は、以前と実質的に同じである-与えられた場合、任意の所与のタスクの略字を各ホストに対して1回実行する。

-i SSH鍵ファイル名選択用

ポート.ポート

V 1の動作形態と同様に、試行すべき鍵リストを構築するために複数回提供される能力が含まれる。

-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 制御接続タイムアウト

ポート.ポート

これはParamikoレベルで直接接続されたパラメータの一部です connect_kwargs 値を配置する。

-T/--command-timeout

Pending

参照中の注釈 シェル命令実行 (local ``run゚//sudodo`) 周りに囲まれている timeout 粗野な人。

-u/--user グローバルデフォルトユーザ名を設定するには、以下の操作を実行してください

除去

多くの場合、構成(実際の実行時の環境変数のため、または必要に応じて、例えばユーザ/プロジェクトレベル構成ファイル)が使用されるべきであるが、返される可能性がある。

-w/--warn-only 警告と中止行動を切り替えるには、以下の操作を実行してください

ポート.ポート

そのまま移植して、何の変更もしません。

-x/--exclude-hosts (に) env.exclude_hosts )他の方法で選択されたターゲットを排除する

Pending

まだ移植されておらず,グローバル(手動インスタンス化された)接続/グループ選択の深い修正を待っている.

-z/--pool-size 並列モード作業チーム列プールサイズを設定するための

除去

もう宿題の列はありません。少なくとも今のところはそうです。それに代わるものが何であっても(すでに実現されたスレッドモデルを除いて)大きく異なる可能性がある.

シェル命令実行 (local ``run゚//sudodo`)

一般情報

以下の2つの場合に共有される行動 run/sudo あるいはすべて run/sudo ``地元``次のいくつかの節では,関数ごとの違いを紹介する.

local and run/sudo 千差万別のAPIと実現

除去

すべての命令実行は現在統一されている;すべての3つの機能(現在は fabric.connection.Connection しかし、 local 以下のように得ることもできる invoke.run 独立して使用するためには、同じ下位プロトコルおよび論理( Runner クラス階層構造)は,プロセス作成やパイプオーバヘッドなどの低層の詳細のみが異なる.

例えば、v 1において local 表示と捕獲サブプロセス出力の間で選択することが要求されます;現代 local まるで run 2つのことを同時にしています

自動応答を提示し env.prompts および/または sudo 内部構造になっています

ポート.ポート

♪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の長いライフサイクルでは,この2つのデフォルト値はすべてのユーザ,さらにはほとんどのユーザには適用できないことが明らかになったため,デフォルト値を返すことを選択した. False もっときれいで無駄が少ないからです

combine_stderr (KwargとKwarg env.combine_stderr )Paramikoがリモートstdoutおよびstderrをstdoutストリームに編組するかどうかを制御する

除去

これはあまり有用ではありません概念上の問題を引き起こすことが多いです pty (ダミー端末は、本質的には常にこの2つのストリームを組み合わせているからである。)

この2つのストリームを統合する必要があるユーザは、コマンドでシェルリダイレクトを使用したり、設定したりする必要があることを提案します。 pty=True それがそうです。

warn_only 非ゼロリターンコードの自動停止を防ぐための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 それがそうです。これらは古い“属性文字列”と同じすべての情報を公開しており,それら自体が文字列に偽装されていない点が真の違いである.

しかしながら、それらの動作は依然としてブール値のようである-標準的な出力があるかどうかではなく、脱退コードとゼロの関係を反映しているだけである。

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> (rootと黙認するのではなく)

ポート.ポート

まだここにありますまだ呼ばれています user それがそうです。

group Sudo‘dコマンドの有効グループを制御するパラメータ

Pending

これはまだ移植されていない。

local

新バージョンの詳細については、本節の上部の“一般”注釈を参照 local それがそうです。次はいくつかの具体的な追加俳優です。

shell どのシェルに問い合わせたいかを指定するkwarg subprocess.Popen 使用

ポート.ポート

基本的にv 1と同じであるが,現在では場合によっては os.execve (または類似の)代わりに使う subprocess.Popen それがそうです。行動は大同小異:筐体パッケージがない(従来版のように run )は,オペレーティングシステムにどのような実際のプログラムを実行するかを通知するだけである.

公共事業.

誤り処理通過 abort そして warn

ポート.ポート

古い機能は“すべてがDSL”の方向に偏りすぎ&経験豊富なPythonistをどのように妨げるかを相殺するために十分な価値を提供していません。

これらの関数は削除され、代わりに“異常のみを引き起こす”(有用なオプションのうちの1つはInvokeのものである Exit )は、薄い包装器ではなく、Python式のような感じがするからです。 sys.exit あるいはそうしなければなりません except SystemExit: これが一回であることを望みます SystemExit あなた自身のコードが提案されました!

ANSI色補助オブジェクト fabric.colors スタンドアロンライブラリなしでANSI色のテキストを容易に印刷することができるようにする

除去

説明に記載されているライブラリのような、多くの優れた端末メッセージライブラリのうちの1つを悪いコピーする必要はないように見える #101 )だから私たちは持っていない。

つまり、将来的には内部色支援を提供するためのライブラリを提供する可能性が高いようであり、その際には再び“内蔵”色アシスタントが実現しやすくなる。

with char_buffered ローカルストリームを文字バッファに強制するためのコンテキストマネージャ

ポート.ポート

これが今です character_buffered それがそうです。

docs.unwrap_tasks パッケージのタスク関数から文書文字列を抽出するための

ポート.ポート

V 1は、Sphinxを使用して、パイプライン内のFabric固有の‘UNWRAP_TASKS’ブースター関数を構築する必要があります。今は新しいのを有効にするだけです。 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 支持する.

ポート.ポート

これはv 1のように動作し続けるであろう.

with remote_tunnel(...): ポート転送

ポート.ポート

これが今です fabric.connection.Connection.forward_local なぜならそれは 前へ A 地元 ポートは遠隔端末に接続されている.(新たに増加したのは論理逆である。 fabric.connection.Connection.forward_remote ()

NetworkError ネットワークに関連したエラーに起因しています

除去

V 1では,これは(部分的に実現されている)最初の“任意の誤りの場合はsys.exit!”のみでよい.後退していますふるまい。現代の生地は例外への友好性がはるかに強い NetworkError V 1では,現在は真の底層異常となるだけであり,通常Paramikoやstdlibから来る.

env.keepalive ネットワークを設定してアクティブ値を維持する

Pending

まだ移植されていません。

env.connection_attempts 接続リトライの設定

Pending

まだ移植されていません。

env.timeout 接続タイムアウトを制御する

ポート.ポート

現在はシステムを構成することで制御することもできるし,直接制御することでもよい fabric.connection.Connection それがそうです。

認証

注釈

幾らか env V 1の鍵はParamikoへの鍵のみである 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 V 1中の“operation”関数.

ローカルユーザとリモートユーザが所有する単一のファイルを送信する

ポート.ポート

両方の方向の基本ファイル転送が有効であり、以下のように提供される fabric.connection.Connection.get ``Fabric.connection.Connection.put`(コードは個別に担当するクラスに分類されるが, fabric.transfer.Transfer ()

これらの方法の署名は、v 1と比較して、位置パラメータの本質であるにもかかわらず除去されている。 (get(remote, local) そして put(local, remote) そのままにしてください。

暗黙的な“ローカルコンテキストに対する”行為を省略する“Destination”パラメータ(例えば、 put('local.txt') 遠隔地に暗黙的に乗せる $HOME/local.txt ()

ポート.ポート

これがPythonだから、あなたはまだ明確にしなければならないかもしれない。

任意のファイルパスを使用する or 転送操作の両端の類似ファイルのオブジェクト(例えば、アップロード StringIO ディスクファイルではありません)

ポート.ポート

これは維持するのに十分に有用で簡単なトリックだ。

宛先にソースファイルモードを保持する(例えば、本来宛先のumaskによって破棄される実行可能ビットを再追加することを保証する)。

ポート.ポート

これは移植だけでなく、今はデフォルト行動だ。必要であれば、KWARGによって無効にすることができる。

縛り付ける sudo ファイル転送の一部としての操作

除去

これは絶対にv 1の最も嫌な部分の1つであり、後続の呼び出しのため、ユーザ自身ができないことを実際にしたことがない。 sudo だから移植しないことにしました

もし十分なユーザーがその損失を渇望していれば may 再検討するが、もし私たちがそうすれば、中間文書を簡略化および/または関連しない方法を真剣に考慮するだろう。

再帰的マルチファイル送信(例えば、 put(a_directory) ディレクトリ全体とそのすべてのコンテンツをアップロード)

除去

これは.。 もう一つ V 1で最も面倒な部分の1つは,時間の経過とともに,その保守負担が再設計上うまくできていない事実をはるかに上回っていることが明らかになった. rsync YE OLDのようなアーカイブファイルツールの使用および/または tar +``gzip``

配置

全体的に言えば,古い構成に比べて配置が大きく改善されている fabricrc ほとんどの構成論理は Invoke's configuration system これは、完全な構成階層構造(コード内構成、複数のプロファイル位置、環境変数、CLIフラグなど)および複数のファイルフォーマットを提供する。現代の交換行列では,交換行列1におけるほとんどの配置経路は,階層構造の中で最もニーズに適した任意の部分を配置する操作となる.

現代版のFabricはInvokeの設定のみを小さく修正(またはパラメータ化)している;参照されたい our locally-specific config doc page もっと細かいことを知っています。

注釈

必ず本文書の他の場所で任意の所与のv 1に関する詳細を検索してください 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 V 1によって無視される命令、例えば 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 参照物.

V 1の多く/ほとんどのメンバー fabric.env 上記の各テーマの部分に紹介されている;以下の条件を満たすものはいずれも not よそに隠れて、ここに住んでいます。これらは明確に明記されています env.<name> ブラウザやビューアでの検索を容易にする.

Env変数の一部は公開されていない&したがって暗黙的にプライベートである;ここではこれらの変数を表していない.

env.abort_exception どの異常を使用して中止するかを設定するために

除去

1つの概念が消失した場合には,エンドユーザに最も合理的に見える異常を提示したり,使用したりするだけでよい. 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゚//sudodo`) それがそうです。

env.dedupe_hosts マージホストリスト内の重複ホストに対して重複データ削除を実行するか否かを制御する

Pending

まだ移植されておらず,役割/司会者リストの全面的な改革の一部として扱われる可能性がある.

env.echo_stdin (未記録)標準入力をオフにするためのデフォルト強調

ポート.ポート

属性下の構成オプション。 run 木は,ほぼ同じ行為を持つ.

env.local_user 発見されたローカルユーザー名への読み出し専用アクセス

除去

なぜv 1がこれが構成中にキャッシュされる価値があると思うのか完全には決定できません。この情報が必要な場合は、導入して呼び出すだけです。 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 それがそうです。

ユーザが構成変更によってこの動作が実現されていないことを許可することも、それを必要とする人がいるか否かに応じて、v 1においてオプションとして追加されるが、これは、後方比較のためである。

技術的には,サブクラス化や書き換えにより中断行動を変更することも可能である. 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 オブジェクトは,これがv 1の内蔵“ロール”マッピングを模倣するだけであっても.簡単な用例では --hosts コアオプションはまだ利用可能です。

注釈

これは積極的に開発されている分野であり、したがってフィードバックを歓迎する。

現在,ソースコードセグメントにハードコードを与えるホスト名は my-server このFabfileは、例えば、この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.")

他の簡単な任務

次の2つのタスクは簡単な行のプログラムで、何が全体を代替しているのかを見ています local 機能::

@task
def commit(c):
    c.local("git add -p && git commit")

@task
def push(c):
    c.local("git push")

他のタスクからタスクを呼び出す

これは呼び出しレベルが変化していくもう1つの領域であるが,現在ではv 1で行ったように,他のタスクを関数呼び出しとして簡単に行うことができる.主な違いは、ロードされたプロファイルまたは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))