首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Groove脚本从主机文件Ansible for Jenkins管道中获取主机?

如何使用Groove脚本从主机文件Ansible for Jenkins管道中获取主机?
EN

Stack Overflow用户
提问于 2022-09-05 16:49:31
回答 1查看 260关注 0票数 -2

我想要创建一个管道,它可以使用Ansible库存文件中的主机名。路径:不可用/库存/产品前/主机

代码语言:javascript
复制
[client-app]
client-app-preprod-01.aws
client-app-preprod-02.aws
client-app-preprod-03.aws
client-app-preprod-04.aws

[server-app]
server-app-preprod-01.aws
server-app-preprod-02.aws
server-app-preprod-03.aws
server-app-preprod-04.aws

我创建了一个在功能上工作的脚本,但是使用了来自它自身的主机列表(硬代码)。Groovy脚本:

代码语言:javascript
复制
if (ENVIRONMENT=="preprod") {
    if (SERVICE=="client-app") {
        hostsList = ['client-app-preprod-01.aws','client-app-preprod-02.aws','client-app-preprod-03.aws','client-app-preprod-04.aws']
        } else {
        hostsList =  ['server-app-preprod-01.aws','server-app-preprod-02.aws','server-app-preprod-03.aws','server-app-preprod-04.aws']
    }
}
return hostsList

但我找不到一个解决方案来创建一个脚本,该脚本可以从Ansible存储库和库存文件中读取主机。如果能提供任何信息来帮助我编写这个脚本,我将不胜感激。课程,书籍,例子等等。

此外,管道应该如下所示:

EN

回答 1

Stack Overflow用户

发布于 2022-09-05 20:18:35

下面是一个示例函数,您可以使用它来处理库存文件并获取主机条目。

代码语言:javascript
复制
def getHostList(def appName, def filePath) {

    def hosts = []
    def content = readFile(file: filePath)
    def startCollect = false
    for(def line : content.split('\n')) {
        if(line.contains("["+ appName +"]")){ // This is a starting point of host entries
            startCollect = true
            continue
        } else if(startCollect) {
            if(!line.allWhitespace && !line.contains('[')){
                hosts.add(line.trim())
            } else {
                break
            }
        } 
    }
    return hosts
}

您可以像下面这样调用这个函数。

代码语言:javascript
复制
def hosts = getHostList("client-app", "ansible/inventories/preprod/hosts")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73612512

复制
相关文章

相似问题

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