Один из способов сделать это с помощью 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
может не установиться.
Создайте книгу воспроизведения 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