All streams
Search
Write a publication
Pull to refresh
35
0
Сергей Печенко @tnt4brain

DevOps

Send message
Для этой серии счётчиков датчик называется IN-Z61, ищется в интернете, вроде от 1100 руб. Насколько гуманно — каждый сам решает.
Да, но нет.
  1. Этот доклад был впервые представлен 24 сентября 2018 года на митапе от DevOps Moscow, который проводили коллеги из «Леруа Мерлен», а в программу «Стачки-2019» его отобрал программный комитет;
  2. БОльшая часть вещей, о которых я рассказываю, до сих пор являются чуть ли не секретом или откровением для новичков в @pro_ansible;
  3. Написание модуля, на мой взгляд, действительно лучший способ работы с Ansible, если объектная модель проекта слишком отличается от объектной модели Ansible;
  4. Какие-то радикальные изменения, которые заметно облегчали жизнь, были только в 2.5;
  5. Ну и, наконец, с удовольствием посмотрю (наверное, не только я!) видео конкретно вашего доклада по свежей и актуальной версии Ansible — например, по 2.10. В этом случае прилюдно обещаю «лайкподписку».
Опять промахнулся веткой комментариев. Прошу извинить.
Промахнулся с веткой комментариев.
service docker start

Подозрительно похоже на upstart. Это точно про systemd? Его вызов выглядел бы как
systemctl start docker
Он вообще «искаропки» умеет запускать сервис от любой учётной записи без приседаний с sudo, описанными в статье.
В общем, я считаю, что если с каким-то сервисом не поставляется unit-файл — стыд и позор его мейнтейнерам (maintainers). С другой стороны, не хотите стыдить и позорить — свой unit-файл пишется примерно 5 минут (читать здесь и здесь). Может получиться что-то типа
такого.
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
Environment=PID_FILE=/opt/unrealircd/data/unrealircd.pid
PIDFile=/opt/unrealircd/data/unrealircd.pid
ExecStart=/opt/unrealircd/bin/unrealircd
ExecStop=/bin/kill -15 $MAINPID
User=sp
WorkingDirectory=/opt/unrealircd
[Unit]
ConditionPathExists=/opt/unrealircd/conf/unrealircd.conf

За окном уже 2020 — пора знать systemd.
Зачем же сбивать людей с толку? :-) Реборда как раз для удержания колёсной пары в колее. Более того, для того, чтобы пара не гуляла поперёк колеи, одну из рельсовых нитей делают выше другой. Пруфы — в ПТЭ, вот приказ Минтранса о внесении в них изменений.

Заголовок спойлера

4) пункт 10 изложить в следующей редакции:
«10. Верх головок рельсов обеих нитей железнодорожного пути на прямых участках должен быть в одном уровне. Разрешается на прямых участках железнодорожного пути содержать одну рельсовую нить на 6 мм выше другой.

Позволю себе предположить, что это не нужно никому достаточно целеустремлённому.
Ansible — это open source. То есть он открыт для улучшений делом, а не только словом.
Да, конечно: тыц.
Эстетам приношу извинения — видео неофициальное, снято с рук на телефон, но другого нет.
На всякий случай: публикация видео и расшифровки согласована с организаторами.
Про repositor.io не удивительно — не взлетело, закрылись. Pulp — да, какая-то дичь. Ну а PackageCloud — как обычно, за деньги: enterprise.packagecloud.io.

P.S. Указанные скрипты до сих пор (уже три года!) работают.

Крутая идея! А то, что дело дошло до реализации, только подтверждает её жизнеспособность. Это всё, конечно, моё личное мнение.

Is it a pure ad material? I mean — the author did not even mention that Slack will eat all your RAM and ask for more, as it is Electron-based bloatware instead of proper set of native clients (4 of them could cover large market share: Windows, Linux, Mac OS/iOS, Android).

