2016-11-30 1 views
0

나는 Ambari를 설치하고 API를 통해 청사진을 사용하는 등의 클러스터 설치 및 프로비저닝을 자동화하고 있습니다. 이것은 모두 정상적으로 작동하지만, 문제가되는 또 하나의 문제가 있습니다. 전반적인 프로비저닝 프로세스 중에 Ambari 암호를 변경하고 있습니다. (Ambari 클러스터 작성 프로세스가 아니라 여기에 내 프로세스를 언급하고 있습니다.) 내가 원하지 않는 것은 새롭게 프로비저닝 된 Ambari 설치를 기본 "admin/admin"자격 증명과 함께 앉아서 설치하는 것입니다. 또한 매번이 작업을 변경할 사람을 가질 수 없습니다.Ambari 관리자 암호를 프로그래밍 방식으로 변경하는 방법

REST API를 사용해 보았지만 호출이 올바르게 실행 된 것처럼 (예 : 오류가 반환되지 않음에도) 새 암호가 적용되지 않습니다.

ssh를 통해 ambari-admin-password-reset 명령을 사용하려고 생각했지만 내 Ambari 설치 (2.1.0 사용)에는 해당 명령이없는 것 같습니다. 저는 에이전트가 실행 중임을 두 번 확인했는데 루트 사용자로 시도했습니다. 그리고 모든 경우에 "명령을 찾을 수 없습니다"라는 오류가 발생합니다.

나는 또한 JDBC를 사용하여 Postgres에 직접 연결하고 암호를 직접 조작한다고 생각했지만 Ambari가 사용하는 해시 알고리즘과 소금을 저장하는 위치를 잘 모르겠습니다.

누구나 이러한 접근 방식 중 일부 또는 전부를 작동시키는 방법에 대한 조언을 제공 할 수 있다면 크게 감사하겠습니다. 지금 나는 이것으로 싸우는 나의 마지막 머리를 찢어 버리고있다.

편집 : FWIW, 자동 응답에 실패한 REST API에 대한 호출로 수행중인 작업은 다음과 같습니다. 이렇게

public static void main(String[] args) 
{ 


    // make REST call to Ambari to change password 
    try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) 
    { 
     HttpHost target = new HttpHost("admin.test-cluster-6.example.com", 8080, "http"); 

     String authorizationEncoded = Base64.encodeBase64String("admin:admin".getBytes()); 

     // specify the put request 
     HttpPut putRequest = new HttpPut("/api/v1/users/admin"); 

     StringEntity jsonEntity = new StringEntity("{\"Users/password\":\"newpassword\"}"); 

     putRequest.setEntity(jsonEntity); 
     putRequest.setHeader("X-Requested-By:", "ambari"); 
     putRequest.setHeader("Authorization", "Basic " + authorizationEncoded); 

     System.out.println("executing request to " + target); 

     HttpResponse httpResponse = httpClient.execute(target, putRequest); 
     HttpEntity entity = httpResponse.getEntity(); 
     System.out.println("status: " + httpResponse.getStatusLine()); 
     InputStream is = entity.getContent(); 
     String responseBody = streamToString(is); 

     System.out.println("response: " + responseBody); 

    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 

    } 

    System.out.println("done"); 
} 

이 작업이 성공 믿고 하나가 될 것이다 출력

status: HTTP/1.1 200 OK 

를 얻을 수 있습니다. 그러나 주사위는 없습니다.

또한 Ambari 2.1.0이며 변경하려고하는 사용자의 암호와 관계없이 동일한 동작이 발생합니다.

답변

1

올바른 URL을 사용하고 있지만 보낸 json이 올바르지 않습니다. 그것은 형식이어야합니다

{ 
    "Users": { 
    "user_name": "myusername", 
    "old_password": "myoldpassword", 
    "password": "mynewpassword" 
    } 

}

이는 ambari 위키에서이 page에 자세히 설명되어 있습니다.

관련 문제