使用pychef通过Chef restapi上载环境文件,但是

2024-05-13 23:29:07 发布

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

我使用pychef在Chef服务器上运行命令,基本上是成功的。Pychef目前不支持cookbook(上传、下载等),但它在Chef服务器restapi中公开,Pychef有一些函数可以让您轻松地访问Chef API(将auth凭证头和其他东西组合在一起)。在

因此,我在服务器上有一个名为my_environment的环境,我正在尝试在环境文件中更新一个cookbook版本,即"some_cookbook": "= 1.2.3",因此我的整个环境文件将如下所示:

    {
        "json_class": "Chef::Environment", 
        "chef_type": "environment", 
        "cookbook_versions": {
            "some_cookbook": "= 1.2.3"
        }, 
        "description": "example environment file", 
        "name": "my_environment"
    }

因此,我创建chef api对象如下:

^{pr2}$

ChefApi类有request()函数,我这样使用它:

    chef_api.request("PUT", "/environments/my_environment", data=json.dumps(environment_file_dict))
    # environment_file_dict is the dictionary shown above.

但是,我收到一条错误消息,说:chef.exceptions.ChefServerError: The '_default' environment cannot be modified.。在

这是令人困惑的,因为给定了我的端点,我真的不希望它试图改变_default环境。我试着通过Chef和刀子代码来寻找问题的根源,但是没有结果,Chef网站上的文档似乎也没有提供任何线索。更奇怪的是,除了使用"GET"并完美地下拉环境文件之外,我可以做同样的事情。有什么想法吗?在


Tags: 文件函数服务器apijsonenvironment环境request
1条回答
网友
1楼 · 发布于 2024-05-13 23:29:07

经过进一步的调查,我意识到我对pychef和我的问题的看法是错误的。这是一个没有充分阅读文档的情况。虽然pychef不上传/下载烹饪书,但它可以轻松地处理chef环境https://pychef.readthedocs.org/en/latest/api.html#environments。我所做的是用与上面相同的方式创建了一个chef api:

    chef_api = chef.ChefAPI(BASE_CHEF_URL + "/" + my_organization, chef_key, CHEF_USER)

然后使用Environment对象更新现有环境:

^{pr2}$

但是,我仍然无法解释错误“the''u default'environment cannot modified”(无法修改“\u default”环境)的错误。在

相关问题 更多 >