环境变量没有在openshift中扩展

时间:2014-10-13 07:53:06

标签: environment-variables openshift openshift-client-tools

似乎我使用的命令如下:

rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file"

引用的目录变量永远不会扩展,因此我不能将它用于我的应用程序。有什么方法可以解决这个问题吗?

修改

正如@ timo.rieber在他的回答中指出的那样,这不会起作用,因为变量在本地被解析,它没有任何价值。事实上:

$ rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file"
Setting environment variable(s) ... done
$ rhc env show VARIABLE
VARIABLE=/file

但是,如果我使用单引号来避免立即扩展:

$ rhc env set VARIABLE='$OPENSHIFT_DATA_DIR/file'
Setting environment variable(s) ... done
$ rhc env show VARIABLE
VARIABLE=$OPENSHIFT_DATA_DIR/file

有趣的是,这不起作用(即当进程使用时不会发生扩展),即使这次正确设置也是如此。

3 个答案:

答案 0 :(得分:2)

问题解释:

$OPENSHIFT_DATA_DIR的值在您的本地计算机上得到解决。很可能它是空的,因为你的机器上没有设置这个变量。

无法读取内置服务器端环境变量(如$OPENSHIFT_DATA_DIR)的值。只会暴露外部设置的变量。您可以通过以下示例尝试此操作:

user@machine:~$ rhc env list

user@machine:~$ rhc env set VARIABLE="file"
Setting environment variable(s) ... done

user@machine:~$ rhc env list
VARIABLE=file

user@machine:~$ rhc env unset VARIABLE
Removing environment variables is a destructive operation that may result in loss of data.
VARIABLE

Are you sure you wish to remove the environment variable(s) above from application 'yourapp'?(yes|no):yes

Removing environment variable(s) ... done

user@machine:~$ rhc env list

解决方案:

设置两个环境变量并在程序代码中使用它们来构建路径:

<强> 1。定义第一个环境变量以定义要读取的内置环境变量

user@machine:~$ rhc env set MY_ENV_VAR_FOR_BASE_DIR="OPENSHIFT_DATA_DIR"
Setting environment variable(s) ... done

<强> 2。定义第二个环境变量以指定给定目录中的文件夹

user@machine:~$ rhc env set MY_TARGET_FOLDER="file"
Setting environment variable(s) ... done

第3。在你的代码中(python示例)构建你的路径

(InteractiveConsole)
>>> import os

>>> os.environ.get("MY_ENV_VAR_FOR_BASE_DIR")
'OPENSHIFT_DATA_DIR'

>>> os.environ.get("OPENSHIFT_DATA_DIR")
'/var/lib/openshift/your_user_dir/app-root/data/'

>>> os.environ.get("MY_TARGET_FOLDER")
'file'

>>> os.path.join(os.environ.get(os.environ.get("MY_ENV_VAR_FOR_BASE_DIR")), os.environ.get("MY_TARGET_FOLDER"))
'/var/lib/openshift/your_user_dir/app-root/data/file'

答案 1 :(得分:0)

我记得运行&#34; rhc env set ...&#34;,但我的节点快递服务器仍然看到&#39; undefined&#39;直到我跑出去#34;出口FOO&#34;。所以试试吧。

答案 2 :(得分:0)

虽然这个问题很老,但我想我会发布目前可能解决的问题。环境变量在OpenShift pod中扩展,有点像在shell中使用$(VAR)语法,因此您可以设置变量 DATABASE_URL喜欢;

oc set env dc service -e 'DATABASE_URL=mysql://user:pass@$(MARIADB_SERVICE_HOST):$(MARIADB_SERVICE_PORT)/dbname'

然后这些变量将在部署时扩展。