微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

定义工作流的配置文件

如何解决定义工作流的配置文件

假设我需要在各种虚拟机上处理一些不同类型的项目

在运行工作流之前,我想定义一个要执行的项目列表

如果它是一个 bash 脚本,我会像这样创建一个文件

SELECT
count(distinct empl_id ) as UNIQUE_EMPL_ID,TIMESTAMP_COL as TIMESTAMP_FROM,TIMESTAMP_COL as TIMESTAMP_UNTIL
from source_table
WHERE PART_COLUMN = 'M'
group by TIMESTAMP_COL,PART_COLUMN

union all

SELECT
count(distinct empl_id ) as UNIQUE_EMPL_ID,add_months(TIMESTAMP_COL,2) as TIMESTAMP_UNTIL,avg(count( distinct empl_id)) OVER (PARTITION BY PART_COLUMN ORDER BY TIMESTAMP_COL ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) as UNIQUE_EMPL_ID
from source_table
WHERE PART_COLUMN = 'M'
group by TIMESTAMP_COL,PART_COLUMN


union all

SELECT
count(distinct empl_id ) as UNIQUE_EMPL_ID,5) as TIMESTAMP_UNTIL,avg(count( distinct empl_id)) OVER (PARTITION BY PART_COLUMN ORDER BY TIMESTAMP_COL ROWS BETWEEN CURRENT ROW AND 5 FOLLOWING) as UNIQUE_EMPL_ID
from source_table
WHERE PART_COLUMN = 'M'
group by TIMESTAMP_COL,8) as TIMESTAMP_UNTIL,avg(count( distinct empl_id)) OVER (PARTITION BY PART_COLUMN ORDER BY TIMESTAMP_COL ROWS BETWEEN CURRENT ROW AND 8 FOLLOWING) as UNIQUE_EMPL_ID
from source_table
WHERE PART_COLUMN = 'M'
group by TIMESTAMP_COL,11) as TIMESTAMP_UNTIL,avg(count( distinct empl_id)) OVER (PARTITION BY PART_COLUMN ORDER BY TIMESTAMP_COL ROWS BETWEEN CURRENT ROW AND 11 FOLLOWING) as UNIQUE_EMPL_ID
from source_table
WHERE PART_COLUMN = 'M'
group by TIMESTAMP_COL,PART_COLUMN

然后我将遍历此文件的每一行,然后遍历每个字段,例如(以非常简单的方式):

hostname1:projectA:type1
hostname2:projectA:type2
hostname3:projectB:type1
hostname4:projectC:type2
etc.

我似乎找不到办法做到这一点。

当然,还有工作流数据步骤,您可以在其中放置一些变量,但关于如何使用它以及如何将其包含在脚本中的文档为零。

如果我想知道定义的变量数量怎么办?如果我不想要一个变量列表,而是一个逗号分隔的字符串列表,像上面那样怎么办?

properties 的格式是什么?

这个想法是用最新的项目手动更新这个列表,并让 rundeck 管理任务。

我浏览了 6 页 Stack Overflow rundeck 主题。我找到的最接近的是 Is it possible to enumerate Rundeck input variables in script?

解决方法

一个很好的方法是通过内联脚本从 Rundeck API 获取项目列表,这是一个列出所有项目的基本示例:

#!/bin/sh

# protocol
protocol="http"

# basic rundeck info
rdeck_host="localhost"
rdeck_port="4440"
rdeck_api="39"
rdeck_token="G90XOPrPqT9dyuuySADVg5GcS8jNNrGV"

# api call
curl -s --location --request GET "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/projects" \
  --header "Accept: application/json" \
  --header "X-Rundeck-Auth-Token: $rdeck_token" \
  --header "Content-Type: application/json" | jq -r .[].name

示例使用 jq 按名称过滤,也可以使用输出保存到文件,执行 wc -l 枚举元素(过滤或不使用 {{1} } 或其他工具)等

因此,关于 Data Step(如果您想在您的环境中测试,请选中 this),该示例仅使用数据步骤创建两个数据值,然后将其打印在命令步骤/脚本上步骤,这样你就可以生成你的配置文件。

grep
  1. “属性”格式只是生成任何数据的键=值格式,例如:- defaultTab: nodes description: '' executionEnabled: true id: c955e3f5-732e-41dd-b837-726efb2a73dd loglevel: INFO name: HelloWorld nodeFilterEditable: false plugins: ExecutionLifecycle: {} scheduleEnabled: true schedules: [] sequence: commands: - configuration: data: |- brand=fiat type=citycar format: properties nodeStep: false type: stub-data-step - description: Command Step Example exec: echo "the car is an ${stub.brand} ${stub.type}" - description: Script step example fileExtension: .sh interpreterArgsQuoted: false script: echo "the car is an @stub.brand@ @stub.type@" scriptInterpreter: /bin/bash keepgoing: false strategy: node-first uuid: c955e3f5-732e-41dd-b837-726efb2a73dd
  2. “技巧”是以这种方式捕获值:country=italystub.country 用于命令步骤,${stub.country} 用于内联脚本步骤)这意味着文档需要一个更新。

Here 结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。