Pull to refresh

Comments 16

Не думал, что ещё кто-то IP гвоздями к хостам прибивает.
Почему-то всегда считал, что ансиблоподобные утилиты удобны когда у нас сегодня 15 инстансов, а завтра 150. И все это надо туда-сюда сворачивать-разворачивать. В этом случае если только playbook динамически генерировать с нужным ip… А уж как жить в таком случае со всякими кубернетесами, вообще не очень хорошо представляю.

Тут есть тонкий момент. Скажите, что вы можете из инфраструктуры дропнуть и поднять быстро? Сервер приложений, например. LB. Может быть, мониторинг.


А как насчёт СУБД, в которой компания хранит историю списаний по карточкам? Вы уверены, что такой сервер можно динамически создать и удалить? (Data have gravity).


Вы правы, что если инстансы создаются динамически, то руками вписывать IP'шники странно. Однако, очень удобно вписывать их роботами. (См раздел про плюсы и минусы динамических инвентори).


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

А как насчёт СУБД, в которой компания хранит историю списаний по карточкам?

Ну, например, AWS RDS не имеет статического ip от природы.
Вообще, дата — это набор где-то сложенных файлов, а БД лишь способ доступа к ним, который можно поднять в контейнере за N секунд (хотя сам я такую практику и не приветствую).


Вы правы, что если инстансы создаются динамически, то руками вписывать IP'шники странно

Скажу честно, с ансиблом почти не работал, но всегда думал, что это его основное предназначение — автоматизировать динамическую систему.
Если инфраструктура не изменяется, то как бы "топорно" это не выглядело, но установить и настроить раз в год сервер вручную может быть быстрее чем оттестировать плейбуки (которые через год все равно наполовину сломаются, потому что выйдет новая ОС/библиотеки, зависимости и т.п.)


Мой поинт был, что указание транспорту на IP (вместо любых имён) — это правильно

По-прежнему не согласен. Если в инфраструктуре нет отлаженного внутреннего DNS, которому вы можете доверять больше чем плейбукам, то вначале надо решать эту проблему.
БОльшим злом являются только захардкоденые IP.
Когда офис переезжал и глобальный IP поменялся, пришлось половину java бекенда пересобирать, потому что ограничение доступа по IP было прямо в коде.
Но если глобальный ip и его доменное имя не всегда удобно контролировать, то уж в локальной сети рабочий DNS стоять обязан.


А чтобы уровни inderect не создавать, в идеале, между пользователем и сервером должна быть только клавиатура.


PS конечно, если все автоматизировано и все ip обновляются динамически — это совсем другой разговор, хотя такая система и добавляет indirect'a еще больше чем прописывание доменных имен вручную.

Вроде очевидные вещи, но как написано… зачитался =). Пишите еще. У вас прекрасно получается.
UFO just landed and posted this here

Я давно стал придерживаться мысли, что хосты должны быть именованны системно, а вот группы должны динамически создаваться из их имён. Так же, вести инвентори хостов вручную, это крайне опасная ситуация (человеческий фактор). Все хосты должны быть заведены в инвентарной системе, туда например попадает автоматически из днс всё и то что добавляется руками или иными скриптами. В нашем случае это foreman, так же мы кешируем на 5 минут динамически созданный инвентори, что уменьшает нагрузку на сервис. Foreman к тому же предоставляет сервис кеширования фактов, что опять же ускоряет работу ансибл.

Это зависит от того, есть ли у вас централизация "заведения хостов". Вот, например, если у вас в инвентори есть 4 хоста, то сколько там виртуалок? И зачем нам специальная система для регистрации виртуалок? А ведь во многих архитектурах виртуалки могут жить дольше, чем гипервизоры (миграция).


Если уж доводить до некоего абсурда, то у Ансибла есть транспорт в контейнеры. Вы поды куба тоже будете в инвентори вносить?


Т.е. необходимость учёта платных ресурсов понятна, а дальше — уже вопрос.

Чета статья какая-то странная. Сначала куча текста про то, что в хостс добавляем то к чему можно приконнектиться, спасибо кэп. После прибитых IPов в хостах вместо DNS читать на стал.

as you wish. Если вы никогда не отлаживали проект, построенный на fqdn'ах, то вам повезло.

Я такой строю, умвр. Правда я первым делом днс поднял как конфетку. Там жёстко, нет в кеше иди бамбук кури (5 минут). Потом пробуй, 3 попытки значит нет сервера. Сервера через dhcp и ddns получают адреса, стенды дев и тест 10 минут срок обновления, 7 дней срок жизни. Для персистентных машин, 10 минут обновление, 30 дней срок жизни + фолбек на статику при ребуте.
Ссылка на предыдущую часть не работает. Ссылается почему-то на коммент из второй (этой) части.
У всех так? Или только у меня?

Спасибо, поправил. Ссылка была на коммент в первой части.

Спасибо за цикл статей!

Вы упомянули возможность "использовать в hosts переменные, если переменные хотя бы одного хоста были инициализированы". Не то, что бы я хотел использовать это на практике (тем более, Вы прямо от этого предостерегаете), но, для общего развития, ознакомиться с возможностью хотел бы.

Подскажите, Вы имели в виду constructed inventory или что-то иное?

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

Дадите пример кода?

PS. Да, я понимаю, что статья 2020 года. Но вдруг автор ответит :)

Не благодарите

function walkDOM(node, callback) {
    var child = node.firstChild;
    while (child) {
        var next = child.nextSibling;
        callback(child);
        walkDOM(child, callback);
        child = next;
    }
}

function replaceTextContent(node, replacements) {
    if (node.nodeType === Node.TEXT_NODE) {
        replacements.forEach(([oldWord, newWord]) => {
            node.nodeValue = node.nodeValue.replace(new RegExp(oldWord, 'g'), newWord);
        });
    }
}

let replacements = [
    ["Плейбука", "Плейбук"],
    ["плейбука", "плейбук"],
    ["плейбуки", "плейбука"],
    ["плейбуку", "плейбук"]
];

walkDOM(document.body, function(node) {
    replaceTextContent(node, replacements);
});
Sign up to leave a comment.

Articles