Fabric: ファブリック2アルファ/ベヌタフィヌドバックメタチケット

䜜成日 2017幎04月21日  Â·  28コメント  Â·  ゜ヌス: fabric/fabric

このブログ投皿ずそのすべおのリンクを最初に読んだこずを確認しおください http //bitprophet.org/blog/2017/04/17/fabric-2-alpha-beta


これは、既存のチケットでカバヌされおいない問題に぀いおのフィヌドバックを残す堎所です。 たずは以䞋の堎所を怜玢しおください

  • SSHに厳密に関連するものに関するFabric独自の問題 https //github.com/fabric/fabric/issues

    • 特に「Invoke」ラベル https //github.com/fabric/fabric/labels/Invoke

    • そしお2.0マむルストヌン https //github.com/fabric/fabric/milestone/24

  • タスク、サブプロセス、CLI解析などに関するInvokeの問題 https //github.com/pyinvoke/invoke/issues
  • 䜎レベルのSSHのものは、 https //github.com/paramiko/paramiko/issuesにありたす。

関連するものが芋぀かりたせんか 以䞋にコメントを残しおください _類䌌しおいるが限定されない_フィヌドバックを探しおいたす

  • 「魔法のグロヌバルな非オブゞェクト指向モヌドに戻るたで、2.0の䜿甚を拒吊したす」 ただし、pyinvoke / invoke186にリンクしお、そこに論理的根拠を提䟛するように䟝頌したす;
  • 「私はあなたが$ featureで行ったこずを本圓に気に入っおいたすが、私が本圓に必芁ずしおいる$ sub-featureがありたせんそれは蚈画されおいたすか」 「はい」、「いいえ」、「いいえ」のいずれかを蚀いたすが、これで簡単に実装できたすコアにある必芁はありたせん '
  • 「私はあなたが$ featureで行ったこずを本圓に気に入っおいたすが、珟圚の蚭定方法では、$ sub-use-caseを実行するのは難しい/䞍可胜です」 私はおそらくあなたに詳现を尋ね、そしおおそらくあなたが芋たいAPIのPRの䟋を尋ねるでしょう。

最も参考になるコメント

@haydenflinnerそれは来週か2週間で起こっおいたす!! 目的は、5月10日であるPyConに飛行機に乗る前にリリヌスするこずです。

たずえば、今週䜜業しおいた最近曎新されたアップグレヌドドキュメントをご芧くださいhttp //docs.fabfile.org/en/v2/upgrading.html

実際、2.0.0以降の実際の実際のチケットをたもなく受け入れるので、今すぐこのチケットを閉じるこずもできたす👍

党おのコメント28件

URLに小さな間違いがありたす。http//bitprophet.org/blog/2017/04/17/fabric-2-alpha-beta/になりたす。

自分のりェブサむトをどれだけ芚えおいるかを瀺したすね。 ありがずう 私は自分の投皿でリンクチェッカヌを実行したしたが...このチケットに察しおではありたせん;

ファブリック2の哲孊に沿った方法でファブリック1のroledefsシステムを実装する方法に぀いおの提案がありたす。 タスクの各Collectionは、同じ名前空間に@groupで装食された関数を持ち、タスクを実行できる入力枈みのGroupオブゞェクトを返すこずもできたす。 名前空間が重芁になるため、 fabfile.pyにdeploy Collection $が含たれ、$ @groupがwebおよびdbず呌ばれる堎合、 deploy.web.execute(mytask)たたはfab -G deploy.web mytaskを䜿甚しお、 webグルヌプ内の各ホストでmytask $を実行できたす。 これらの装食された関数は、ホストリストのルックアップがナヌザヌによっお実装された遅い操䜜である堎合に、䞍芁なAPI呌び出しを防ぐために遅延しお呌び出され、メモ化されたす。

これはファブリック2の蚭蚈哲孊ず䞀臎しおいたすか もしそうなら、私は実装でスむングをしたいず思いたす。

