【问题标题】:Bash/Shell - Nested Variables for Dynamic UDeploy PropertyBash/Shell - 动态 UDeploy 属性的嵌套变量
【发布时间】:2019-01-25 20:14:23
【问题描述】:

对于我们正在尝试构建的应该能够动态响应的流程,我需要一些帮助。

这个过程有点像这样。 用户将针对环境提交处理请求,提交字符串值数组作为运行时值。该过程会将这些作为 bash 中的数组接收,并循环遍历它们,根据预定义的字符串列表检查它们的有效性。一旦发现它们是有效的,就会根据字符串中的值做出不同的反应。

示例: 用户提交带有值"abc", "bcd", "cde", "def" 的处理请求 值 "abc", "bcd", and "def" 有效。

我们进行了一些操作以使它们可用:

echo ${p:inputArray}
inputArray="${p:inputArray}"
inputArray=${inputArray//]/}
inputArray=${inputArray//[/}
inputArray=${inputArray//,/}
inputArray=( "${inputArray[@],,}" )

然后循环遍历每个值并做出反应:

for inputValue in $inputArray; do
    if [[ "${validInputArray[@]}" =~ "${inputValue}" ]]; then
         // Check if value is the outlier case "A"
         // Or if the value is normal (but multiple) case "B"
         // If case "B" then we'll build a variable for it
         // It should be something like ${p:environment/$inputValue.action}

例如,理想情况下,这会给我 ${p:environment/abc.action} 的值。但事实并非如此。它给了我一个字符串。我无法评估动态创建的属性请求,因为所有属性都是在初始化时评估的,而不是即时评估的。

我们可以通过“case”方法来处理它——但它有点难看,而且随着有效输入数量的增加,它只会变得更难看。

【问题讨论】:

    标签: urbancode udeploy ucd


    【解决方案1】:

    您可以配置 UCD 以提示它们输入特定值,而不是向其发送值数组。您可以在申请过程中执行此操作。这样,当用户启动部署时,就不会猜测输入的有效性。

    在应用程序的进程页面上,单击应用程序进程属性链接

    从那里,您可以将其配置为需要某种模式(通过正则表达式检查),或来自下拉列表、原始文本、日期时间等的显式值。在这里,我配置了一个具有多选功能的属性允许特定的 JVM 最大堆值。通过将其限制为特定值,您可以避免拼写错误和部署失败。

    配置完成后,当您启动流程时,您会在界面中看到该属性:

    【讨论】:

    • 您是否仍然遇到知道如何处理/如何使用每个值的问题?在您的示例中 - 这是一个多选,因此他们可以选择 2gb、4gb 和 8gb。如果他们只选择一个 - 这是一个简单的属性替换。但是,如果他们选择了所有三个,那么它再次成为一个数组属性,除了“检查所有值”类型的循环之外,没有适当的方法来提取值。除非我错过了什么?
    • 您有多种数据输入类型。我选择了一个多值。这可能是一个下拉菜单。
    • 是的 - 但在我们的例子中,它也是一个多选。但是您如何区分这些值并相应地对它们做出反应?如果您在同一个部署运行中选择“2gb”和“4gb”,它们都会在同一个变量(MaxHeapSize)中遇到。但是,它们并不是一个合适的数组。那么,如果没有可靠的方法来识别您要引入的输入是什么,您如何对多个输入做出反应呢?
    • 如果变量只能有一个值,则不会使用多选。上面是添加 1 个属性的示例。您可以添加多个属性,每个属性具有不同的视觉样式(文本、组合、复选框等)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2013-09-27
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多