2

なぜこれが起こっているのかわかりませんが、ファブリックで次のような変数を設定しようとすると:

@task
def deploy_small_ec2_ami(name):
    a = local("/usr/bin/ldapsearch -x -w secret -D 'cn=admin,dc=example,dc=net' -b 'dc=example,dc=net' -h ldap-01  -LLL 'cn=%s'" %(name))
    if a:
        sys.exit(1)

名前がldapに存在する場合でも、変数「a」が設定されないため、出口は有効になりません。「print a」を追加しようとしましたが、何も表示されませんが、次のような出力が得られるため、コマンドが機能することはわかっています(ldapに存在するホスト):

user:~/Projects/fabtask$ fab deploy_small_ec2_ami:bob,ldap
[localhost] local: /usr/bin/ldapsearch -x -w secret -D 'cn=admin,dc=example,dc=net' -b 'dc=example,dc=net' -h ldap-01  -LLL 'cn=bob'
dn: cn=bob,ou=hosts,dc=example,dc=net
cn: bob
environment: production
ipHostNumber:
objectClass: device
objectClass: ipHost
objectClass: puppetClient
objectClass: top
puppetClass: cassandra      

他のスクリプトで var = local('some_command') を使用していますが、正常に動作します。

4

1 に答える 1

4

capture=Trueあなたのlocal()通話にa が表示されません。コマンドの出力をキャプチャするために必要なようです。それ以外の場合local()は常に を返し、これはステートメントNoneで に評価されます。こちらのドキュメントを参照してください。Falseif

于 2012-06-01T16:38:35.657 に答える