Rundeck如何使用多值执行远程命令?
允许值:folder1,folder2,folder3
多值:[x]是
需要在远程节点上执行远程命令:
/home/$folder1/run.sh
/home/$folder2/run.sh
/home/$folder3/run.sh
内联脚本还是别的什么?
答案 0 :(得分:0)
是的,对于这种情况,内联脚本可能最简单。
下面是一个作业定义,展示了如何在bash脚本中解析多个值:
- description: 'execute script with an option using multiple values'
executionEnabled: true
loglevel: INFO
name: SO-48341496
nodeFilterEditable: false
options:
- delimiter: ','
enforced: true
multivalued: true
name: folders
required: true
values:
- folder1
- folder2
- folder3
scheduleEnabled: false
sequence:
commands:
- args: ${option.folders}
script: |-
#!/usr/bin/env bash
IFS=',' read -ra FOLDERS <<< "$1"
for folder in "${FOLDERS[@]}"
do
echo "execute '/home/$folder/run.sh'"
done
keepgoing: false
strategy: node-first
答案 1 :(得分:0)
我也想在这里分享我的答案。
无论何时在Rundeck上使用多值选项,都可以选择在多个值之间提供定界符。无论选择哪种定界符,值都将转换为以下形式:
<value1><delimiter><value2><delimiter><value3><delimiter>...
如果您选择空格作为定界符,则这些值将转换为:
<value1> <value2> <value3> ...
脚本在将这些值识别为$ 1,$ 2,$ 3时出现问题...由于某种原因,所有内容都放入$ 1中-我猜Rundeck会将所有内容转换为:
'<value1> <value2> <value3> ...'
但是我对此不是100%肯定。
通常,解决方案是根据定界符将此参数字符串拆分为单独的参数。但是,如果您的目标脚本是bash脚本(.sh),则此操作可能不那么容易。
我认为有几种解决方法:
#!/usr/bin/perl use strict; use warnings; use 5.16.3; my $rundeck_input = $ARGV[0]; my @arguments = split(';',$rundeck_input); my $final_str=""; my $i = 0; foreach my $ele ( @arguments ) { $final_str = $final_str . '\'' . $ele . '\''; if ($i == ($#arguments)) { } else { $final_str = $final_str . " "; } $i++; } system("/usr/bin/bash /home/rundeck/scripts/myscript.sh $final_str");
在上面的示例中,我使用了;作为分隔字符,因为几乎不可能出现在有人在Rundeck上输入的任何参数中。 perl脚本将参数字符串拆分为多个参数,并将其提供给bash脚本,如下所示:
'<value1>' '<value2>' '<value3>' ...
在system()调用中将它们作为单独的参数提供可能是一个更好的主意。肯定有更复杂的方法可以做到这一点。这只是一个例子。