2017-08-02 4 views
0

私はの後にインストールされた状態のAmbariコンポーネントを再起動します。これはPythonコードを記述しているので、動作するPycurlを使用してAmbariサービスを解析します。Ambari CURLコマンドでPython Pycurl POSTメソッドの問題

しかし、JSONが解析されると、私のようなJSONファイルを生成します:これはと連携

{ 
"RequestInfo": { 
    "command": "START", 
    "context": "Restart all components on HOST" 
}, 
"Requests/resource_filters": [ 
    { 
    "component_name": "NAMENODE", 
    "hosts": "hadoopm", 
    "service_name": "HDFS" 
    }, 
    { 
    "component_name": "RESOURCEMANAGER", 
    "hosts": "hadoopm", 
    "service_name": "YARN" 
    }]} 

curl -u username:password -H 'X-Requested-By-ambari' http://ambariserver:8080/api/v1/clusters/CLUSTERNAME/requests [email protected] 

が、同じことが400不正な要求エラーと協力し、失敗していません以下のコードを使用してください。

import pycurl 
c = pycurl.Curl() 
c.setopt(pycurl.URL, url_post) 
c.setopt(pycurl.HTTPHEADER, ["X-Requested-By:ambari"]) 
data = json.dumps(json.loads(open(output_temp_file,'rb').read()), indent=1, sort_keys=True) 
tabs = re.sub('\n +', lambda match: '\n' + '\t' * (len(match.group().strip('\n'))/2), data) 
tabJSON=json.dumps(json.loads(open(output_temp_file,'rb').read()), indent=1, sort_keys=True) 
c.setopt(pycurl.POST, 1) 
c.setopt(pycurl.USERPWD,'admin:'+admin_pass) 
c.setopt(pycurl.POSTFIELDS, 'tabJSON') 
c.setopt(pycurl.WRITEFUNCTION, service_buffer.write) 
c.setopt(pycurl.VERBOSE, 1) 
c.perform() 
c.close() 

HTTP/1 .1 400悪い要求

私はこれで誰かがこれで私を手伝ってくれることができます何か間違っています。

+0

pythonからリクエストを送信するときに、ambari-server.logにはどのようなメッセージがありますか? – thinkmassive

答えて

1

おそらく、API呼び出し形式が古くなっている可能性があります。私は一例で行くことをお勧めしたい:アクションを実行する

  • クローム
  • で開いDEVコンソール
  • 使用Ambari UI(例えば、すべてのサービスを再起動します)
  • 関連POST/PUTリクエストを探し、Networkに行く(ソート>Copy - - 非200 Status列)
  • コピー要求(リクエストに応じて、右クリックで>copy as cURL

今、あなたは、最新のcurlコマンドの例を持って、Aリクエスト本体の周りでさらに遊ぶことができます