2017-05-16 9 views
1

PyChef APIを使用して役割を作成しようとしています。私はノードまたはロール(GETメソッド)のリストを正常に取得できますが、ロール(POSTメソッド)を作成しようとしているときに実行時excetionを取得しています。 は、ここに私のコードです:chef.exceptions.ChefServerErrorの取得:シェフでロールを作成中にメソッドが使用できない

import json 
import requests 
import re 
import chef 
from chef.exceptions import ChefError, ChefServerNotFoundError 
from chef.base import ChefQuery, ChefObject 
from chef import Role 

pem_file = "path-to-validator.pem/chef-validator.pem" 
client_name = "validator" 
node_name = "root" 
role_url = "ChefServer-URL/roles/" 
rolelist =[] 

chef_api = chef.ChefAPI(role_url,pem_file,client_name,ssl_verify=False) 

create_role = chef.Role.create(name='myrole', api=chef_api ,description='A test role', run_list=['recipe[foo]'],default_attributes={'attr': 'foo'}, override_attributes={'attr': 'bar'}) 

rolelst = chef.Role.list() 
for j in rolelst: 
    rolelist.append(j) 
print rolelist 

そして、ここで私が直面していますエラーです:

Traceback (most recent call last): 
File "roleapi.py", line 37, in <module> 
create_role = chef.Role.create(name='myrole', api=chef_api ,description='A 
test role', run_list=['recipe[foo]'],default_attributes={'attr': 'foo'}, 
override_attributes={'attr': 'bar'}) 
File "/usr/lib/python2.6/site-packages/chef/base.py", line 99, in create 
api.api_request('POST', cls.url, data=obj) 
File "/usr/lib/python2.6/site-packages/chef/api.py", line 217, in 
api_request 
response = self.request(method, path, headers, data) 
File "/usr/lib/python2.6/site-packages/chef/api.py", line 207, in request 
raise ChefServerError.from_error(response.reason, code=response.status_code) 
chef.exceptions.ChefServerError: Method Not Allowed 

は、だから私はこのエラーを解決する方法を私に何かを提案してください。前もって感謝します。

+0

バリデータークライアントではなく、ユーザーとそのキーを使用します。その役割は新しいノードを登録することです。ノードとクライアント以外のものを作成する権限はありません。 – Tensibai

+0

@天使:ありがとうございました。私はあなたの提案(バリデータークライアントの代わりにユーザーとそのキーを使用してください)を試しましたが、それでも私は同じエラーが表示されます。 – Suneha

+0

myroleという名前のロールはありません。 (既存のオブジェクトのPOSTは機能しません.PUTを実行する必要があります) – Tensibai

答えて

2

URLはChef Serverのベースにする必要があります。おそらくhttps://myserver.com/organizations/fooのようになります。

関連する問題