繁体   English   中英

有什么办法可以禁用rundeck中的排名顺序吗?

[英]Is there any way to disable the rank order in rundeck?

我有节点 abcd1、abcd2、abcd3、abcd4

输入 = abcd1,abcd3,abcd4,abcd2

如果排名顺序升序 - 执行遵循 - abcd1,abcd2,abcd3,abcd4 顺序如果排名顺序下降 - 执行遵循 -abcd4,abcd3,abcd2,abcd1 顺序。 我希望我的执行遵循与输入相同的顺序,即 abcd1、abcd3、abcd4、abcd2。 如何实现?

您可以在您的作业定义中使用“排名属性”选项,为此,只需在您的节点源上定义(或使用)一些属性,然后 Rundeck 使用它,例如,使用这个resources.xml (检查myorder自定义属性):

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <node name="node00" description="Node 00" tags="" myorder="02" hostname="192.168.33.20" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-1062.4.1.el7.x86_64" username="vagrant" ssh-key-storage-path="keys/rundeck"/>
  <node name="node01" description="Node 01" tags="" myorder="03" hostname="192.168.33.21" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-1062.4.1.el7.x86_64" username="vagrant" ssh-key-storage-path="keys/rundeck"/>
  <node name="node02" description="Node 02" tags="" myorder="01" hostname="192.168.33.22" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-1062.4.1.el7.x86_64" username="vagrant" ssh-key-storage-path="keys/rundeck"/>
</project>

现在设置带有myorder属性的“Rank Attribute”文本框,保存作业并再次运行。 您可以查看基于该属性的顺序。

更多信息在这里

2020 年 7 月 30 日更新:

在这个答案的第一条评论之后,存在一种使用 bash 脚本修改 resource.xml 文件的方法,稍后更新节点定义,然后使用Job Reference Step将子作业启动到新的 rankAttribute 顺序。

首先,更改 Rundeck Model Source 的脚本(需要xmlstarlet ):

#!/bin/bash

path=$RD_OPTION_PATH
myorder=$RD_OPTION_NODE_ORDER
counter=1
Field_Separator=$IFS
 
# set comma as internal field separator for the string list
IFS=,
for value in $myorder;
do
    echo $counter
    xmlstarlet ed --inplace -u "/project/node[$counter][@myorder]/@myorder" -v $value $path
    counter=$((counter+1))
done
 
IFS=$Field_Separator

现在,父作业(调用上面的脚本,刷新 Rundeck Model 源并最终启动“目标”作业):

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='node_order' value='3,2,1' />
        <option name='path' required='true' value='/home/m68k/Rundeck/resources/farm.xml' />
      </options>
    </context>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>860e7189-f399-47c4-ab86-5b47017188dd</id>
    <loglevel>INFO</loglevel>
    <name>Parent</name>
    <nodeFilterEditable>true</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='sequential'>
      <command>
        <description>Just a message</description>
        <exec>echo "Starting..."</exec>
      </command>
      <command>
        <description>Call the script</description>
        <fileExtension>.sh</fileExtension>
        <scriptargs />
        <scriptfile>/home/m68k/Downloads/TEST.sh</scriptfile>
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
      <command>
        <description>Refresh Rundeck Model Source</description>
        <step-plugin type='source-refresh-plugin'>
          <configuration>
            <entry key='sleep' value='5' />
          </configuration>
        </step-plugin>
      </command>
      <command>
        <description>And launch the "target" job against the new node order</description>
        <jobref name='Child' nodeStep='true'>
          <uuid>0e02890e-c9dd-4a65-ace1-bfe90b9b7a8e</uuid>
        </jobref>
      </command>
    </sequence>
    <uuid>860e7189-f399-47c4-ab86-5b47017188dd</uuid>
  </job>
</joblist>

最后,Child Job,即“目标工作”。

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <dispatch>
      <excludePrecedence>true</excludePrecedence>
      <keepgoing>false</keepgoing>
      <rankAttribute>myorder</rankAttribute>
      <rankOrder>ascending</rankOrder>
      <successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
      <threadcount>1</threadcount>
    </dispatch>
    <executionEnabled>true</executionEnabled>
    <id>0e02890e-c9dd-4a65-ace1-bfe90b9b7a8e</id>
    <loglevel>INFO</loglevel>
    <name>Child</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <nodefilters>
      <filter>node.*</filter>
    </nodefilters>
    <nodesSelectedByDefault>true</nodesSelectedByDefault>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <exec>echo "Hello ${node.name}"</exec>
      </command>
    </sequence>
    <uuid>0e02890e-c9dd-4a65-ace1-bfe90b9b7a8e</uuid>
  </job>
</joblist>

因此,如果您设置3,1,2顺序,您可以在resources.xml文件的myorder属性上看到结果,子作业按该顺序执行。

<?xml version="1.0"?>
<project>
  <node name="node00" description="Node 00" tags="" hostname="192.168.33.20" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-1062.4.1.el7.x86_64" username="vagrant" ssh-key-storage-path="keys/rundeck" myorder="3"/>
  <node name="node01" description="Node 01" tags="" hostname="192.168.33.21" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-1062.4.1.el7.x86_64" username="vagrant" ssh-key-storage-path="keys/rundeck" myorder="1"/>
  <node name="node02" description="Node 02" tags="" hostname="192.168.33.22" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-1062.4.1.el7.x86_64" username="vagrant" ssh-key-storage-path="keys/rundeck" myorder="2"/>
</project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM