Зашифровать файл на удаленном хосте

Если вы используете "точечный" стиль вывода прогресса, который выглядит примерно так:

   500K .......... .......... .......... .......... ..........  2%  496K 91s

тогда вы можете передать это (которое находится на stderr) в awk или подобную программу и просто вывести поле "2%", показанное в последней второй колонке.

wget ... --progress=dot -q --show-progress 2>&1 |
awk 'NF>2 && $(NF-2) ~ /%/{printf "\r %s",$(NF-2)} END{print "\r    "}'

Это покажет вам изменяющееся значение процента в одной строке, которая очищается в конце.


Чтобы сохранить код возврата wget для if..else, вы можете попросить bash заставить трубопроводы возвращать код ошибки любой команды, которая потерпела неудачу (вместо только самой правой команды), задав в скрипте:

set -o pipefail

В качестве альтернативы, вы можете поместить все if..else.... fi код без изменений внутри блока и направить stderr в конце в один более информативный awk, как предложил cas в комментариях:

( if wget ...
  fi
  if wget ...
  fi
  if wget ...
  fi
) 2>&1 | awk '
/^Saving to:/ { fn = gensub(/^Saving to: /,"",1) }
NF>2 && $(NF-2) ~ /%/ { printf "\r%s %s",fn,$(NF-2) }
END { gsub(/./," ",fn); print "\r    " fn }'

Или, чтобы не пропустить важные сообщения об ошибках на stderr, просто перенаправьте stderr каждой команды wget на 3-й дескриптор файла:

( if wget ... 2>&3
  then ... else ... fi
  if wget ... 2>&3
  then ... else ... fi
  if wget ... 2>&3
  then ... else ... fi
) 3>&1 | awk ...
2
01.05.2019, 15:58
2 ответа

Похоже, вы неправильно используете Ansible Vault.

В документации Ansible Vault указано:

Ansible Vault is a feature of ansible that allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plaintext in playbooks or roles.

Вы не можете шифровать файлы непосредственно на удаленном хосте.

Что вы можете сделать, так это зашифровать файл на локальном хосте, а затем скопировать зашифрованный файл с помощью модуля copyна удаленный хост. По умолчанию модуль copyрасшифровывает файл, но вы можете перезаписать его, указав decrypt: no. Для получения дополнительной информации см. документацию по модулю копирования .

3
27.01.2020, 21:55

Чтобы добавить к ответу, опубликованному @fgk (, пожалуйста, рассмотрите их ответ, это просто расширение информации ), ansible-vaultне является общей утилитой шифрования файлов. Это специально для шифрования информации для использования в семействе команд Ansible для защиты конфиденциальных данных, которые в противном случае должны были бы храниться в виде простого -текста в плейбуках и файлах конфигурации.

Если вы хотите зашифровать файлы на удаленном хосте, используя ansible для выполнения задачи, вам нужно найти подходящую утилиту шифрования файлов и использовать ее для завершения шифрования, а затем автоматизировать этот процесс с помощью ansible.

Итак, две основные задачи:

  1. Определите, как зашифровать файл в системе. Вот хороший пример того, как это можно сделать.
  2. Автоматизируйте процесс с первого шага с помощью задач в ansible playbook. Еще один прекрасный набор примеров.
2
27.01.2020, 21:55

Теги

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