PostgreSQL в Helm: параметр initdbScripts - PullRequest
1 голос
/ 03 апреля 2019

Диаграмма Шлема по умолчанию для PostgreSQL (т.е. stable/postgresql) определяет параметр initdbScripts, который позволяет запускать сценарии инициализации. Тем не менее, я не могу получить правильный формат о том, как выдать его через командную строку.

Может ли кто-нибудь привести пример заполнения этого параметра командной строки?

Вот что я выпускаю, за исключением рабочей версии параметра initdbScripts.

helm install stable/postgresql -n testpg \
    --set global.postgresql.postgresqlDatabase=testpg \
    --set global.postgresql.postgresqlUsername=testpg \
    --set global.postgresql.postgresqlPassword=testpg \
    --set global.postgresql.servicePort=5432 \
    --set initdbScripts=(WHAT GOES HERE TO RUN "sql/init.sql"??) \
    --set service.type=LoadBalancer

1 Ответ

2 голосов
/ 04 апреля 2019

Согласно stable / postgresql рулевой диаграммы, initdbScripts - это словарь имен сценариев инициализации, которые являются многострочными переменными:

## initdb scripts
## Specify dictionnary of scripts to be run at first boot
## Alternatively, you can put your scripts under the files/docker-entrypoint-initdb.d directory
##
# initdbScripts:
#   my_init_script.sh:|
#      #!/bin/sh
#      echo "Do something."

Давайте предположим, что у нас есть следующий init.sql скрипт:

CREATE USER helm;
CREATE DATABASE helm;
GRANT ALL PRIVILEGES ON DATABASE helm TO helm;

Когда мы собираемся ввести многострочный текст в значения, нам нужно иметь дело с отступом в YAML.

Для приведенного выше конкретного случая это:

helm install stable/postgresql -n testpg \
--set global.postgresql.postgresqlDatabase=testpg \
--set global.postgresql.postgresqlUsername=testpg \
--set global.postgresql.postgresqlPassword=testpg \
--set global.postgresql.servicePort=5432 \
--set initdbScripts."init\.sql"="CREATE USER helm;
CREATE DATABASE helm;
GRANT ALL PRIVILEGES ON DATABASE docker TO helm;" \
--set service.type=LoadBalancer

В вышеприведенном примере есть некоторые пояснения:

  1. Если имя скрипта имеет ., его следует экранировать, например "init\.sql".
  2. Содержимое скрипта в двойных кавычках, потому что это многострочная строковая переменная.
...