Возможно, ещё имеет смысл добавить ru_logs? Это — группа про логи как отдельную сущность, а также инструменты для их централизованного сбора и обработки.
Некоторые игры в комплекте имели звуковые банки, и на картах с поддержкой аппаратного MIDI-синтеза воспроизводили MIDI именно звуками из банков.
Про первое. Я не использую import_role просто потому, что не получу каких-то реальных преимуществ от его использования. А про особенности — см. доку, плюс здесь.
Исходя из двух указанных мест, лично мне понятно, что я получу определённые проблемы вместе с import_role, не получив абсолютно ничего конструктивного взамен. Тащить в проект что-то новое только потому, что могу — не-а, не моё. Продакшн ведь.

Про второе. Достаточно спеку YaML'а почитать. По спеке символ пробела разделяет токены YaML. Во втором случае нет пробела — значит, фигурная скобка является просто первым символом в строке, и не образует токен.

Предлагаю на этом прекратить коллективное чтение документации вслух, т.к. я не уверен, что обсуждение содержит что-то конструктивное/интересное для других читающих. Частные, узкоспециализированные вопросы можете задать в ЛС, на почту, либо в телегу (на выступлениях я указываю контакты в презентациях).
Занятно, что в вашем вопросе содержится ответ :-) Сбор фактов часто является самой долго исполняющейся частью плейбука, соответственно, его принято отключать.
Вариант отключения сбора фактов
У меня обычно в плейбуках встречается что-то похожее:
---
- hosts: <hostgroup1>:<hostgroup2>
  gather_facts: yes
  tasks: []
- hosts: <hostgroup1>
  gather_facts: no
  roles:
    - role: role1
      param1: value1
- hosts: <hostgroup2>
  gather_facts: no
  roles:
    - role: role1
      param1: value2


Ну или если хочется красоты:
Красота
---
- hosts: <hostgroup1>:<hostgroup2>
  gather_facts: yes
  tasks: []
- hosts: <hostgroup1>
  gather_facts: no
  roles:
    - role: role1
      param1: "{{ bar  }}"
- hosts: <hostgroup2>
  gather_facts: no
  roles:
    - role: role1
      param1: "{{ bar  }}"

А переменная bar, соответственно, определена для каждой группы.

Если прямо совсем нет возможности делать несколько play (плеев? драм?), то вот ссылочка на официальную документацию. Можно заставить роль исполняться несколько раз.
А здесь уже вижу запрос на конструктив — респект.

Подобные случаи выглядят достаточно просто: роль, у неё есть набор параметров. Для того, чтобы роль не падала при запуске без параметров, параметры устанавливаются в некие безопасные умолчания через defaults/main.yml.

А сам управляющий плейбук может выглядеть вот так:
---
- hosts: <hostgroup1>
  roles:
    - role: role1
      param1: value1
- hosts: <hostgroup2>
  roles:
    - role: role1
      param1: value2


Вполне себе reusable.
Да не хочу я делать странное, про которое в доке написано «не надо так». Вот есть ссылка, по ней вторым абзацем лежит фраза:
Avoid defining the variable “x” in 47 places and then ask the question “which x gets used”. Why? Because that’s not Ansible’s Zen philosophy of doing things.
В переводе означает «Избегайте определения переменной в 47 местах, чтобы потом не спрашивать, какое значение используется».
Именно так я и делаю.
Что-то я не вижу, чтобы где-то озвучивал подобную уверенность:
Если вы так уверены в консистености ансибла
Во-вторых, если посмотреть на плейбук по ссылке, то вы изменяете глобальные переменные внутри отдельных вызовов ролей и удивляетесь результату. С чем именно консистентен подход с изменением глобальных переменных в отдельных вызовах?
В контексте статьи хочу заметить, что исходники Ансибла при этом открыты, то есть всегда есть возможность прочитать и понять, _как именно_ работает. Ну и, конечно же, обсудить с сообществом.

А если этого не хочется по каким-то причинам — всегда можно взять и написать свою систему, которая будет:
  • легковесной,
  • простой в использовании,
  • не будет содержать багов,
  • и будет абсолютно бесплатной в использовании.

P.S. Лично я проблем с глобальными переменными не встречаю вовсе — и так уже пять лет!.. По моим ощущениям, чаще источники подобных проблем кроются в непонимании объектной модели Ansible (как говорится, «не о присутствующих», сугубо по опыту чата @pro_ansible).

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, DevOps
Lead
DevOps
High availability
Ansible
Python
Git
Nginx