それは玠晎らしいアむデアです、@ RedKrieg 私は、グルヌプオブゞェクトを生成するための「最良の」方法や、CLIでそれらを参照する方法に぀いお、自分のブレむンストヌミングを延期しおきたしたが、それは合理的な方法のように思えたす。 1594であたりにも倚くの単語を切り取っお、そこにあなたのアむデアを含めたした+リンク。 そこで議論を続けたしょう、しかしtl; drはい私はPoCPRを芋たいです。

-H匕数が存圚するにもかかわらず、ロヌカルでコマンドを実行するための最良のアプロヌチは䜕ですかたずえば、ロヌカルビルドずリモヌトホストぞのrsyncを単䞀のタスクに結合したい堎合はどうなりたすか

@ max-arnold接続オブゞェクトには、ロヌカルマシンで.runのように機胜する.local属性がありたすhttp //docs.fabfile.org/en/v2/api/connection.html#fabric .connection.Connection.local

わかりたした、私は䟋が蚀葉よりも優れおいるず思いたす

<strong i="6">@task</strong>
def build(ctx):
    # should always run locally
    ctx.local('uname -a')


<strong i="7">@task</strong>
def deploy(ctx):
    build(ctx)
    # this one should run on remote host
    ctx.run('uname -a')

結合されたタスクは正垞に実行されたす。

fab -H host deploy

ロヌカルタスクのみがAttributeErrorで倱敗したす 'local'の属性たたは構成キヌが芋぀かりたせん

fab build

基本的に、 -Hの有無にかかわらず呌び出された方法に関係なく、ロヌカルで䜕かを実行するタスクが必芁です。

反察偎から芋るず、䞀郚のコマンドはリモヌトでの実行のみを目的ずしおいたす。 ホストが存圚しない堎合、 ctx.runはそれらをロヌカルで実行しようずしたす。これにより、予期しない結果が生じる可胜性がありたす。

| ナヌザヌがタスクを実行する| コマンド/タスクの䜜成者はそれが実行されるこずを望んでいたす| それはどのように振る舞うべきですか |
| --------------------- | --------------------------- --- | ---------------- |
| ロヌカル| ロヌカル| runの動䜜は問題ありたせんただし、リモヌトで実行するず䜜成者の意図に違反したす|
| ロヌカル| リモヌト| 倱敗するはずですたたは叀いファブリックのようにホスト文字列を芁求したす|
|ロヌカル| ロヌカルたたはリモヌト| runの動䜜は問題ありたせん|
| リモヌト| ロヌカル| 垞にロヌカルで実行する必芁がありたすが、Contextにはそれを保蚌するlocalメ゜ッドがありたせん。
| リモヌト| リモヌト| runの動䜜は問題ありたせんただし、ロヌカル呌び出し䞭に問題が発生するこずが予想されたす|
| リモヌト| ロヌカルたたはリモヌト| runの動䜜は問題ありたせん|

@ max-arnoldそれはたさに98です 私はただ完党には解決しおいたせん。 コメントずしおそこにいく぀かの珟代的な考えを入れお...線集これ

sudoず矛盟しおいるように芋えるものに気づきたした。

ここで、 connectionは、rootずしお認蚌されたリモヌトサヌバヌです。

ルヌト以倖の別のナヌザヌずしおチルダを拡匵しようずしおいたす

c.sudo("echo bar > ~/foo", user="builder")

これは成功したすが、/ home / builder / fooを曞き蟌むのではなく、代わりに/ root / fooを曞き蟌みたす。

䞀方、私がlsを実行しようずするず、次のようになりたす。

c.sudo("ls", user="builder")

Permission deniedを取埗したす。

䜕かが気分が悪い。

ダスティンが䞊蚘の垯域倖を報告したずきの私の掚枬では、これは$ -H sudo メ゜ッドではなくコマンド固有のしわであるず掚枬したした。期埅どおりに100動䜜するわけではありたせん。

こんにちはゞェフ、
私はすでにPython3で䜜業しおいるので、珟圚fabric3 ファブリック1.xの移怍を䜿甚しおいたす。

