我正在尝试将蓝图输入作为环境变量传递给python脚本(在节点的一个生命周期操作期间由script_plugin执行)。
我们正在使用Cloudify 3.1。 我的蓝图如下所示(修剪它以显示所需的部分):
inputs:
sql_server_username:
type: string
default: ''
description: >
Enter SQL Server User Name
node_templates:
my_install:
type: my.nodes.Root
relationships:
- target: win2012r2
type: cloudify.relationships. contained_in
interfaces:
cloudify.interfaces.lifecycle:
start:
implementation: scripts/my/installer.py
inputs:
process:
env:
SQL_USERNAME: { get_input: sql_server_username }
并在我的python脚本(installer.py)中我尝试使用SQL_USERNAME
访问os.environ.get("SQL_USERNAME", "DEFAULT")
。但即使我在部署期间通过输入传递自定义值,我也总是获得默认值
我应该更改什么才能在脚本中以环境可变量(来自蓝图的输入部分)的形式访问输入参数?
答案 0 :(得分:0)
花了将近24小时后,发现如果脚本是python脚本并且在Process配置选项中eval_script未设置为false,则不会注入环境变量(至少适用于v 3.1)。
感谢Dan Kilman。 以下代码段来自Ref#https://groups.google.com/d/msg/cloudify-users/mEAI9x9ivXQ/39Rg6KgKP4cJ
它们确实不作为环境变量暴露,但很容易 通过将它们放在顶层输入中而不是作为输入 嵌套的env.process然后执行类似
的操作
from cloudify.state import ctx_parameters as inputs
之后,您可以像这样访问这些
在这种情况下,#p>输入只是一个含糖的字典,它允许对操作输入进行顶级键属性访问 #你也可以做inputs['LOAD_BALANCER_IP'] ``ctx.logger.info(inputs.LOAD_BALANCER_IP)
希望在文档中明确说明这一点。