2017-05-02 1 views
3

Wir erstellen zur Laufzeit einen Cassandra-Cluster und Informationen wie "clustername" und IP-Adressen von "seeds" stehen nur zur Laufzeit zur Verfügung. Gibt es einen Java-Wrapper für cassandra.yaml, der Setter und Getter für cassandra.yaml erlaubt und auf Festplatte speichert? Ich verstehe, dass ich selbst immer einen Wrapper erstellen kann, aber wissen wollte, ob es schon einen gibt.Programmatische Modifikationsweise cassandra.yaml

Antwort

1

Gibt es einen Java-Wrapper für cassandra.yaml, der Setter und Getter für cassandra.yaml erlaubt und auf Festplatte speichert?

Nicht dass ich mir dessen bewusst bin. Obwohl das eine gute Idee für ein OpenSource-Projekt ist!

Ich habe dies in der Vergangenheit ein paar verschiedene Möglichkeiten getan. Einer ist mit einer Kombination von Chef und consul-template. Im Wesentlichen enthält Ihre cassandra.yaml variable Platzhalter, die bei der Ausführung Ihres Bereitstellungsrezepts mit einer Kombination aus Standardattributen (Chef) und clusterspezifischen Einstellungen (Konsul-Vorlage) gefüllt werden.

Ich habe dies auch mit einem Bash-Skript mit sed (für einige unserer Nicht-Chef-Umgebungen) getan. Dies ist ein Auszug aus einem Skript, das ich eine DataStax Enterprise-Installation auf einem Apache Cassandra (Open Source) zu migrieren, schrieb installieren:

#!/bin/bash 

cp /etc/dse/cassandra/cassandra.yaml /etc/cassandra/conf 

#set GossipingPropertyFileSnitch in cassandra.yaml 
sed -i 's/endpoint_snitch: com.datastax.bdp.snitch.DseDelegateSnitch/endpoint_snitch: GossipingPropertyFileSnitch/' /etc/cassandra/conf/cassandra.yaml 

#set truststore location 
sed -i 's/truststore: \/etc\/dse\/cassandra\//truststore: \/etc\/cassandra\/conf\//g' /etc/cassandra/conf/cassandra.yaml 

#set keystore location 
sed -i 's/keystore: \/etc\/dse\/cassandra\//keystore: \/etc\/cassandra\/conf\//g' /etc/cassandra/conf/cassandra.yaml 

Im Wesentlichen hier, Sie tun eine Regex-Ersatz für bestimmte yaml Eigenschaftseinstellungen. Insbesondere musste ich den Snitch und die Speicherorte des Keystore/Truststore aktualisieren. Es ist nicht schön, aber es funktioniert.

+0

Dank Aaron, das ist nah dran, wie ich es heute mache. Ich habe einen Dummy cassandra.yaml mit Platzhaltern wie __TRUST_STORE__ erstellt und dann zur Laufzeit diese Platzhalter durch reale Werte ersetzt. Es sieht nur hässlich aus und ist anfällig für Fehler. Ich mag deine Idee, dafür ein Open-Source-Java-Projekt zu erstellen. Ich werde es tun, wenn es keins gibt. – Apoorv

Verwandte Themen