Pull to refresh

Mattermost и Powershell — огромная сила, или малая автоматизация своими силами

Reading time 3 min
Views 17K
Сразу оговорюсь — я работаю в компании, которая напрямую с IT не связана, поэтому бюджет именно на IT у нас небольшой. Соответственно многие программы и связанные с ними удобства нам недоступны, поэтому приходится делать как умеем. А когда в компании помимо IT отдела есть несколько сотен пользователей, которые с трудом отличают монитор от мышки — работа становится как отдельный квест.

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

Многие (или не многие) слышали о таком прекрасном инструменте как Mattermost.
Для тех, кто не слыхал — это такой Slack, но только self-hosted. Внутри компании общий чат вообще наиполезнейшая штука.

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

Всем удобен этот чатик, но есть одно одно но. На самом деле не одно, но отсутствие нормального структурированного списка пользователей просто убивает. Можно, конечно, использовать Openfire+Miranda, но наличие у Mattermost клиента для телефонов с возможностью push-уведомления перевешивает все эти минусы. Так как количество пользователей не десяток, количество отделов тоже не два, то иногда возникает вопрос — а кто же сегодня работает на рецепции в удаленном филиале? Кто из них онлайн? Как красиво и доступно донести до обычного пользователя эту информацию в одном месте — тот еще вопрос. Рисовать развесистое дерево вариантов запросов и ответов для чатбота — развлечение еще то, поэтому представляю поделку на коленке специально для такого случая.

Cервис для Mattermost, написан удобства запуска различных powershell скриптов из slash/custom команд. На самом деле можно использовать для разных нужд, обращаясь к нему по url, но я его писал для того, чтобы в чатике рисовать кнопочки. Все любят кнопочки, даже котики и тётушки из бухгалтерии. Ну а писать на PowerShell обязан уметь любой виндовый админ, поэтому полезняшки!

Примерная работа выглядит так:



Сервис предназначен для работы на Windows системах, с Powershell v3+. Для его запуска требуются права запускать PowerShell скрипты и открывать сокет. В скрипте нет никакой аутентификации, поэтому прописывать в конфигах что-либо разрушительное и выставлять голой попой в интернет не советую. С другой стороны можно прописывать пути подлиннее, но это на любителя.

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

Записи в конфиге

[script]
Script=.\Dummy-Script.ps1
IncomingVariables=text,team_domain,user_name

означают, что при обращении к урлу /script будет запущен скрипт Dummy-Script.ps1, находящийся в той же директории, что и ButtonCommander, с входящими переменными text,team_domain,user_name.

Сервис получает данные со скриптов и посылает их в channel, из которого пришел запрос. Если данные пришли в форме JSON, то конвертация в простое сообщение не происходит, а в Mattermost посылается исходный JSON — именно так делаются кнопочки.

Скрипт можно остановить или перечитать конфиг файл тоже путем обращения по специальному url. Но в прочем, описание и установка описаны прямо в репозитории, поэтому копипастить не буду. Скрипт прошёл обкатку, и выложен уже в рабочей версии. Работает без сбоев уже вполне долгое время.

Ссылка на репозиторий.

P.S.: Аффтар не писатель и не программист, а акушер-столяр широкого профиля, поэтому пишет как умеет.
P.P.S.: Речь везде идет о Team Edition, у которого (о боль, боль!) нету ldap авторизации. Я выхожу из положения подменой странички логина на свою (nginx + python,) но та поделка настолько чудовищна, что выкладывать ее я считаю преступлением.
Tags:
Hubs:
+12
Comments 7
Comments Comments 7

Articles