【问题标题】:Using shell script to parse lines from a consul template file使用 shell 脚本从 consul 模板文件中解析行
【发布时间】:2017-11-30 08:13:40
【问题描述】:

正如您在下面的模板文件中看到的那样,我在“if”和“end”之间声明了几个变量(如 MYSQL_ACCOUNT_PASSWORD、MYSQL_ACCOUNT_USERNAME 等),我期待编写一个 shell 脚本来获取所有变量这样的文件。

使用“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)所有不以{{开头的行2)提取'='之前的文本作为变量名。 3)提取'='之后的文本作为变量值(并删除{{}})。使用 cut 命令在 bash 中执行此操作没有问题。
  • 这似乎与Go或Consul无关;您不是在尝试执行模板或将 Go 用于任何事情,而是在尝试从 恰好是 Go 模板的文件中提取数据。这个问题更适合超级用户。

标签: bash shell go consul consul-template


【解决方案1】:

你能用 grep 吗?

要获取所有不以 {{ 开头的行,您可以使用

grep -v "^{{" inputfile

如果您希望所有行都以 MYSQL... 开头,请使用

grep "^MYSQL" inputfile

在这种情况下,这两个都返回:

MYSQL_ACCOUNT_URL=jdbc:mysql://{{- .Address }}:{{- .Port }}/{{ $mysql_account_db_name }}?useSSL=false&autoReconnect=true&serverTimezone=America/Chicago&rewriteBatchedStatements=true
MYSQL_ACCOUNT_PASSWORD={{ .Data.password }}
MYSQL_ACCOUNT_USERNAME={{ .Data.username }}
MYSQL_ACCOUNT_PASSWORD={{ key $secretPath }}
MYSQL_ACCOUNT_USERNAME={{ key $keyPath }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多