如何用 golang 开发 ansible 的 filter 插件

发布于 2022-09-07 22:09:38 字数 586 浏览 29 评论 0

问题描述

如何用 golang 开发 ansible 的 filter 插件?
模块可以用 go 开发,filter 插件不知道是否行的通。

问题出现的平台版本及自己尝试过哪些方法

python 在处理单双引号时老是出问题,因此打算用 golang 处理。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
python 版本

def single_double(a_list):
    new_list = [ '%s' % an_element for an_element in a_list]
    #return '"%s"' % new_list
    return new_list

class FilterModule(object):
    def filters(self):
        return {'single_double': single_double}

你期待的结果是什么?实际看到的错误信息又是什么?

使用 golang 开发 ansible 的 filter 插件可以提供一些示例代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感情洁癖 2022-09-14 22:09:38

经过尝试,使用 python 可以实现。
前面的做法 filter 返回的是 python 的list,并不能直接作为数组使用,需要将其转化为字符串,再返回就 OK 了。

原因:对 python 的数据结构理解不够

实现如下:

def to_join_http_port(nodes, hostvars, ansible_default_netname, port):
    """
    INPUT:
        nodes: groups.group_name
        hostsvars: ansible Built-in vars
        ansible_default_netname: ethernet name
        port: program server port
    RETURN:
        string like '"http://10.32.254.7:8081","http://10.32.254.8:8081","http://10.32.254.11:8081"'
    """
    ips = []
    for node in nodes:
        ips.append(hostvars[node][ansible_default_netname]["ipv4"]["address"])
    return ",".join([ '"http://%s:%s"' % (ip, port) for ip in ips ])


class FilterModule(object):
    def filters(self):
        return {
            'http_port_join': to_join_http_port
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文