[Перевод] Для продолжения введите точное число машин

?v=1

За карьеру мне приходилось сисадминить в нескольких больших компаниях. Речь о миллионе Linux-серверов и больше. Когда под вашей опекой столько котиков, иногда нужно произвести действия с большой группой. Время от времени — со всеми сразу.

По моему опыту, компании с таким огромным серверным флотом стремятся создавать инструменты для массового управления. У этих инструментов разные названия, но суть примерно одинаковая: заходишь по ssh как рут, запускаешь команду и, возможно, получаешь какой-то код выхода и/или результат.

В определённых ситуациях это единственный способ быстро потушить пожар — и в такие моменты вы благодарны, что инструмент существует.
Но заметка о другом. Она посвящена другой стороне медали, когда кто-то использует один из этих инструментов и создаёт проблему. Может, он решил быстро накатить на все серверы какое-то изменение, вместо того, чтобы использовать лучшие практики (тесты, пробная обкатка, внедрение для части аудитории, постепенное развёртывание и тому подобное). Возможно, решил сразу отправить на каждую машину новый бинарник, и поэтому все они падают одновременно, не оставляя возможности запустить фактический сайт.

Есть одна вещь, которую я попросила добавить в свои инструменты, чтобы предотвратить определённые виды катастроф. Это нужно для решения конкретной ситуации, когда кто-то по ошибке выполняет команду для слишком большого количества машин. Может, он хотел задействовать стойку тестовых хостов (около 40), но случайно выбрал всех.

Когда у вас появится такой инструмент, сами увидите подобные ошибки.

Моя просьба достаточно простая: если в качестве проверки здравомыслия собираетесь запросить подтверждение, *не* используйте тип Y/N. Вместо этого попросите прочитать с экрана число и ввести его обратно.

Это будет выглядеть так:

Бла-бла-бла 123456 машин будут затронуты этим. Продолжить?

Введите количество машин для подтверждения:


Затем для выполнения команды нужно точно ввести »123456».

Идея в том, чтобы человек воспринял это число через свои обычные устройства ввода (я бы сказала «глаза», но некоторые пользуются скринридерами или чем-то подобным), обработал в своей мозговой программе, а затем каким-то образом вернул в компьютер. Несколько дополнительных подобных шагов, надеюсь, должно активировать достаточно серого вещества, чтобы человек остановился, прежде чем отстрелит себе всю ногу гигантским пистолетом, специально заточенным для стрельбы по ногам.

Конечно, если вы слишком часто сталкиваетесь с такой ситуацией и вам действительно нужно задействовать столько машин, то можно просто скопипастить цифру. В этом случае я бы сказала, что вы используете этот инструмент слишком часто и следует подумать об изменении алгоритма действий, чтобы не полагаться так сильно на этот инструмент.

Но в реальной компании бывает не так легко просто «прекратить использовать» инструмент. В такой ситуации как вариант разделить число пробелами, чтобы его нельзя было просто бездумно скопипастить.

Например, вывести число с одним из числовых разделителей вашего языка, например 123,456 или 123.456, или 123 456, или что-то ещё, что вам подходит. Хитрость в том, чтобы не принимать это в качестве входных данных, а требовать, чтобы клиент удалил разделитель и вставил просто цифры.

Бла-бла-бла 123 456 машин будут затронуты. Продолжить?

Введите количество машин для подтверждения: 123456
ОК! Продолжаем.


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

Только подумайте: цифры соскакивают с экрана, прыгают в человека, скачут туда-сюда в голове — и возвращаются в компьютер. Всё является частью одной сети.

Рейчел Кролл, сисадмин в Facebook

© Habrahabr.ru