1

次のファブリック タスクがあります。

@task
def deploy_west_ec2_ami(name, puppetClass, size='m1.small', region='us-west-1', basedn='joe', ldap='arch-ldap-01', secret='secret', subnet='subnet-d43b8abd', sgroup='sg-926578fe'):
    execute(deploy_ec2_ami, name='%s',puppetClass='%s',size='%s',region='%s',basedn='%s',ldap='%s',secret='%s',subnet='%s',sgroup='%s' %(name, puppetClass, size, region, basedn, ldap, secret, subnet, sgroup))

ただし、コマンドを実行すると:

fab deploy_west_ec2_ami:test,java

次のトレースバックが表示されます。

            Traceback (most recent call last):
              File "/usr/local/lib/python2.6/dist-packages/fabric/main.py", line 710, in main
                *args, **kwargs
              File "/usr/local/lib/python2.6/dist-packages/fabric/tasks.py", line 321, in execute
                results['<local-only>'] = task.run(*args, **new_kwargs)
              File "/usr/local/lib/python2.6/dist-packages/fabric/tasks.py", line 113, in run
                return self.wrapped(*args, **kwargs)
              File "/home/bcarpio/Projects/githubenterprise/awsdeploy/fabfile.py", line 35, in deploy_west_ec2_ami
                execute(deploy_ec2_ami, name='%s',puppetClass='%s',size='%s',region='%s',basedn='%s',ldap='%s',secret='%s',subnet='%s',sgroup='%s' %(name, puppetClass, size, region, basedn, ldap, secret, subnet, sgroup))
            TypeError: not all arguments converted during string formatting

その理由がよくわかりません。ここで定義されたすべての値がうまくいっていると確信しています。

また、実行タスク deploy_ec2_ami を実行すると、次のようになります。

deploy_ec2_ami:test,java,m1.small,us-west-1,'dc\=test\,dc\=net',ldap-01,secret,subnet-d43b8abd,sg-926578fe

それはうまく動作します

4

3 に答える 3

2

問題は、実行を使用するときにホスト=を定義する必要があることでした。私の他の fab タスクは host= を必要としないので、通常の python を入れます:

deploy_ec2_ami (name, puppetClass, size, region, basedn, ldap, secret, subnet, sgroup)

そして、それはすべてうまくいきました。

于 2012-06-11T16:40:18.863 に答える
0

ラインから

sgroup='%s' %(name, puppetClass, size, region, basedn, ldap, secret, subnet, sgroup)

文字列補間は、すべての引数ではなく、1 つの文字列に対して機能します。つまり

'%s %s' % (arg1, arg2)

しかし、試してみると

'%s' % (arg1, arg2) 

arg2 の余地がありません

文字列補間を続けたい場合は、これを行うことをお勧めします。

execute(deploy_ec2_ami, name='%s' % name, puppetClass='%s' % puppetClass, size='%s' % size, region='%s' % region, and so on

パラメータで何も変更していないので、私は間違いなくブライアンのソリューションに行きます

于 2012-06-13T09:48:39.253 に答える
0

メソッドに一連のキーワード引数を渡しexecute、最後の値のみが文字列補間のターゲットと見なされます。

sgroup='%s' %(name, puppetClass
        , size, region, basedn, ldap, secret, subnet, sgroup))

ここで文字列補間を使用する必要はありません。すべての引数をexecuteメソッドに渡すだけです。

execute(deploy_ec2_ami, name=name, puppetClass=puppetClass, size=size, region=region, basedn=basedn, ldap=ldap, secret=secret, subnet=subnet, sgroup=sgroup)
于 2012-06-11T16:37:09.417 に答える