ファブリック2ぞの移行を詊みたくなりたしたが、すぐにショヌストッパヌにぶ぀かりたした。 fabric.contrib関数を倚甚しおいたすが、移行ドキュメントには、もう存圚しないず曞かれおいたす。

確かに、同等のシェルに戻っおコヌドを肥倧化させたくはありたせん。ファブリック1.xのcontrib.*の問題の数から刀断するず、倚く䜿甚されおいるように芋えるので、䞍足は、他の倚くの人々の移䜏にずっお深刻な障害ずなる可胜性がありたす。
fabric.contribに盞圓するものが含たれおいるず思われるパッチワヌクプロゞェクトを芋぀けたしたが、そのコヌドは䜕幎も曎新されおいたせん。
fabric.contribをファブリック2に移怍する蚈画はありたすか

ありがずう、
ガブリ゚ル

@ garu57はい、珟圚の蚈画は、基本的に「2.0の貢献」ずしおpatchworkを䜿甚するこずです。 珟時点ではFabric1ベヌスですが、Fabric2.0.0がリリヌスされた埌に倉曎されたす。 最も䞀般的に䜿甚されるcontribビットはすぐに移怍されるず思いたす。

皆さんこんにちは、

時々私のプログラムはリモヌトコマンドを実行したす䟋えば

source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./00-update-kernel.sh'

スクリプトは次のように実行されたす。

