ansible / awx

AWX provides a web-based user interface, REST API, and task engine built on top of Ansible. It is one of the upstream projects for Red Hat Ansible Automation Platform.
Other
14.03k stars 3.42k forks source link

Will AWX support MySQL Database with the existing code? #398

Closed NTDBANNU closed 7 years ago

NTDBANNU commented 7 years ago

Trying to migrate from Postgres database to MySQL database with the existing code. we replaced the variables and the connections from postgres sql to mysql in ansible configurations, Dockerfile.j2 under templates and in settings.py. Able to run awx_web container but facing issue with awx_task container. Please find the below screenshots of awx_task container log and AWX login page

awx_task_log awx_ui
matburt commented 7 years ago

We have no current plan to and this isn't supported in the installer.

hardys commented 6 years ago

FWIW I think this could be an interesting feature request to consider, for example in the OpenStack case, frequently OpenStack is deployed with mysql and enabling awx to integrate with the existing DB (and memcached and rabbitmq) would be pretty nice from a deployment perspective.

ryanpetrello commented 6 years ago

@hardys having spent a good deal of time (5-6 years) working upstream in OpenStack myself, my experience was that the multi-database support in OpenStack really ended up being:

  1. It works with MySQL.
  2. On a service-by-service basis, probably Postgres works for free because we're using SQLAlchemy, but if there's an issue I guess file a bug and somebody will address it? ¯_(ツ)_/¯

I've sat in on countless public sessions w/ the OpenStack infra team at dev summits as they wondered when they could finally stop running CI for Postgres 😄. Supporting both simultaneously is totally possible to do (especially with awesome ORM tools like SQLAlchemy or Django's ORM), but it's also a very notable QE, CI, and maintenance burden - so much so that a community as large as OpenStack has had trouble keeping up. By comparison, awx is a much smaller, less mature open source project than OpenStack.

enabling awx to integrate with the existing DB (and memcached and rabbitmq) would be pretty nice from a deployment perspective.

For what it's worth, this is something that we explicitly ask people not to do when deploying awx. awx has a sophisticated process for determining available capacity for distributing playbook runs across awx nodes - co-locating and sharing services (especially with a service like OpenStack, which can generate a huge amount of traffic over RabbitMQ) causes this process to be unreliable.

As @matburt said, I really don't see us pursuing this.

@NTDBANNU there is a very notable amount of Postgres-specific ORM code in awx, as well as usage of postgres-specific features (such as advisory locks) that simply won't work with MySQL due to implementation discrepancies between the two. The error you're seeing in your screenshot is one such discrepancy.

hardys commented 6 years ago

@ryanpetrello: thanks for the feedback, I do understand maintaining test coverage for multiple DB backends is hard, and I can't argue with your assertions re OpenStack.

My point was more that given that typical OpenStack deployments already have memcached, rabbitmq and a DB, it's kind of a shame when considering AWX integration that it's all duplicated.

Not a blocker by any means, but when I started looking at using AWX with OpenStack recently the first thing I looked for was ways to integrate with our deployment toolchain (TripleO which is based around Ansible and Containers, but expects a common DB, Memcached and RabbitMq at present), and that kind of doesn't fit well due to the opinionated nature of the AWX installer and DB.

Sounds like it's probably a lot of work, but FWIW I'm looking for ways to help so the information/context provided is appreciated :)

ryanpetrello commented 6 years ago

Yep - the ask in this issue is valuable feedback - I just figured it warranted a thorough answer on why we're so opinionated about the "no" answer: it's a lot of work, and awx really runs best when not sharing its services (especially the message bus).