逗号出现在通过定制Ansible查找插件返回值

问题描述 投票:0回答:2

我试图写一个小插件查找返回时间戳+ 1天。

这主要是练习,但它似乎离我已经打了一个问题蝙蝠。

看来每个字符用时在Ansible输出(通过调试模块)以逗号分隔。

查找插件本身是:

from datetime import datetime, timedelta
from ansible.plugins.lookup import LookupBase


# Small plugin to return time + 1 day
class LookupModule(LookupBase):
    def run(self, terms, variables, **kwargs):
        dt = datetime.now() + timedelta(days=1)
        return dt.strftime("%Y%m%dT%H%M%S")

摆在./lookup_plugins/tomorrow.py。

该剧正在运行的是:

---
- hosts: localhost
  vars:
    test: "{{ lookup('tomorrow') }}"
  tasks:
    - debug:
        var: test

目前的结果是:

PLAY [localhost] **************************************************************

TASK [Gathering Facts] ********************************************************
ok: [localhost]

TASK [debug] ****************************************************************************

ok: [localhost] => {
    "test": "2,0,1,9,0,2,0,6,T,1,5,1,6,3,7"
}

如果我修改了Python文件,只是打印输出,我得到正确没有逗号的字符串。

刚一说明,我意识到我在功能上可以做:

"{{ lookup('pipe','date -d \"1 day\" +%Y%m%dT%H%M%S') }}"

然而,在这一点上,我很好奇,想了解发生了什么。

python ansible
2个回答
0
投票

然而,在这一点上,我很好奇,想了解发生了什么。

这是因为你正在返回一个字符串,它是一个字符长list的Python中的str,因此当LookupBase(或任何人)试图遍历run()的输出,它变成["h","e","l","l","o"]的交易类型。

我没有检查them all,但我查了其中的4-5,以及所有那些我发现return a list

我认为这是一个文档错误,只有这样,任何人都可以猜测run旨在返回多东西是从它是pydoc提到的plural "strings"。随意提交bug in ansible,让他们知道你的经验


1
投票

这是由设计。查找插件是历史上通常用来管导致成环。所以Ansible希望看到一个列表。

你可以用你的返回值放入一个列表,如:

return [dt.strftime("%Y%m%dT%H%M%S")]

这样一来,你会得到结果,您期望与lookup('tomorrow')

还要注意的是lookup可以有利于query的即将弃用。见here

© www.soinside.com 2019 - 2024. All rights reserved.