Ansible Роль - Невозможно обнаружить плагин фильтра - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь создать очень простой плагин-фильтр внутри роли. Тем не менее, когда я go, чтобы проверить плагин, он не обнаруживает его. Ansible версия 2.9.

dir

(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 }}"}

Спасибо,

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

удалось решить эту проблему, установив себя в роли. Вот так:

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

Затем добавьте роль в test.yml.

0 голосов
/ 20 апреля 2020

Проблема, по-видимому, связана с тем, где подключаемый модуль фильтра связан с вашей книгой воспроизведения.

Чтобы ваша книга работала, папка filter_plugins должна находиться внутри папки tests:

.
└── tests
    ├── filter_plugins
    │   ├── __init__.py
    │   └── sample_filter.py
    └── test.yml

Однако тогда возникает проблема, связанная с тем, что фильтр больше не доступен для других задач. Альтернативой может быть использование ролей и структуры, подобной этой:

.
├── filter_plugins
│   ├── __init__.py
│   └── sample_filter.py
├── playbook.yml
└── roles
    └── tests
        └── tasks
            └── main.yml

Но, конечно, это зависит от структуры, которую вы пытаетесь построить.

...