如何在模板字符串时修复模板错误:没有带有分子ec2驱动程序的名为“ molecule_from_yaml”的过滤器

时间:2019-11-12 10:14:29

标签: amazon-ec2 ansible molecule

我正在运行Molecule v2.22,我想使用分子启动一个ec2实例,以测试我的ansible剧本。
但是当分子到达Detroy并创建实例阶段时,我遇到了一个错误。

我也不明白为什么分子会跳过 /usr/lib/python2.7/site- packages / molecule / provisioner / ansible / plugins / filters / molecule_core.py 插件,我相信这可能与名为 molecule_from_yaml

的过滤器有关

请参阅以下错误:

5.6.0 !== 5.6.4

下面是destroy.yml文件,如果有的话,该文件将销毁先前创建的实例。

5.6.4

下面是create.yml

 [WARNING]: Skipping plugin (/usr/lib/python2.7/site-
packages/molecule/provisioner/ansible/plugins/filters/molecule_core.py) as it
seems to be invalid: cannot import name py31compat


    PLAY [Destroy] *****************************************************************

    TASK [Populate instance config] ************************************************
    fatal: [localhost]: FAILED! => {"msg": "template error while templating string: no filter named 'molecule_from_yaml'. String: {{ lookup('file', molecule_instance_config) | molecule_from_yaml }}"}


--> Action: 'create'
 [WARNING]: Skipping plugin (/usr/lib/python2.7/site-
packages/molecule/provisioner/ansible/plugins/filters/molecule_core.py) as it
seems to be invalid: cannot import name py31compat


    PLAY [Create] ******************************************************************

    TASK [Get the ec2 ami(s) by owner and name, if image not set] ******************
    fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while templating '{{ lookup('file', molecule_file) | molecule_from_yaml }}'. Error was a <class 'ansible.errors.AnsibleError'>, original   
    message: template error while templating string: no filter named 'molecule_from_yaml'. String: {{ lookup('file', molecule_file) | molecule_from_yaml }}"}

我希望我已为该问题提供了足够的信息

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但是在macOS 10.15.4上本地运行了该问题,并通过brew安装了ansible和Molecular。

卸载两者,然后使用pip3重新安装有帮助:

brew uninstall molecule
brew uninstall ansible
pip3 install ansible --user
pip3 install "molecule[lint]" --user
pip3 install "molecule[docker]" --user   

然后,如果您想识别命令,则需要在PATH中添加python包。

就我而言,由于我使用的是python 3.7,因此将其添加到〜/ .bashrc中:

export PATH="/Users/<user>/Library/Python/3.7/bin:$PATH"

确保输入使用的版本。如果要在Mac OS上使用python 3而不是默认2,请在通过brew安装python之后将其添加到.bashrc(或.zshrc或您使用的任何文件)中,例如:

alias python=/usr/local/bin/python3

源:https://github.com/ansible-community/molecule/issues/2173