获取全局日志过滤器以从 Rundeck 中的另一个作业捕获 key/value 数据
Getting global log filter to capture key/value data from another job in Rundeck
我使用 Rundeck 来执行作业 A。在作业 A 中,我有一个使用默认正则表达式 (RUNDECK:DATA:...
) 捕获 key/value 数据的全局日志过滤器。
我调用另一个作业 - 作业 B - 打印以 RUNDECK:DATA:key = 值开头的内容。我从作业 A 执行作业 B。不知何故,我在作业 A 中设置的全局日志过滤器不解析作业 B 的输出。
我向作业 B 添加了相同的全局日志过滤器,发现数据被正确捕获,但它在作业 A 上不可用,因此可以在以下步骤中使用。
有谁知道是否可以从另一个作业的输出中捕获 key/value?我设法从同一个作业的步骤中捕获值,但当输出来自另一个调用的作业的执行时却没有。
检查您的最后一条评论最简单的方法是使用存储值的文件(在 JobB 上),稍后由 JobA 的后续步骤处理。基本上,JobA 通过 Job Reference Step 启动 JobB,然后 JobB 在文件上生成数据,JobA 在接下来的步骤中从临时文件中恢复该值。
工作A:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>a0daf1e3-e918-43dc-b232-bc46a7a287b6</id>
<loglevel>INFO</loglevel>
<name>JobA</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "starting Job A"</exec>
</command>
<command>
<description>Job B call that geneates the temp value</description>
<jobref name='JobB' nodeStep='true'>
<uuid>ba183d3b-67d9-4499-b863-da8b7ac8aef3</uuid>
</jobref>
</command>
<command>
<exec>echo "printing the Job B value"</exec>
</command>
<command>
<exec>cat tempfile.txt</exec>
<plugins>
<LogFilter type='key-value-data'>
<config>
<invalidKeyPattern>\s|$|\{|\}|\</invalidKeyPattern>
<logData>true</logData>
<regex>^(mykey)\s*=\s*(.+)$</regex>
</config>
</LogFilter>
</plugins>
</command>
<command>
<exec>echo "the value is ${data.mykey}"</exec>
</command>
</sequence>
<uuid>a0daf1e3-e918-43dc-b232-bc46a7a287b6</uuid>
</job>
</joblist>
工作B:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>ba183d3b-67d9-4499-b863-da8b7ac8aef3</id>
<loglevel>INFO</loglevel>
<name>JobB</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "Generating the value..."</exec>
</command>
<command>
<exec>echo "mykey=myvalue" > tempfile.txt</exec>
</command>
<command>
<exec>echo "Value generated on temp file"</exec>
</command>
</sequence>
<uuid>ba183d3b-67d9-4499-b863-da8b7ac8aef3</uuid>
</job>
</joblist>
我使用 Rundeck 来执行作业 A。在作业 A 中,我有一个使用默认正则表达式 (RUNDECK:DATA:...
) 捕获 key/value 数据的全局日志过滤器。
我调用另一个作业 - 作业 B - 打印以 RUNDECK:DATA:key = 值开头的内容。我从作业 A 执行作业 B。不知何故,我在作业 A 中设置的全局日志过滤器不解析作业 B 的输出。
我向作业 B 添加了相同的全局日志过滤器,发现数据被正确捕获,但它在作业 A 上不可用,因此可以在以下步骤中使用。
有谁知道是否可以从另一个作业的输出中捕获 key/value?我设法从同一个作业的步骤中捕获值,但当输出来自另一个调用的作业的执行时却没有。
检查您的最后一条评论最简单的方法是使用存储值的文件(在 JobB 上),稍后由 JobA 的后续步骤处理。基本上,JobA 通过 Job Reference Step 启动 JobB,然后 JobB 在文件上生成数据,JobA 在接下来的步骤中从临时文件中恢复该值。
工作A:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>a0daf1e3-e918-43dc-b232-bc46a7a287b6</id>
<loglevel>INFO</loglevel>
<name>JobA</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "starting Job A"</exec>
</command>
<command>
<description>Job B call that geneates the temp value</description>
<jobref name='JobB' nodeStep='true'>
<uuid>ba183d3b-67d9-4499-b863-da8b7ac8aef3</uuid>
</jobref>
</command>
<command>
<exec>echo "printing the Job B value"</exec>
</command>
<command>
<exec>cat tempfile.txt</exec>
<plugins>
<LogFilter type='key-value-data'>
<config>
<invalidKeyPattern>\s|$|\{|\}|\</invalidKeyPattern>
<logData>true</logData>
<regex>^(mykey)\s*=\s*(.+)$</regex>
</config>
</LogFilter>
</plugins>
</command>
<command>
<exec>echo "the value is ${data.mykey}"</exec>
</command>
</sequence>
<uuid>a0daf1e3-e918-43dc-b232-bc46a7a287b6</uuid>
</job>
</joblist>
工作B:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>ba183d3b-67d9-4499-b863-da8b7ac8aef3</id>
<loglevel>INFO</loglevel>
<name>JobB</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "Generating the value..."</exec>
</command>
<command>
<exec>echo "mykey=myvalue" > tempfile.txt</exec>
</command>
<command>
<exec>echo "Value generated on temp file"</exec>
</command>
</sequence>
<uuid>ba183d3b-67d9-4499-b863-da8b7ac8aef3</uuid>
</job>
</joblist>