Админим с Буквой
5.72K subscribers
340 photos
8 videos
60 files
1.17K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
Ansible и модули на python

Все это крайне и крайне просто. Не нужно изгаляться и писать какие-то многострочники на баше, или пытаться выполнить более нескольких команд через модуль shell. Состряпать свой модуль можно за 5-10 минут, и это время куда лучше потратить на то чтобы ваша логика работала стабильно, вместо того чтобы костылить.

Все что нам нужно - поместить файл вида my_module.py в директорию с именем library. где my_module - то что вы будете использовать в playbook.
В сообщении выше я прикрепил шаблон такого модуля. Модуль выполняется в несколько этапов:

1) ansible собирает аргументы из task и передает их вашему скрипту
2) в скрипте вы описывате все переменные, требуются ли они для выполнения вашего кода или нет (required), можете указать тип (например bool), задать значение по-умолчанию (default), а также задать жесткий список возможных вариантов (choises).
3) получаем значения переменных из ансибла и записываем их уже в те переменные. которые будем использовать в коде.
4) объявлям какие-либо функции, если это нужно
5) навешиваем 1 или несколько try и выполняем логику вашего модуля.
6) в момент выполнения логики или после нее, при необходимости пишем какие-либо данные в переменную result. Это та самая переменная, данными из которой вы захотите оперировать после отработки модуля. Оформляйте их в виде списка или словаря, как вам удобно будет потом после модуля парсить эту переменную уже из ansible.

Вот собственно и все. все что нужно - подумать в каком формате принимать от юзера данные и в каком формате их отдавать на output.

#ansible
memcache_key.py
1.2 KB
Пример модуля, который может задавать или получать значение ключа в memcache
И пример использования:

- name: Set filepath variable
memcache_key:
key: filepath
action: set
value: "{{ filepath }}"
Самая простая нотификация ботом в slack

1) Нужно создать приложение, авторизуемся в слаке через веб интерфейс и начинаем мучать их api вот тут . Само по себе приложение уже умеет играть роль уведомлялки, а нам впринципе этого и достаточно (для более сложного ботоводства с интерактивом рекомендуется создавать пользователя-бота в приложении). Как вы приложение назовете, от этого имени и будете получать сообщения в канал или ЛС.
2) создаем канал в вашем workspace. Если нужно делаем его приватным.
Вот тут самое важное отступление ради которого делается эта заметка. Приложение НЕ надо добавлять в приватый канал. НЕ надо жать эту чертову кнопку "add an app". Оно добавится туда автоматически после создания Incoming Webhook.
3) Продолжая мучать апишку, на страничке Incoming Webhooks в свойсвах вашего приложения активируем эту фичу и создаем новый веб хук. При создании указываем канал или пользователя, которому хотим писть сообщения.

На этом впринипе все. Дальше вам даже для удобства сформируют примитивную строку с curl, типа

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/T0XXX/BXXXXX/ZZZZZZ

Самое главное для понимания - плюс этого способа это его же минус. за счет простоты создания мы лишаемся любых других возможностей. Т.е. в данной ситуации, создавая вебхук мы жестко связываем конкретную ссылку с конкретным каналом и конкретным ботом. Больше никуда по этому урлу мы постить не сможем. Но для мониторинга или сообщений о сборках из jenkins подойдет без проблем.

Пример нотификации из jenkins:

node {
stage('Notify') {
text = "HELLO FROM JENKINS"
withCredentials([string(credentialsId: 'ZZZZZ', variable: 'SLACK_WEB_HOOK')]) {
httpRequest(httpMode: 'POST',
url: env.SLACK_WEB_HOOK,
contentType: 'APPLICATION_JSON',
requestBody: "{\"text\": \"${text}\"}",
responseHandle: 'NONE',
consoleLogResponseBody: true,
validResponseCodes: '200')
}
}
}

Здесь остается только создать секрет с веб хуком или поместить урл не скрывая его в рамках тестов.

#jenkins #slack #bot
обрезаем строку, выбирая диапазон для отображения


cut -c 140-240 file


Или через pipe или напрямую из файла можно заставить отобразить именно какой-то конкретный кусок строки. Например это может понадобиться для дебага при просмотре логов mysql, чтобы видеть запросы.

#bash_tips_and_tricks
правильно дампим базу mysql под нагрузкой

mysqldump --single-transaction somedb sometable


Подходит для innodb. создаётся одна транзакция и всё попавшее в эту транзакцию дампится. Главное - не лочится база.

для остальных типа myisam смотри
man mysqldump


#mysql
А между тем из России недоступна яндекс почта..

З.Ы. это видимо аффектит не всех клиентов. Кто-то говорит что недоступна из америки, кто-то из России, у кого-то наоборот в России работает, в америке нет.
Guide_to_create_a_virtual_machine.docx
4.4 MB
как опубликовать приложение в azure marketplace. Актуальная инструкция, полученная от ТП и которй нет на оффсайте (действительно, зачем?)
ansible vmware_guest module

Для того чтобы заработал customization

нужно следующее:
1) шаблон виртуалки из которой раскатываемся должен содержать эти пакеты:
- open-vm-tools (9.10+, иначе читай заметку )
- net-tools (мать его)
- perl
2) guest_id нужно выставить во что-то совместимое. например для дебиана и убунты подойдет ubuntu64Guest
3) поскольку сеть настраивается через мать его ifconfig (в 2000 мать его 18 году, вмваре вы там в край ахуели?), то в /etc/network/interfaces появляются артефакты. решить можно черз модуль vmware_vm_shell
vm_shell: /bin/sed
vm_shell_args: "'s/ether/ens192/g' -i /etc/network/interfaces"

