Установка значений env var в развернутом потоковом приложении

Используя следующее:

  • Spring Cloud Data Flow Server Cloudfoundry 1.0.0.RC1
  • Служба Spring Cloud Config Server

Я перестроил spring-cloud-dataflow-server-cloudfoundry с дополнительной зависимостью, чтобы включить его привязку к серверу Spring Cloud Config в соответствии с инструкциями. Кажется, что работает как ожидалось, так что это здорово.

Проблема возникает сейчас, когда я пытаюсь определить поток с помощью пользовательского модуля, который я разработал, где переменные среды для модуля (в частности, ENCRYPT_KEY) находятся в файле манифеста YML в моем git-репо.

Имя файла манифеста customapp-dev.yml, Манифест выглядит так:

applications:
- name: customapp
  env: 
    ENCRYPT_KEY: keyForEncryption

Имя файла свойств customapp-dev.properties, Файл свойств выглядит так:

customapp.initial.context.factory=com.sun.jndi.ldap.LdapCtxFactory
customapp.ldap.provider.url=ldap://directory.xyz.com:389/dc=xyz,dc=com
customapp.username=ldap_user
customapp.password={cipher}958f87532ebba83cd81b7b0e9a0a0cc

Приложение имеет файл свойств в загрузочном банке под названием application.properties, Это выглядит так:

spring.application.name=customapp

Наконец, когда я развертываю свой поток, я предоставляю одно дополнительное свойство в командной строке, например:

--properties app.customapp.SPRING_PROFILES_ACTIVE=dev

Следя за журналами развертывания приложения, я вижу, что экземпляр сервера конфигурации читается и что имя и профиль приложения корректно разрешаются. Клиент конфигурации отображает как манифест YML, так и файл свойств из моего репозитория git.

Однако ошибка указывает на то, что для заполнителя нет возможности расшифровки customapp.password,

2016-08-26T13:40:46.62-0600 [APP/0]      OUT   .   ____          _            __ _ _
2016-08-26T13:40:46.62-0600 [APP/0]      OUT  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
2016-08-26T13:40:46.62-0600 [APP/0]      OUT ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2016-08-26T13:40:46.62-0600 [APP/0]      OUT  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2016-08-26T13:40:46.62-0600 [APP/0]      OUT   '  |____| .__|_| |_|_| |_\__, | / / / /
2016-08-26T13:40:46.62-0600 [APP/0]      OUT  =========|_|==============|___/=/_/_/_/
2016-08-26T13:40:46.63-0600 [APP/0]      OUT  :: Spring Boot ::        (v1.3.5.RELEASE)
2016-08-26T13:40:46.65-0600 [APP/0]      OUT Fetching config from server at: https://config-dfcc3100-7514-47e6-b30e-a0eefcf4929d.dev.xyz.com
2016-08-26T13:40:48.13-0600 [APP/0]      OUT Located environment: name=customapp, profiles=[dev, cloud], label=master, version=null
2016-08-26T13:40:48.13-0600 [APP/0]      OUT Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource [name='https://user@bitbucket.xyz.com/scm/project/app-config.git/dev/customapp-dev.yml'], MapPropertySource [name='https://user@bitbucket.xyz.com/scm/project/app-config.git/dev/customapp-dev.properties']]]
2016-08-26T13:40:48.16-0600 [APP/0]      OUT Application startup failed
2016-08-26T13:40:48.16-0600 [APP/0]      OUT java.lang.IllegalStateException: Cannot decrypt: key=customapp.password

Если я в явном виде установлю переменную среды ENCRYPT_KEY для развернутого (сбойного) приложения и обновлю ее, она запустится нормально и будет работать как шарм.

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

2 ответа

Решение

Итак, я RTFM'd и нашел полезную выдержку из существующей документации.

Сервер Spring Cloud Config

Спецификация командной строки во время развертывания будет работать, но я использовал неправильный синтаксис. Вместо:

app.customapp.ENCRYPT_KEY=keyForEncryption

Я должен использовать:

app.customapp.encrypt.key=keyForEncryption

Манифест (customapp-dev.yml) не нужно находиться в (том же) git-репо, как и остальная часть вашего конфига (на самом деле, лучше этого не делать, так как он содержит ключ дешифрования).

Что еще более важно, из вашего вопроса не ясно, как вы его "используете". Ожидаете ли вы, что это будет учтено автоматически (благодаря серверу конфигурации или чему-то еще), или вы действительно используете его, когда вы cf push ваше приложение?

Симптомы, которые вы описываете, по-видимому, указывают на то, что заданная вами переменная среды не учитывается (через манифест).

Другие вопросы по тегам