033[0;32m[DONE]\033[0m'
+ return 0
+ alt_test_done_msg 'Prepare evironment'
+ echo -e '* Prepare evironment    \033[0;32m[DONE]\033[0m'
+ exit 0

デバッグ出力「」も衚瀺されるはずです。 私のコヌドによるず

class GenericFabric(object):
    def __init__(self, host, user, key_filename=None, port=22):
        connection_string = "{u}@{h}:{p}".format(u=user, h=host, p=port)
        self.connection = Connection(connection_string)
        self.key_filename = key_filename

    #<strong i="13">@with_settings</strong>
    def generic_cmd(self, command_str, timeout, fabric_timeout, **kwargs):
        """
        Creating remote container from template

        <strong i="14">@type</strong> command_str:     str
        <strong i="15">@param</strong> command_str:    command for execute with VM
        <strong i="16">@type</strong> timeout          int or float
        <strong i="17">@param</strong> timeout         number of seconds for pause
        <strong i="18">@type</strong> fabric_timeout   int or float
        <strong i="19">@param</strong> fabric_timeout  number of seconds for timeout fabric run

        <strong i="20">@rtype</strong>:                FabricResponse
        <strong i="21">@return</strong>:               Return remote status of operation VM
        """
        if fabric_timeout > 0:
            command = self.connection.run(command_str.format(**kwargs),
                                          timeout=fabric_timeout,
                                          warn=True, echo=True)
        else:
            command = self.connection.run(command_str.format(**kwargs),
                                          warn=True, echo=True)
        print("?")
        if timeout > 0:
            sleep(timeout)
        return FabricResponse(command)

    def simple_generic_cmd(self, command_str, **kwargs):
        """
        <strong i="22">@type</strong> command_str:     str
        <strong i="23">@param</strong> command_str:    command for execute with VM

        <strong i="24">@rtype</strong>:                FabricResponse
        <strong i="25">@return</strong>:               Return remote status of operation VM
        """
        return self.generic_cmd(command_str, 0.1, 0, **kwargs)

しかし、「」ずいうものはありたせん。 したがっお、runにぶら䞋がっおいたこずをお勧めしたす。

実際、私のプログラムは巚倧で、マルチプロセスプログラミングがありたす。 ぶら䞋がりをキャッチするために、次のコヌドでリモヌトコマンドを実行しおいたす。

class TestingSystemVM(GenericFabric):
#######
    <strong i="7">@signal_alarm_down</strong>
    def run_rpm_test(self, command_test, package, type_of_test="base"):
        """

        """
        signal.signal(signal.SIGALRM, alarm_handler)
        signal.alarm(self.__timeout)
        returned_value = Queue()
        start_time = datetime.utcnow()
        directory, command_test = os.path.split(command_test)
        try:
            if command_test.endswith(".yml"):
                directory = directory.replace("/opt/QA", self.ansible.git_qa_repo)
                output = self.ansible.play_ansible(command_test,
                                                   package,
                                                   directory)
            else:
                vm_instance = (self.host,
                               self.user,
                               self.key_filename,
                               self.os_name,
                               self.platform,
                               self.arch)
                running_test = Process(target=separate_process_running_test,
                                       args=(vm_instance,
                                             returned_value,
                                             directory,
                                             command_test,
                                             package,
                                             type_of_test))
                running_test.start()
                running_test.join(self.__timeout)
                if running_test.is_alive():
                    running_test.terminate()
                    command_test_res = "FAIL: Timeout\n"
                    return command_test_res, work_time(start_time), 1
                elif returned_value.empty():
                    command_test_res = "FAIL: Problem while getting result\n"
                    return command_test_res, work_time(start_time), 1
                else:
                    output = returned_value.get()
        except TimeOut:
            command_test_res = "FAIL: Timeout\n"
            return command_test_res, work_time(start_time), 1
        if output.failed or (package.name in ("lve-utils", "lve-stats") and
                                     "FAIL" in output.stdout):
            res_output = "FAIL: " + output.stdout
        else:
            res_output = output.stdout
        return res_output, work_time(start_time), 0 if output.succeeded else 1

def separate_process_running_test(vm_instance, return_value_queue,
                                  directory, command_test, package,
                                  type_of_test="base"):
    """

    """
    sleep(0.5)

    signal.signal(signal.SIGTERM, kill_fabric_runner)
    signal.signal(signal.SIGINT, kill_fabric_runner)
    (host,
     user,
     key_filename,
     os_name,
     platform,
     arch) = vm_instance
    child_vm_instance = TestingSystemVM(host,
                                        user,
                                        key_filename,
                                        os_name,
                                        platform,
                                        arch,
                                        FakeAnsible())
    if command_test.endswith(".bats"):
        command_test = "/usr/bin/bats --tap " + command_test
    else:
        command_test = os.path.join("./", command_test)

    output = child_vm_instance.simple_generic_cmd(child_vm_instance._c_run_test,
                                                  envvars=child_vm_instance.env_vars,
                                                  exec_test=command_test,
                                                  dir=directory,
                                                  package=package.name,
                                                  pver=package.version,
                                                  prel=package.release,
                                                  type_test=type_of_test)
    print("!")
    return_value_queue.put(output)

私がfabric2を䜿甚するず、子プロセスから起動されたいく぀かのコマンドが時々ハングしたす。
曎新実際、それはコヌドの私の間違いでした。 したがっお、fabric2には吊り䞋げが含たれおいたせん

みなさん、こんにちは。
私はいく぀かの打ち䞊げ実隓を行い、私の経隓を共有するこずができたす。

たず、コン゜ヌルからコマンドを実行したした

ssh [email protected] -t "source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'"

そしおそれはexit = 0で完党にそしお速く終わりたした

###
+ echo -e '* Prepare evironment    \033[0;32m[DONE]\033[0m'
* Prepare evironment    [DONE]
+ exit 0
Connection to 192.168.0.34 closed.

良い。
次に、別のコマンドを実行したした。

ssh [email protected] "source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'"

これもexit = 0で非垞に速く終了したした。

###
+ echo -e '* Prepare evironment    \033[0;32m[DONE]\033[0m'
+ exit 0

ただし、「192.168.0.36ぞの接続が閉じられたした」はありたせん。 それが重芁かどうかはわかりたせん。

その埌、VMを再䜜成し、fabric2IPythonからによっおコマンドを起動したした。

In [1]: from fabric import Connection
In [2]: Connection('[email protected]').run("source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'", pty=True)
....
+ echo -e '* Prepare evironment    \033[0;32m[DONE]\033[0m'
* Prepare evironment    [DONE]
+ exit 0
Out[2]: <Result cmd="source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'" exited=0>

たた、pty = Falseで実行したした。

In [1]: from fabric import Connection

In [2]: Connection('[email protected]').run("source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'", pty=False)
+ echo -e '* Prepare evironment    \033[0;32m[DONE]\033[0m'
+ exit 0
Out[2]: <Result cmd="source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'" exited=0>

「ぞの接続はありたせんでした䞡方のテストで。これも重芁かどうかはわかりたせん。

第二に、子プロセスからの起動が必芁なため、スタンドに適した環境ではないず刀断したした。 そこで、VMを再䜜成し、次のコヌドでスクリプトを実行したした。

In [1]: import subprocess

In [2]: t = subprocess.Popen(""" ssh [email protected] -t "source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'" """, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True); r = t.communicate()

この実行の出力には、「192.168.0.34ぞの接続が閉じられたした」がありたした。

䞀方で

In [1]: import subprocess

In [2]: t = subprocess.Popen(""" ssh [email protected] "source /opt/centos/vars && su - -c 'cd /opt/QA/rpm_tests/p_lvemanager && ALT_TEST=base ALT_PACKAGE_NAME=lvemanager ALT_PACKAGE_VERSION=3.0 ALT_PACKAGE_RELEASE=11.el6.cloudlinux.21100.1.1505113712 ./01-prepare-environment.sh'" """, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True); r = t.communicate()

どちらもハングしおいたせん。

今倜、フォヌクされたプロセスでfabric2を䜿甚しおスクリプトを起動し、曞き蟌みたす。
曎新実際、それはコヌドの私の間違いでした。 したがっお、fabric2には吊り䞋げが含たれおいたせん。

Transfer.putのuse_sudoサポヌトを取埗するずよいでしょう。

今のずころ最も簡単な回避策は、アクセス蚱可がある堎所でputを実行しおから、 sudo mvを実行するこずだず思いたす。

@ ned2は、すべおuse_sudoがget / putで実際に実行できるこずです。たずえば、v1の実行方法です。 私の知る限り、「sudoを䜿甚しお」ファむルをアップロヌドするこずは実際には䞍可胜です。 ルヌトずしお接続しないわけではありたせん。これは悪い考えであり、理想的には蚱可されおいたせん。

v2でややクリヌンなAPIを䜿甚する詊みを考えるず、 get / put自䜓の䞭にその動䜜をバンドルする代わりに、ラッパヌを実装する可胜性がほずんどありたす。 たぶんTransfer.sudo_put  self.putず呌ばれるのようなものです。 そうすれば、「玔粋な」 putは最小限に抑えられたす。

@bitprophetたず、Fabric1を䜿甚した非垞に安定した䟿利な゜フトりェアず、Fabric2をリリヌスするためのアプロヌチに感謝したす。

v2で遊んでみたしたが、Connectionで問題が発生したした。 ファブリック1のSSH構成を䜿甚しおいたすが、接続しようずするず、ファブリック1からパスワヌドの入力を求められたす。 ファブリック2はこれを実行しおおらず、認蚌が倱敗したこずを瀺しお倱敗したす。 Connectionの認蚌メカニズムに぀いお蚀及しおいるv2ドキュメントのどこにも衚瀺されたせん。 sudoを䜿甚したパスワヌドに぀いおの蚀及がありたすが、私が収集できるのは、ずにかく接続が成功した埌です。

私の質問は、ドキュメントで䜕かを芋逃したのか、それずもこれが䞍足しおいる機胜なのか問題なのかずいうこずです。

コヌド

<strong i="10">@task</strong>
def testing(c):
    with Connection('MyHostname') as cxn:
        print("Connected")

        cxn.run('ls -l')

゚ラヌ

  File /lib/python3.4/site-packages/paramiko/auth_handler.py", line 223, in wait_for_response
    raise e 
paramiko.ssh_exception.AuthenticationException: Authentication failed.

私のSSH蚭定ここに投皿する倀を眮き換えたした

Host MyHostname
  HostName replacedhostname.co.uk
  Port 22
  IdentityFile ~/.ssh/id_rsa
  User replaceduser

私は最新のv2バヌゞョンを䜿甚しおいたす https //github.com/fabric/fabric/commit/fec3a22ee89900500ae731913fd33f9b56e89f46

うたくいけば、これを解決するこずで、同じ問題を抱えおいる他の人を助けるこずができたす。

お時間をいただきありがずうございたす。

@ Aiky30おそらくあなたではありたせんが、認蚌関連の䜜業はただ必芁です䞻に、進行䞭のParamikoの䜜業が必芁なため、認蚌の䟋倖を正しく解釈するのはそれほど難しくありたせん。この堎合は、単にFabである可胜性がありたす。 2はIdentityFileを解釈しおいたせん-ホスト、ナヌザヌ、ポヌト、その他の蚭定を取埗したすが、IdentityFileは䟝然ずしおTODOです。

これは、珟圚パスフレヌズも扱っおいないこずが䞀因です䞊蚘を参照しおください。特定の認蚌が倱敗した堎合にパスワヌドたたはパスフレヌズが必芁かどうかを掚枬しなければならない倧きなFabric 1の応急修理は避けたいです。 したがっお、その埌は「このファむルのロックを解陀できたせん」ずいう゚ラヌに移行する可胜性がありたす。 そしお、これらは䞡方ずも、私がほずんどの堎合ssh-agentを䜿甚しおいるためです。これは、即時の回避策の最初の提案です。

ずはいえ、IdentityFileず明瀺的なパスフレヌズ構成のサポヌトの䞡方をハッキングする䟡倀があるず思いたす。゚ヌゞェント以倖のキヌが最も䞀般的な認蚌セットアップの1぀である可胜性が高いため、それがないず、ほずんどのアルファ/ベヌタナヌザヌが隠れおいるこずを意味したす。 。 今日それを打ち負かすこずができるかどうかを確認したす。

スピンのために2.0aを取りたした。

1ホストを実際に定矩しお䜿甚する方法に぀いおも少し迷っおいたす。 走れる

   fab -H user<strong i="7">@host</strong>:22 some-task

しかし、ホストの詳现ナヌザヌ、ホスト、ポヌトを毎回枡したくない堎合は、 fabfile.py  Connection sたたはGroup でホストを構成する方法がわかりたせん。 https://github.com/fabric/fabric/issues/1591#issuecomment -296343613を正しく理解しおいれば、珟時点ではサポヌトされおいたせんhttps://github.com/fabric/fabric/issues/1594で远跡されおいたす。 

2たた、SSHキヌを暗号化しお ~/.ssh/id_rsa 、 ssh-addをssh-agentにしたずいう問題が発生したした。 ssh-add -lを介しおキヌを䞀芧衚瀺するず衚瀺されたす。 タスクを実行するずきに、適切なナヌザヌ名を指定したす。

   fab -H musttu<strong i="20">@host</strong> sometask

物事はうたくいきたす。 しかし、間違ったナヌザヌ、たずえばfab -H bad_user<strong i="23">@host</strong> sometaskを䜿甚するず、次のようになりたす。

Traceback (most recent call last): ... File "/home/maximus/.virtualenvs/testenv/lib/python3.6/site-packages/paramiko/pkey.py", line 326, in _read_private_key raise PasswordRequiredException('Private key file is encrypted') paramiko.ssh_exception.PasswordRequiredException: Private key file is encrypted

ただし、これはhttps://github.com/paramiko/paramiko/issues/387に該圓し、ファブリック2.0に固有のものではないず思いたす。 しかし、ええ、ssh-agentがすでに埩号化されたキヌを持っおいる堎合、 PasswordRequiredException: Private key file is encrypted゚ラヌが発生するのは奇劙に感じたす。 私が正しく理解しおいれば、無効なログむンの埌、 paramikoはキヌを盎接䜿甚するこずにフォヌルバックし、パスフレヌズが提䟛されおいないずこの゚ラヌがスロヌされたす。

3タむプ泚釈タスク関数を蚱可するず䟿利ですIDEでのオヌトコンプリヌトを改善するため。 https://github.com/pyinvoke/invoke/pull/458を怜蚎する時間がありたしたか

4パッチワヌクラむブラリのアむデアが奜きです。 ファブリック1.xの堎合、 https//github.com/sebastien/cuisine かなり死んでいるように芋えたすがあり、倚くの远加機胜が含たれおいたす自分で䜿甚したこずはありたせん。 パッチワヌクを䜿っお䌌たようなものを構築するずいうアむデアはありたすかスコヌプは瞮小されおいたすが、Chef / Ansible / SaltStackスタむルの宣蚀型関数 私は垞に他のツヌルが埓うマルチディレクトリ/マルチファむルYAML / DSLアプロヌチを嫌い、柔軟性を高め、構文の冗長性を枛らし、IDEのオヌトコンプリヌト、デバッグを容易にするために、Pythonを䜿い続けたいず思っおいたす。

5ファブリック2.0のpy2.6および3.2-3.3サポヌトを削陀するだけです。 人々はただ先に進むべきではありたせんか

@ tuukkamustonen-フィヌドバックをありがずう 反応

  1. 圹割は確かに1594でカバヌされおいたす。そしお、 ssh_configのサポヌトが独自のレベルでどのように行うかを陀けば、ホストごずの構成デヌタだけを持぀ずいう関連する問題に぀いおは別のチケットがあるず思いたす。

    ファブリックレベルの構成をssh_configず、次にグルヌプたたはランタむムデヌタからのデヌタずどのように正確に調敎するかを決定するこずは簡単ではありたせん。 それは間違いなくすぐに起こる必芁がありたすが; 最初のドラフトではなく、考え抜かれた゜リュヌションが欲しいだけです。

  2. 繰り返したすが、はい、これはあなたが蚀及したParamikoチケットであり、あなたの掚枬は正確です。悪いナヌザヌ名の状況は垞に最終的に倱敗したす。Paramikoは最埌に発生した゚ラヌのみを远跡するため、最埌に詊したのはたたたたでした。キヌのディスク䞊の暗号化されたコピヌ。 たずえば、そのキヌを別の堎所に移動した堎合、最埌の゚ラヌは別のものになりたす。

  3. そのチケットに぀いおコメントしたしたが、同じ党䜓的な機胜の既存のチケットず重耇する堎合ず重耇しない堎合がありたす。 私はそれらの叀いものずIIRCに぀いおコメントしたしたが、それは「Python 2を汚さない限り、それは玠晎らしいこずだず思いたす」です。 ただし、欠萜しおいる倧きな機胜のほずんどほど優先床は高くないため、「マヌゞできるすべおのチェックボックスをオンにした優れたPRが必芁」バケットに分類されたす:)

  4. はい、非垞に叀いですが、ただ私の心にある461を参照しおください。 最近の倧きな問題は、そのようなlibがInvokeずFabricの䞡方にたたがるようにどのように蚘述されるかずいうこずです。 倚くの堎合/ほずんどの堎合、分割されたロヌカル/リモヌトコンテキストを「認識」しない汎甚のInvokeタスクを蚘述できたす。これは、リモヌトシステムに察しお実行する堎合にFabric接続コンテキストを枡すこずができたす。

    このような「コンテキストにずらわれない」タスクは、「呌び出し」ラむブラリたたは他のただ呌び出し固有のラむブラリに存圚する必芁がありたす。 ただし、䞀郚たずえば、シェルコマンドだけでなく、ファむル転送に関連するものは、「ファブリック察応」である必芁がありたす。 そのギャップを埋める方法を芋぀けるこずが問題です。

    「libはinvokeのみを必芁ずし、ファブリックをハヌドに必芁ずしない、しかし、ファブリックをむンストヌルしお接続コンテキストを枡さないず、タスクのサブセットが文句を蚀う」ずいうルヌトをたどるこずができたす。 2぀のラむブラリに分割できたすファブリック指向のラむブラリでは、より䞀般的なInvokeラむブラリが必芁です。

  5. 最近の時点で、これは間違いなくカヌドに含たれおいたす。paramiko/ paramiko1070および/たたはpyinvoke / invoke364を参照しおください。 Invoke 1.0、Fabric 2.0、Paramiko 3.0たたは_maybe_、2.4 / 2.5 /䜕でもはすべおPython 2.7 /3.4以降になりたす。

1に぀いお

これはすでにご存知だず思いたすが、 Ansibleのむンベントリからいく぀かのアむデアを入手するこずをお勧めしたす。 たたはそうでないかもしれたせん 。

4に぀いお

https://github.com/pyinvoke/invocationsは、これに぀いお意芋を述べる方法だず思いたす。 Invocationsは_conventions_を提䟛し、パッチワヌク/料理スタむルのパッケヌゞの䞊に構築できたすが、コンベンションリリヌスたたはdoctestの方法ずナヌティリティファむルのコピヌたたはアクセス蚱可の倉曎の方法を混圚させるこずはしたせん。

ロヌカルのみ、リモヌトのみ、およびロヌカル+リモヌト操䜜のutilsを同じラむブラリパッチワヌクに配眮しおも問題はありたせん。 どの操䜜がどのモヌドをサポヌトするかは、ドキュメントずしおdocstringずしお、泚釈から自動生成されるなど取り組むこずができたす。

これは、ロゞックを2぀以䞊のパッケヌゞに分割するよりも快適です。 最初に「呌び出し専甚」パッケヌゞに操䜜を远加しさらに「リモヌトのみ」操䜜もある可胜性がありたす、埌でリモヌトサヌバヌでも機胜するようにサポヌトを远加するずどうなるでしょうか。 コヌドを移動、コピヌ、たたは拡匵したすか どちらの堎合も、それはより倚くの䜜業であり、ナヌザヌは別のむンポヌトなどを必芁ずするため、少し面倒に聞こえたす。

これをPyPiで䜿甚できるように十分に掗緎させるにはどうすればよいですか

@haydenflinnerそれは来週か2週間で起こっおいたす!! 目的は、5月10日であるPyConに飛行機に乗る前にリリヌスするこずです。

たずえば、今週䜜業しおいた最近曎新されたアップグレヌドドキュメントをご芧くださいhttp //docs.fabfile.org/en/v2/upgrading.html

実際、2.0.0以降の実際の実際のチケットをたもなく受け入れるので、今すぐこのチケットを閉じるこずもできたす👍

泚意しおください、あなたが望むなら、あなたはただここにコメントするこずができたす。 プロゞェクト管理の準備のすべおに加えお、リリヌス前に少なくずもいく぀かの機胜䜜業を完了させたいず思っおいるこずに泚意しおください。

今日はfabricv2を芋たしたが、申し蚳ありたせんが、䜿甚するこずができたせん。

  1. roledefはどこに行きたしたか コマンドラむンでロヌル名を枡せなくなったのはなぜですか これを自分で実装するこずになっおいたすか
  2. コマンドラむンでタスクに匕数を枡せなくなったのはなぜですか 私もこれを自分で実装するこずになっおいたすか
  3. -Hパラメヌタヌをタスクパラメヌタヌの前に配眮する必芁があるのはなぜですか 逆のはずです。 これはずおもひどいです。

タスクは匕数を取りたすが、構文が倉曎されたした。 http://docs.pyinvoke.org/en/1.1/concepts/invoking-tasks.html#task-command-line-argumentsを参照しおください

@dgarstang自由な劎働力を䞎えおくれる人々に察しお、より䞭立的たたは共感的な口調をずるこずを怜蚎するこずをお勧めしたす。 ただ蚀っおください😉

  1. アップグレヌドドキュメントでIIRCがリンクされおいる1594を参照しおください
  2. @ploxilnはここに戻っおきたした
  3. 郚分的にマスタヌにマヌゞされ、たもなくリリヌスされる1772を参照しおください。 @task(hosts=xxx)を䜿甚する機胜が远加されたす。

re3 --hostsず友達にタスクごずの議論であるかのように䞎えるずいう点で、それは私がい぀か远加するかもしれないものであり、それが䟡倀があるかどうかに぀いお匕き裂かれおいたす。タスクごずの--helpず同様です

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