2017-11-30 11 views
-1

以下のテンプレートファイルを参照すると、 "if"と "end"の間に(MYSQL_ACCOUNT_PASSWORD、MYSQL_ACCOUNT_USERNAMEなどの)宣言された変数はほとんどなく、私は楽しみにしていますそのようなファイル内のすべての変数を取得するためのシェルスクリプトを作成します。シェルスクリプトを使用してコンスルテンプレートファイルの行を解析する

"Golangのテキスト/テン​​プレートパッケージ"を使用したconsulテンプレートのフォーマットでは、cut、sed、awkのような基本的なツールが私の仕事をすることはないと思います。これどうやってするの。

{{- 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

次のようになります。1){{2}で始まらない行はすべて、変数名の前に '='の前のテキストを抽出します。 3) '='の後のテキストを変数値として抽出します(そして{{}}を削除します)。 cutコマンドでbashでそれを行うのは問題ありません。 – Nic3500

+0

これは、GoやConsulとは関係がないようです。あなたはテンプレートを実行しようとせず、Goを何かのために使用しようとしていません。* Goテンプレートになるファイルからデータを抽出しようとしています。この質問は、SuperUserに適しています。 – Adrian

答えて

0

grepを使用できますか?

この場合

grep "^MYSQL" inputfile 

を使用し、...あなたはMYSQLで始まるすべての行をしたい場合は、{{あなたが

grep -v "^{{" inputfile 

を使用することができますで始まらないすべての行を取得するには、これらはどちらも返されます:

関連する問題