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メンバが注目している問題。
以下のようにすべての内容を導入する |
除去 |
すべての有用な輸入製品は今トップレベルで得ることができます。例えば |
グローバル構成接続パラメータ(通過) |
除去 |
メインAPIは、OOP:Instantiateを正しく使用することができます |
ユーザ,ホスト,ポートなどを設定する方法として直列化された“ホスト文字列”を強調する. |
移植された/削除された |
また,v 1ではホスト文字列の多くのパラメータ/設定/などが必要となる. |
ホスト文字列のグローバル命名リストとして“Roles”を使用する |
ポート.ポート |
この需要は現在 See the line items for |
タスク関数及び装飾器¶
注釈
タスクに関連する機能のほとんどはInvokeで実現されています;より詳細についてはそれを参照されたい execution そして namespaces 書類です。
デフォルトではタスクは |
ポート.ポート |
このような動作は、今日では実質的に同じであり、わずかに修正および拡張されるだけである(例えば、ロードプロセスをより厳密に制御し、カスタムロード論理を実装するためのAPIフックを参照されたい。 loading-collections () |
“古典的”スタイルの暗黙的タスク関数が不足している |
除去 |
V 1においても,これらの機能は淘汰されようとしており,現在では任意のタスク/名前空間の作成をInvokeによりより明確に記述することができる. |
“新しい”スタイル |
ポート.ポート |
ほぼ同じです超大国があったにもかかわらず |
任意のタスク関数パラメータ(すなわち |
ポート.ポート |
それは自分の行動を持っていますなぜなら任務は今使わなければならないからです これは、よりきれいで、より理解/デバッグが容易であり、より多くのユーザがカバーすることができるAPI構造と交換するために、v 1の“高速DSL”の一部を犠牲にする。 副作用として、“関数モジュール”と“メソッドクラス”との間の区別を減少させ、ユーザは前者からより容易に開始し、彼らの需要増加/変化時に後者に遷移することができる。 |
インポート·歩行による暗黙的タスク木の生成 |
移植された/削除された |
名前空間構造は現在より明確になっています However, the root 明示的な名前空間オブジェクトの使用は、ユーザが生成されたツリーを制御することを依然として可能にするので、導入されたモジュールスキャンは、後で回復することができるかもしれない。 |
|
これらの装飾者たちは、Fabric 1の“DSL”脈絡に大きく属し、何らかの形で回帰する可能性があり、遅くはなく、より早いかもしれないが、優先的に書き換えられていない。 |
|
|
ポート/切る |
並列実行は現在APIレベルで提供されており, この問題は,SSHオブジェクトだけではなく,より高いレベルで解決する必要があるため,これを呼び出しレベルチケットにリンクする. |
|
これは書き換えで最も“欠落した機能”の1つであり,linkはInvokeのトラッカである. |
|
|
ポート.ポート |
多くの実現詳細はv 1と共有されていないが,現代のFabric(Invokeにより)は1つ公開されている. |
CLIパラメータ、オプション、およびアクション¶
タスクパラメータは、例えば、コロン/コンマ分離をカスタマイズしたCLIパラメータとして開示される |
除去 |
CLIパラメータは現在、短いフラグを組み合わせる、スペースや等号で付加された値、オプションの値など、正しいGNU/POSIXパターンの長いフラグと短いフラグです。見 invoking-tasks それがそうです。 |
タスク定義名は,コマンドライン,たとえばタスクに直接反映される. |
除去 |
タスク名は現在下線からハイフンに変換されている.例。役目 |
単一のコマンドラインで複数のタスクを呼び出す能力、例えば |
ポート.ポート |
使いやすいですね。 |
|
ポート.ポート |
2.2で移植する. |
|
除去 |
エージェントを永続的に無効にするには、構成値を設定してください |
|
除去 |
このコマンドの構成およびkwargバージョンは移植されていますが、現在CLIフラグはありません。通常の“シェル環境変数を使用して実行時に配置値を設定することができる”節は有効であるため, may 立ち去られることはありません。これは状況によります。 |
|
除去 |
インタラクティブなプロンプトの消失に関する注釈を参照してください 一般/概念的 それがそうです。セッション中のヒントがなければ、このオプションは必要ありません。 |
|
ポート.ポート |
|
|
今まで色の仕事はまだ少なく、これは欠落する可能性のある部分の一つだ。V 1においてその頻度が使用されるかどうかは決定されないので、再び出現しない可能性があるが、一般に、追加の出力ベクトルとして色を使用することが好きであるので…。 |
|
|
ポート.ポート |
これは今より標準的です |
|
今のところ移植されていないので、移植される可能性が高い。 |
|
|
ポート/切る |
明示的な接続キャッシュはないため,接続を緊急に切断する必要はない.しかし,調査と潜在的な機能切替えは未解決のままである. |
|
ポート.ポート |
これを分割して |
|
ユーザはグローバルを設定することができる そこで,これに気づいたユーザが十分にいれば,v 1の振舞いを大きく模倣するFeature-Add:文字列が最初のパラメータとなることを考える. |
|
|
除去 |
これらのコードは十分に使われていないようで、移植する価値はありません。特に、通常の“Paramikoレベル接続直通”の傘に属しているので、 |
|
除去 |
これは,システムと環境変数を配置することで配置することができる. |
|
ポート.ポート |
動作方式は、以前と実質的に同じである-与えられた場合、任意の所与のタスクの略字を各ホストに対して1回実行する。 |
|
ポート.ポート |
V 1の動作形態と同様に、試行すべき鍵リストを構築するために複数回提供される能力が含まれる。 |
|
ポート.ポート |
It's now |
|
ポート.ポート |
これが今です |
|
除去 |
環境変数設定の使用 |
|
まだ移植されていません。 |
|
|
ポート.ポート |
今は奨励JSONリストがあります-フォーマット!ちなみにこれは |
|
除去 |
これは現代の命令実行コードが世界を見る方法に本当に適合していないため、それは消えてしまった。 |
|
まだ移植されていません。 |
|
|
ポート.ポート |
今です。 |
|
除去 |
これは通常,最初からあまり安全ではなく,現在では関連構成値を設定するための他の多くの方法があるため,少なくとも現在は消失している. |
|
周りのノートを見てください |
|
|
除去 |
これは構成システムのenv var層に残しておいたほうがいいと直感的に教えてくれました |
|
まだ移植されていません。 |
|
|
以下に述べるように API組織. ロールリストは、新しいAPIに部分的にのみ適用され、グローバルまたはCLIレベルでどのように動作するかを模索しています。 |
|
|
除去 |
シェル環境変数の新たな支援はこれを大きく解消している(そうすればよい) |
|
除去 |
そのためには、構成システムを使用してください。 |
|
ポート.ポート |
見 |
|
まだ移植されていません。 |
|
|
除去 |
これは主に肥大しているような気がしますが、再実現するためには解析器を大きく変更する必要があるかもしれませんので、今は必要ありません。 |
|
ポート.ポート |
これが今です |
|
Pending /削除 |
これは、自分のCLIフラグとして戻る可能性は低いが、構成値として返される可能性が高い。 |
|
ポート.ポート |
これはParamikoレベルで直接接続されたパラメータの一部です |
|
参照中の注釈 シェル命令実行 (local ``run゚//sudodo`) 周りに囲まれている |
|
|
除去 |
多くの場合、構成(実際の実行時の環境変数のため、または必要に応じて、例えばユーザ/プロジェクトレベル構成ファイル)が使用されるべきであるが、返される可能性がある。 |
|
ポート.ポート |
そのまま移植して、何の変更もしません。 |
|
まだ移植されておらず,グローバル(手動インスタンス化された)接続/グループ選択の深い修正を待っている. |
|
|
除去 |
もう宿題の列はありません。少なくとも今のところはそうです。それに代わるものが何であっても(すでに実現されたスレッドモデルを除いて)大きく異なる可能性がある. |
シェル命令実行 (local
``run゚
//sudodo`)¶
一般情報¶
以下の2つの場合に共有される行動 run
/sudo
あるいはすべて run
/sudo
``地元``次のいくつかの節では,関数ごとの違いを紹介する.
|
除去 |
すべての命令実行は現在統一されている;すべての3つの機能(現在は 例えば、v 1において |
自動応答を提示し |
ポート.ポート |
♪the 他にも、 |
|
ポート/切る |
These are now methods on |
|
ポート.ポート |
コンテキストマネージャは、任意の範囲で環境変数を設定する唯一の方法であり、現代構造では、サブプロセスハウジング環境は、呼び出しのたびに制御可能である(直接在)。 |
操作制御サブフロー出力や他のアクティビティによるテキスト表示 |
ポート/切る |
“出力レベル”のコア概念はなくなり、短期間で悪い出力レベルを再実現するログ記録モジュール(stdlibまたは他)に置き換えられる可能性がある。 命令実行方法、例えば |
|
命令タイムアウトはまだ移植されていないが,将来的には追加される可能性がある(呼び出し層で). |
|
|
ポート.ポート |
これは完全に移植されています(そしてその行動は常に改善されています)、保存も含めて Fabric 0.xと1.xはこの値を変更しており,Fabric 1の長いライフサイクルでは,この2つのデフォルト値はすべてのユーザ,さらにはほとんどのユーザには適用できないことが明らかになったため,デフォルト値を返すことを選択した. |
|
除去 |
これはあまり有用ではありません概念上の問題を引き起こすことが多いです この2つのストリームを統合する必要があるユーザは、コマンドでシェルリダイレクトを使用したり、設定したりする必要があることを提案します。 |
|
ポート.ポート |
これが今です |
|
ポート.ポート |
これらはすべて今です |
|
既存のもの |
|
返り値は、類似文字列のオブジェクトであり、追加の属性を有する |
ポート.ポート |
リターン値は、半プライベートAPIを有する類似の文字列のタイプではなく、タイプである しかしながら、それらの動作は依然としてブール値のようである-標準的な出力があるかどうかではなく、脱退コードとゼロの関係を反映しているだけである。 |
|
ポート.ポート |
技術的には“除去”されていますがこれは新しいバージョンの |
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
それがそうです。次はいくつかの具体的な追加俳優です。
|
ポート.ポート |
基本的にv 1と同じであるが,現在では場合によっては |
公共事業.¶
誤り処理通過 |
ポート.ポート |
古い機能は“すべてがDSL”の方向に偏りすぎ&経験豊富なPythonistをどのように妨げるかを相殺するために十分な価値を提供していません。 これらの関数は削除され、代わりに“異常のみを引き起こす”(有用なオプションのうちの1つはInvokeのものである |
ANSI色補助オブジェクト |
除去 |
説明に記載されているライブラリのような、多くの優れた端末メッセージライブラリのうちの1つを悪いコピーする必要はないように見える #101 )だから私たちは持っていない。 つまり、将来的には内部色支援を提供するためのライブラリを提供する可能性が高いようであり、その際には再び“内蔵”色アシスタントが実現しやすくなる。 |
|
ポート.ポート |
これが今です |
|
ポート.ポート |
V 1は、Sphinxを使用して、パイプライン内のFabric固有の‘UNWRAP_TASKS’ブースター関数を構築する必要があります。今は新しいのを有効にするだけです。 invocations.autodoc 拡張リストのSphinxミニプラグイン;詳細はリンクを参照してください。 |
|
除去 |
他のホスト文字列に関連するツールと同様に、これらのツールはもはやなくなり、何の役にも立たない。 |
|
決を待つ. |
まだ移植されていない;理想的には、私たちはInvokeで第三者ライブラリを提供するつもりだ。 |
|
除去 |
現代のFabricのための等価物はまだ書かれていない;Connection/Clientオブジェクトが明示的である以上、同じパラメータを用いて新しいオブジェクトをインスタンス化すればよい(以下のようなものを手動で呼び出したくなければ、再誘導によって十分なタイムアウトパラメータがある可能性がある 十分な需要があるように見える場合、それが戻る可能性は低い;もしそうであれば、それはより汎用的な再接続に関連している可能性が高い。 |
|
除去 |
これは移植されておらず,一部の理由は保守者自身がそれを使用したことがなく,直接再実現することは不可能であるからである。しかしながら、そのコア用例“所与のタスクを実行するためにいくつかのデータが使用可能であることを要求する”は、来る依存項の枠組み内で再出現する可能性がある。 |
|
除去 |
像 |
ネット接続.¶
|
ポート.ポート |
これが今のです (SSH構成駆動でない実行時を指定することができます |
|
ポート.ポート |
これはv 1のように動作し続けるであろう. |
|
ポート.ポート |
これが今です |
|
除去 |
V 1では,これは(部分的に実現されている)最初の“任意の誤りの場合はsys.exit!”のみでよい.後退していますふるまい。現代の生地は例外への友好性がはるかに強い |
|
まだ移植されていません。 |
|
|
まだ移植されていません。 |
|
|
ポート.ポート |
現在はシステムを構成することで制御することもできるし,直接制御することでもよい |
認証¶
注釈
幾らか env
V 1の鍵はParamikoへの鍵のみである SSHClient.connect
方法です。現代のFabricは、この方法に渡すパラメータを明示的に制御することを可能にしています connect_kwargs
configuration サブツリー、下表ではこの方法をよくご紹介します。
|
ポート.ポート |
使用 |
|
ポート.ポート |
使用 これは接続の二重タスクを実行するために使われています and Sudoパスワード |
|
ポート.ポート |
使用 |
|
除去 |
ParamikoレベルのAPIは不必要な(エラーが発生しやすい)混同されているため削除されており,ユーザは彼らがどのタイプの鍵を処理しているかを知っており,インスタンス化しているはずである. |
|
ポート.ポート |
これを |
|
ポート.ポート |
使用 |
|
ポート/切る |
どれも しかしながら、ユーザは、暗黙的に遷移する構成値を設定するために、より簡単な方法を必要とする可能性があると予想される |
配置 |
ポート.ポート |
まだ光栄です新しい受賞者たちは |
ファイル転送¶
以下の機能細分化は put
および/または get
V 1中の“operation”関数.
ローカルユーザとリモートユーザが所有する単一のファイルを送信する |
ポート.ポート |
両方の方向の基本ファイル転送が有効であり、以下のように提供される これらの方法の署名は、v 1と比較して、位置パラメータの本質であるにもかかわらず除去されている。 ( |
暗黙的な“ローカルコンテキストに対する”行為を省略する“Destination”パラメータ(例えば、 |
ポート.ポート |
これがPythonだから、あなたはまだ明確にしなければならないかもしれない。 |
任意のファイルパスを使用する or 転送操作の両端の類似ファイルのオブジェクト(例えば、アップロード |
ポート.ポート |
これは維持するのに十分に有用で簡単なトリックだ。 |
宛先にソースファイルモードを保持する(例えば、本来宛先のumaskによって破棄される実行可能ビットを再追加することを保証する)。 |
ポート.ポート |
これは移植だけでなく、今はデフォルト行動だ。必要であれば、KWARGによって無効にすることができる。 |
縛り付ける |
除去 |
これは絶対にv 1の最も嫌な部分の1つであり、後続の呼び出しのため、ユーザ自身ができないことを実際にしたことがない。 もし十分なユーザーがその損失を渇望していれば may 再検討するが、もし私たちがそうすれば、中間文書を簡略化および/または関連しない方法を真剣に考慮するだろう。 |
再帰的マルチファイル送信(例えば、 |
除去 |
これは.。 もう一つ V 1で最も面倒な部分の1つは,時間の経過とともに,その保守負担が再設計上うまくできていない事実をはるかに上回っていることが明らかになった. |
配置¶
全体的に言えば,古い構成に比べて配置が大きく改善されている fabricrc
ほとんどの構成論理は Invoke's configuration system これは、完全な構成階層構造(コード内構成、複数のプロファイル位置、環境変数、CLIフラグなど)および複数のファイルフォーマットを提供する。現代の交換行列では,交換行列1におけるほとんどの配置経路は,階層構造の中で最もニーズに適した任意の部分を配置する操作となる.
現代版のFabricはInvokeの設定のみを小さく修正(またはパラメータ化)している;参照されたい our locally-specific config doc page もっと細かいことを知っています。
注釈
必ず本文書の他の場所で任意の所与のv 1に関する詳細を検索してください 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
参照物.¶
V 1の多く/ほとんどのメンバー fabric.env
上記の各テーマの部分に紹介されている;以下の条件を満たすものはいずれも not よそに隠れて、ここに住んでいます。これらは明確に明記されています env.<name>
ブラウザやビューアでの検索を容易にする.
Env変数の一部は公開されていない&したがって暗黙的にプライベートである;ここではこれらの変数を表していない.
|
除去 |
1つの概念が消失した場合には,エンドユーザに最も合理的に見える異常を提示したり,使用したりするだけでよい. |
|
ポート/切る |
織物の しかしながら、このAPIの詳細な情報(例えば、タスクを介した |
|
ポート/切る |
以下の注釈をご覧ください |
|
ポート.ポート |
これが今です |
|
ポート.ポート |
これが今です なお、このデータのリモートおよびローカルコンテキストは設定されていません;については参照されたい |
|
まだ移植されておらず,役割/司会者リストの全面的な改革の一部として扱われる可能性がある. |
|
|
ポート.ポート |
属性下の構成オプション。 |
|
除去 |
なぜv 1がこれが構成中にキャッシュされる価値があると思うのか完全には決定できません。この情報が必要な場合は、導入して呼び出すだけです。 |
|
並列stdout/errを区別することは、依然として進行中の動作であり、最終的には、プログレッシブログ記録およびプレフィックス(理想的には実際のログ記録によって)を再利用することができるか、または各接続に流れるログファイルのようなより簡単な方法を試みることができる。 |
|
|
ポート.ポート |
ヒント自動応答は現在公開されています |
|
ポート.ポート |
ロードされた任務 |
|
移植された/削除された |
Invokeの割込み捕捉行為は現在“つねに子プロセスに割込み文字のみを送信して継続する”であり,子プロセスの処理を許可する. ユーザが構成変更によってこの動作が実現されていないことを許可することも、それを必要とする人がいるか否かに応じて、v 1においてオプションとして追加されるが、これは、後方比較のためである。 技術的には,サブクラス化や書き換えにより中断行動を変更することも可能である. |
|
中で述べたとおり 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
オブジェクトは,これが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 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.")
他の簡単な任務¶
次の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))