1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-31 15:21:13 +03:00

Merge branch 'master' into expunge-zeromq-unstable

This commit is contained in:
Luke Sneeringer 2014-11-11 07:52:11 -06:00
commit 122bf9fcd3
5 changed files with 64 additions and 6 deletions

View File

@ -1768,6 +1768,12 @@ class SystemJobTemplateSchedulesList(SubListCreateAPIView):
relationship = 'schedules' relationship = 'schedules'
parent_key = 'unified_job_template' parent_key = 'unified_job_template'
def post(self, request, *args, **kwargs):
system_job = self.get_parent_object()
if system_job.schedules.count() > 0:
return Response({"error": "Multiple schedules for Systems Jobs is not allowed"}, status=status.HTTP_400_BAD_REQUEST)
return super(SystemJobTemplateSchedulesList, self).post(request, *args, **kwargs)
class SystemJobTemplateJobsList(SubListAPIView): class SystemJobTemplateJobsList(SubListAPIView):
model = SystemJob model = SystemJob

View File

@ -9,18 +9,18 @@ from awx.main.models import *
class Migration(DataMigration): class Migration(DataMigration):
def forwards(self, orm): def forwards(self, orm):
SystemJobTemplate(name='Delete Old Jobs', SystemJobTemplate(name='Cleanup Job Details',
description="Run a job to delete jobs that are older than a given number of days", description="Remove job history older than X days",
job_type="cleanup_jobs", job_type="cleanup_jobs",
created=now(), created=now(),
modified=now()).save() modified=now()).save()
SystemJobTemplate(name='Cleanup Deleted Data', SystemJobTemplate(name='Cleanup Deleted Data',
description="Run a job to cleanup any deleted objects that are older than a given number of days", description="Remove deleted object history older than X days",
job_type="cleanup_deleted", job_type="cleanup_deleted",
created=now(), created=now(),
modified=now()).save() modified=now()).save()
SystemJobTemplate(name='Cleanup Activity Stream', SystemJobTemplate(name='Cleanup Activity Stream',
description="Run a job to purge activity stream data that's older than a given number of days", description="Remove activity stream history older than X days",
job_type="cleanup_activitystream", job_type="cleanup_activitystream",
created=now(), created=now(),
modified=now()).save() modified=now()).save()

View File

@ -73,3 +73,23 @@ nested_groups = False
# If you want to exclude any hosts that match a certain regular expression # If you want to exclude any hosts that match a certain regular expression
# pattern_exclude = stage-* # pattern_exclude = stage-*
# Instance filters can be used to control which instances are retrieved for
# inventory. For the full list of possible filters, please read the EC2 API
# docs: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html#query-DescribeInstances-filters
# Filters are key/value pairs separated by '=', to list multiple filters use
# a list separated by commas. See examples below.
# Retrieve only instances with (key=value) env=stage tag
# instance_filters = tag:env=stage
# Retrieve only instances with role=webservers OR role=dbservers tag
# instance_filters = tag:role=webservers,tag:role=dbservers
# Retrieve only t1.micro instances OR instances with tag env=stage
# instance_filters = instance-type=t1.micro,tag:env=stage
# You can use wildcards in filter values also. Below will list instances which
# tag Name value matches webservers1*
# (ex. webservers15, webservers1a, webservers123 etc)
# instance_filters = tag:Name=webservers1*

View File

@ -123,6 +123,7 @@ from boto import ec2
from boto import rds from boto import rds
from boto import route53 from boto import route53
import ConfigParser import ConfigParser
from collections import defaultdict
try: try:
import json import json
@ -257,6 +258,8 @@ class Ec2Inventory(object):
pattern_include = config.get('ec2', 'pattern_include') pattern_include = config.get('ec2', 'pattern_include')
if pattern_include and len(pattern_include) > 0: if pattern_include and len(pattern_include) > 0:
self.pattern_include = re.compile(pattern_include) self.pattern_include = re.compile(pattern_include)
else:
self.pattern_include = None
except ConfigParser.NoOptionError, e: except ConfigParser.NoOptionError, e:
self.pattern_include = None self.pattern_include = None
@ -265,8 +268,17 @@ class Ec2Inventory(object):
pattern_exclude = config.get('ec2', 'pattern_exclude'); pattern_exclude = config.get('ec2', 'pattern_exclude');
if pattern_exclude and len(pattern_exclude) > 0: if pattern_exclude and len(pattern_exclude) > 0:
self.pattern_exclude = re.compile(pattern_exclude) self.pattern_exclude = re.compile(pattern_exclude)
else:
self.pattern_exclude = None
except ConfigParser.NoOptionError, e: except ConfigParser.NoOptionError, e:
self.pattern_exclude = '' self.pattern_exclude = None
# Instance filters (see boto and EC2 API docs)
self.ec2_instance_filters = defaultdict(list)
if config.has_option('ec2', 'instance_filters'):
for x in config.get('ec2', 'instance_filters', '').split(','):
filter_key, filter_value = x.split('=')
self.ec2_instance_filters[filter_key].append(filter_value)
def parse_cli_args(self): def parse_cli_args(self):
''' Command line argument processing ''' ''' Command line argument processing '''
@ -312,7 +324,13 @@ class Ec2Inventory(object):
print("region name: %s likely not supported, or AWS is down. connection to region failed." % region) print("region name: %s likely not supported, or AWS is down. connection to region failed." % region)
sys.exit(1) sys.exit(1)
reservations = conn.get_all_instances() reservations = []
if self.ec2_instance_filters:
for filter_key, filter_values in self.ec2_instance_filters.iteritems():
reservations.extend(conn.get_all_instances(filters = { filter_key : filter_values }))
else:
reservations = conn.get_all_instances()
for reservation in reservations: for reservation in reservations:
for instance in reservation.instances: for instance in reservation.instances:
self.add_instance(instance, region) self.add_instance(instance, region)

View File

@ -14,6 +14,20 @@ https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/
from awx import prepare_env from awx import prepare_env
prepare_env() prepare_env()
import os
import logging
from django.conf import settings
from awx import __version__ as tower_version
logger = logging.getLogger('awx.main.models.jobs')
try:
fd = open("/var/lib/awx/.tower_version", "r")
if fd.read().strip() != tower_version:
logger.error("Tower Versions don't match, potential invalid setup detected")
raise Exception("Tower Versions don't match, potential invalid setup detected")
except Exception:
logger.error("Missing tower version metadata at /var/lib/awx/.tower_version")
raise Exception("Missing tower version metadata at /var/lib/awx/.tower_version")
# Return the default Django WSGI application. # Return the default Django WSGI application.
from django.core.wsgi import get_wsgi_application from django.core.wsgi import get_wsgi_application
application = get_wsgi_application() application = get_wsgi_application()