и
vm_shell: /bin/systemctl
vm_shell_args: "restart networking"


#esxi #vcenter #ansible
Forwarded from Sergey Kovbyk
Всем привет.
случайно наткнулся на серию уроков по ансибл, мож кому пригодится - я просмотрел, вроде живенько и понятно.
https://www.youtube.com/watch?v=Ck1SGolr6GI&list=PLg5SS_4L6LYufspdPupdynbMQTBnZd31N&index=1
З.Ы. Сам я начинающий, и теперь не знаю, как раньше был без него ))
Forwarded from Сюда иди!
Удаляем объекты azure через az cli

Есть в этом хостинге что-то свое, привлекательное. Например невозможность выделить и удалить через интерфейс несколько объектов типа security group, public ip, nic... Может для кого-то это влажные мечты - сидеть и удалять тонну объектов заходя в каждый и удаляя его, но хочется как-то побыстрее. В данном примере не разобрана фильтрация, это дело остается индивидуально. Таким же образом подставить нужный тип вместо public-ip.

for i in $(az network public-ip list --resource-group RG_NAME | ruby -ryaml -e 'YAML.load($<).each{ |nic| print nic["name"]+" " }'); do az network public-ip delete --resource-group RG_NAME --name $i; done


#azure #azcli #гори_в_аду_микрософт
Hetzner vswitch

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

https://wiki.hetzner.de/index.php/Vswitch/en

#hetzner
Уязвимость в ядре Linux, потенциально позволяющая поднять привилегии

В подсистеме vmacache ядра Linux обнаружена уязвимость (CVE-2018-17182), которая потенциально может быть использована для создания эксплоита для повышения привилегий локального пользователя в системе. Уязвимость вызвана отсутствием проверки переполнения 32-разрядного номера последовательности, что можно использовать для обращения к уже освобождённому блоку памяти (use-after-free). Проблема присуствует в ядрах с 3.16 по 4.18.8. Исправление пока доступно в виде патча. Обновления пакетов для дистрибутивов ещё не сформированы (Debian, Ubuntu, RHEL, SUSE, Fedora).

[ИСТОЧНИК](https://www.opennet.ru/opennews/art.shtml?num=49305)
заставляем git использовать указанный ssh ключ при деплое чужого контейнера в k8s

Решал задачу по внедрению поисковика по коду: https://github.com/etsy/hound.

Hound is an extremely fast source code search engine. The core is based on this article (and code) from Russ Cox: Regular Expression Matching with a Trigram Index. 


В рамках этой задачи было принято решение написать helm пакет для уже готового docker на docker hub. Сам helm можно потыкать здесь: https://github.com/bykvaadm/hound-helm-chart

Отдельно в этой заметке хотел бы отметить небольшую проблему, решаемую в рамках задачи: научить hound ходить в приватные репозитории по указанному приватному ключу. При этом не хотелось ни модифицировать контейнер автора, ни делать persistent volume, ни какой либо init-контейнер.

Способов заставить git ходить с указанным ключом довольно много, но большинство из них подразумевает что вы правите какой-то конфиг или модифицируете строку запуска git. Ни того ни другого делать в чужом контенере не хотелось. В итоге как один из наиболее простых способов был взят вариант с использованием wrapper. wrapper - это скрипт, который будет вызван git'ом при запуске ssh, вместо запуска ssh. Таким образом внутри wrapper можно писать любую логику, подставляя в зависимости от ситуации нужные параметры. на выходо wrapper должен заменять собой вызов ssh с какими-то параметрами. В моем случае так сложно делать не надо и wrapper скрипт получился такой:

#!/bin/sh
ssh -o StrictHostKeyChecking=no -i /etc/ssh-key/id_rsa $@


Здесь я указываю чтобы не чекался fingerprint и путь к конкретному ключу. В итоге для helm пишется configmap и secret. один кладет wrapper, а другой - приватный ключ.

Теперь все что остается - задать в deployment переменную окружения GIT_SSH, в которой указать путь к wrapper.

#git #helm #kubernetes
Вот я тут такой пишу-пишу постоянно про kubernetes, интересно знать, много ли его вообще людей используют? вдруг это никому не интересно
anonymous poll

Планирую изучить – 129
👍👍👍👍👍👍👍 43%

На пол не упал этот ваш кубернетес – 115
👍👍👍👍👍👍 38%

Только начал изучать – 24
👍 8%

Использую, постоянно, пишу сам helm'ы – 11
👍 4%

Использую время от времени, пишу yaml-ы сам – 7
▫️ 2%

Использую постоянно, helm'ом не пользуюсь – 6
▫️ 2%

Использую время от времени, пользуюсь только чужими наработками – 4
▫️ 1%

Использую постоянно, использую отличный от helm шаблонизатор – 3
▫️ 1%

Использую постоянно, сам ничего не пишу, только чужие наработки. – 1
▫️ 0%

👥 300 people voted so far.
Сети для самых маленьких

Когда-то я начинал свой канал именно с лабораторных работ по сетям, но почему-то нигде не упоминал один очень цикл статей для их изучения. А даже если и упоминал, не страшно и повториться. И если вы по каким-то причинам до сих пор про них не знаете - крайне рекомендую. Здесь выложу ссылку на первую часть, хотя их там более 10, от разбора модели OSI до BGP, QOS и дальше в дебри.

https://habr.com/post/136056/

#network #junior