试用的用例是在启动后初始化postgres数据库的方法。我在post
pod生命周期中看到了openshift
启动挂钩。我不能使用here-document
或在命令行中放置sql语句(由于最大长度问题,Docker命令失败)。
所以寻找一个选项,通过SQL
将ConfigMap
语句保存在文件中,并在它开始之前将其附加到post
容器,以便psql
命令可以执行它。我看不到从官方文档DeploymentConfig
附加卷的方法。我有什么方法可以做到吗?
我提到的文件 - openshift-doc
答案 0 :(得分:0)
我找到了一种解决方法,可以将长SQL语句传递给post
生命周期窗格。
在DeploymentConfig
ENV变量中设置SQL语句。这些ENV变量也可以在生命周期窗口中访问,因此我们可以轻松地执行波纹管命令
post:
failurePolicy: Abort
execNewPod:
command:
- /bin/bash
- '-c'
- >-
echo $INIT_SQL_STATEMENTS | psql "sslmode=allow
host=postgres user=postgres password=postgres"
containerName: postgres
.....
env:
- name: POSTGRESQL_ADMIN_PASSWORD
value: postgres
- name: INIT_SQL_STATEMENTS
value: >-
create user haridas with encrypted password 'haridas';...
答案 1 :(得分:0)
我过去使用的另一个选项是将sql语句传递到参数文件中。然后,这将使您可以更轻松地配置管理sql命令(例如,将其检入git)并整理部署配置(DC)。这是我所做的:
parameters: - description: The SQL commands to run. displayName: SQL commands name: SQL_COMMANDS required: true
execNewPod: command: - /bin/sh - -c - echo "${SQL_COMMANDS}" | psql -h ${DATABASE_SERVICE_NAME} -U ${POSTGRESQL_USER} -d ${POSTGRESQL_DATABASE};
请注意,命令中的其他变量也作为参数传递。
POSTGRESQL_USER=postgres POSTGRESQL_PASSWORD=somepassword POSTGRESQL_DATABASE=myDatabase SQL_COMMANDS="CREATE TABLE Configuration(CONFIGURATION_ID character varying(255) NOT NULL, description character varying(255) NOT NULL, key character varying(255) NOT NULL, value text NOT NULL, PRIMARY KEY (CONFIGURATION_ID) ); INSERT INTO Configuration (CONFIGURATION_ID, description, key, value) VALUES ('10', ... etc."
oc new-app <template name> --param-file=ParametersFile.txt