Ansible: Запрос переменных для ролей

Один из способов сделать это с помощью shи GNU findи при условии, что имена файлов не содержат встроенных символов новой строки:

#! /bin/sh
find /path/to/dir -type d -links 2 | \
    while read -r d; do
        found=0
        for f in "$d"/*; do
            if [ ! -h "$f" ]; then continue 2; fi
            found=1
        done
        if [ x$found = x1 ]; then printf '%s\n' "$d"; fi
    done

Проблемы с этим подходом:

  • неtcsh
  • его можно обмануть файлами, начинающимися с точки.

Отредактируйте:с помощьюpython:

#!/usr/bin/env python

import os
import sys

for topdir in sys.argv:
    for root, dirs, files in os.walk(topdir):
        if not dirs and files:
            if all(os.path.islink(os.path.join(root, f)) for f in files):
                print os.path.join(root)

Проблема с этим подходом:pythonможет не установиться.

0
13.09.2019, 10:35
1 ответ

Создайте книгу воспроизведения top.yml, которая импортирует книги воспроизведенияbasic.ymlи zabix.yml. Выборочно запускайте импортированные плейбуки с помощью тегов.

ansible-playbook -t basic top.yml
ansible-playbook -t zabix top.yml

playbook top.yml

- name: Run basic
  import_playbook: basic.yml
  tags: [basic, never]

- name: Run zabix
  import_playbook: zabix.yml
  tags: [zabix, never]

playbook basic.yml

- hosts: my-server-to-setup
  remote_user: [REDACTED]
  become: yes
  roles:
    - basic

playbook zabix.yml

- hosts: my-server-to-setup
  remote_user: [REDACTED]
  become: yes
  vars_prompt:
    - name: "zbxusername"
      prompt: "Zabbix Username"
      private: no    
    - name: "zbxpw"
      prompt: "Zabbix Passwort"
      private: yes
  roles:
    - zabbix

Примечания

Тегneverможет быть полезен, чтобы случайно не запустить обе роли. Без указания тега ни один из импортированных плейбуков не запустится. В результате выполнения следующей команды не будет никаких действий.

ansible-playbook top.yml
1
28.01.2020, 02:39

Теги

Похожие вопросы