Ansible best practice

Hi all,

I have no experience writing ansible roles. At the moment I’m trying to write a few ansible roles, but I’m not sure how to separate responsibilities.

I have two roles.

  • prometheus - installs and configures prometheus.
  • mongodb - Installs and configures mongodb database.

Prometheus needs to be configured in order to scrap metrics about mongoDB. Basically, it’s necessary to put a file on a directory where the prometheus server is installed, containing information about mongodb location, etc… the question is: Should I configure this on the prometheus role? It seems to me that I’m polluting the prometheus role with things that belong elsewhere. This way, I’m also coupling the prometheus role with a specific use case. It’s recommended to create a separate role to configure mongodb location on prometheus?

What’s the best practice?

Thanks,
Rui

Hi Rui,

You can find a role for installing Prometheus here: https://github.com/kozmagabor/ansible-prometheus

Which also has a complementary role to setup the mongodb exporter: https://github.com/William-Yeh/ansible-mongodb-exporter

I found both of the above via Ansible Galaxy: https://galaxy.ansible.com/kozmagabor/prometheus/

Ansible Galaxy has several roles available for installing Prometheus.

You could hence avoid creating your own roles and use the above or jump start your own roles based on the above.

To answer your question, it looks cleaner if you split into multiple roles instead of polluting the Prometheus role with something which is not a hard dependency.

Regards,
Jinesh

Hi Jinesh.

thank you!

Just apply both roles to your mongodb group, and if you want to be explicit
you'd just set some vars on that group that both roles can use to find
paths etc.