2016-09-12 6 views
0

PyChefを使用してシェフサーバー上のノードを削除しようとしましたが、そして、ここに私のスクリプトです:PyChefを使用してシェフサーバーからノードを削除しようとしていますが、以下のエラーが表示されます

import json 
import requests 
import chef 
import base64 
from chef import Node 
from chef import auth 
from chef.rsa import Key 
from chef.api import ChefAPI 
from chef import api 
import requests.packages.urllib3 
requests.packages.urllib3.disable_warnings() 

key = open('/root/chef-repo/.chef/gs-validator.pem', "r").read() 
key =Key(key) 

hashed_body = auth.sha1_base64('') 
#print hashed_body 

from datetime import datetime 
timestamp = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ") 
#print timestamp 

headers={} 
req=auth.canonical_request('GET','here-is-my url-of server',hashed_body,timestamp,'here-is-client-name') 
sig =auth. _ruby_b64encode(key.private_encrypt(req)) 
#print sig 
for i, line in enumerate(sig): 
headers['x-ops-authorization-%s'%(i+1)] = line 
#print headers 
#print "--------------",headers.get('x-ops-authorization-%s'%(4),False) 

X1= headers.get('x-ops-authorization-%s'%(1),False) 
X2 = headers.get('x-ops-authorization-%s'%(2),False) 
X3 = headers.get('x-ops-authorization-%s'%(3),False) 
X4 = headers.get('x-ops-authorization-%s'%(4),False) 
X5 = headers.get('x-ops-authorization-%s'%(5),False) 

headers = {'Method':'GET','X-Ops-Content-Hash':hashed_body,'content- type':'application/json','accept':'application/json','X-Ops-Timestamp':timestamp,'X-Ops-UserId':'gs-validator','X-Ops-Authorization-1':X1,'X-Ops-Authorization-2':X2,'X-Ops-Authorization-3':X3,'X-Ops-Authorization-4':X4,'X-Ops-Authorization-5':X5} 

with chef.ChefAPI(url, '/root/chef-repo/.chef/gs-validator.pem', 'gs- validator',headers = headers,ssl_verify = False): 
    node = Node('node-name') 
    print node.delete() 

エラー:

Traceback (most recent call last): 
File "delchef.py", line 55, in <module> 
print node.delete() 
File "/usr/local/lib/python2.7/dist-packages/chef/base.py", line 117, in delete 
api.api_request('DELETE', self.url) 
File "/usr/local/lib/python2.7/dist-packages/chef/api.py", line 217, in api_request 
response = self.request(method, path, headers, data) 
File "/usr/local/lib/python2.7/dist-packages/chef/api.py", line 207, in request 
raise ChefServerError.from_error(response.reason, code=response.status_code) 
chef.exceptions.ChefServerNotFoundError: Object Not Found 

と私は(node.deleteの代わりに印刷する):
node.attributes

it gives me this output: 
chef.node.NodeAttributes object at 0x7fb2c11e7390 

は、事前にありがとう..このエラーの解決方法を教えてください。

+0

あなたは 'print node'と__then__ deleteを後で実行するとどうなりますか?また、 'node.delete()'の代わりに 'del node'を使うと、一部のオブジェクトはdeleteメソッドを呼び出せず、利用可能なものを見る' print dir(node) 'を使います。 –

+0

問題は今解決されました。サーバー関連の問題だったと思います...あなたの貴重な時間を与えてくれてありがとう... – Suneha

答えて

0

PyChefはすでにすべての認証ヘッダーを作成していますが、なぜ物を複製していますか?特定の質問については、404は、削除しようとしているノードが存在しないことを意味します。 Node.list()を使用すると、サーバー上にどのノードが存在するかを確認できます。

+0

ええ、ありがとう。私は最初に再認証を行っていました。認証なしでノードを削除すると、同じエラーが出るので、認証の必要性があると思われるので、認証を試みたが、同じエラーが続いています。このエラーは認証に関連していないことを認識しました....それはサーバーの問題でした。しかし今、問題は解決されました...あなたの貴重な時間を与えてくれてありがとう。 – Suneha

関連する問題