2016-05-20 14 views
3

私はElastic Searchを使用していますが、私はAuth目的のReadOnlyRestプラグインというプラグインを見つけました。このプラグインを設定するには、ユーザーをElastic search ymlに追加する必要があります。SnakeYAMLを使用してブロックシーケンス内にブロックマッピングをネストしたymlファイルにユーザーを追加するJava

そこで、Javaを使用して"key : value"ペアデータをymlに追加する方法を検索しました。データを追加するためにSnakeYAMLを訪れました。

私はJavaからユーザーのデータを送信できます。

Javaコード。上記のコードから

package com.test.elasticsearch; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.apache.log4j.Logger; 
import org.yaml.snakeyaml.DumperOptions; 
import org.yaml.snakeyaml.Yaml; 


public class YAMLSample { 

protected static Logger logger = Logger.getLogger(YAMLSample.class); 

final String fileName = "/home/Installation/elasticsearch-2.3.1/config/elasticsearch.yml"; 

    public void writeToYML() throws IOException { 
     logger.debug("Write to YML"); 

     Map<String, Object> data = new HashMap<String, Object>(); 
     data.put("name", "user5"); 
     data.put("type", "allow"); 
     data.put("auth_key", "user5:user5"); 
     data.put("kibana_access", "ro"); 
     data.put("indices", new String[] { ".kibana*", "abc", "def" }); 

     List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 
     list.add(data); 

     DumperOptions options = new DumperOptions(); 
     options.setIndent(5); 

     Yaml yaml = new Yaml(options); 
     FileWriter writer = new FileWriter(fileName, true); 

     yaml.dump(list, writer); 
     logger.debug("DONE!"); 

    } 

    public static void main(String[] args) throws IOException { 
     // new YAMLSample().readYML(); 
     new YAMLSample().writeToYML(); 
    } 
} 

出力は次のとおりです。

-  name: user5 
     indices: [.kibana*, abc, def] 
     kibana_access: ro 
     type: allow 
     auth_key: user5:user5 

しかし、予想される出力は次のとおりです。

- name: user5 
     indices: [.kibana*, abc, def] 
     kibana_access: ro 
     type: allow 
     auth_key: user5:user5 

"ハイフンマイナスは" ただ一つのスペースを持っている必要がありますし、 「ハイフンマイナス」の前に4つのスペースが必要です。

私はこれがユーザーの配列として表示されることを期待しています。 「ハイフンマイナス」以外にはスペースはほとんどありません。

解決策を見つけるのを手伝ってください。

答えて

2

私はあなたのコードを修正し、期待される結果を得ました。

public class YAMLSample { 

    final String fileName = "/tmp/rest.yml"; 

    public void writeToYML() throws IOException { 
    log("Write to YML"); 

    Map<String, Object> user = new HashMap<>(); 
    user.put("name", "user5"); 
    user.put("type", "allow"); 
    user.put("auth_key", "user5:user5"); 
    user.put("kibana_access", "ro"); 
    user.put("indices", new String[] { ".kibana*", "abc", "def" }); 

    Map<String, Object> user2 = new HashMap<>(); 
    user2.put("name", "user2"); 
    user2.put("type", "allow"); 
    user2.put("auth_key", "user2:user2"); 
    user2.put("kibana_access", "ro"); 
    user2.put("indices", new String[] { ".kibana*", "abc", "def" }); 

    List<Map<String, Object>> list = new ArrayList<>(); 
    list.add(user); 
    list.add(user2); 

    Map<String, List<Map<String, Object>>> config = new HashMap<>(); 
    config.put("access_control_rules", list); 

    DumperOptions options = new DumperOptions(); 
    options.setIndent(6); 
    options.setIndicatorIndent(4); 
    options.setDefaultFlowStyle(DumperOptions.FlowStyle.AUTO); 

    Yaml yaml = new Yaml(options); 
    FileWriter writer = new FileWriter(fileName, true); 

    yaml.dump(config, writer); 
    log("DONE!"); 
    } 

    public static void main(String[] args) throws IOException { 
    new YAMLSample().writeToYML(); 
    } 

    public void log(String str) { 
    System.out.println(str); 
    } 
} 

基本的に私はあなたのDumperの
options.setIndicatorIndent(4); options.setDefaultFlowStyle(DumperOptions.FlowStyle.AUTO);

と5から6にoptions.setIndent(6);

+0

こんにちはマルセル・ディアス、 を更新し、この2つのオプションが追加ありがとう:下記のようなコードを見てどのようです返信のためにうまくいきました。問題は私がsnake-yaml 1.16の依存関係を使用していたことです。バージョン1.17ではDumperOptionsクラスにこの新しいメソッドがあります。 –

関連する問題