我正在尝试编辑NCPA配置,以允许我使用的一些插件作为sudo运行。为了实现这一点,我需要在ncpa.cfg中的一行中添加一个逗号分隔的插件列表,其中包含指令";run_with_sudo="。问题是,我想添加多个插件,但不是一次全部添加,否则我只会使用sed或lineinfile。我想通过ansible playbook来实现这一点,要么使用一些特定的模块,要么通过shell模块,因为NCPA配置发生在给定机器的供应过程中。
我正在从NRPE升级,在NRPE中,您只需在NRPE.cfg本身中使用sudo来定义命令,这样就更容易了。但我现在正在升级到NCPA,我想重用我用来在目标机器上安装检查的大部分nrpe剧本。唯一的问题是在一行中添加插件。
所以我想做的是
- 我在ncpa.cfg中有这行
run_with_sudo=
- 任务运行并将插件添加到run_with_sudo
run_with_sudo=some_plugin_1.sh,
- 随着剧本对其他需要sudo的插件的审查,这种情况还会发生几次
run_with_sudo=some_plugin_1.sh,some_plugin _2.sh,ome_plugin_3.sh,
当我重新运行剧本时,一切都不应该改变。所以我想基本上在这行的末尾附加一个文本,但前提是它还没有出现。所以我需要以某种方式检查带有";run_with_sudo=";包含一个特定的插件,如果没有添加到行的末尾。
有合理的方法吗?
$ cat tst.sh
#!/usr/bin/env bash
plugin="$1"
shift
awk -v plugin="$plugin" '
{ sub(/r$/,"") }
$1 == "run_with_sudo" {
present = 0
n = split($3,plugins,",")
for (i=1; i<=n; i++) {
if ( plugins[i] == plugin ) {
present = 1
break
}
}
if ( !present ) {
$0 = $0 plugin ","
}
}
{ print $0 }
' "${@:--}"
$ cat file
run_with_sudo = some_plugin_1.sh,some_plugin_2.sh,some_plugin_3.sh,
$ ./tst.sh some_plugin_2.sh file
run_with_sudo = some_plugin_1.sh,some_plugin_2.sh,some_plugin_3.sh,
$ ./tst.sh some_plugin_4.sh file
run_with_sudo = some_plugin_1.sh,some_plugin_2.sh,some_plugin_3.sh,some_plugin_4.sh,