2017-11-30 1 views
-1

Wie Sie in der Vorlage Datei unten sehen können, habe ich einige Variablen (wie MYSQL_ACCOUNT_PASSWORD, MYSQL_ACCOUNT_USERNAME etc) zwischen "if" und "end" deklariert und ich freue mich um ein Shell-Skript zu schreiben, um alle Variablen in einer solchen Datei zu erhalten.Verwenden Shell-Skript zum Analysieren von Zeilen aus einer Consul Vorlage Datei

Mit dem Format der Konsul-Vorlage mit "Golang's Text/Template-Paket" habe ich Angst, dass grundlegende Werkzeuge wie cut, sed oder awk meinen Job nicht machen. Wie kann ich das machen.

{{- template "findService" "mysql-master-acc" }} 
{{- if scratch.Key "mysql-master-acc-service" }} 
{{- $mysql_account_db_name := printf "service/%s/mysql-master-acc/%s/config/acc_mysql_db_name" $dc (scratch.Get "mysql-master-acc-tag") | key }} 
{{ range scratch.Get "mysql-master-acc-service"}} 
MYSQL_ACCOUNT_URL=jdbc:mysql://{{- .Address }}:{{- .Port }}/{{ $mysql_account_db_name }}?useSSL=false&autoReconnect=true&serverTimezone=America/Chicago&rewriteBatchedStatements=true 
{{- end }} 
{{- if eq (env "SECRETS_BACKEND") "vault" }} 
{{  $vault_secret_path := printf "secret/service/%s/kos-mysql-acc/%s" $dc (scratch.Get "mysql-master-acc-tag") -}} 
{{  with printf "%s/%s" $vault_secret_path $mysql_account_db_name | secret -}} 
MYSQL_ACCOUNT_PASSWORD={{ .Data.password }} 
MYSQL_ACCOUNT_USERNAME={{ .Data.username }} 
{{-  end }} 
{{- else if eq (env "SECRETS_BACKEND") "consul" }} 
{{-  $secretPath := printf "secret/%s/mysql-master-acc/%s/acc_mysql_db_user_password" $dc (scratch.Get "mysql-master-acc-tag") }} 
{{-  $keyPath := printf "service/%s/mysql-master-acc/%s/config/acc_mysql_db_user" $dc (scratch.Get "mysql-master-acc-tag") }} 
MYSQL_ACCOUNT_PASSWORD={{ key $secretPath }} 
MYSQL_ACCOUNT_USERNAME={{ key $keyPath }} 
{{- end }} 
{{- end }} 
+1

Sieht aus wie Sie wollen: 1) alle Zeilen, die nicht mit {{2) beginnen extrahieren den Text vor '=' als Variablenname. 3) Extrahiere den Text nach dem '=' als Variablenwert (und entferne die {{}}). Kein Problem, dies mit dem Befehl cut in bash zu tun. – Nic3500

+0

Das scheint nichts mit Go oder Konsul zu tun zu haben; Sie versuchen nicht, die Vorlage auszuführen oder Go für irgendetwas zu verwenden. Sie versuchen, Daten aus einer Datei zu extrahieren, die * eine Go-Vorlage ist. Diese Frage wäre besser für SuperUser geeignet. – Adrian

Antwort

0

Könnten Sie einfach grep verwenden?

Um alle Linien zu erhalten, die mit nicht starten {{Sie

grep -v "^{{" inputfile 

Wenn Sie alle Zeilen mit MYSQL ... Verwenden

grep "^MYSQL" inputfile 

In diesem Fall starten wollen verwenden könnte, diese beiden zurück:

Verwandte Themen