python chef在控制台而不是在scrip中工作

2024-06-17 08:44:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以跑:

import chef
chef.autoconfigure()
for node in chef.Node.list():
    if "auto" in node.lower():
        print "deleting node " + node
        nodeObj = chef.Node(node)
        nodeObj.delete()

在控制台中,但当我尝试将其作为脚本运行时:python2.7 test.py我得到以下错误:

^{pr2}$

我用控制台验证

>>> chef.__path__
['/usr/local/lib/python2.7/site-packages/chef']

所以,机器是一样的,python的版本是一样的,模块也是一样的。为什么会这样?在


Tags: inimportnodeforautoifdeletelower
3条回答

虽然我不知道为什么ChefAPI对象不能在脚本中持久化,但我发现我必须将我的搜索对象传递给我的ChefAPI对象as seen as a keyword argument in the signature here。和你的情况一样,在控制台中测试我的代码时,这是不必要的。在

在我的例子中,我生成ChefAPI对象from_config_file(),并将其传递给我的搜索对象,如下所示:

import chef
chefapiobject = chef.chefAPI.from_config_file('knife.rb')
nodes = chef.Search('node', 'roles:worker', api=chefapiobject)

在控制台中,这不需要传递api=chefapiobject

可以使用导入本地配置厨师自动配置. 例如:

from chef import autoconfigure, Client, Node
api = autoconfigure()

http://pychef.readthedocs.org/en/latest/api.html#chef.autoconfigure

Try to find a knife or chef-client config file to load parameters from, starting from either the given base path or the current working directory.

我发现当作为脚本运行时,pyChef不能正确识别刀.rb自动配置步骤的文件。在

这就是它的工作原理:

with chef.ChefAPI('http://example.com:4000', '/root/.chef/client.pem', 'client'):
    for node in chef.Node.list():
        if "auto" in node.lower():
            print "deleting node " + node
            nodeObj = chef.Node(node)
            nodeObj.delete()

请注意,我不知道它为什么不能使用刀.rb在一种情况下文件正确,而不是另一种情况下(我验证了相同的cwd在两种情况下都被使用。。。-甚至尝试过指向自动配置('/folder/of/刀.rb'没有运气。在

相关问题 更多 >