Как добавить файл конфигурации в непустой каталог приложения Openshift v3

Я развернул приложение PHP + postgreqsl (TinyTiny RSS, https://github.com/dittos/ttrss-mirror) в новом Openshift v3. При первоначальном доступе вы создаете config.php из доступного шаблона, который содержит пароли БД и т. Д., Чтобы позволить tt-rss подключаться к базе данных. Теперь мне нужно добавить этот файл в корневой каталог приложения (/ opt / app-root / src /), где его ожидает tt-rss.

Следуя явно каноническому пути, я создал configmap с ключом config.php и содержимым файла в качестве значения. Однако при монтировании этого файла конфигурации в том, чтобы сделать его доступным для приложения, я столкнулся с проблемами, поскольку, очевидно, ожидалось, что точка монтирования тома не является существующий каталог, поэтому, когда я указал целевой путь / opt / app-root / src /, код моего приложения был перезаписан.

Затем я нашел способ предоставить один файл в уже заполненном каталоге:

вам необходимо указать абсолютный путь, включая имя файла в mountPath и имя файла снова в subPath. Имя файла (очевидно) должно соответствовать ключу в вашей карте конфигурации.

Я сделал это, но это приводит к недоступному (без разрешений) config.php файлу с очень странными свойствами, см. Отрывок из ls -la в развернутом модуле:

drwxrwxr-x.  8 default root  4096 Sep 29 13:41 classes                                                                                                                                               
-??????????  ? ?       ?        ?            ? config.php                                                                                                                                            
-rw-rw-r--.  1 default root  8057 Sep 29 13:41 config.php-dist

config.php-dist - это шаблон. Что случилось с вопросительными знаками ?? Эта функция не работает в Openshift?

Связанные части YAML выглядят так:

  volumeMounts:
    - mountPath: /opt/app-root/src/config.php
      name: volume-2k03m
      subPath: config.php

а также

  volumes:
    - configMap:
        defaultMode: 420
        items:
          - key: config.php
            path: config.php
        name: tt-rss-config
      name: volume-2k03m

Есть ли способ исправить эту конфигурацию? Есть ли другой способ «внедрить» (за неимением лучшего слова) этот config.php в приложение?

Некоторые люди рекомендуют символические ссылки, но я не знаю, как программно создать символическую ссылку в нужном месте, не сталкиваясь с теми же проблемами, что и с самим config.php.

Я не хочу помещать его в (общедоступное) исходное репо, поскольку оно содержит секреты, а исходное репо на самом деле является исходным репо, которое я бы предпочел не разветвлять и постоянно обновлять сам.


person Christoph    schedule 30.09.2017    source источник


Ответы (2)


Не будучи знаком с tt-rss, я бы сделал это заранее, создав файл config.php и включив его в исходный код. Вы можете использовать переменные среды в config.php для любых значений, которые могут измениться.

И тогда неясно, нужно ли вам переместить файл config.php из каталога репо или нет, но все, что вам нужно сделать после того, как контейнер уже запущен, является идеальным вариантом использования для . Скрипты s2i / bin. Вот образец run скрипта, используйте его точно как есть, а затем просто добавьте все, что вам нужно, например, перемещение файлов или изменение разрешений (примечание: вы не можете изменить ничего, что требует прав root). Наконец, любая дополнительная настройка камеры PHP может быть выполнена с помощью переменных среды, определенных в Документация по PHP S2I.

person Will Gordon    schedule 30.09.2017
comment
Да, как я уже сказал, я бы предпочел не трогать / изменять репозиторий исходного кода восходящего потока, но я могу попробовать это. Файл config.php может оставаться в каталоге репо. - person Christoph; 01.10.2017

По-видимому, это текущая ошибка, см. https://github.com/openshift/origin/issues/15750 и https://bugzilla.redhat.com/show_bug.cgi?id=1481617#c1.

В качестве обходного пути укажите subPath следующим образом: subPath: ..data/config.php, и все начнет работать должным образом.

person Christoph    schedule 03.10.2017