Files
stacktach/stacktach/db.py
Andrew Melton fde85b1d68 Get or create deployment in parent process
Doing this in the parent process avoids a race condition
where two consumers for a single deployment attempt to
create new deployments at the same time. Thus, creating
duplicate deployments.
2013-10-25 11:02:52 -04:00

140 lines
3.1 KiB
Python

from stacktach import stacklog
from stacktach import models
def _safe_get(Model, **kwargs):
object = None
query = Model.objects.filter(**kwargs)
count = query.count()
if count > 1:
stacklog.warn('Multiple records found for %s get.' % Model.__name__)
object = query[0]
elif count < 1:
stacklog.warn('No records found for %s get.' % Model.__name__)
else:
object = query[0]
return object
def get_deployment(id):
return _safe_get(models.Deployment, id=id)
def get_or_create_deployment(name):
return models.Deployment.objects.get_or_create(name=name)
def create_nova_rawdata(**kwargs):
imagemeta_fields = ['os_architecture', 'os_version',
'os_distro', 'rax_options']
imagemeta_kwargs = \
dict((k, v) for k, v in kwargs.iteritems() if k in imagemeta_fields)
rawdata_kwargs = \
dict((k, v) for k, v in kwargs.iteritems() if k not in imagemeta_fields)
rawdata = models.RawData(**rawdata_kwargs)
rawdata.save()
imagemeta_kwargs.update({'raw_id': rawdata.id})
save(models.RawDataImageMeta(**imagemeta_kwargs))
return rawdata
def create_lifecycle(**kwargs):
return models.Lifecycle(**kwargs)
def find_lifecycles(**kwargs):
return models.Lifecycle.objects.select_related().filter(**kwargs)
def create_timing(**kwargs):
return models.Timing(**kwargs)
def find_timings(**kwargs):
return models.Timing.objects.select_related().filter(**kwargs)
def create_request_tracker(**kwargs):
return models.RequestTracker(**kwargs)
def find_request_trackers(**kwargs):
return models.RequestTracker.objects.filter(**kwargs)
def create_instance_usage(**kwargs):
return models.InstanceUsage(**kwargs)
def get_or_create_instance_usage(**kwargs):
return models.InstanceUsage.objects.get_or_create(**kwargs)
def get_or_create_instance_delete(**kwargs):
return models.InstanceDeletes.objects.get_or_create(**kwargs)
def get_instance_usage(**kwargs):
return _safe_get(models.InstanceUsage, **kwargs)
def create_instance_delete(**kwargs):
return models.InstanceDeletes(**kwargs)
def get_instance_delete(**kwargs):
return _safe_get(models.InstanceDeletes, **kwargs)
def create_instance_exists(**kwargs):
return models.InstanceExists(**kwargs)
def save(obj):
obj.save()
def create_glance_rawdata(**kwargs):
rawdata = models.GlanceRawData(**kwargs)
rawdata.save()
return rawdata
def create_generic_rawdata(**kwargs):
rawdata = models.GenericRawData(**kwargs)
rawdata.save()
return rawdata
def create_image_usage(**kwargs):
usage = models.ImageUsage(**kwargs)
usage.save()
return usage
def create_image_delete(**kwargs):
delete = models.ImageDeletes(**kwargs)
delete.save()
return delete
def create_image_exists(**kwargs):
exists = models.ImageExists(**kwargs)
exists.save()
return exists
def get_image_delete(**kwargs):
return _safe_get(models.ImageDeletes, **kwargs)
def get_image_usage(**kwargs):
return _safe_get(models.ImageUsage, **kwargs)