首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行程序如何将机器列表传递给脚本?

运行程序如何将机器列表传递给脚本?
EN

Stack Overflow用户
提问于 2015-06-18 10:02:58
回答 4查看 8.4K关注 0票数 1

我目前正在探索Runddeck,以便管理当时的几个100 am。Rundeck是一个非常有用的工具,可以在多台机器上运行脚本/命令(每个脚本被传递到远程机器,然后在本地执行)。但是,我想知道是否有一种实现以下系统管理场景的方法。

运行程序工作要求(例如: Observium)

  1. “调度到节点”选项被选中,但只选择了一个目标机器(Observium机器)。
  2. 尽管只在一台机器上运行作业,但如果Rundeck允许选择脚本所需的多台机器,那就太好了。注意,脚本不应该在所有节点上运行,它只应该在单个远程机器上运行,但是脚本需要机器列表。这是怎么做到的?
  3. 脚本以参数的形式访问机器列表。这是怎么做到的?
  4. 如果上面的内容已经到位,那么脚本就只在一台机器上运行,并遍历机器列表(例如,==> ),它运行/opt/observium/add_device.php v2c @node.name@ ${varSNMPCommunity}

我没有足够的声誉包括图片在这篇文章。请使用下面的链接查看流程图。

https://www.dropbox.com/s/2zt4r9trulpsaqx/RundeckObservium.png?dl=0

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-02 10:37:04

如果您想在运行在运行程序的机器上运行您的脚本,并且脚本将对目标机器执行远程ssh操作,那么您必须只在运行程序中选择本地机器。然后,在脚本中,您可以调用rundeck来交付项目的机器列表。在bash中,你可以做折叠式

代码语言:javascript
复制
#!/bin/bash
projectName="test_project"
nodeFilter="tags:app"
/usr/bin/dispatch -v -p $projectName --filter "$nodeFilter" >/tmp/filtered.node
nodes=( $( grep "hostname" /tmp/filtered.node | cut -f2 -d ":" ) )
echo "$nodes[@]"

下面的示例将给出来自test_project的节点列表,这些节点的标记设置为app。

票数 1
EN

Stack Overflow用户

发布于 2015-06-21 08:09:03

与其让脚本在一个节点上运行以获得机器列表,不如使用节点筛选器来查看是否可以让RunDeck从标记中确定目标节点。这将取决于如何配置项目以获取资源。

例如,如果您正在使用标记,那么您可能希望有一个符合您的条件的标记。假设您希望找到与您创建的标记RebootPending相匹配的机器。您可以使用它作为作业的节点筛选器,向这些主机发送重新启动命令。

另一个可能的选择是让您的步骤2脚本将JSON格式的文件输出到web服务器。然后,您可以使用一个选项配置RD作业,该选项读取此远程URL (可能是主机列表),然后根据该列表执行操作。作业选项和节点筛选器可以这样配置:

代码语言:javascript
复制
Option Name: inputFilter
Description: Used for targeting nodes
Default Value: (empty)
Input Type: [X]Plain text [ ]Secure [ ]Secure Remote Authentication
Allowed Values: [ ]List  [X]Remote URL

Node Filter: tags:${option:inputFilter}

通过使用这些设置,您可以让远程网页(例如,脚本的输出)确定目标节点。请注意,RunDeck JSON格式是特定的,并且没有很好地报告读取错误。密切关注运行库用户指南-选项模型提供程序

如果这不是一种可行的方法,您可能需要考虑使用不同的工具,比如Jenkins。

票数 1
EN

Stack Overflow用户

发布于 2016-07-08 18:51:37

我只需为类似的目的创建一个作业--在远程节点上执行一个脚本,但将任意数量的服务器传递给该脚本。我将所有目标服务器名称转储到server.json中,并将其用作作业选项“target”中的远程URL。用户从结果下拉列表中选择任何服务器,然后运行Deck调用结果${option.target}。

在那里,我创建了一个内联脚本,并将${option.target}作为args传递:

代码语言:javascript
复制
#!/bin/env bash 
OPTION_TARGET="$@" 
sudo bash -c "cd /opt/some/directory/bin ; ./script.sh servers=${OPTION_TARGET}"

因此,Run最终会在我已经标记的节点上调度./script.sh foo bar baz quux,并解决了问题。讲得通?

对不起,我的解决方案似乎很贴切。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30912312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档