Cloudify Script Plugin:将输入作为环境变量传递给脚本

时间:2016-01-14 18:20:35

标签: python cloudify cloudify-script-plugin

我正在尝试将蓝图输入作为环境变量传递给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")。但即使我在部署期间通过输入传递自定义值,我也总是获得默认值

我应该更改什么才能在脚本中以环境可变量(来自蓝图的输入部分)的形式访问输入参数?

1 个答案:

答案 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)

希望在文档中明确说明这一点。