Bug#801441: jessie-pu: package bcfg2/1.3.5-1
Package: release.debian.org
Severity: normal
Tags: jessie
User: release.debian.org@packages.debian.org
Usertags: pu
I would like to update bcfg2 in stable to match the version currently in
testing to enable it to work with Django 1.7 (bug #755645). To do this I would
add the attached patch, which looks much worse than it is due to the db
migration files being moved around.
-- System Information:
Debian Release: stretch/sid
APT prefers unstable
APT policy: (500, 'unstable'), (101, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.2.3 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=fi_FI.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
From: Jonas Jochmaring <jjonas@mail.upb.de>
Date: Fri, 22 May 2015 15:29:02 +0200
Subject: make Bcfg2 compatible with django 1.7
- reports.wsgi uses get_wsgi_application() now
- old south-based migrations have been moved
- manage.py has been updated
- fix SOUTH_MIGRATION_MODULES value in settings.py
- fix django loading in bcfg2 server core
- fix django loading DjangoORM storage
- revert back to old django testrunner
- call django.setup in bcfg2-reports
- close the database connection after syncdb in BaseCore.__init__
- fixed reports.wsgi script
---
reports/reports.wsgi | 19 +-
src/lib/Bcfg2/Reporting/Storage/DjangoORM.py | 3 +
src/lib/Bcfg2/Reporting/migrations/0001_initial.py | 1006 +++++++++++---------
.../migrations/0002_convert_perms_to_mode.py | 171 ----
.../Reporting/migrations/0003_expand_hash_key.py | 180 ----
.../migrations/0004_profile_can_be_null.py | 156 ---
.../migrations/0005_add_selinux_entry_support.py | 485 ----------
.../0006_add_user_group_entry_support.py | 340 -------
.../Reporting/south_migrations/0001_initial.py | 465 +++++++++
.../south_migrations/0002_convert_perms_to_mode.py | 171 ++++
.../south_migrations/0003_expand_hash_key.py | 180 ++++
.../south_migrations/0004_profile_can_be_null.py | 156 +++
.../0005_add_selinux_entry_support.py | 485 ++++++++++
.../0006_add_user_group_entry_support.py | 340 +++++++
.../Bcfg2/Reporting/south_migrations/__init__.py | 0
src/lib/Bcfg2/Server/Admin/Reports.py | 14 +-
src/lib/Bcfg2/Server/Core.py | 4 +
src/lib/Bcfg2/manage.py | 27 +-
src/lib/Bcfg2/settings.py | 11 +-
src/sbin/bcfg2-reports | 3 +
20 files changed, 2399 insertions(+), 1817 deletions(-)
delete mode 100644 src/lib/Bcfg2/Reporting/migrations/0002_convert_perms_to_mode.py
delete mode 100644 src/lib/Bcfg2/Reporting/migrations/0003_expand_hash_key.py
delete mode 100644 src/lib/Bcfg2/Reporting/migrations/0004_profile_can_be_null.py
delete mode 100644 src/lib/Bcfg2/Reporting/migrations/0005_add_selinux_entry_support.py
delete mode 100644 src/lib/Bcfg2/Reporting/migrations/0006_add_user_group_entry_support.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/0002_convert_perms_to_mode.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/0003_expand_hash_key.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/0004_profile_can_be_null.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/0005_add_selinux_entry_support.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/0006_add_user_group_entry_support.py
create mode 100644 src/lib/Bcfg2/Reporting/south_migrations/__init__.py
diff --git a/reports/reports.wsgi b/reports/reports.wsgi
index 92401d7..75f1a73 100644
--- a/reports/reports.wsgi
+++ b/reports/reports.wsgi
@@ -1,9 +1,18 @@
import os
import Bcfg2.settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'Bcfg2.settings'
-import django.core.handlers.wsgi
+import django
-def application(environ, start_response):
- if 'BCFG2_CONFIG_FILE' in environ:
- Bcfg2.settings.read_config(cfile=environ['BCFG2_CONFIG_FILE'])
- return django.core.handlers.wsgi.WSGIHandler()(environ, start_response)
+if django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ from django.core.wsgi import get_wsgi_application
+ def application(environ, start_response):
+ if 'BCFG2_CONFIG_FILE' in environ:
+ Bcfg2.settings.read_config(cfile=environ['BCFG2_CONFIG_FILE'])
+ return get_wsgi_application()(environ, start_response)
+
+else:
+ import django.core.handlers.wsgi
+ def application(environ, start_response):
+ if 'BCFG2_CONFIG_FILE' in environ:
+ Bcfg2.settings.read_config(cfile=environ['BCFG2_CONFIG_FILE'])
+ return django.core.handlers.wsgi.WSGIHandler()(environ, start_response)
diff --git a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
index 0bb3111..8eadb87 100644
--- a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
+++ b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
@@ -19,6 +19,9 @@ from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.db.models import FieldDoesNotExist
from django.core.cache import cache
from django import db
+import django
+if django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ django.setup()
#Used by GetCurrentEntry
import difflib
diff --git a/src/lib/Bcfg2/Reporting/migrations/0001_initial.py b/src/lib/Bcfg2/Reporting/migrations/0001_initial.py
index 609290e..aab0df6 100644
--- a/src/lib/Bcfg2/Reporting/migrations/0001_initial.py
+++ b/src/lib/Bcfg2/Reporting/migrations/0001_initial.py
@@ -1,465 +1,543 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'Client'
- db.create_table('Reporting_client', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('creation', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_interaction', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='parent_client', null=True, to=orm['Reporting.Interaction'])),
- ('expiration', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
- ))
- db.send_create_signal('Reporting', ['Client'])
-
- # Adding model 'Interaction'
- db.create_table('Reporting_interaction', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('client', self.gf('django.db.models.fields.related.ForeignKey')(related_name='interactions', to=orm['Reporting.Client'])),
- ('timestamp', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.CharField')(max_length=32)),
- ('repo_rev_code', self.gf('django.db.models.fields.CharField')(max_length=64)),
- ('server', self.gf('django.db.models.fields.CharField')(max_length=256)),
- ('good_count', self.gf('django.db.models.fields.IntegerField')()),
- ('total_count', self.gf('django.db.models.fields.IntegerField')()),
- ('bad_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('modified_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('extra_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('profile', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.Group'])),
- ))
- db.send_create_signal('Reporting', ['Interaction'])
-
- # Adding unique constraint on 'Interaction', fields ['client', 'timestamp']
- db.create_unique('Reporting_interaction', ['client_id', 'timestamp'])
-
- # Adding M2M table for field actions on 'Interaction'
- db.create_table('Reporting_interaction_actions', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('actionentry', models.ForeignKey(orm['Reporting.actionentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_actions', ['interaction_id', 'actionentry_id'])
-
- # Adding M2M table for field packages on 'Interaction'
- db.create_table('Reporting_interaction_packages', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('packageentry', models.ForeignKey(orm['Reporting.packageentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_packages', ['interaction_id', 'packageentry_id'])
-
- # Adding M2M table for field paths on 'Interaction'
- db.create_table('Reporting_interaction_paths', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_paths', ['interaction_id', 'pathentry_id'])
-
- # Adding M2M table for field services on 'Interaction'
- db.create_table('Reporting_interaction_services', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('serviceentry', models.ForeignKey(orm['Reporting.serviceentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_services', ['interaction_id', 'serviceentry_id'])
-
- # Adding M2M table for field failures on 'Interaction'
- db.create_table('Reporting_interaction_failures', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('failureentry', models.ForeignKey(orm['Reporting.failureentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_failures', ['interaction_id', 'failureentry_id'])
-
- # Adding M2M table for field groups on 'Interaction'
- db.create_table('Reporting_interaction_groups', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('group', models.ForeignKey(orm['Reporting.group'], null=False))
- ))
- db.create_unique('Reporting_interaction_groups', ['interaction_id', 'group_id'])
-
- # Adding M2M table for field bundles on 'Interaction'
- db.create_table('Reporting_interaction_bundles', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False))
- ))
- db.create_unique('Reporting_interaction_bundles', ['interaction_id', 'bundle_id'])
-
- # Adding model 'Performance'
- db.create_table('Reporting_performance', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('interaction', self.gf('django.db.models.fields.related.ForeignKey')(related_name='performance_items', to=orm['Reporting.Interaction'])),
- ('metric', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('value', self.gf('django.db.models.fields.DecimalField')(max_digits=32, decimal_places=16)),
- ))
- db.send_create_signal('Reporting', ['Performance'])
-
- # Adding model 'Group'
- db.create_table('Reporting_group', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
- ('profile', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('public', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('category', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
- ('comment', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('Reporting', ['Group'])
-
- # Adding M2M table for field groups on 'Group'
- db.create_table('Reporting_group_groups', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('from_group', models.ForeignKey(orm['Reporting.group'], null=False)),
- ('to_group', models.ForeignKey(orm['Reporting.group'], null=False))
- ))
- db.create_unique('Reporting_group_groups', ['from_group_id', 'to_group_id'])
-
- # Adding M2M table for field bundles on 'Group'
- db.create_table('Reporting_group_bundles', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('group', models.ForeignKey(orm['Reporting.group'], null=False)),
- ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False))
- ))
- db.create_unique('Reporting_group_bundles', ['group_id', 'bundle_id'])
-
- # Adding model 'Bundle'
- db.create_table('Reporting_bundle', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
- ))
- db.send_create_signal('Reporting', ['Bundle'])
-
- # Adding model 'FilePerms'
- db.create_table('Reporting_fileperms', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('owner', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('group', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('perms', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ))
- db.send_create_signal('Reporting', ['FilePerms'])
-
- # Adding unique constraint on 'FilePerms', fields ['owner', 'group', 'perms']
- db.create_unique('Reporting_fileperms', ['owner', 'group', 'perms'])
-
- # Adding model 'FileAcl'
- db.create_table('Reporting_fileacl', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ))
- db.send_create_signal('Reporting', ['FileAcl'])
-
- # Adding model 'FailureEntry'
- db.create_table('Reporting_failureentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ('entry_type', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('message', self.gf('django.db.models.fields.TextField')()),
- ))
- db.send_create_signal('Reporting', ['FailureEntry'])
-
- # Adding model 'ActionEntry'
- db.create_table('Reporting_actionentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('status', self.gf('django.db.models.fields.CharField')(default='check', max_length=128)),
- ('output', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ))
- db.send_create_signal('Reporting', ['ActionEntry'])
-
- # Adding model 'PackageEntry'
- db.create_table('Reporting_packageentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('target_version', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)),
- ('current_version', self.gf('django.db.models.fields.CharField')(max_length=1024)),
- ('verification_details', self.gf('django.db.models.fields.TextField')(default='')),
- ))
- db.send_create_signal('Reporting', ['PackageEntry'])
-
- # Adding model 'PathEntry'
- db.create_table('Reporting_pathentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('path_type', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('target_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])),
- ('current_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])),
- ('detail_type', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('details', self.gf('django.db.models.fields.TextField')(default='')),
- ))
- db.send_create_signal('Reporting', ['PathEntry'])
-
- # Adding M2M table for field acls on 'PathEntry'
- db.create_table('Reporting_pathentry_acls', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False)),
- ('fileacl', models.ForeignKey(orm['Reporting.fileacl'], null=False))
- ))
- db.create_unique('Reporting_pathentry_acls', ['pathentry_id', 'fileacl_id'])
-
- # Adding model 'LinkEntry'
- db.create_table('Reporting_linkentry', (
- ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)),
- ('target_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
- ('current_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
- ))
- db.send_create_signal('Reporting', ['LinkEntry'])
-
- # Adding model 'DeviceEntry'
- db.create_table('Reporting_deviceentry', (
- ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)),
- ('device_type', self.gf('django.db.models.fields.CharField')(max_length=16)),
- ('target_major', self.gf('django.db.models.fields.IntegerField')()),
- ('target_minor', self.gf('django.db.models.fields.IntegerField')()),
- ('current_major', self.gf('django.db.models.fields.IntegerField')()),
- ('current_minor', self.gf('django.db.models.fields.IntegerField')()),
- ))
- db.send_create_signal('Reporting', ['DeviceEntry'])
-
- # Adding model 'ServiceEntry'
- db.create_table('Reporting_serviceentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('target_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)),
- ('current_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)),
- ))
- db.send_create_signal('Reporting', ['ServiceEntry'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'FilePerms', fields ['owner', 'group', 'perms']
- db.delete_unique('Reporting_fileperms', ['owner', 'group', 'perms'])
-
- # Removing unique constraint on 'Interaction', fields ['client', 'timestamp']
- db.delete_unique('Reporting_interaction', ['client_id', 'timestamp'])
-
- # Deleting model 'Client'
- db.delete_table('Reporting_client')
-
- # Deleting model 'Interaction'
- db.delete_table('Reporting_interaction')
-
- # Removing M2M table for field actions on 'Interaction'
- db.delete_table('Reporting_interaction_actions')
-
- # Removing M2M table for field packages on 'Interaction'
- db.delete_table('Reporting_interaction_packages')
-
- # Removing M2M table for field paths on 'Interaction'
- db.delete_table('Reporting_interaction_paths')
-
- # Removing M2M table for field services on 'Interaction'
- db.delete_table('Reporting_interaction_services')
-
- # Removing M2M table for field failures on 'Interaction'
- db.delete_table('Reporting_interaction_failures')
-
- # Removing M2M table for field groups on 'Interaction'
- db.delete_table('Reporting_interaction_groups')
-
- # Removing M2M table for field bundles on 'Interaction'
- db.delete_table('Reporting_interaction_bundles')
-
- # Deleting model 'Performance'
- db.delete_table('Reporting_performance')
-
- # Deleting model 'Group'
- db.delete_table('Reporting_group')
-
- # Removing M2M table for field groups on 'Group'
- db.delete_table('Reporting_group_groups')
-
- # Removing M2M table for field bundles on 'Group'
- db.delete_table('Reporting_group_bundles')
-
- # Deleting model 'Bundle'
- db.delete_table('Reporting_bundle')
-
- # Deleting model 'FilePerms'
- db.delete_table('Reporting_fileperms')
-
- # Deleting model 'FileAcl'
- db.delete_table('Reporting_fileacl')
-
- # Deleting model 'FailureEntry'
- db.delete_table('Reporting_failureentry')
-
- # Deleting model 'ActionEntry'
- db.delete_table('Reporting_actionentry')
-
- # Deleting model 'PackageEntry'
- db.delete_table('Reporting_packageentry')
-
- # Deleting model 'PathEntry'
- db.delete_table('Reporting_pathentry')
-
- # Removing M2M table for field acls on 'PathEntry'
- db.delete_table('Reporting_pathentry_acls')
-
- # Deleting model 'LinkEntry'
- db.delete_table('Reporting_linkentry')
-
- # Deleting model 'DeviceEntry'
- db.delete_table('Reporting_deviceentry')
-
- # Deleting model 'ServiceEntry'
- db.delete_table('Reporting_serviceentry')
-
-
- models = {
- 'Reporting.actionentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
- },
- 'Reporting.bundle': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
- },
- 'Reporting.client': {
- 'Meta': {'object_name': 'Client'},
- 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
- 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.deviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_major': ('django.db.models.fields.IntegerField', [], {}),
- 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
- 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_major': ('django.db.models.fields.IntegerField', [], {}),
- 'target_minor': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.failureentry': {
- 'Meta': {'object_name': 'FailureEntry'},
- 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileacl': {
- 'Meta': {'object_name': 'FileAcl'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileperms': {
- 'Meta': {'unique_together': "(('owner', 'group', 'perms'),)", 'object_name': 'FilePerms'},
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'perms': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.group': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
- 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'Reporting.interaction': {
- 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
- 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
- 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
- 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
- 'good_count': ('django.db.models.fields.IntegerField', [], {}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
- 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
- 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}),
- 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'total_count': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.linkentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
- },
- 'Reporting.packageentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
- 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
- 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
- },
- 'Reporting.pathentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
- 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
- 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
- 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
- },
- 'Reporting.performance': {
- 'Meta': {'object_name': 'Performance'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
- 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
- },
- 'Reporting.serviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
- 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
- }
- }
-
- complete_apps = ['Reporting']
\ No newline at end of file
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ActionEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('status', models.CharField(default=b'check', max_length=128)),
+ ('output', models.IntegerField(default=0)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='Bundle',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(unique=True, max_length=255)),
+ ],
+ options={
+ 'ordering': ('name',),
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='Client',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('creation', models.DateTimeField(auto_now_add=True)),
+ ('name', models.CharField(max_length=128)),
+ ('expiration', models.DateTimeField(null=True, blank=True)),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='FailureEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('entry_type', models.CharField(max_length=128)),
+ ('message', models.TextField()),
+ ],
+ options={
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='FileAcl',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='FilePerms',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('owner', models.CharField(max_length=128)),
+ ('group', models.CharField(max_length=128)),
+ ('mode', models.CharField(max_length=128)),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='Group',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(unique=True, max_length=255)),
+ ('profile', models.BooleanField(default=False)),
+ ('public', models.BooleanField(default=False)),
+ ('category', models.CharField(max_length=1024, blank=True)),
+ ('comment', models.TextField(blank=True)),
+ ('bundles', models.ManyToManyField(to='Reporting.Bundle')),
+ ('groups', models.ManyToManyField(to='Reporting.Group')),
+ ],
+ options={
+ 'ordering': ('name',),
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='Interaction',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('timestamp', models.DateTimeField(db_index=True)),
+ ('state', models.CharField(max_length=32)),
+ ('repo_rev_code', models.CharField(max_length=64)),
+ ('server', models.CharField(max_length=256)),
+ ('good_count', models.IntegerField()),
+ ('total_count', models.IntegerField()),
+ ('bad_count', models.IntegerField(default=0)),
+ ('modified_count', models.IntegerField(default=0)),
+ ('extra_count', models.IntegerField(default=0)),
+ ('actions', models.ManyToManyField(to='Reporting.ActionEntry')),
+ ('bundles', models.ManyToManyField(to='Reporting.Bundle')),
+ ('client', models.ForeignKey(related_name='interactions', to='Reporting.Client')),
+ ('failures', models.ManyToManyField(to='Reporting.FailureEntry')),
+ ('groups', models.ManyToManyField(to='Reporting.Group')),
+ ],
+ options={
+ 'ordering': ['-timestamp'],
+ 'get_latest_by': 'timestamp',
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='PackageEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('target_version', models.CharField(default=b'', max_length=1024)),
+ ('current_version', models.CharField(max_length=1024)),
+ ('verification_details', models.TextField(default=b'')),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='PathEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('path_type', models.CharField(max_length=128, choices=[(b'device', b'Device'), (b'directory', b'Directory'), (b'hardlink', b'Hard Link'), (b'nonexistent', b'Non Existent'), (b'permissions', b'Permissions'), (b'symlink', b'Symlink')])),
+ ('detail_type', models.IntegerField(default=0, choices=[(0, b'Unused'), (1, b'Diff'), (2, b'Binary'), (3, b'Sensitive'), (4, b'Size limit exceeded'), (5, b'VCS output'), (6, b'Pruned paths')])),
+ ('details', models.TextField(default=b'')),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='LinkEntry',
+ fields=[
+ ('pathentry_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='Reporting.PathEntry')),
+ ('target_path', models.CharField(max_length=1024, blank=True)),
+ ('current_path', models.CharField(max_length=1024, blank=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=('Reporting.pathentry',),
+ ),
+ migrations.CreateModel(
+ name='DeviceEntry',
+ fields=[
+ ('pathentry_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='Reporting.PathEntry')),
+ ('device_type', models.CharField(max_length=16, choices=[(b'block', b'Block'), (b'char', b'Char'), (b'fifo', b'Fifo')])),
+ ('target_major', models.IntegerField()),
+ ('target_minor', models.IntegerField()),
+ ('current_major', models.IntegerField()),
+ ('current_minor', models.IntegerField()),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=('Reporting.pathentry',),
+ ),
+ migrations.CreateModel(
+ name='Performance',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('metric', models.CharField(max_length=128)),
+ ('value', models.DecimalField(max_digits=32, decimal_places=16)),
+ ('interaction', models.ForeignKey(related_name='performance_items', to='Reporting.Interaction')),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='POSIXGroupEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('gid', models.IntegerField(null=True)),
+ ('current_gid', models.IntegerField(null=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='POSIXUserEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('uid', models.IntegerField(null=True)),
+ ('current_uid', models.IntegerField(null=True)),
+ ('group', models.CharField(max_length=64)),
+ ('current_group', models.CharField(max_length=64, null=True)),
+ ('gecos', models.CharField(max_length=1024)),
+ ('current_gecos', models.CharField(max_length=1024, null=True)),
+ ('home', models.CharField(max_length=1024)),
+ ('current_home', models.CharField(max_length=1024, null=True)),
+ ('shell', models.CharField(default=b'/bin/bash', max_length=1024)),
+ ('current_shell', models.CharField(max_length=1024, null=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEBooleanEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('value', models.BooleanField(default=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEFcontextEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('selinuxtype', models.CharField(max_length=128)),
+ ('current_selinuxtype', models.CharField(max_length=128, null=True)),
+ ('filetype', models.CharField(max_length=16)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEInterfaceEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('selinuxtype', models.CharField(max_length=128)),
+ ('current_selinuxtype', models.CharField(max_length=128, null=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SELoginEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('selinuxuser', models.CharField(max_length=128)),
+ ('current_selinuxuser', models.CharField(max_length=128, null=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEModuleEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('disabled', models.BooleanField(default=False)),
+ ('current_disabled', models.BooleanField(default=False)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SENodeEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('selinuxtype', models.CharField(max_length=128)),
+ ('current_selinuxtype', models.CharField(max_length=128, null=True)),
+ ('proto', models.CharField(max_length=4)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEPermissiveEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEPortEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('selinuxtype', models.CharField(max_length=128)),
+ ('current_selinuxtype', models.CharField(max_length=128, null=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='ServiceEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('target_status', models.CharField(default=b'', max_length=128)),
+ ('current_status', models.CharField(default=b'', max_length=128)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='SEUserEntry',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=128, db_index=True)),
+ ('hash_key', models.BigIntegerField(editable=False, db_index=True)),
+ ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])),
+ ('exists', models.BooleanField(default=True)),
+ ('roles', models.CharField(max_length=128)),
+ ('current_roles', models.CharField(max_length=128, null=True)),
+ ('prefix', models.CharField(max_length=128)),
+ ('current_prefix', models.CharField(max_length=128, null=True)),
+ ],
+ options={
+ 'ordering': ('state', 'name'),
+ 'abstract': False,
+ },
+ bases=(models.Model,),
+ ),
+ migrations.AddField(
+ model_name='pathentry',
+ name='acls',
+ field=models.ManyToManyField(to='Reporting.FileAcl'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='pathentry',
+ name='current_perms',
+ field=models.ForeignKey(related_name='+', to='Reporting.FilePerms'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='pathentry',
+ name='target_perms',
+ field=models.ForeignKey(related_name='+', to='Reporting.FilePerms'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='packages',
+ field=models.ManyToManyField(to='Reporting.PackageEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='paths',
+ field=models.ManyToManyField(to='Reporting.PathEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='posixgroups',
+ field=models.ManyToManyField(to='Reporting.POSIXGroupEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='posixusers',
+ field=models.ManyToManyField(to='Reporting.POSIXUserEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='profile',
+ field=models.ForeignKey(related_name='+', to='Reporting.Group', null=True),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='sebooleans',
+ field=models.ManyToManyField(to='Reporting.SEBooleanEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='sefcontexts',
+ field=models.ManyToManyField(to='Reporting.SEFcontextEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='seinterfaces',
+ field=models.ManyToManyField(to='Reporting.SEInterfaceEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='selogins',
+ field=models.ManyToManyField(to='Reporting.SELoginEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='semodules',
+ field=models.ManyToManyField(to='Reporting.SEModuleEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='senodes',
+ field=models.ManyToManyField(to='Reporting.SENodeEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='sepermissives',
+ field=models.ManyToManyField(to='Reporting.SEPermissiveEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='seports',
+ field=models.ManyToManyField(to='Reporting.SEPortEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='services',
+ field=models.ManyToManyField(to='Reporting.ServiceEntry'),
+ preserve_default=True,
+ ),
+ migrations.AddField(
+ model_name='interaction',
+ name='seusers',
+ field=models.ManyToManyField(to='Reporting.SEUserEntry'),
+ preserve_default=True,
+ ),
+ migrations.AlterUniqueTogether(
+ name='interaction',
+ unique_together=set([('client', 'timestamp')]),
+ ),
+ migrations.AlterUniqueTogether(
+ name='fileperms',
+ unique_together=set([('owner', 'group', 'mode')]),
+ ),
+ migrations.AddField(
+ model_name='client',
+ name='current_interaction',
+ field=models.ForeignKey(related_name='parent_client', blank=True, to='Reporting.Interaction', null=True),
+ preserve_default=True,
+ ),
+ ]
diff --git a/src/lib/Bcfg2/Reporting/migrations/0002_convert_perms_to_mode.py b/src/lib/Bcfg2/Reporting/migrations/0002_convert_perms_to_mode.py
deleted file mode 100644
index 668094c..0000000
--- a/src/lib/Bcfg2/Reporting/migrations/0002_convert_perms_to_mode.py
+++ /dev/null
@@ -1,171 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-from Bcfg2 import settings
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Removing unique constraint on 'FilePerms', fields ['owner', 'perms', 'group']
- db.delete_unique('Reporting_fileperms', ['owner', 'perms', 'group'])
-
- # Renaming field 'FilePerms.perms' to 'FilePerms.mode'
- db.rename_column('Reporting_fileperms', 'perms', 'mode')
-
- if not settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
- # Adding unique constraint on 'FilePerms', fields ['owner', 'group', 'mode']
- db.create_unique('Reporting_fileperms', ['owner', 'group', 'mode'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'FilePerms', fields ['owner', 'group', 'mode']
- db.delete_unique('Reporting_fileperms', ['owner', 'group', 'mode'])
-
- # Renaming field 'FilePerms.mode' to 'FilePerms.perms'
- db.rename_column('Reporting_fileperms', 'mode', 'perms')
-
- if not settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
- # Adding unique constraint on 'FilePerms', fields ['owner', 'perms', 'group']
- db.create_unique('Reporting_fileperms', ['owner', 'perms', 'group'])
-
-
- models = {
- 'Reporting.actionentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
- },
- 'Reporting.bundle': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
- },
- 'Reporting.client': {
- 'Meta': {'object_name': 'Client'},
- 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
- 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.deviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_major': ('django.db.models.fields.IntegerField', [], {}),
- 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
- 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_major': ('django.db.models.fields.IntegerField', [], {}),
- 'target_minor': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.failureentry': {
- 'Meta': {'object_name': 'FailureEntry'},
- 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileacl': {
- 'Meta': {'object_name': 'FileAcl'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileperms': {
- 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.group': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
- 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'Reporting.interaction': {
- 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
- 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
- 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
- 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
- 'good_count': ('django.db.models.fields.IntegerField', [], {}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
- 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
- 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}),
- 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'total_count': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.linkentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
- },
- 'Reporting.packageentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
- 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
- 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
- },
- 'Reporting.pathentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
- 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
- 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
- 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
- },
- 'Reporting.performance': {
- 'Meta': {'object_name': 'Performance'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
- 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
- },
- 'Reporting.serviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
- 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
- }
- }
-
- complete_apps = ['Reporting']
diff --git a/src/lib/Bcfg2/Reporting/migrations/0003_expand_hash_key.py b/src/lib/Bcfg2/Reporting/migrations/0003_expand_hash_key.py
deleted file mode 100644
index 2da1fa7..0000000
--- a/src/lib/Bcfg2/Reporting/migrations/0003_expand_hash_key.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'FailureEntry.hash_key'
- db.alter_column('Reporting_failureentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
-
- # Changing field 'PackageEntry.hash_key'
- db.alter_column('Reporting_packageentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
-
- # Changing field 'ServiceEntry.hash_key'
- db.alter_column('Reporting_serviceentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
-
- # Changing field 'PathEntry.hash_key'
- db.alter_column('Reporting_pathentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
-
- # Changing field 'ActionEntry.hash_key'
- db.alter_column('Reporting_actionentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
-
- def backwards(self, orm):
-
- # Changing field 'FailureEntry.hash_key'
- db.alter_column('Reporting_failureentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
-
- # Changing field 'PackageEntry.hash_key'
- db.alter_column('Reporting_packageentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
-
- # Changing field 'ServiceEntry.hash_key'
- db.alter_column('Reporting_serviceentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
-
- # Changing field 'PathEntry.hash_key'
- db.alter_column('Reporting_pathentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
-
- # Changing field 'ActionEntry.hash_key'
- db.alter_column('Reporting_actionentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
-
- models = {
- 'Reporting.actionentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
- },
- 'Reporting.bundle': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
- },
- 'Reporting.client': {
- 'Meta': {'object_name': 'Client'},
- 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
- 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.deviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_major': ('django.db.models.fields.IntegerField', [], {}),
- 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
- 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_major': ('django.db.models.fields.IntegerField', [], {}),
- 'target_minor': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.failureentry': {
- 'Meta': {'object_name': 'FailureEntry'},
- 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileacl': {
- 'Meta': {'object_name': 'FileAcl'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileperms': {
- 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.group': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
- 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'Reporting.interaction': {
- 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
- 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
- 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
- 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
- 'good_count': ('django.db.models.fields.IntegerField', [], {}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
- 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
- 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}),
- 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'total_count': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.linkentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
- },
- 'Reporting.packageentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
- 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
- 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
- },
- 'Reporting.pathentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
- 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
- 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
- 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
- },
- 'Reporting.performance': {
- 'Meta': {'object_name': 'Performance'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
- 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
- },
- 'Reporting.serviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
- 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
- }
- }
-
- complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/migrations/0004_profile_can_be_null.py b/src/lib/Bcfg2/Reporting/migrations/0004_profile_can_be_null.py
deleted file mode 100644
index 26a053b..0000000
--- a/src/lib/Bcfg2/Reporting/migrations/0004_profile_can_be_null.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'Interaction.profile'
- db.alter_column('Reporting_interaction', 'profile_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['Reporting.Group']))
-
- def backwards(self, orm):
-
- # User chose to not deal with backwards NULL issues for 'Interaction.profile'
- raise RuntimeError("Cannot reverse this migration. 'Interaction.profile' and its values cannot be restored.")
-
- models = {
- 'Reporting.actionentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
- },
- 'Reporting.bundle': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
- },
- 'Reporting.client': {
- 'Meta': {'object_name': 'Client'},
- 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
- 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.deviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_major': ('django.db.models.fields.IntegerField', [], {}),
- 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
- 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_major': ('django.db.models.fields.IntegerField', [], {}),
- 'target_minor': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.failureentry': {
- 'Meta': {'object_name': 'FailureEntry'},
- 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileacl': {
- 'Meta': {'object_name': 'FileAcl'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileperms': {
- 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.group': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
- 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'Reporting.interaction': {
- 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
- 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
- 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
- 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
- 'good_count': ('django.db.models.fields.IntegerField', [], {}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
- 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
- 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['Reporting.Group']"}),
- 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'total_count': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.linkentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
- },
- 'Reporting.packageentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
- 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
- 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
- },
- 'Reporting.pathentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
- 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
- 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
- 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
- },
- 'Reporting.performance': {
- 'Meta': {'object_name': 'Performance'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
- 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
- },
- 'Reporting.serviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
- 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
- }
- }
-
- complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/migrations/0005_add_selinux_entry_support.py b/src/lib/Bcfg2/Reporting/migrations/0005_add_selinux_entry_support.py
deleted file mode 100644
index d5f5d80..0000000
--- a/src/lib/Bcfg2/Reporting/migrations/0005_add_selinux_entry_support.py
+++ /dev/null
@@ -1,485 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'SELoginEntry'
- db.create_table('Reporting_seloginentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('selinuxuser', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_selinuxuser', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ))
- db.send_create_signal('Reporting', ['SELoginEntry'])
-
- # Adding model 'SEUserEntry'
- db.create_table('Reporting_seuserentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('roles', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_roles', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ('prefix', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_prefix', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ))
- db.send_create_signal('Reporting', ['SEUserEntry'])
-
- # Adding model 'SEBooleanEntry'
- db.create_table('Reporting_sebooleanentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('value', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ))
- db.send_create_signal('Reporting', ['SEBooleanEntry'])
-
- # Adding model 'SENodeEntry'
- db.create_table('Reporting_senodeentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ('proto', self.gf('django.db.models.fields.CharField')(max_length=4)),
- ))
- db.send_create_signal('Reporting', ['SENodeEntry'])
-
- # Adding model 'SEFcontextEntry'
- db.create_table('Reporting_sefcontextentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ('filetype', self.gf('django.db.models.fields.CharField')(max_length=16)),
- ))
- db.send_create_signal('Reporting', ['SEFcontextEntry'])
-
- # Adding model 'SEInterfaceEntry'
- db.create_table('Reporting_seinterfaceentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ))
- db.send_create_signal('Reporting', ['SEInterfaceEntry'])
-
- # Adding model 'SEPermissiveEntry'
- db.create_table('Reporting_sepermissiveentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ))
- db.send_create_signal('Reporting', ['SEPermissiveEntry'])
-
- # Adding model 'SEModuleEntry'
- db.create_table('Reporting_semoduleentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('disabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('current_disabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ))
- db.send_create_signal('Reporting', ['SEModuleEntry'])
-
- # Adding model 'SEPortEntry'
- db.create_table('Reporting_seportentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
- ))
- db.send_create_signal('Reporting', ['SEPortEntry'])
-
- # Adding M2M table for field sebooleans on 'Interaction'
- db.create_table('Reporting_interaction_sebooleans', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('sebooleanentry', models.ForeignKey(orm['Reporting.sebooleanentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_sebooleans', ['interaction_id', 'sebooleanentry_id'])
-
- # Adding M2M table for field seports on 'Interaction'
- db.create_table('Reporting_interaction_seports', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('seportentry', models.ForeignKey(orm['Reporting.seportentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_seports', ['interaction_id', 'seportentry_id'])
-
- # Adding M2M table for field sefcontexts on 'Interaction'
- db.create_table('Reporting_interaction_sefcontexts', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('sefcontextentry', models.ForeignKey(orm['Reporting.sefcontextentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_sefcontexts', ['interaction_id', 'sefcontextentry_id'])
-
- # Adding M2M table for field senodes on 'Interaction'
- db.create_table('Reporting_interaction_senodes', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('senodeentry', models.ForeignKey(orm['Reporting.senodeentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_senodes', ['interaction_id', 'senodeentry_id'])
-
- # Adding M2M table for field selogins on 'Interaction'
- db.create_table('Reporting_interaction_selogins', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('seloginentry', models.ForeignKey(orm['Reporting.seloginentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_selogins', ['interaction_id', 'seloginentry_id'])
-
- # Adding M2M table for field seusers on 'Interaction'
- db.create_table('Reporting_interaction_seusers', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('seuserentry', models.ForeignKey(orm['Reporting.seuserentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_seusers', ['interaction_id', 'seuserentry_id'])
-
- # Adding M2M table for field seinterfaces on 'Interaction'
- db.create_table('Reporting_interaction_seinterfaces', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('seinterfaceentry', models.ForeignKey(orm['Reporting.seinterfaceentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_seinterfaces', ['interaction_id', 'seinterfaceentry_id'])
-
- # Adding M2M table for field sepermissives on 'Interaction'
- db.create_table('Reporting_interaction_sepermissives', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('sepermissiveentry', models.ForeignKey(orm['Reporting.sepermissiveentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_sepermissives', ['interaction_id', 'sepermissiveentry_id'])
-
- # Adding M2M table for field semodules on 'Interaction'
- db.create_table('Reporting_interaction_semodules', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('semoduleentry', models.ForeignKey(orm['Reporting.semoduleentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_semodules', ['interaction_id', 'semoduleentry_id'])
-
-
- def backwards(self, orm):
- # Deleting model 'SELoginEntry'
- db.delete_table('Reporting_seloginentry')
-
- # Deleting model 'SEUserEntry'
- db.delete_table('Reporting_seuserentry')
-
- # Deleting model 'SEBooleanEntry'
- db.delete_table('Reporting_sebooleanentry')
-
- # Deleting model 'SENodeEntry'
- db.delete_table('Reporting_senodeentry')
-
- # Deleting model 'SEFcontextEntry'
- db.delete_table('Reporting_sefcontextentry')
-
- # Deleting model 'SEInterfaceEntry'
- db.delete_table('Reporting_seinterfaceentry')
-
- # Deleting model 'SEPermissiveEntry'
- db.delete_table('Reporting_sepermissiveentry')
-
- # Deleting model 'SEModuleEntry'
- db.delete_table('Reporting_semoduleentry')
-
- # Deleting model 'SEPortEntry'
- db.delete_table('Reporting_seportentry')
-
- # Removing M2M table for field sebooleans on 'Interaction'
- db.delete_table('Reporting_interaction_sebooleans')
-
- # Removing M2M table for field seports on 'Interaction'
- db.delete_table('Reporting_interaction_seports')
-
- # Removing M2M table for field sefcontexts on 'Interaction'
- db.delete_table('Reporting_interaction_sefcontexts')
-
- # Removing M2M table for field senodes on 'Interaction'
- db.delete_table('Reporting_interaction_senodes')
-
- # Removing M2M table for field selogins on 'Interaction'
- db.delete_table('Reporting_interaction_selogins')
-
- # Removing M2M table for field seusers on 'Interaction'
- db.delete_table('Reporting_interaction_seusers')
-
- # Removing M2M table for field seinterfaces on 'Interaction'
- db.delete_table('Reporting_interaction_seinterfaces')
-
- # Removing M2M table for field sepermissives on 'Interaction'
- db.delete_table('Reporting_interaction_sepermissives')
-
- # Removing M2M table for field semodules on 'Interaction'
- db.delete_table('Reporting_interaction_semodules')
-
-
- models = {
- 'Reporting.actionentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
- },
- 'Reporting.bundle': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
- },
- 'Reporting.client': {
- 'Meta': {'object_name': 'Client'},
- 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
- 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.deviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_major': ('django.db.models.fields.IntegerField', [], {}),
- 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
- 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_major': ('django.db.models.fields.IntegerField', [], {}),
- 'target_minor': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.failureentry': {
- 'Meta': {'object_name': 'FailureEntry'},
- 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileacl': {
- 'Meta': {'object_name': 'FileAcl'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileperms': {
- 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.group': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
- 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'Reporting.interaction': {
- 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
- 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
- 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
- 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
- 'good_count': ('django.db.models.fields.IntegerField', [], {}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
- 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
- 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['Reporting.Group']"}),
- 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'sebooleans': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEBooleanEntry']", 'symmetrical': 'False'}),
- 'sefcontexts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEFcontextEntry']", 'symmetrical': 'False'}),
- 'seinterfaces': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEInterfaceEntry']", 'symmetrical': 'False'}),
- 'selogins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SELoginEntry']", 'symmetrical': 'False'}),
- 'semodules': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEModuleEntry']", 'symmetrical': 'False'}),
- 'senodes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SENodeEntry']", 'symmetrical': 'False'}),
- 'sepermissives': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPermissiveEntry']", 'symmetrical': 'False'}),
- 'seports': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPortEntry']", 'symmetrical': 'False'}),
- 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
- 'seusers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEUserEntry']", 'symmetrical': 'False'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'total_count': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.linkentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
- },
- 'Reporting.packageentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
- 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
- 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
- },
- 'Reporting.pathentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
- 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
- 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
- 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
- },
- 'Reporting.performance': {
- 'Meta': {'object_name': 'Performance'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
- 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
- },
- 'Reporting.sebooleanentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEBooleanEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'value': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
- },
- 'Reporting.sefcontextentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEFcontextEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'filetype': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.seinterfaceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEInterfaceEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.seloginentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SELoginEntry'},
- 'current_selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.semoduleentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEModuleEntry'},
- 'current_disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.senodeentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SENodeEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'proto': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.sepermissiveentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPermissiveEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.seportentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPortEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.serviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
- 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
- },
- 'Reporting.seuserentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEUserEntry'},
- 'current_prefix': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'current_roles': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'prefix': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'roles': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/migrations/0006_add_user_group_entry_support.py b/src/lib/Bcfg2/Reporting/migrations/0006_add_user_group_entry_support.py
deleted file mode 100644
index d86e663..0000000
--- a/src/lib/Bcfg2/Reporting/migrations/0006_add_user_group_entry_support.py
+++ /dev/null
@@ -1,340 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'POSIXGroupEntry'
- db.create_table('Reporting_posixgroupentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('gid', self.gf('django.db.models.fields.IntegerField')(null=True)),
- ('current_gid', self.gf('django.db.models.fields.IntegerField')(null=True)),
- ))
- db.send_create_signal('Reporting', ['POSIXGroupEntry'])
-
- # Adding model 'POSIXUserEntry'
- db.create_table('Reporting_posixuserentry', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
- ('state', self.gf('django.db.models.fields.IntegerField')()),
- ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('uid', self.gf('django.db.models.fields.IntegerField')(null=True)),
- ('current_uid', self.gf('django.db.models.fields.IntegerField')(null=True)),
- ('group', self.gf('django.db.models.fields.CharField')(max_length=64)),
- ('current_group', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)),
- ('gecos', self.gf('django.db.models.fields.CharField')(max_length=1024)),
- ('current_gecos', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True)),
- ('home', self.gf('django.db.models.fields.CharField')(max_length=1024)),
- ('current_home', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True)),
- ('shell', self.gf('django.db.models.fields.CharField')(default='/bin/bash', max_length=1024)),
- ('current_shell', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True)),
- ))
- db.send_create_signal('Reporting', ['POSIXUserEntry'])
-
- # Adding M2M table for field posixusers on 'Interaction'
- db.create_table('Reporting_interaction_posixusers', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('posixuserentry', models.ForeignKey(orm['Reporting.posixuserentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_posixusers', ['interaction_id', 'posixuserentry_id'])
-
- # Adding M2M table for field posixgroups on 'Interaction'
- db.create_table('Reporting_interaction_posixgroups', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
- ('posixgroupentry', models.ForeignKey(orm['Reporting.posixgroupentry'], null=False))
- ))
- db.create_unique('Reporting_interaction_posixgroups', ['interaction_id', 'posixgroupentry_id'])
-
-
- def backwards(self, orm):
- # Deleting model 'POSIXGroupEntry'
- db.delete_table('Reporting_posixgroupentry')
-
- # Deleting model 'POSIXUserEntry'
- db.delete_table('Reporting_posixuserentry')
-
- # Removing M2M table for field posixusers on 'Interaction'
- db.delete_table('Reporting_interaction_posixusers')
-
- # Removing M2M table for field posixgroups on 'Interaction'
- db.delete_table('Reporting_interaction_posixgroups')
-
-
- models = {
- 'Reporting.actionentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
- },
- 'Reporting.bundle': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
- },
- 'Reporting.client': {
- 'Meta': {'object_name': 'Client'},
- 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
- 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.deviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_major': ('django.db.models.fields.IntegerField', [], {}),
- 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
- 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_major': ('django.db.models.fields.IntegerField', [], {}),
- 'target_minor': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.failureentry': {
- 'Meta': {'object_name': 'FailureEntry'},
- 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileacl': {
- 'Meta': {'object_name': 'FileAcl'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
- },
- 'Reporting.fileperms': {
- 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
- },
- 'Reporting.group': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
- 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'Reporting.interaction': {
- 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
- 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
- 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
- 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
- 'good_count': ('django.db.models.fields.IntegerField', [], {}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
- 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
- 'posixgroups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.POSIXGroupEntry']", 'symmetrical': 'False'}),
- 'posixusers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.POSIXUserEntry']", 'symmetrical': 'False'}),
- 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['Reporting.Group']"}),
- 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'sebooleans': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEBooleanEntry']", 'symmetrical': 'False'}),
- 'sefcontexts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEFcontextEntry']", 'symmetrical': 'False'}),
- 'seinterfaces': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEInterfaceEntry']", 'symmetrical': 'False'}),
- 'selogins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SELoginEntry']", 'symmetrical': 'False'}),
- 'semodules': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEModuleEntry']", 'symmetrical': 'False'}),
- 'senodes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SENodeEntry']", 'symmetrical': 'False'}),
- 'sepermissives': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPermissiveEntry']", 'symmetrical': 'False'}),
- 'seports': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPortEntry']", 'symmetrical': 'False'}),
- 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
- 'seusers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEUserEntry']", 'symmetrical': 'False'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'total_count': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.linkentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
- 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
- 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
- },
- 'Reporting.packageentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
- 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
- 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
- },
- 'Reporting.pathentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
- 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
- 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
- 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
- },
- 'Reporting.performance': {
- 'Meta': {'object_name': 'Performance'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
- 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
- },
- 'Reporting.posixgroupentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'POSIXGroupEntry'},
- 'current_gid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'gid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.posixuserentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'POSIXUserEntry'},
- 'current_gecos': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
- 'current_group': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}),
- 'current_home': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
- 'current_shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
- 'current_uid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'gecos': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'group': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'home': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'shell': ('django.db.models.fields.CharField', [], {'default': "'/bin/bash'", 'max_length': '1024'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'uid': ('django.db.models.fields.IntegerField', [], {'null': 'True'})
- },
- 'Reporting.sebooleanentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEBooleanEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'value': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
- },
- 'Reporting.sefcontextentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEFcontextEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'filetype': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.seinterfaceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEInterfaceEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.seloginentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SELoginEntry'},
- 'current_selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.semoduleentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEModuleEntry'},
- 'current_disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.senodeentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SENodeEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'proto': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.sepermissiveentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPermissiveEntry'},
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.seportentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPortEntry'},
- 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- },
- 'Reporting.serviceentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
- 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.IntegerField', [], {}),
- 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
- },
- 'Reporting.seuserentry': {
- 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEUserEntry'},
- 'current_prefix': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'current_roles': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
- 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'prefix': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'roles': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'state': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py b/src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py
new file mode 100644
index 0000000..609290e
--- /dev/null
+++ b/src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py
@@ -0,0 +1,465 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'Client'
+ db.create_table('Reporting_client', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('creation', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_interaction', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='parent_client', null=True, to=orm['Reporting.Interaction'])),
+ ('expiration', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('Reporting', ['Client'])
+
+ # Adding model 'Interaction'
+ db.create_table('Reporting_interaction', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('client', self.gf('django.db.models.fields.related.ForeignKey')(related_name='interactions', to=orm['Reporting.Client'])),
+ ('timestamp', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.CharField')(max_length=32)),
+ ('repo_rev_code', self.gf('django.db.models.fields.CharField')(max_length=64)),
+ ('server', self.gf('django.db.models.fields.CharField')(max_length=256)),
+ ('good_count', self.gf('django.db.models.fields.IntegerField')()),
+ ('total_count', self.gf('django.db.models.fields.IntegerField')()),
+ ('bad_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
+ ('modified_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
+ ('extra_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
+ ('profile', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.Group'])),
+ ))
+ db.send_create_signal('Reporting', ['Interaction'])
+
+ # Adding unique constraint on 'Interaction', fields ['client', 'timestamp']
+ db.create_unique('Reporting_interaction', ['client_id', 'timestamp'])
+
+ # Adding M2M table for field actions on 'Interaction'
+ db.create_table('Reporting_interaction_actions', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('actionentry', models.ForeignKey(orm['Reporting.actionentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_actions', ['interaction_id', 'actionentry_id'])
+
+ # Adding M2M table for field packages on 'Interaction'
+ db.create_table('Reporting_interaction_packages', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('packageentry', models.ForeignKey(orm['Reporting.packageentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_packages', ['interaction_id', 'packageentry_id'])
+
+ # Adding M2M table for field paths on 'Interaction'
+ db.create_table('Reporting_interaction_paths', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_paths', ['interaction_id', 'pathentry_id'])
+
+ # Adding M2M table for field services on 'Interaction'
+ db.create_table('Reporting_interaction_services', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('serviceentry', models.ForeignKey(orm['Reporting.serviceentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_services', ['interaction_id', 'serviceentry_id'])
+
+ # Adding M2M table for field failures on 'Interaction'
+ db.create_table('Reporting_interaction_failures', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('failureentry', models.ForeignKey(orm['Reporting.failureentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_failures', ['interaction_id', 'failureentry_id'])
+
+ # Adding M2M table for field groups on 'Interaction'
+ db.create_table('Reporting_interaction_groups', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('group', models.ForeignKey(orm['Reporting.group'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_groups', ['interaction_id', 'group_id'])
+
+ # Adding M2M table for field bundles on 'Interaction'
+ db.create_table('Reporting_interaction_bundles', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_bundles', ['interaction_id', 'bundle_id'])
+
+ # Adding model 'Performance'
+ db.create_table('Reporting_performance', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('interaction', self.gf('django.db.models.fields.related.ForeignKey')(related_name='performance_items', to=orm['Reporting.Interaction'])),
+ ('metric', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('value', self.gf('django.db.models.fields.DecimalField')(max_digits=32, decimal_places=16)),
+ ))
+ db.send_create_signal('Reporting', ['Performance'])
+
+ # Adding model 'Group'
+ db.create_table('Reporting_group', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
+ ('profile', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('public', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('category', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
+ ('comment', self.gf('django.db.models.fields.TextField')(blank=True)),
+ ))
+ db.send_create_signal('Reporting', ['Group'])
+
+ # Adding M2M table for field groups on 'Group'
+ db.create_table('Reporting_group_groups', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('from_group', models.ForeignKey(orm['Reporting.group'], null=False)),
+ ('to_group', models.ForeignKey(orm['Reporting.group'], null=False))
+ ))
+ db.create_unique('Reporting_group_groups', ['from_group_id', 'to_group_id'])
+
+ # Adding M2M table for field bundles on 'Group'
+ db.create_table('Reporting_group_bundles', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('group', models.ForeignKey(orm['Reporting.group'], null=False)),
+ ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False))
+ ))
+ db.create_unique('Reporting_group_bundles', ['group_id', 'bundle_id'])
+
+ # Adding model 'Bundle'
+ db.create_table('Reporting_bundle', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
+ ))
+ db.send_create_signal('Reporting', ['Bundle'])
+
+ # Adding model 'FilePerms'
+ db.create_table('Reporting_fileperms', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('owner', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('group', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('perms', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ))
+ db.send_create_signal('Reporting', ['FilePerms'])
+
+ # Adding unique constraint on 'FilePerms', fields ['owner', 'group', 'perms']
+ db.create_unique('Reporting_fileperms', ['owner', 'group', 'perms'])
+
+ # Adding model 'FileAcl'
+ db.create_table('Reporting_fileacl', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ))
+ db.send_create_signal('Reporting', ['FileAcl'])
+
+ # Adding model 'FailureEntry'
+ db.create_table('Reporting_failureentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ('entry_type', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('message', self.gf('django.db.models.fields.TextField')()),
+ ))
+ db.send_create_signal('Reporting', ['FailureEntry'])
+
+ # Adding model 'ActionEntry'
+ db.create_table('Reporting_actionentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('status', self.gf('django.db.models.fields.CharField')(default='check', max_length=128)),
+ ('output', self.gf('django.db.models.fields.IntegerField')(default=0)),
+ ))
+ db.send_create_signal('Reporting', ['ActionEntry'])
+
+ # Adding model 'PackageEntry'
+ db.create_table('Reporting_packageentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('target_version', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)),
+ ('current_version', self.gf('django.db.models.fields.CharField')(max_length=1024)),
+ ('verification_details', self.gf('django.db.models.fields.TextField')(default='')),
+ ))
+ db.send_create_signal('Reporting', ['PackageEntry'])
+
+ # Adding model 'PathEntry'
+ db.create_table('Reporting_pathentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('path_type', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('target_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])),
+ ('current_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])),
+ ('detail_type', self.gf('django.db.models.fields.IntegerField')(default=0)),
+ ('details', self.gf('django.db.models.fields.TextField')(default='')),
+ ))
+ db.send_create_signal('Reporting', ['PathEntry'])
+
+ # Adding M2M table for field acls on 'PathEntry'
+ db.create_table('Reporting_pathentry_acls', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False)),
+ ('fileacl', models.ForeignKey(orm['Reporting.fileacl'], null=False))
+ ))
+ db.create_unique('Reporting_pathentry_acls', ['pathentry_id', 'fileacl_id'])
+
+ # Adding model 'LinkEntry'
+ db.create_table('Reporting_linkentry', (
+ ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)),
+ ('target_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
+ ('current_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
+ ))
+ db.send_create_signal('Reporting', ['LinkEntry'])
+
+ # Adding model 'DeviceEntry'
+ db.create_table('Reporting_deviceentry', (
+ ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)),
+ ('device_type', self.gf('django.db.models.fields.CharField')(max_length=16)),
+ ('target_major', self.gf('django.db.models.fields.IntegerField')()),
+ ('target_minor', self.gf('django.db.models.fields.IntegerField')()),
+ ('current_major', self.gf('django.db.models.fields.IntegerField')()),
+ ('current_minor', self.gf('django.db.models.fields.IntegerField')()),
+ ))
+ db.send_create_signal('Reporting', ['DeviceEntry'])
+
+ # Adding model 'ServiceEntry'
+ db.create_table('Reporting_serviceentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('target_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)),
+ ('current_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)),
+ ))
+ db.send_create_signal('Reporting', ['ServiceEntry'])
+
+
+ def backwards(self, orm):
+ # Removing unique constraint on 'FilePerms', fields ['owner', 'group', 'perms']
+ db.delete_unique('Reporting_fileperms', ['owner', 'group', 'perms'])
+
+ # Removing unique constraint on 'Interaction', fields ['client', 'timestamp']
+ db.delete_unique('Reporting_interaction', ['client_id', 'timestamp'])
+
+ # Deleting model 'Client'
+ db.delete_table('Reporting_client')
+
+ # Deleting model 'Interaction'
+ db.delete_table('Reporting_interaction')
+
+ # Removing M2M table for field actions on 'Interaction'
+ db.delete_table('Reporting_interaction_actions')
+
+ # Removing M2M table for field packages on 'Interaction'
+ db.delete_table('Reporting_interaction_packages')
+
+ # Removing M2M table for field paths on 'Interaction'
+ db.delete_table('Reporting_interaction_paths')
+
+ # Removing M2M table for field services on 'Interaction'
+ db.delete_table('Reporting_interaction_services')
+
+ # Removing M2M table for field failures on 'Interaction'
+ db.delete_table('Reporting_interaction_failures')
+
+ # Removing M2M table for field groups on 'Interaction'
+ db.delete_table('Reporting_interaction_groups')
+
+ # Removing M2M table for field bundles on 'Interaction'
+ db.delete_table('Reporting_interaction_bundles')
+
+ # Deleting model 'Performance'
+ db.delete_table('Reporting_performance')
+
+ # Deleting model 'Group'
+ db.delete_table('Reporting_group')
+
+ # Removing M2M table for field groups on 'Group'
+ db.delete_table('Reporting_group_groups')
+
+ # Removing M2M table for field bundles on 'Group'
+ db.delete_table('Reporting_group_bundles')
+
+ # Deleting model 'Bundle'
+ db.delete_table('Reporting_bundle')
+
+ # Deleting model 'FilePerms'
+ db.delete_table('Reporting_fileperms')
+
+ # Deleting model 'FileAcl'
+ db.delete_table('Reporting_fileacl')
+
+ # Deleting model 'FailureEntry'
+ db.delete_table('Reporting_failureentry')
+
+ # Deleting model 'ActionEntry'
+ db.delete_table('Reporting_actionentry')
+
+ # Deleting model 'PackageEntry'
+ db.delete_table('Reporting_packageentry')
+
+ # Deleting model 'PathEntry'
+ db.delete_table('Reporting_pathentry')
+
+ # Removing M2M table for field acls on 'PathEntry'
+ db.delete_table('Reporting_pathentry_acls')
+
+ # Deleting model 'LinkEntry'
+ db.delete_table('Reporting_linkentry')
+
+ # Deleting model 'DeviceEntry'
+ db.delete_table('Reporting_deviceentry')
+
+ # Deleting model 'ServiceEntry'
+ db.delete_table('Reporting_serviceentry')
+
+
+ models = {
+ 'Reporting.actionentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
+ },
+ 'Reporting.bundle': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
+ },
+ 'Reporting.client': {
+ 'Meta': {'object_name': 'Client'},
+ 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
+ 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.deviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
+ 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_minor': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.failureentry': {
+ 'Meta': {'object_name': 'FailureEntry'},
+ 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'message': ('django.db.models.fields.TextField', [], {}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileacl': {
+ 'Meta': {'object_name': 'FileAcl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileperms': {
+ 'Meta': {'unique_together': "(('owner', 'group', 'perms'),)", 'object_name': 'FilePerms'},
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'perms': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.group': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'Reporting.interaction': {
+ 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
+ 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
+ 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
+ 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
+ 'good_count': ('django.db.models.fields.IntegerField', [], {}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
+ 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}),
+ 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'total_count': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.linkentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
+ },
+ 'Reporting.packageentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
+ 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
+ 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
+ },
+ 'Reporting.pathentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
+ 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
+ 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
+ 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
+ },
+ 'Reporting.performance': {
+ 'Meta': {'object_name': 'Performance'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
+ 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
+ },
+ 'Reporting.serviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
+ 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
+ }
+ }
+
+ complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0002_convert_perms_to_mode.py b/src/lib/Bcfg2/Reporting/south_migrations/0002_convert_perms_to_mode.py
new file mode 100644
index 0000000..668094c
--- /dev/null
+++ b/src/lib/Bcfg2/Reporting/south_migrations/0002_convert_perms_to_mode.py
@@ -0,0 +1,171 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+from Bcfg2 import settings
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Removing unique constraint on 'FilePerms', fields ['owner', 'perms', 'group']
+ db.delete_unique('Reporting_fileperms', ['owner', 'perms', 'group'])
+
+ # Renaming field 'FilePerms.perms' to 'FilePerms.mode'
+ db.rename_column('Reporting_fileperms', 'perms', 'mode')
+
+ if not settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
+ # Adding unique constraint on 'FilePerms', fields ['owner', 'group', 'mode']
+ db.create_unique('Reporting_fileperms', ['owner', 'group', 'mode'])
+
+
+ def backwards(self, orm):
+ # Removing unique constraint on 'FilePerms', fields ['owner', 'group', 'mode']
+ db.delete_unique('Reporting_fileperms', ['owner', 'group', 'mode'])
+
+ # Renaming field 'FilePerms.mode' to 'FilePerms.perms'
+ db.rename_column('Reporting_fileperms', 'mode', 'perms')
+
+ if not settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
+ # Adding unique constraint on 'FilePerms', fields ['owner', 'perms', 'group']
+ db.create_unique('Reporting_fileperms', ['owner', 'perms', 'group'])
+
+
+ models = {
+ 'Reporting.actionentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
+ },
+ 'Reporting.bundle': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
+ },
+ 'Reporting.client': {
+ 'Meta': {'object_name': 'Client'},
+ 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
+ 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.deviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
+ 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_minor': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.failureentry': {
+ 'Meta': {'object_name': 'FailureEntry'},
+ 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'message': ('django.db.models.fields.TextField', [], {}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileacl': {
+ 'Meta': {'object_name': 'FileAcl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileperms': {
+ 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.group': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'Reporting.interaction': {
+ 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
+ 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
+ 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
+ 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
+ 'good_count': ('django.db.models.fields.IntegerField', [], {}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
+ 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}),
+ 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'total_count': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.linkentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
+ },
+ 'Reporting.packageentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
+ 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
+ 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
+ },
+ 'Reporting.pathentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
+ 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
+ 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
+ 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
+ },
+ 'Reporting.performance': {
+ 'Meta': {'object_name': 'Performance'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
+ 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
+ },
+ 'Reporting.serviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
+ 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
+ }
+ }
+
+ complete_apps = ['Reporting']
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0003_expand_hash_key.py b/src/lib/Bcfg2/Reporting/south_migrations/0003_expand_hash_key.py
new file mode 100644
index 0000000..2da1fa7
--- /dev/null
+++ b/src/lib/Bcfg2/Reporting/south_migrations/0003_expand_hash_key.py
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Changing field 'FailureEntry.hash_key'
+ db.alter_column('Reporting_failureentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
+
+ # Changing field 'PackageEntry.hash_key'
+ db.alter_column('Reporting_packageentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
+
+ # Changing field 'ServiceEntry.hash_key'
+ db.alter_column('Reporting_serviceentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
+
+ # Changing field 'PathEntry.hash_key'
+ db.alter_column('Reporting_pathentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
+
+ # Changing field 'ActionEntry.hash_key'
+ db.alter_column('Reporting_actionentry', 'hash_key', self.gf('django.db.models.fields.BigIntegerField')())
+
+ def backwards(self, orm):
+
+ # Changing field 'FailureEntry.hash_key'
+ db.alter_column('Reporting_failureentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
+
+ # Changing field 'PackageEntry.hash_key'
+ db.alter_column('Reporting_packageentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
+
+ # Changing field 'ServiceEntry.hash_key'
+ db.alter_column('Reporting_serviceentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
+
+ # Changing field 'PathEntry.hash_key'
+ db.alter_column('Reporting_pathentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
+
+ # Changing field 'ActionEntry.hash_key'
+ db.alter_column('Reporting_actionentry', 'hash_key', self.gf('django.db.models.fields.IntegerField')())
+
+ models = {
+ 'Reporting.actionentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
+ },
+ 'Reporting.bundle': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
+ },
+ 'Reporting.client': {
+ 'Meta': {'object_name': 'Client'},
+ 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
+ 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.deviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
+ 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_minor': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.failureentry': {
+ 'Meta': {'object_name': 'FailureEntry'},
+ 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'message': ('django.db.models.fields.TextField', [], {}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileacl': {
+ 'Meta': {'object_name': 'FileAcl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileperms': {
+ 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.group': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'Reporting.interaction': {
+ 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
+ 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
+ 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
+ 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
+ 'good_count': ('django.db.models.fields.IntegerField', [], {}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
+ 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}),
+ 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'total_count': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.linkentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
+ },
+ 'Reporting.packageentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
+ 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
+ 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
+ },
+ 'Reporting.pathentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
+ 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
+ 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
+ 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
+ },
+ 'Reporting.performance': {
+ 'Meta': {'object_name': 'Performance'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
+ 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
+ },
+ 'Reporting.serviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
+ 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
+ }
+ }
+
+ complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0004_profile_can_be_null.py b/src/lib/Bcfg2/Reporting/south_migrations/0004_profile_can_be_null.py
new file mode 100644
index 0000000..26a053b
--- /dev/null
+++ b/src/lib/Bcfg2/Reporting/south_migrations/0004_profile_can_be_null.py
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Changing field 'Interaction.profile'
+ db.alter_column('Reporting_interaction', 'profile_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['Reporting.Group']))
+
+ def backwards(self, orm):
+
+ # User chose to not deal with backwards NULL issues for 'Interaction.profile'
+ raise RuntimeError("Cannot reverse this migration. 'Interaction.profile' and its values cannot be restored.")
+
+ models = {
+ 'Reporting.actionentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
+ },
+ 'Reporting.bundle': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
+ },
+ 'Reporting.client': {
+ 'Meta': {'object_name': 'Client'},
+ 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
+ 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.deviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
+ 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_minor': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.failureentry': {
+ 'Meta': {'object_name': 'FailureEntry'},
+ 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'message': ('django.db.models.fields.TextField', [], {}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileacl': {
+ 'Meta': {'object_name': 'FileAcl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileperms': {
+ 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.group': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'Reporting.interaction': {
+ 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
+ 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
+ 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
+ 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
+ 'good_count': ('django.db.models.fields.IntegerField', [], {}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
+ 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['Reporting.Group']"}),
+ 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'total_count': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.linkentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
+ },
+ 'Reporting.packageentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
+ 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
+ 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
+ },
+ 'Reporting.pathentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
+ 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
+ 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
+ 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
+ },
+ 'Reporting.performance': {
+ 'Meta': {'object_name': 'Performance'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
+ 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
+ },
+ 'Reporting.serviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
+ 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
+ }
+ }
+
+ complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0005_add_selinux_entry_support.py b/src/lib/Bcfg2/Reporting/south_migrations/0005_add_selinux_entry_support.py
new file mode 100644
index 0000000..d5f5d80
--- /dev/null
+++ b/src/lib/Bcfg2/Reporting/south_migrations/0005_add_selinux_entry_support.py
@@ -0,0 +1,485 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'SELoginEntry'
+ db.create_table('Reporting_seloginentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('selinuxuser', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_selinuxuser', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ))
+ db.send_create_signal('Reporting', ['SELoginEntry'])
+
+ # Adding model 'SEUserEntry'
+ db.create_table('Reporting_seuserentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('roles', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_roles', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ('prefix', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_prefix', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ))
+ db.send_create_signal('Reporting', ['SEUserEntry'])
+
+ # Adding model 'SEBooleanEntry'
+ db.create_table('Reporting_sebooleanentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('value', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ))
+ db.send_create_signal('Reporting', ['SEBooleanEntry'])
+
+ # Adding model 'SENodeEntry'
+ db.create_table('Reporting_senodeentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ('proto', self.gf('django.db.models.fields.CharField')(max_length=4)),
+ ))
+ db.send_create_signal('Reporting', ['SENodeEntry'])
+
+ # Adding model 'SEFcontextEntry'
+ db.create_table('Reporting_sefcontextentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ('filetype', self.gf('django.db.models.fields.CharField')(max_length=16)),
+ ))
+ db.send_create_signal('Reporting', ['SEFcontextEntry'])
+
+ # Adding model 'SEInterfaceEntry'
+ db.create_table('Reporting_seinterfaceentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ))
+ db.send_create_signal('Reporting', ['SEInterfaceEntry'])
+
+ # Adding model 'SEPermissiveEntry'
+ db.create_table('Reporting_sepermissiveentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ))
+ db.send_create_signal('Reporting', ['SEPermissiveEntry'])
+
+ # Adding model 'SEModuleEntry'
+ db.create_table('Reporting_semoduleentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('disabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('current_disabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ))
+ db.send_create_signal('Reporting', ['SEModuleEntry'])
+
+ # Adding model 'SEPortEntry'
+ db.create_table('Reporting_seportentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('current_selinuxtype', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),
+ ))
+ db.send_create_signal('Reporting', ['SEPortEntry'])
+
+ # Adding M2M table for field sebooleans on 'Interaction'
+ db.create_table('Reporting_interaction_sebooleans', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('sebooleanentry', models.ForeignKey(orm['Reporting.sebooleanentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_sebooleans', ['interaction_id', 'sebooleanentry_id'])
+
+ # Adding M2M table for field seports on 'Interaction'
+ db.create_table('Reporting_interaction_seports', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('seportentry', models.ForeignKey(orm['Reporting.seportentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_seports', ['interaction_id', 'seportentry_id'])
+
+ # Adding M2M table for field sefcontexts on 'Interaction'
+ db.create_table('Reporting_interaction_sefcontexts', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('sefcontextentry', models.ForeignKey(orm['Reporting.sefcontextentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_sefcontexts', ['interaction_id', 'sefcontextentry_id'])
+
+ # Adding M2M table for field senodes on 'Interaction'
+ db.create_table('Reporting_interaction_senodes', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('senodeentry', models.ForeignKey(orm['Reporting.senodeentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_senodes', ['interaction_id', 'senodeentry_id'])
+
+ # Adding M2M table for field selogins on 'Interaction'
+ db.create_table('Reporting_interaction_selogins', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('seloginentry', models.ForeignKey(orm['Reporting.seloginentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_selogins', ['interaction_id', 'seloginentry_id'])
+
+ # Adding M2M table for field seusers on 'Interaction'
+ db.create_table('Reporting_interaction_seusers', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('seuserentry', models.ForeignKey(orm['Reporting.seuserentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_seusers', ['interaction_id', 'seuserentry_id'])
+
+ # Adding M2M table for field seinterfaces on 'Interaction'
+ db.create_table('Reporting_interaction_seinterfaces', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('seinterfaceentry', models.ForeignKey(orm['Reporting.seinterfaceentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_seinterfaces', ['interaction_id', 'seinterfaceentry_id'])
+
+ # Adding M2M table for field sepermissives on 'Interaction'
+ db.create_table('Reporting_interaction_sepermissives', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('sepermissiveentry', models.ForeignKey(orm['Reporting.sepermissiveentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_sepermissives', ['interaction_id', 'sepermissiveentry_id'])
+
+ # Adding M2M table for field semodules on 'Interaction'
+ db.create_table('Reporting_interaction_semodules', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('semoduleentry', models.ForeignKey(orm['Reporting.semoduleentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_semodules', ['interaction_id', 'semoduleentry_id'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'SELoginEntry'
+ db.delete_table('Reporting_seloginentry')
+
+ # Deleting model 'SEUserEntry'
+ db.delete_table('Reporting_seuserentry')
+
+ # Deleting model 'SEBooleanEntry'
+ db.delete_table('Reporting_sebooleanentry')
+
+ # Deleting model 'SENodeEntry'
+ db.delete_table('Reporting_senodeentry')
+
+ # Deleting model 'SEFcontextEntry'
+ db.delete_table('Reporting_sefcontextentry')
+
+ # Deleting model 'SEInterfaceEntry'
+ db.delete_table('Reporting_seinterfaceentry')
+
+ # Deleting model 'SEPermissiveEntry'
+ db.delete_table('Reporting_sepermissiveentry')
+
+ # Deleting model 'SEModuleEntry'
+ db.delete_table('Reporting_semoduleentry')
+
+ # Deleting model 'SEPortEntry'
+ db.delete_table('Reporting_seportentry')
+
+ # Removing M2M table for field sebooleans on 'Interaction'
+ db.delete_table('Reporting_interaction_sebooleans')
+
+ # Removing M2M table for field seports on 'Interaction'
+ db.delete_table('Reporting_interaction_seports')
+
+ # Removing M2M table for field sefcontexts on 'Interaction'
+ db.delete_table('Reporting_interaction_sefcontexts')
+
+ # Removing M2M table for field senodes on 'Interaction'
+ db.delete_table('Reporting_interaction_senodes')
+
+ # Removing M2M table for field selogins on 'Interaction'
+ db.delete_table('Reporting_interaction_selogins')
+
+ # Removing M2M table for field seusers on 'Interaction'
+ db.delete_table('Reporting_interaction_seusers')
+
+ # Removing M2M table for field seinterfaces on 'Interaction'
+ db.delete_table('Reporting_interaction_seinterfaces')
+
+ # Removing M2M table for field sepermissives on 'Interaction'
+ db.delete_table('Reporting_interaction_sepermissives')
+
+ # Removing M2M table for field semodules on 'Interaction'
+ db.delete_table('Reporting_interaction_semodules')
+
+
+ models = {
+ 'Reporting.actionentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
+ },
+ 'Reporting.bundle': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
+ },
+ 'Reporting.client': {
+ 'Meta': {'object_name': 'Client'},
+ 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
+ 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.deviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
+ 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_minor': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.failureentry': {
+ 'Meta': {'object_name': 'FailureEntry'},
+ 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'message': ('django.db.models.fields.TextField', [], {}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileacl': {
+ 'Meta': {'object_name': 'FileAcl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileperms': {
+ 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.group': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'Reporting.interaction': {
+ 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
+ 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
+ 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
+ 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
+ 'good_count': ('django.db.models.fields.IntegerField', [], {}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
+ 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['Reporting.Group']"}),
+ 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'sebooleans': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEBooleanEntry']", 'symmetrical': 'False'}),
+ 'sefcontexts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEFcontextEntry']", 'symmetrical': 'False'}),
+ 'seinterfaces': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEInterfaceEntry']", 'symmetrical': 'False'}),
+ 'selogins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SELoginEntry']", 'symmetrical': 'False'}),
+ 'semodules': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEModuleEntry']", 'symmetrical': 'False'}),
+ 'senodes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SENodeEntry']", 'symmetrical': 'False'}),
+ 'sepermissives': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPermissiveEntry']", 'symmetrical': 'False'}),
+ 'seports': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPortEntry']", 'symmetrical': 'False'}),
+ 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
+ 'seusers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEUserEntry']", 'symmetrical': 'False'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'total_count': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.linkentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
+ },
+ 'Reporting.packageentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
+ 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
+ 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
+ },
+ 'Reporting.pathentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
+ 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
+ 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
+ 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
+ },
+ 'Reporting.performance': {
+ 'Meta': {'object_name': 'Performance'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
+ 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
+ },
+ 'Reporting.sebooleanentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEBooleanEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'value': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'Reporting.sefcontextentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEFcontextEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'filetype': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.seinterfaceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEInterfaceEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.seloginentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SELoginEntry'},
+ 'current_selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.semoduleentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEModuleEntry'},
+ 'current_disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.senodeentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SENodeEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'proto': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.sepermissiveentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPermissiveEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.seportentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPortEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.serviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
+ 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
+ },
+ 'Reporting.seuserentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEUserEntry'},
+ 'current_prefix': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'current_roles': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'prefix': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'roles': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0006_add_user_group_entry_support.py b/src/lib/Bcfg2/Reporting/south_migrations/0006_add_user_group_entry_support.py
new file mode 100644
index 0000000..d86e663
--- /dev/null
+++ b/src/lib/Bcfg2/Reporting/south_migrations/0006_add_user_group_entry_support.py
@@ -0,0 +1,340 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'POSIXGroupEntry'
+ db.create_table('Reporting_posixgroupentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('gid', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('current_gid', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ))
+ db.send_create_signal('Reporting', ['POSIXGroupEntry'])
+
+ # Adding model 'POSIXUserEntry'
+ db.create_table('Reporting_posixuserentry', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ('hash_key', self.gf('django.db.models.fields.BigIntegerField')(db_index=True)),
+ ('state', self.gf('django.db.models.fields.IntegerField')()),
+ ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('uid', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('current_uid', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('group', self.gf('django.db.models.fields.CharField')(max_length=64)),
+ ('current_group', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)),
+ ('gecos', self.gf('django.db.models.fields.CharField')(max_length=1024)),
+ ('current_gecos', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True)),
+ ('home', self.gf('django.db.models.fields.CharField')(max_length=1024)),
+ ('current_home', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True)),
+ ('shell', self.gf('django.db.models.fields.CharField')(default='/bin/bash', max_length=1024)),
+ ('current_shell', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True)),
+ ))
+ db.send_create_signal('Reporting', ['POSIXUserEntry'])
+
+ # Adding M2M table for field posixusers on 'Interaction'
+ db.create_table('Reporting_interaction_posixusers', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('posixuserentry', models.ForeignKey(orm['Reporting.posixuserentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_posixusers', ['interaction_id', 'posixuserentry_id'])
+
+ # Adding M2M table for field posixgroups on 'Interaction'
+ db.create_table('Reporting_interaction_posixgroups', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)),
+ ('posixgroupentry', models.ForeignKey(orm['Reporting.posixgroupentry'], null=False))
+ ))
+ db.create_unique('Reporting_interaction_posixgroups', ['interaction_id', 'posixgroupentry_id'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'POSIXGroupEntry'
+ db.delete_table('Reporting_posixgroupentry')
+
+ # Deleting model 'POSIXUserEntry'
+ db.delete_table('Reporting_posixuserentry')
+
+ # Removing M2M table for field posixusers on 'Interaction'
+ db.delete_table('Reporting_interaction_posixusers')
+
+ # Removing M2M table for field posixgroups on 'Interaction'
+ db.delete_table('Reporting_interaction_posixgroups')
+
+
+ models = {
+ 'Reporting.actionentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'})
+ },
+ 'Reporting.bundle': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
+ },
+ 'Reporting.client': {
+ 'Meta': {'object_name': 'Client'},
+ 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}),
+ 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.deviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'current_minor': ('django.db.models.fields.IntegerField', [], {}),
+ 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_major': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_minor': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.failureentry': {
+ 'Meta': {'object_name': 'FailureEntry'},
+ 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'message': ('django.db.models.fields.TextField', [], {}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileacl': {
+ 'Meta': {'object_name': 'FileAcl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ 'Reporting.fileperms': {
+ 'Meta': {'unique_together': "(('owner', 'group', 'mode'),)", 'object_name': 'FilePerms'},
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mode': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'Reporting.group': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'Reporting.interaction': {
+ 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'},
+ 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}),
+ 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}),
+ 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}),
+ 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}),
+ 'good_count': ('django.db.models.fields.IntegerField', [], {}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}),
+ 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}),
+ 'posixgroups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.POSIXGroupEntry']", 'symmetrical': 'False'}),
+ 'posixusers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.POSIXUserEntry']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['Reporting.Group']"}),
+ 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'sebooleans': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEBooleanEntry']", 'symmetrical': 'False'}),
+ 'sefcontexts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEFcontextEntry']", 'symmetrical': 'False'}),
+ 'seinterfaces': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEInterfaceEntry']", 'symmetrical': 'False'}),
+ 'selogins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SELoginEntry']", 'symmetrical': 'False'}),
+ 'semodules': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEModuleEntry']", 'symmetrical': 'False'}),
+ 'senodes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SENodeEntry']", 'symmetrical': 'False'}),
+ 'sepermissives': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPermissiveEntry']", 'symmetrical': 'False'}),
+ 'seports': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEPortEntry']", 'symmetrical': 'False'}),
+ 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}),
+ 'seusers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.SEUserEntry']", 'symmetrical': 'False'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'total_count': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.linkentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']},
+ 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}),
+ 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'})
+ },
+ 'Reporting.packageentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'},
+ 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}),
+ 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"})
+ },
+ 'Reporting.pathentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'},
+ 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}),
+ 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}),
+ 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'details': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"})
+ },
+ 'Reporting.performance': {
+ 'Meta': {'object_name': 'Performance'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}),
+ 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'})
+ },
+ 'Reporting.posixgroupentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'POSIXGroupEntry'},
+ 'current_gid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'gid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.posixuserentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'POSIXUserEntry'},
+ 'current_gecos': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
+ 'current_group': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}),
+ 'current_home': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
+ 'current_shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
+ 'current_uid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'gecos': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'group': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'home': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'shell': ('django.db.models.fields.CharField', [], {'default': "'/bin/bash'", 'max_length': '1024'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'uid': ('django.db.models.fields.IntegerField', [], {'null': 'True'})
+ },
+ 'Reporting.sebooleanentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEBooleanEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'value': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'Reporting.sefcontextentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEFcontextEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'filetype': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.seinterfaceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEInterfaceEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.seloginentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SELoginEntry'},
+ 'current_selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxuser': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.semoduleentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEModuleEntry'},
+ 'current_disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'disabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.senodeentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SENodeEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'proto': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.sepermissiveentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPermissiveEntry'},
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.seportentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEPortEntry'},
+ 'current_selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'selinuxtype': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'Reporting.serviceentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'},
+ 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {}),
+ 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'})
+ },
+ 'Reporting.seuserentry': {
+ 'Meta': {'ordering': "('state', 'name')", 'object_name': 'SEUserEntry'},
+ 'current_prefix': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'current_roles': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'hash_key': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'prefix': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'roles': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'state': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['Reporting']
\ No newline at end of file
diff --git a/src/lib/Bcfg2/Reporting/south_migrations/__init__.py b/src/lib/Bcfg2/Reporting/south_migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/Bcfg2/Server/Admin/Reports.py b/src/lib/Bcfg2/Server/Admin/Reports.py
index eb97123..6399d24 100644
--- a/src/lib/Bcfg2/Server/Admin/Reports.py
+++ b/src/lib/Bcfg2/Server/Admin/Reports.py
@@ -8,6 +8,7 @@ import traceback
from Bcfg2 import settings
# Load django and reports stuff _after_ we know we can load settings
+import django
from django.core import management
from Bcfg2.Reporting.utils import *
@@ -71,11 +72,14 @@ class Reports(Bcfg2.Server.Admin.Mode):
def __init__(self, setup):
Bcfg2.Server.Admin.Mode.__init__(self, setup)
- try:
- import south
- except ImportError:
- print("Django south is required for Reporting")
- raise SystemExit(-3)
+ if django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ django.setup()
+ elif django.VERIONS[0] == 1 and django.VERSION[1] <= 6:
+ try:
+ import south
+ except ImportError:
+ print("Django south is required for Reporting")
+ raise SystemExit(-3)
def __call__(self, args):
if len(args) == 0 or args[0] == '-h':
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index 44ba0fe..9d5a3a5 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -248,10 +248,14 @@ class BaseCore(object):
from django.core.exceptions import ImproperlyConfigured
from django.core import management
+ import django
+ if django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ django.setup()
try:
management.call_command("syncdb", interactive=False,
verbosity=0)
self._database_available = True
+ django.db.close_connection()
except ImproperlyConfigured:
self.logger.error("Django configuration problem: %s" %
sys.exc_info()[1])
diff --git a/src/lib/Bcfg2/manage.py b/src/lib/Bcfg2/manage.py
index 3e4eedc..2861916 100755
--- a/src/lib/Bcfg2/manage.py
+++ b/src/lib/Bcfg2/manage.py
@@ -1,14 +1,21 @@
#!/usr/bin/env python
-from django.core.management import execute_manager
-import imp
-try:
- imp.find_module('settings') # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
- sys.exit(1)
+import os
+import sys
+import django
-import settings
+if django.VERSION[0] == 1 and django.VERSION[1] <= 6:
+ try:
+ imp.find_module('settings') # Assumed to be in the same directory.
+ except ImportError:
+ import sys
+ sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
+ sys.exit(1)
if __name__ == "__main__":
- execute_manager(settings)
+ if django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Bcfg2.settings')
+
+ from django.core.management import execute_from_command_line
+ execute_from_command_line(sys.argv)
+ else:
+ execute_manager(settings)
diff --git a/src/lib/Bcfg2/settings.py b/src/lib/Bcfg2/settings.py
index 2c5466a..fd7103e 100644
--- a/src/lib/Bcfg2/settings.py
+++ b/src/lib/Bcfg2/settings.py
@@ -144,11 +144,18 @@ INSTALLED_APPS = (
'django.contrib.admin',
'Bcfg2.Server',
)
-if HAS_SOUTH:
+if HAS_DJANGO and django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ INSTALLED_APPS = INSTALLED_APPS + (
+ 'Bcfg2.Reporting',
+ )
+elif HAS_SOUTH:
INSTALLED_APPS = INSTALLED_APPS + (
'south',
'Bcfg2.Reporting',
)
+ SOUTH_MIGRATION_MODULES = {
+ 'Bcfg2.Reporting': 'Bcfg2.Reporting.south_migrations',
+ }
if 'BCFG2_LEGACY_MODELS' in os.environ:
INSTALLED_APPS += ('Bcfg2.Server.Reports.reports',)
@@ -224,3 +231,5 @@ else:
'django.core.context_processors.media',
'django.core.context_processors.request'
)
+
+TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
diff --git a/src/sbin/bcfg2-reports b/src/sbin/bcfg2-reports
index 2a8447a..7fc2da1 100755
--- a/src/sbin/bcfg2-reports
+++ b/src/sbin/bcfg2-reports
@@ -23,6 +23,9 @@ sys.path.pop()
# Set DJANGO_SETTINGS_MODULE appropriately.
os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name
+import django
+if django.VERSION[0] == 1 and django.VERSION[1] >= 7:
+ django.setup()
from Bcfg2.Reporting.models import (Client, BaseEntry)
from django import db
Reply to: