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
Все это крайне и крайне просто. Не нужно изгаляться и писать какие-то многострочники на баше, или пытаться выполнить более нескольких команд через модуль 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, типа
Пример нотификации из jenkins:
#jenkins #slack #bot
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
обрезаем строку, выбирая диапазон для отображения
Или через pipe или напрямую из файла можно заставить отобразить именно какой-то конкретный кусок строки. Например это может понадобиться для дебага при просмотре логов mysql, чтобы видеть запросы.
#bash_tips_and_tricks
cut -c 140-240 file
Или через pipe или напрямую из файла можно заставить отобразить именно какой-то конкретный кусок строки. Например это может понадобиться для дебага при просмотре логов mysql, чтобы видеть запросы.
#bash_tips_and_tricks
правильно дампим базу mysql под нагрузкой
Подходит для innodb. создаётся одна транзакция и всё попавшее в эту транзакцию дампится. Главное - не лочится база.
для остальных типа myisam смотри
#mysql
mysqldump --single-transaction somedb sometable
Подходит для innodb. создаётся одна транзакция и всё попавшее в эту транзакцию дампится. Главное - не лочится база.
для остальных типа myisam смотри
man mysqldump
#mysql
Forwarded from Новости SPbCTF (Kseniya Kravtsova)
YouTube
Attack-Defense — приветственный стрим
Мы рассказали, как устроены CTF в формате атак-дефенса, и что будет на встречах SPbCTF в этом сезоне.
Регистрация на атак-дефенс: https://vk.cc/8sMEwH
Пост со ссылками и основными мыслями из стрима — в группе:
http://vk.com/wall-114366489_1420
Регистрация на атак-дефенс: https://vk.cc/8sMEwH
Пост со ссылками и основными мыслями из стрима — в группе:
http://vk.com/wall-114366489_1420
А между тем из России недоступна яндекс почта..
З.Ы. это видимо аффектит не всех клиентов. Кто-то говорит что недоступна из америки, кто-то из России, у кого-то наоборот в России работает, в америке нет.
З.Ы. это видимо аффектит не всех клиентов. Кто-то говорит что недоступна из америки, кто-то из России, у кого-то наоборот в России работает, в америке нет.
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
и
#esxi #vcenter #ansible
Для того чтобы заработал 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 киберпукан
https://goo.gl/EQ73gV
Это вообще пиздец, термины - угнетатели. Ждем коммита, который заменит все слова в коде на гендерно-нейтральные, а программистов заставят покрасить челку в фиолетовый и не брить подмыхи.
Это вообще пиздец, термины - угнетатели. Ждем коммита, который заменит все слова в коде на гендерно-нейтральные, а программистов заставят покрасить челку в фиолетовый и не брить подмыхи.
www.opennet.ru
Проект Python для соблюдения политкорректности избавляется от терминов "master" и "slave"
Гвидо ван Россум (Guido van Rossum) поставил точку в споре, возникшем среди разработчиков языка Python из-за изменений, предложенных Виктором Штиннером (Victor Stinner), работающим в Red Hat и входящим с число ключевых разработчиков Python. Виктор предложил…
Forwarded from Sergey Kovbyk
Всем привет.
случайно наткнулся на серию уроков по ансибл, мож кому пригодится - я просмотрел, вроде живенько и понятно.
https://www.youtube.com/watch?v=Ck1SGolr6GI&list=PLg5SS_4L6LYufspdPupdynbMQTBnZd31N&index=1
З.Ы. Сам я начинающий, и теперь не знаю, как раньше был без него ))
случайно наткнулся на серию уроков по ансибл, мож кому пригодится - я просмотрел, вроде живенько и понятно.
https://www.youtube.com/watch?v=Ck1SGolr6GI&list=PLg5SS_4L6LYufspdPupdynbMQTBnZd31N&index=1
З.Ы. Сам я начинающий, и теперь не знаю, как раньше был без него ))
YouTube
1-Ansible - Автоконфигурирование для DevOps - Полный Курс на Простом Языке
#devops #девопс #ansible #ityoutubersru
Что такое Ansible для DevOps и как он работает
Буду рад паре баксов, можно даже Канадских :) https://www.paypal.me/DenisAstahov
Что такое Ansible для DevOps и как он работает
Буду рад паре баксов, можно даже Канадских :) https://www.paypal.me/DenisAstahov
Удаляем объекты azure через az cli
Есть в этом хостинге что-то свое, привлекательное. Например невозможность выделить и удалить через интерфейс несколько объектов типа security group, public ip, nic... Может для кого-то это влажные мечты - сидеть и удалять тонну объектов заходя в каждый и удаляя его, но хочется как-то побыстрее. В данном примере не разобрана фильтрация, это дело остается индивидуально. Таким же образом подставить нужный тип вместо public-ip.
#azure #azcli #гори_в_аду_микрософт
Есть в этом хостинге что-то свое, привлекательное. Например невозможность выделить и удалить через интерфейс несколько объектов типа 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
Если кто не знал, то в 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)
В подсистеме 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)
www.opennet.ru
Уязвимость в ядре Linux, потенциально позволяющая поднять привилегии
В подсистеме vmacache ядра Linux обнаружена уязвимость (CVE-2018-17182), которая потенциально может быть использована для создания эксплоита для повышения привилегий локального пользователя в системе. Уязвимость вызвана отсутствием проверки переполнения 32…
заставляем git использовать указанный ssh ключ при деплое чужого контейнера в k8s
Решал задачу по внедрению поисковика по коду: https://github.com/etsy/hound.
В рамках этой задачи было принято решение написать 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 скрипт получился такой:
Здесь я указываю чтобы не чекался fingerprint и путь к конкретному ключу. В итоге для helm пишется configmap и secret. один кладет wrapper, а другой - приватный ключ.
Теперь все что остается - задать в deployment переменную окружения GIT_SSH, в которой указать путь к wrapper.
#git #helm #kubernetes
Решал задачу по внедрению поисковика по коду: 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.
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
Когда-то я начинал свой канал именно с лабораторных работ по сетям, но почему-то нигде не упоминал один очень цикл статей для их изучения. А даже если и упоминал, не страшно и повториться. И если вы по каким-то причинам до сих пор про них не знаете - крайне рекомендую. Здесь выложу ссылку на первую часть, хотя их там более 10, от разбора модели OSI до BGP, QOS и дальше в дебри.
https://habr.com/post/136056/
#network #junior
Habr
Сети для самых маленьких. Часть первая (которая после нулевой). Подключение к оборудованию cisco
Все выпуски 8. Сети для самых маленьких. Часть восьмая. BGP и IP SLA 7. Сети для самых маленьких. Часть седьмая. VPN 6. Сети для самых маленьких. Часть шестая. Динамическая маршрутизация 5. Сети для...