This post is suplement to GitHub repo available under https://github.com/RafPe/hubot-zabbix-scripts
So finally day has come when I can write about my recent involvement in automating 🙂 this time with use of hubot ( in this role favorite Bender ) and good Rocket.Chat .
If we need to do it once – lets automate it as for sure someone else will need to use it also at least once
And in most cases its true 🙂 So one day I just woke up quite early. Really too early to go to work already 🙂 and too late to get really good sleep still. So I got the thing which we all think in the morning ….. yezzzz coffee 🙂 And then thought about the things that ppl around me have been doing manually for quite a while :/
The challenge which came out of that short moment of thinking was : “setting zabbix server maintanance with hubot ( bender ) “
Getting pieces together:
Now I really liked that idea. It was around 6AM in the morning , my coffee was half way through so I geared up and was ready when opened my laptop. Now what was really challenging here is the fact I have never programmed in Coffee script nor in Python and those 2 main components are used to bake this solution. However at the end of the day its only different gramma for getting things done 🙂
I decided not to reinvent the wheel and looked at things that already work. Since at the moment I have been automating a lot with Ansible I looked at their Github page with extra modules.
And that was exactly what I needed. Then I just went ahead and downloaded the hubot – following nice and simple documentation. Based on the info there getting coffeee script to do exactly what I need was just a matter of minutes 🙂 ( at least I hoped so )
So this is a proxy ?
Exactly. Coffee script in hubot makes sure we respond to properly set regex values which corresponds to commands given to our hubot. From there we execute python script.
So I have placed biggest efforts on getting the Python script running. I googled around and managed to get it running with arguments. Which in return opened doors to properly proxy from Coffee script.
The final version of python script ( final per write up of this post ) has the following syntax
usage: zbx-maint.py [-h] -u USER -p PASSWORD [-t TARGET] [-s SERVER] -a ACTION
[-l LENGTH] [-d DESC] [-r REQUESTOR] [-i ID]
-u USER : used to connect to zabbix - needs perm to create/delete maintanance
-p PASSWORD : password for the user above
-t TARGET : host/groups to create maintanance on
-s SERVER : URL of the zabbix server
-a ACTION : del or set
-l LENGTH : Number of minutes to have maintanance for
-d DESC : Additonal description added to maintanance
-r REQUESTOR : Used to pass who has requested action
-i ID : Name of maintanance - used for deletion
What about security ?
All passwords and links used within the hubot script are passed using environment variables. For proper control of processes and isolation I have been using here supervisorD ( which is great tool to do this ).
HUBOT_ZBX_USER : user accessing zabbix
HUBOT_ZBX_PW : password for the user
HUBOT_ZBX_URL : zabbix server URL
HUBOT_ZBX_PYMAINT : full path to zbx-maint.py script (used by coffee script)
Bender in action:
So without any further delay this is how it looks in action ….
I’m still looking for other people feedback to see what can be done better. Most likely I will be publishing some more of zabbix automations to enrich chatops and make life more interesting 🙂