首页 > 解决方案 > Ansible 角色 - 无法检测过滤器插件

问题描述

我试图在一个角色中构建一个非常简单的插件过滤器。但是,当我去测试插件时,它没有检测到它。Ansible 版本是 2.9。

目录

(base) root@8c08139d265e:/workspace# tree
.
├── Dockerfile
├── Makefile
├── README.md
├── defaults
│   └── main.yml
├── filter_plugins
│   ├── __init__.py
│   └── sample_filter.py
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── requirements.txt
├── tasks
│   └── main.yml
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

插入

(base) root@8c08139d265e:/workspace# cat filter_plugins/sample_filter.py 
class FilterModule(object):
    def filters(self):
        return {'cloud_truth': cloud_truth}

def cloud_truth(a):
    print(type(a))
    return a.replace("the cloud", "somebody else's computer")

测试

(base) root@8c08139d265e:/workspace# cat tests/test.yml 
---
- name: test cloud_truth filter
  hosts: localhost
  roles:
    - .

  vars:
    statement: "I store my files in the cloud"

  tasks:
  - name: make a statement
    debug:
      msg: "{{ statement | cloud_truth }}"

错误

TASK [make a statement] *****************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: no filter named 'cloud_truth'. String: {{ statement | cloud_truth }}"}

谢谢,

标签: ansibleansible-role

解决方案


设法通过将自身安装为角色来解决此问题。像这样:

ansible-galaxy install git+git@github.com:<user>/ansible-role-networking.git

然后将角色添加到test.yml.


推荐阅读