Merge pull request #212 from ansible/mongodb-unstable

MongoDB installation as part of Tower.
This commit is contained in:
Luke Sneeringer 2015-05-19 12:48:31 -04:00
commit 56f06033ae
5 changed files with 62 additions and 1 deletions

View File

View File

View File

@ -0,0 +1,40 @@
# Copyright (c) 2015 Ansible, Inc.
# All Rights Reserved
import sys
from django.core.management.base import BaseCommand
from awx.main.task_engine import TaskSerializer
class Command(BaseCommand):
"""Return a exit status of 0 if MongoDB should be active, and an
exit status of 1 otherwise.
This script is intended to be used by bash and init scripts to
conditionally start MongoDB, so its focus is on being bash-friendly.
"""
def handle(self, **kwargs):
# Get the license data.
license_reader = TaskSerializer()
license_data = license_reader.from_file()
# Does the license contain the system tracking feature?
# If and only if it does, MongoDB should run.
system_tracking = license_data['features']['system_tracking']
# Okay, do we need MongoDB to be turned on?
# This is a silly variable assignment right now, but I expect the
# rules here will grow more complicated over time.
# FIXME: Most likely this should be False if HA is active
# (not just enabled by license, but actually in use).
uses_mongo = system_tracking # noqa
# If we do not need Mongo, return a non-zero exit status.
print('MongoDB NOT required')
sys.exit(1)
# We do need Mongo, return zero.
print('MongoDB required')
sys.exit(0)

View File

@ -8,6 +8,7 @@ import datetime
import dateutil
import time
import socket
import subprocess
import sys
# Django
@ -228,10 +229,21 @@ class ApiV1ConfigView(APIView):
except Exception:
# FIX: Log
return Response({"error": "Invalid License"}, status=status.HTTP_400_BAD_REQUEST)
# If the license is valid, write it to disk.
if license_data['valid_key']:
fh = open(TASK_FILE, "w")
fh.write(data_actual)
fh.close()
# Spawn a task to ensure that MongoDB is started (or stopped)
# as appropriate, based on whether the license uses it.
if license_data['features']['system_tracking']:
subprocess.call('sudo service mongod start', shell=True)
else:
subprocess.call('sudo service mongod stop', shell=True)
# Done; return the response.
return Response(license_data)
return Response({"error": "Invalid license"}, status=status.HTTP_400_BAD_REQUEST)

View File

@ -27,7 +27,16 @@ fi
[ -e "${TOWER_CONFIG}" ] && . "${TOWER_CONFIG}"
service_action() {
for svc in ${TOWER_SERVICES}; do
SERVICES=$TOWER_SERVICES
# Should MongoDB be managed by this script?
# We only manage MongoDB if the license uses it.
tower-manage uses_mongo > /dev/null 2> /dev/null
if [ $? == 0 ]; then
SERVICES="$SERVICES mongod"
fi
for svc in ${SERVICES}; do
service ${svc} $1
this_return=$?
if [ $this_return -gt $worst_return ]; then