私はAmbariをインストールし、APIを使用してBlueprintを使用するなど、クラスタのインストールとプロビジョニングの自動化に取り組んでいます。これはうまくいっていますが、もう一つ問題があります。これは、プロビジョニングプロセス全体でAmbariのパスワードを変更しています(Ambariのクラスタ作成プロセスではなく、私のプロセスを参照しています)。私がしたくないことは、新しく設定されたAmbariインストールをデフォルトの「admin/admin」資格情報を使ってインストールしたままにしておくことです。また、毎回これを変更する人間を入れることもできません。Ambariの管理パスワードをプログラムで変更する方法
私はREST APIを試しましたが、呼び出しが正しく実行されたように見えても(たとえば、エラーは返されませんが)、新しいパスワードは決して有効になりません。
私はssh経由でambari-admin-password-resetコマンドを使用することを考えましたが、私のAmbariインストール(2.1.0を使用)ではそのコマンドが表示されません。私はエージェントが実行されていることを二重チェックして、私はそれをrootユーザーとして試してみたが、いずれの場合も "コマンドが見つかりません"というエラーが出る。
私はまた、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");
}
は、操作が成功したことを信じるように1を招く出力
status: HTTP/1.1 200 OK
が得られます。しかし、サイコロはありません。
これはAmbari 2.1.0であり、変更しようとするユーザーのパスワードに関係なく同じ動作が発生します。