我有以下fabric任务:
@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它工作得很好
发布于 2012-06-12 00:40:19
好吧,问题是当使用execute时,你必须定义一个host=。我的另一个fab任务不需要host=,所以我只需要放入常规的python:
deploy_ec2_ami (name, puppetClass, size, region, basedn, ldap, secret, subnet, sgroup)一切都运行得很好。
发布于 2012-06-12 00:37:09
您正在向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-13 17:48:39
从一线开始
sgroup='%s' %(name, puppetClass, size, region, basedn, ldap, secret, subnet, sgroup)字符串插值只适用于一个字符串,而不是所有参数。我是说
'%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由于您没有更改参数中的任何内容,因此我肯定会选择Brian solution
https://stackoverflow.com/questions/10984044
复制相似问题