Ansible: включать задачу только тогда, когда сервер не входит в группу - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть несколько групп с разными именами и что-то вроде «raw-webservers», «raw-db», ... Теперь я хочу включить playbook, если сервер находится в группе, которая начинается с «raw- *»(работает) и включает другую книгу, если сервер не входит в группу, которая начинается с «raw-».Я не смог выяснить, как сделать последнее, указав только подмножество группы.

- include_tasks: change_password.yml
  when: "'raw-' not in group_names"   # works only with complete group names


- include_tasks: change_password_raw.yml
  when: "group_names | search('raw-')"   # works

Я пробовал 'когда:' имя_группы | не искать ('raw-')«Но это не работает.Есть идеи?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете сделать это, используя несколько методов.Вот пример книги с двумя такими методами.Один использует select, а другой - search.

---
- hosts: all
  gather_facts: no
  tasks:
    - debug:
        msg: "hello world using select"
      delegate_to: 127.0.0.1
      when: group_names | select('match','raw-*') | list | length  > 0

    - debug:
        msg: "hello world using search"
      delegate_to: 127.0.0.1
      when: group_names | join(" ") is search('raw-')

Здесь вы увидите, что search работает со строками , а не списками, поэтому и объединение.

Alternativeдля этого вы можете использовать другую группу для этого.Например, ваш инвентарь может добавить следующее.

[raw:children]
db

И это можно проверить как 'raw' in group_names.

...