Сбой Ansible Gather при выполнении команды findmnt для некоторых хостов

Вы также можете сделать это, перебирая индексы массива (${!hostlist[@]}, обратите внимание на !), а не значения (${hostlist[@]}), а затем используя unsetдля удаления нежелательные индексы массива.

например, на основе ответа @Kusalananda:

hostlist=( localhost sdfsd sdfs s fsdf localhost sdfs fsdf sdf 127.0.0.1 )

for h in "${!hostlist[@]}"; do
  if ! timeout 3 bash -c "</dev/tcp/${hostlist[$h]}/22" 2>/dev/null; then
   unset hostlist[$h]
  fi
done

printf 'Ok hosts: %s\n' "${hostlist[@]}"

или, если у вас установлен netcat, вы можете использовать ncвместо bash /dev/tcp, встроенный -в (должен быть немного быстрее, чем разветвление timeoutи bashдля каждого хозяин):

hostlist=( localhost sdfsd sdfs s fsdf localhost sdfs fsdf sdf 127.0.0.1 )

for h in "${!hostlist[@]}"; do
  if ! nc -w 3 "${hostlist[$h]}" 22 >& /dev/null; then
   unset hostlist[$h]
  fi
done

printf 'Ok hosts: %s\n' "${hostlist[@]}"

Если вам больше не нужно делать что-либо внутри оператора if/ then, вы можете сократить его еще больше:

hostlist=( localhost sdfsd sdfs s fsdf localhost sdfs fsdf sdf 127.0.0.1 )

for h in "${!hostlist[@]}"; do
  nc -w 3 "${hostlist[$h]}" 22 >& /dev/null || unset hostlist[$h]
done

printf 'Ok hosts: %s\n' "${hostlist[@]}"
0
27.11.2019, 16:47
2 ответа

Я не уверен, что это проблема, но у меня были проблемы из-за устаревшего монтирования NFS. Если бы вы могли подключиться по ssh к одному из неисправных серверов и посмотреть, будет ли команда df работать без зависаний, чтобы исключить это.

0
28.01.2020, 03:05

После обновления ansible до 2.8 его больше не было.

0
29.07.2020, 06:39

Теги

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