在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  GO  網(wǎng)絡安全/ 如何用 golang 開發(fā) ansible 的 filter 插件

如何用 golang 開發(fā) ansible 的 filter 插件

問題描述

如何用 golang 開發(fā) ansible 的 filter 插件?
模塊可以用 go 開發(fā),filter 插件不知道是否行的通。

問題出現(xiàn)的平臺版本及自己嘗試過哪些方法

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}

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

使用 golang 開發(fā) ansible 的 filter 插件可以提供一些示例代碼

回答
編輯回答
維她命

經(jīng)過嘗試,使用 python 可以實現(xiàn)。
前面的做法 filter 返回的是 python 的list,并不能直接作為數(shù)組使用,需要將其轉(zhuǎn)化為字符串,再返回就 OK 了。

原因:對 python 的數(shù)據(jù)結(jié)構(gòu)理解不夠

實現(xiàn)如下:

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
        }
2017年11月14日 00:27