Очередной скрипт пинга сети на bash

Возникла задача найти все живые устройства в сети. Эта задача легко решается с помощью пинга по всем адресам локальной сети и последующей печатью Arp-таблицы хоста. Проблема была лишь в том, что на Bash я ее еще не решал (в отличие от Python/Powershell)…

Чатжпт, по коням, у нас скрипт, возможно, на баше.

Ответ от нейросети я буду приводить в сокращенном виде.

Continue reading “Очередной скрипт пинга сети на bash”

Terraform cycles

Решил я заняться развертыванием AWS Lambda Function и API Gateway через Terraform.

Вводные были следующие:

  • API Gateway создается на основе OpenAPI-шаблона, который вызывает Lambda Functions. Соответственно, в шаблоне должен быть указан Lambda invocation url (lambda типа как prerequisite);
  • Lambda Function должна запускаться только из API Gateway – для разрешения (permission) в качестве source_arn необходимо указать API Gateway execution arn (API gateway prerequisite).

Сначала я создавал lambda function с помощью штатных ресурсов AWS-provider: aws_lambda_function, aws_lambda_permission и archive_file. Проблем с закольцовкой не было: Terraform умело разруливал порядок создания ресурсов.

Но потом лямбда функций стало больше, и я решил использовать принцип DRY (don’t repeat yourself). В Terraform эту роль играют модули.

Я начал использовать публичный модуль для создания лямбд отсюда – и меня догнали Terraform Cycle Error на этапе terraform validate.

Отрицание

Не может такого быть, повторял я и варьировал различные варианты кода.

Неужели придется отказаться от модуля в случае создания таких функций???

Гнев

Пока я изучал модуль, обнаружил в нем входную переменную putin_khuylo, содержащую по умолчанию значение true.

Торг

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

НО НЕТ!

Депрессия

Был еще один вариант:

  • выполнить команду terraform -grath -show-cycles;
  • полученный текстовый вывод скормить graphviz либо graphviz онлайн.

Увы, установить утилиту я не мог, а онлайн-утилита вылетала по памяти.

В теории этот путь поможет в разрезании цикла, показав ресурсы, участвующие в цикле.

Принятие

С горя я решил задать вопрос ChatGPT: как избежать зацикливания в данном случае.

Внезапно, мэтр программирования IaC Terraform посоветовал ресурс aws_lambda_function создавать в модуле, а aws_lambda_permission оставить в корневом файле.

Да-да, это то самое чувство, когда соседский мальчик умнее тебя 🙁

Так как функций было несколько, то их входные значения для модуля (имя, путь и т.д.) генерировались в разделе locals. Для использования цикла for_each в ресурсе aws_lambda_permissions потребовалось хранить source_arn в отдельной локальной переменной. УРА, terraform validate пройден.

Правда, на этапе terraform plan выяснилось, что модуль требует для своей работы Python и иногда падает, если в runtime вашей функции указана странная версия Python’а, и в Runner для CI/CD что-то пошло не так 🙂

На этом я решил психануть закопать стюардессу написать свой модуль создания лямбда функции без Питона и Путина.

Как ChatGPT решает математические задачи

Мой сын учится в шестом классе. Попалась тут ему задача по математике, которую он не смог решить. Мы решили спросить глубокоуважаемый ИИ – как же решить эту задачу. Continue reading “Как ChatGPT решает математические задачи”

Всегда говори да!

«Обычно люди обращаются за советом, — говорил Атос, – только для того, чтобы не следовать ему, а если кто-нибудь и следует совету, то только для того, чтобы было кого упрекнуть впоследствии.»

Пришло мне в голову дать вам бесплатный совет: соглашайтесь на практически любую движуху. Приведу пару примеров из своего опыта:

  1. 2009-й год, я работаю обычным системным администратором на заводе. Windows, Exchange и немножко ДрВеба с Симантеком :).
    Тут мне предлагают стать ответственным за администрирование коммутаторов, маршрутизаторов и брандмауэров Cisco. В качестве бонуса еще и немного учат!
    Я, конечно же, соглашаюсь. Коллега из соседнего отдела сомневается и отказывается – зачем ему дополнительный головняк?
  2. 2011 год, в другом месте мне предлагают взяться за администрирование системы MS Lync Server 2010. Тоже учат, ага…
    Там же ближе к 2017 – внедрить систему резервного копирования NetBackup.

Результатом первой возможности стало более глубокое понимание работы сети и сертификат CCNA (хотя, поработав в интернет-провайдере, я осознал – насколько же это были базовые знания). Пару раз помогало тыкать носом сетевиков в их косяки.
Результатом второй и третьей – приличные знания по обеим системам в качестве T-shape специалиста. В результате, в 2020м меня брали на центрального администратора Commvault с хорошим окладом без практического опыта по нему 😉

Я не могу рассказать о текущем стеке, но он не имеет ничего общего с привычным мне VMware/Microsoft. Когда-нибудь я расскажу и эту историю…

AWS SAA-C03

Наверное, многие из вас видели этот мем про девопс и зарплату в 300кк. Зарплаты девопс-инженеров с hh.ru пробивали мой воображаемый потолок по зарплате в несколько раз, поэтому: настала пора перемен. Пора закопать VMware и изучить кубернетис.

Continue reading “AWS SAA-C03”

Контейнеры – стейтлес, говорили они

Возникло давеча у меня желание запустить контейнер SonarQube.

В гугле меня не забанили, поэтому быстренько была найдена ссылка по запуску  контейнера за пару минут.

Я взял оттуда команду для запуска контейнера:

Запустил контейнер, сменил пароль пользователя admin, зарегистрировал Gitlab и добавил репозиторий с кодом в качестве проекта.

Затем я остановил контейнер:

Когда мне снова потребовался контейнер SonarQube, я запустил его командой

Каково же было мое удивление, когда контейнер запустился со всеми изменениями (пароль администратора и прочее).

Хочу воспользоваться подсказкой “Помощь зала”: как вы считаете, уважаемые читатели – почему контейнер после перезапуска сохранил свое состояние?

Опрос CDP/LLDP с ESXi через PowerShell/Python

Однажды у вас может возникнуть желание составить таблицу портов коммутаторов, к которым подключены ваши хосты.

Если у вас “гомогенное” окружение, состоящее из коммутаторов Cisco, то заморачиваться не нужно совсем (CDP настроен в Virtual Switch Standard/Distributed Virtual Switch по умолчанию).

Но если в окружении не только Cisco, то вам необходимо немного сильнее напрячься:

  • использовать только распределенные коммутаторы;
  • включать на них поддержку LLDP;
  • с удивлением обнаружить, что в API опрос CDP и LLDP происходит по-разному.

Continue reading “Опрос CDP/LLDP с ESXi через PowerShell/Python”

Заметочка про Custom Attributes

Потребовалось проставить Custom Attribute для виртуальных машин.

На помощь, как обычно, пришел Google и подсказал следующее решение:

PowerShell, SCSILunPath и Datastore Name

Обратился ко мне за советом постоянный читатель: помоги, говорит, с моим iSCSI-массивом NetApp. Пытаюсь вывести Get-SCSILunPath, так там ни имени датастора, ни IP-адреса “таргета” в SanId нет 🙁

Посмотрел – и действительно так: в отличие, например, от Huawei, NetApp не выводит IP-адрес IQN-Target в выводе атрибутов Get-SCSILunPath. Да и привязать CanonicalName вида naa.thebeststoragearray к датастору с первого взгляда не удается…

Continue reading “PowerShell, SCSILunPath и Datastore Name”