mirror of
https://github.com/ansible/awx.git
synced 2026-03-11 22:49:32 -02:30
Update settings template to use SQLite test database when running acom_inventory script in tests, initial stub for callback event logger.
This commit is contained in:
@@ -36,7 +36,7 @@ DATABASES = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if 'test' in sys.argv:
|
if 'test' in sys.argv or 'ACOM_TEST_DATABASE_NAME' in os.environ:
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.sqlite3',
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
|||||||
@@ -15,3 +15,40 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def run_command_as_script(command_name):
|
||||||
|
'''
|
||||||
|
Helper function to run the given management command directly as a script.
|
||||||
|
|
||||||
|
Include something like the following in your management/commands/blah.py:
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
from __init__ import run_command_as_script
|
||||||
|
command_name = os.path.splitext(os.path.basename(__file__))[0]
|
||||||
|
run_command_as_script(command_name)
|
||||||
|
|
||||||
|
'''
|
||||||
|
# The DJANGO_SETTINGS_MODULE environment variable should already be set if
|
||||||
|
# the script is called from a celery task.
|
||||||
|
settings_module_name = os.environ.setdefault('DJANGO_SETTINGS_MODULE',
|
||||||
|
'lib.settings')
|
||||||
|
# This sys.path hack is needed when a celery task calls ansible-playbook
|
||||||
|
# and needs to execute the script directly. FIXME: Figure out if this will
|
||||||
|
# work when installed in a production environment.
|
||||||
|
try:
|
||||||
|
settings_parent_module = __import__(settings_module_name)
|
||||||
|
except ImportError:
|
||||||
|
top_dir = os.path.join(os.path.dirname(__file__), '..', '..', '..', '..')
|
||||||
|
sys.path.insert(0, os.path.abspath(top_dir))
|
||||||
|
settings_parent_module = __import__(settings_module_name)
|
||||||
|
settings_module = getattr(settings_parent_module, settings_module_name.split('.')[-1])
|
||||||
|
# Use the ACOM_TEST_DATABASE_NAME environment variable to specify the test
|
||||||
|
# database name when called from unit tests.
|
||||||
|
if os.environ.get('ACOM_TEST_DATABASE_NAME', None):
|
||||||
|
settings_module.DATABASES['default']['NAME'] = os.environ['ACOM_TEST_DATABASE_NAME']
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
argv = [sys.argv[0], command_name] + sys.argv[1:]
|
||||||
|
execute_from_command_line(argv)
|
||||||
|
|||||||
58
lib/main/management/commands/acom_callback_event.py
Normal file
58
lib/main/management/commands/acom_callback_event.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# Copyright (c) 2013 AnsibleWorks, Inc.
|
||||||
|
#
|
||||||
|
# This file is part of Ansible Commander
|
||||||
|
#
|
||||||
|
# Ansible Commander is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import json
|
||||||
|
from optparse import make_option
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
|
||||||
|
class Command(BaseCommmand):
|
||||||
|
|
||||||
|
help = 'Ansible Commander Callback Event Capture'
|
||||||
|
|
||||||
|
option_list = BaseCommmand.option_list + (
|
||||||
|
make_option('-i', '--launch-job-status', dest='launch_job_status_id',
|
||||||
|
type='int', default=0,
|
||||||
|
help='Inventory ID (can also be specified using '
|
||||||
|
'ACOM_INVENTORY_ID environment variable)'),
|
||||||
|
#make_option('--indent', dest='indent', type='int', default=None,
|
||||||
|
# help='Indentation level for pretty printing output'),
|
||||||
|
)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
from lib.main.models import LaunchJobStatus
|
||||||
|
try:
|
||||||
|
launch_job_status_id = int(os.getenv('ACOM_LAUNCH_JOB_STATUS_ID',
|
||||||
|
options.get('launch_job_status_id', 0)))
|
||||||
|
except ValueError:
|
||||||
|
raise CommandError('Launch job status ID must be an integer')
|
||||||
|
if not launch_job_status_id:
|
||||||
|
raise CommandError('No launch job status ID specified')
|
||||||
|
try:
|
||||||
|
launch_job_status = LaunchJobStatus.objects.get(id=launch_job_status_id)
|
||||||
|
except Inventory.DoesNotExist:
|
||||||
|
raise CommandError('Launch job status with ID %d not found' % launch_job_status_id)
|
||||||
|
# FIXME: Do stuff here.
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
from __init__ import run_command_as_script
|
||||||
|
command_name = os.path.splitext(os.path.basename(__file__))[0]
|
||||||
|
run_command_as_script(command_name)
|
||||||
@@ -75,7 +75,10 @@ class Command(NoArgsCommand):
|
|||||||
try:
|
try:
|
||||||
from lib.main.models import Inventory
|
from lib.main.models import Inventory
|
||||||
try:
|
try:
|
||||||
inventory_id = int(os.getenv('ACOM_INVENTORY_ID', options.get('inventory', 0)))
|
# Command line argument takes precedence over environment
|
||||||
|
# variable.
|
||||||
|
inventory_id = int(options.get('inventory', 0) or \
|
||||||
|
os.getenv('ACOM_INVENTORY_ID', 0))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise CommandError('Inventory ID must be an integer')
|
raise CommandError('Inventory ID must be an integer')
|
||||||
if not inventory_id:
|
if not inventory_id:
|
||||||
@@ -101,23 +104,6 @@ class Command(NoArgsCommand):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# FIXME: The DJANGO_SETTINGS_MODULE environment variable *should* already
|
from __init__ import run_command_as_script
|
||||||
# be set if this script is called from a celery task.
|
command_name = os.path.splitext(os.path.basename(__file__))[0]
|
||||||
settings_module_name = os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lib.settings')
|
run_command_as_script(command_name)
|
||||||
# FIXME: Not particularly fond of this sys.path hack, but it is needed
|
|
||||||
# when a celery task calls ansible-playbook and needs to execute this
|
|
||||||
# script directly.
|
|
||||||
try:
|
|
||||||
settings_parent_module = __import__(settings_module_name)
|
|
||||||
except ImportError:
|
|
||||||
top_dir = os.path.join(os.path.dirname(__file__), '..', '..', '..', '..')
|
|
||||||
sys.path.insert(0, os.path.abspath(top_dir))
|
|
||||||
settings_parent_module = __import__(settings_module_name)
|
|
||||||
settings_module = getattr(settings_parent_module, settings_module_name.split('.')[-1])
|
|
||||||
# Use the ACOM_TEST_DATABASE_NAME environment variable to specify the test
|
|
||||||
# database name when called from unit tests.
|
|
||||||
if os.environ.get('ACOM_TEST_DATABASE_NAME', None):
|
|
||||||
settings_module.DATABASES['default']['NAME'] = os.environ['ACOM_TEST_DATABASE_NAME']
|
|
||||||
from django.core.management import execute_from_command_line
|
|
||||||
argv = [sys.argv[0], 'acom_inventory'] + sys.argv[1:]
|
|
||||||
execute_from_command_line(argv)
|
|
||||||
|
|||||||
@@ -139,6 +139,15 @@ class AcomInventoryTest(BaseCommandTest):
|
|||||||
group = inventory.groups.get(name=k)
|
group = inventory.groups.get(name=k)
|
||||||
self.assertEqual(set(v),
|
self.assertEqual(set(v),
|
||||||
set(group.hosts.values_list('name', flat=True)))
|
set(group.hosts.values_list('name', flat=True)))
|
||||||
|
# Command line argument for inventory ID should take precedence over
|
||||||
|
# environment variable.
|
||||||
|
inventory_pks = set(map(lambda x: x.pk, self.inventories))
|
||||||
|
invalid_id = [x for x in xrange(9999) if x not in inventory_pks][0]
|
||||||
|
os.environ['ACOM_INVENTORY_ID'] = str(invalid_id)
|
||||||
|
result, stdout, stderr = self.run_command('acom_inventory', list=True,
|
||||||
|
inventory=inventory.pk)
|
||||||
|
self.assertEqual(result, None)
|
||||||
|
data = json.loads(stdout)
|
||||||
|
|
||||||
def test_list_with_inventory_id_in_environment(self):
|
def test_list_with_inventory_id_in_environment(self):
|
||||||
inventory = self.inventories[1]
|
inventory = self.inventories[1]
|
||||||
|
|||||||
@@ -137,12 +137,12 @@ INSTALLED_APPS = (
|
|||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.sites',
|
'django.contrib.sites',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'lib.main',
|
|
||||||
'south',
|
'south',
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
'django_extensions',
|
'django_extensions',
|
||||||
'djcelery',
|
'djcelery',
|
||||||
'kombu.transport.django',
|
'kombu.transport.django',
|
||||||
|
'lib.main',
|
||||||
)
|
)
|
||||||
|
|
||||||
INTERNAL_IPS = ('127.0.0.1',)
|
INTERNAL_IPS = ('127.0.0.1',)
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
Django==1.5
|
Django==1.5.1
|
||||||
django-celery==3.0.11
|
django-celery==3.0.11
|
||||||
django-devserver==0.5.0
|
django-devserver==0.5.0
|
||||||
django-extensions==1.1.1
|
django-extensions==1.1.1
|
||||||
django-jsonfield==0.9.2
|
django-jsonfield==0.9.2
|
||||||
ipython==0.13.1
|
ipython==0.13.1
|
||||||
South==0.7.6
|
# psycopg2==2.4.6
|
||||||
python-dateutil==1.5
|
python-dateutil==1.5
|
||||||
|
South==0.7.6
|
||||||
requests
|
requests
|
||||||
djangorestframework
|
djangorestframework
|
||||||
markdown
|
markdown
|
||||||
|
|||||||
Reference in New Issue
Block a user