Django 1.8

Migrate from 1.6 to community selected:
    1.8<= vesion < 1.9
Version 1.8 is LTS

On driver load:
    'devops.driver.libvirt.libvirt_driver' has been marked as
    deprecated and renamed to 'devops.driver.libvirt'

Closes-bug: #1373381
blueprint fuel-qa-python3-compatibility

Change-Id: I38c99db5f4dc53c56c4dd22ed679ca1f01979848
This commit is contained in:
Alexey Stepanov 2016-04-13 12:21:47 +03:00
parent 0d20f15421
commit 99cd80fe46
25 changed files with 383 additions and 1153 deletions

View File

@ -1,4 +1,4 @@
# Copyright 2013 - 2014 Mirantis, Inc.
# Copyright 2013 - 2016 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
@ -12,4 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
__author__ = 'vic'
from devops.driver.dummy.dummy_driver import DummyDriver as Driver
from devops.driver.dummy.dummy_driver import \
DummyL2NetworkDevice as L2NetworkDevice
from devops.driver.dummy.dummy_driver import DummyVolume as Volume
from devops.driver.dummy.dummy_driver import DummyNode as Node
__all__ = ['Driver', 'L2NetworkDevice', 'Volume', 'Node']

View File

@ -24,15 +24,17 @@ from __future__ import print_function
from devops.models.base import ParamField
from devops.models.base import ParamMultiField
from devops.models.driver import Driver as DriverBase
from devops.models.network import L2NetworkDevice as L2NetworkDeviceBase
from devops.models.node import Node as NodeBase
from devops.models.volume import Volume as VolumeBase
from devops.models.driver import Driver
from devops.models.network import L2NetworkDevice
from devops.models.node import Node
from devops.models.volume import Volume
class Driver(DriverBase):
class DummyDriver(Driver):
"""Example of driver implementation
Note: This class is imported as Driver at .__init__.py
This class should contain parameters specified in template
group['driver']['params']
@ -68,9 +70,11 @@ class Driver(DriverBase):
return ['192.168.0.0/24', '192.168.1.0/24']
class L2NetworkDevice(L2NetworkDeviceBase):
class DummyL2NetworkDevice(L2NetworkDevice):
"""Example implementation of l2 network device.
Note: This class is imported as L2NetworkDevice at .__init__.py
L2NetworkDevice represents node/device which acts like switch or router
yaml example:
@ -120,7 +124,7 @@ class L2NetworkDevice(L2NetworkDeviceBase):
# and network
print(self.address_pool.ip_network)
super(L2NetworkDevice, self).define()
super(DummyL2NetworkDevice, self).define()
print('Do something after define')
def start(self):
@ -146,13 +150,15 @@ class L2NetworkDevice(L2NetworkDeviceBase):
Erase method is called one time when you want remove existing
l2 network device
"""
super(L2NetworkDevice, self).erase()
super(DummyL2NetworkDevice, self).erase()
print('Do something after erase')
class Volume(VolumeBase):
class DummyVolume(Volume):
"""Example implementation of volume
Note: This class is imported as Volume at .__init__.py
Volume is image or disk which should be mounted to a specific Node
"""
@ -172,7 +178,7 @@ class Volume(VolumeBase):
print(self.driver.dummy_parameter)
print('Do something before define')
super(Volume, self).define()
super(DummyVolume, self).define()
print('Do something after define')
def erase(self):
@ -182,13 +188,15 @@ class Volume(VolumeBase):
volume
"""
print('Do something before erase')
super(Volume, self).erase()
super(DummyVolume, self).erase()
print('Do something after erase')
class Node(NodeBase):
class DummyNode(Node):
"""Example implementation of node
Note: This class is imported as Node at .__init__.py
Node is a server which will be used for deloying of openstack depending on
node role
@ -244,7 +252,7 @@ class Node(NodeBase):
print(self.interfaces)
print('Do something before define')
super(Node, self).define()
super(DummyNode, self).define()
print('Do something after define')
def start(self):
@ -266,5 +274,5 @@ class Node(NodeBase):
node
"""
print('Do something before erase')
super(Node, self).erase()
super(DummyNode, self).erase()
print('Do something after erase')

View File

@ -0,0 +1,17 @@
# Copyright 2013 - 2016 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from devops.driver.ipmi.ipmi_driver import DevopsDriver as Driver
__all__ = ['Driver']

View File

@ -1,4 +1,4 @@
# Copyright 2013 - 2014 Mirantis, Inc.
# Copyright 2013 - 2016 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
@ -12,4 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
__author__ = 'vic'
from devops.driver.libvirt.libvirt_driver import LibvirtDriver as Driver
from devops.driver.libvirt.libvirt_driver import \
LibvirtL2NetworkDevice as L2NetworkDevice
from devops.driver.libvirt.libvirt_driver import LibvirtVolume as Volume
from devops.driver.libvirt.libvirt_driver import LibvirtNode as Node
__all__ = ['Driver', 'L2NetworkDevice', 'Volume', 'Node']

View File

@ -34,10 +34,10 @@ from devops.helpers import scancodes
from devops import logger
from devops.models.base import ParamField
from devops.models.base import ParamMultiField
from devops.models.driver import Driver as DriverBase
from devops.models.network import L2NetworkDevice as L2NetworkDeviceBase
from devops.models.node import Node as NodeBase
from devops.models.volume import Volume as VolumeBase
from devops.models.driver import Driver
from devops.models.network import L2NetworkDevice
from devops.models.node import Node
from devops.models.volume import Volume
class _LibvirtManager(object):
@ -143,12 +143,14 @@ class Snapshot(object):
self.name, self.created)
class Driver(DriverBase):
class LibvirtDriver(Driver):
"""libvirt driver
:param use_host_cpu: When creating nodes, should libvirt's
CPU "host-model" mode be used to set CPU settings. If set to False,
default mode ("custom") will be used. (default: True)
Note: This class is imported as Driver at .__init__.py
"""
connection_string = ParamField(default="qemu:///system")
@ -208,7 +210,7 @@ class Driver(DriverBase):
return self.conn.getLibVersion()
class L2NetworkDevice(L2NetworkDeviceBase):
class LibvirtL2NetworkDevice(L2NetworkDevice):
"""L2 network device based on libvirt Network
Template example
@ -302,6 +304,7 @@ class L2NetworkDevice(L2NetworkDeviceBase):
l2_net_dev: openstack_br
tag: 103
Note: This class is imported as L2NetworkDevice at .__init__.py
"""
uuid = ParamField()
@ -415,7 +418,7 @@ class L2NetworkDevice(L2NetworkDeviceBase):
ret.setAutostart(True)
self.uuid = ret.UUIDString()
super(L2NetworkDevice, self).define()
super(LibvirtL2NetworkDevice, self).define()
def start(self):
self.create()
@ -477,7 +480,7 @@ class L2NetworkDevice(L2NetworkDeviceBase):
# Remove network
if self._libvirt_network:
self._libvirt_network.undefine()
super(L2NetworkDevice, self).remove()
super(LibvirtL2NetworkDevice, self).remove()
@retry()
def exists(self):
@ -522,7 +525,8 @@ class L2NetworkDevice(L2NetworkDeviceBase):
iface.undefine()
class Volume(VolumeBase):
class LibvirtVolume(Volume):
"""Note: This class is imported as Volume at .__init__.py """
uuid = ParamField()
capacity = ParamField(default=None)
@ -567,7 +571,7 @@ class Volume(VolumeBase):
)
libvirt_volume = pool.createXML(xml, 0)
self.uuid = libvirt_volume.key()
super(Volume, self).define()
super(LibvirtVolume, self).define()
# Upload predefined image to the volume
if self.source_image is not None:
@ -578,7 +582,7 @@ class Volume(VolumeBase):
if self.uuid:
if self.exists():
self._libvirt_volume.delete(0)
super(Volume, self).remove()
super(LibvirtVolume, self).remove()
@retry()
def get_capacity(self):
@ -666,7 +670,8 @@ class Volume(VolumeBase):
return volume
class Node(NodeBase):
class LibvirtNode(Node):
"""Note: This class is imported as Node at .__init__.py """
uuid = ParamField()
hypervisor = ParamField(default='kvm', choices=('kvm', 'test'))
@ -808,7 +813,7 @@ class Node(NodeBase):
logger.info(node_xml)
self.uuid = self.driver.conn.defineXML(node_xml).UUIDString()
super(Node, self).define()
super(LibvirtNode, self).define()
def start(self):
self.create()
@ -837,7 +842,7 @@ class Node(NodeBase):
if self._libvirt_node:
self._libvirt_node.undefineFlags(
libvirt.VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA)
super(Node, self).remove()
super(LibvirtNode, self).remove()
@retry()
def suspend(self, *args, **kwargs):

View File

@ -521,7 +521,7 @@ def create_devops_config(boot_from,
{
'driver': {
'name':
'devops.driver.libvirt.libvirt_driver',
'devops.driver.libvirt',
'params': {
'connection_string': 'qemu:///system',
'storage_pool_name': 'default',

View File

@ -1,348 +1,233 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-13 09:19
# flake8: noqa
# pylint: disable=line-too-long
from __future__ import unicode_literals
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
from django.db import migrations, models
import django.db.models.deletion
import jsonfield.fields
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Environment'
db.create_table(u'devops_environment', (
(u'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(u'devops', ['Environment'])
class Migration(migrations.Migration):
# Adding model 'Network'
db.create_table(u'devops_network', (
(u'id',
self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('uuid',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('environment',
self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Environment'], null=True)),
('has_dhcp_server',
self.gf('django.db.models.fields.BooleanField')(default=False)),
('has_pxe_server',
self.gf('django.db.models.fields.BooleanField')(default=False)),
('has_reserved_ips',
self.gf('django.db.models.fields.BooleanField')(default=True)),
('tftp_root_dir',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('forward',
self.gf('django.db.models.fields.CharField')(max_length=255,
null=True)),
('ip_network',
self.gf('django.db.models.fields.CharField')(unique=True,
max_length=255)),
))
db.send_create_signal(u'devops', ['Network'])
initial = True
# Adding unique constraint on 'Network', fields ['name', 'environment']
db.create_unique(u'devops_network', ['name', 'environment_id'])
dependencies = [
]
# Adding model 'Node'
db.create_table(u'devops_node', (
(u'id',
self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('uuid',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('environment',
self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Environment'], null=True)),
('hypervisor',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('os_type',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('architecture',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('boot', self.gf('django.db.models.fields.CharField')(
default='[]',
max_length=255)),
('metadata',
self.gf('django.db.models.fields.CharField')(max_length=255,
null=True)),
('role',
self.gf('django.db.models.fields.CharField')(max_length=255,
null=True)),
('vcpu',
self.gf('django.db.models.fields.PositiveSmallIntegerField')(
default=1)),
('memory',
self.gf('django.db.models.fields.IntegerField')(default=1024)),
('has_vnc',
self.gf('django.db.models.fields.BooleanField')(default=True)),
))
db.send_create_signal(u'devops', ['Node'])
# Adding unique constraint on 'Node', fields ['name', 'environment']
db.create_unique(u'devops_node', ['name', 'environment_id'])
# Adding model 'Volume'
db.create_table(u'devops_volume', (
(u'id',
self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('uuid',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('environment',
self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Environment'], null=True)),
('capacity', self.gf('django.db.models.fields.BigIntegerField')()),
('backing_store',
self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Volume'], null=True)),
('format',
self.gf('django.db.models.fields.CharField')(max_length=255)),
))
db.send_create_signal(u'devops', ['Volume'])
# Adding unique constraint on 'Volume', fields ['name', 'environment']
db.create_unique(u'devops_volume', ['name', 'environment_id'])
# Adding model 'DiskDevice'
db.create_table(u'devops_diskdevice', (
(u'id',
self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('device',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('type',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('bus',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('target_dev',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('node', self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Node'])),
('volume', self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Volume'], null=True)),
))
db.send_create_signal(u'devops', ['DiskDevice'])
# Adding model 'Interface'
db.create_table(u'devops_interface', (
(u'id',
self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('mac_address',
self.gf('django.db.models.fields.CharField')(unique=True,
max_length=255)),
('network', self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Network'])),
('node', self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Node'])),
('type',
self.gf('django.db.models.fields.CharField')(max_length=255)),
('model',
self.gf('django.db.models.fields.CharField')(max_length=255)),
))
db.send_create_signal(u'devops', ['Interface'])
# Adding model 'Address'
db.create_table(u'devops_address', (
(u'id',
self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('ip_address',
self.gf('django.db.models.fields.GenericIPAddressField')(
max_length=39)),
('interface',
self.gf('django.db.models.fields.related.ForeignKey')(
to=orm['devops.Interface'])),
))
db.send_create_signal(u'devops', ['Address'])
def backwards(self, orm):
# Removing unique constraint on 'Volume', fields [
# 'name', 'environment']
db.delete_unique(u'devops_volume', ['name', 'environment_id'])
# Removing unique constraint on 'Node', fields ['name', 'environment']
db.delete_unique(u'devops_node', ['name', 'environment_id'])
# Removing unique constraint on 'Network', fields [
# 'name', 'environment']
db.delete_unique(u'devops_network', ['name', 'environment_id'])
# Deleting model 'Environment'
db.delete_table(u'devops_environment')
# Deleting model 'Network'
db.delete_table(u'devops_network')
# Deleting model 'Node'
db.delete_table(u'devops_node')
# Deleting model 'Volume'
db.delete_table(u'devops_volume')
# Deleting model 'DiskDevice'
db.delete_table(u'devops_diskdevice')
# Deleting model 'Interface'
db.delete_table(u'devops_interface')
# Deleting model 'Address'
db.delete_table(u'devops_address')
models = {
u'devops.address': {
'Meta': {'object_name': 'Address'},
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'interface': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Interface']"}),
'ip_address': ('django.db.models.fields.GenericIPAddressField', [],
{'max_length': '39'})
},
u'devops.diskdevice': {
'Meta': {'object_name': 'DiskDevice'},
'bus': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'device': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Node']"}),
'target_dev': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'type': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'volume': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Volume']", 'null': 'True'})
},
u'devops.environment': {
'Meta': {'object_name': 'Environment'},
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'})
},
u'devops.interface': {
'Meta': {'object_name': 'Interface'},
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'mac_address': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'model': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'network': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Network']"}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Node']"}),
'type': (
'django.db.models.fields.CharField', [], {'max_length': '255'})
},
u'devops.network': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Network'},
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'forward': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'has_dhcp_server': (
'django.db.models.fields.BooleanField', [],
{'default': 'False'}),
'has_pxe_server': (
'django.db.models.fields.BooleanField', [],
{'default': 'False'}),
'has_reserved_ips': (
'django.db.models.fields.BooleanField', [],
{'default': 'True'}),
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'ip_network': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'name': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'tftp_root_dir': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'uuid': (
'django.db.models.fields.CharField', [], {'max_length': '255'})
},
u'devops.node': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Node'},
'architecture': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'boot': ('django.db.models.fields.CharField', [],
{'default': "'[]'", 'max_length': '255'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'has_vnc': (
'django.db.models.fields.BooleanField', [],
{'default': 'True'}),
'hypervisor': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'memory': (
'django.db.models.fields.IntegerField', [],
{'default': '1024'}),
'metadata': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'name': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'os_type': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'role': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'uuid': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'vcpu': ('django.db.models.fields.PositiveSmallIntegerField', [],
{'default': '1'})
},
u'devops.volume': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Volume'},
'backing_store': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Volume']", 'null': 'True'}),
'capacity': ('django.db.models.fields.BigIntegerField', [], {}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'format': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': (
'django.db.models.fields.CharField', [],
{'max_length': '255'}),
'uuid': (
'django.db.models.fields.CharField', [], {'max_length': '255'})
}
}
complete_apps = ['devops']
operations = [
migrations.CreateModel(
name='Address',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ip_address', models.GenericIPAddressField()),
],
options={
'db_table': 'devops_address',
},
),
migrations.CreateModel(
name='AddressPool',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('params', jsonfield.fields.JSONField(default={})),
('name', models.CharField(max_length=255)),
('net', models.CharField(max_length=255, unique=True)),
],
options={
'db_table': 'devops_address_pool',
},
),
migrations.CreateModel(
name='DiskDevice',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('device', models.CharField(choices=[(b'disk', b'disk'), (b'cdrom', b'cdrom')], max_length=255)),
('type', models.CharField(choices=[(b'file', b'file')], max_length=255)),
('bus', models.CharField(choices=[(b'virtio', b'virtio')], max_length=255)),
('target_dev', models.CharField(max_length=255)),
],
options={
'db_table': 'devops_diskdevice',
},
),
migrations.CreateModel(
name='Driver',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('params', jsonfield.fields.JSONField(default={})),
('name', models.CharField(max_length=512)),
],
options={
'db_table': 'devops_driver',
},
),
migrations.CreateModel(
name='Environment',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('name', models.CharField(max_length=255, unique=True)),
],
options={
'db_table': 'devops_environment',
},
),
migrations.CreateModel(
name='Interface',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('label', models.CharField(max_length=255, null=True)),
('mac_address', models.CharField(max_length=255, unique=True)),
('type', models.CharField(max_length=255)),
('model', models.CharField(choices=[(b'virtio', b'virtio'), (b'e1000', b'e1000'), (b'pcnet', b'pcnet'), (b'rtl8139', b'rtl8139'), (b'ne2k_pci', b'ne2k_pci')], max_length=255)),
],
options={
'db_table': 'devops_interface',
},
),
migrations.CreateModel(
name='L2NetworkDevice',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('params', jsonfield.fields.JSONField(default={})),
('name', models.CharField(max_length=255)),
('address_pool', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.AddressPool')),
],
options={
'db_table': 'devops_l2_network_device',
},
),
migrations.CreateModel(
name='NetworkConfig',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('label', models.CharField(max_length=255)),
('networks', jsonfield.fields.JSONField(default=[])),
('aggregation', models.CharField(max_length=255, null=True)),
('parents', jsonfield.fields.JSONField(default=[])),
],
options={
'db_table': 'devops_network_config',
},
),
migrations.CreateModel(
name='NetworkPool',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('name', models.CharField(max_length=255)),
('address_pool', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.AddressPool')),
],
options={
'db_table': 'devops_network_pool',
},
),
migrations.CreateModel(
name='Node',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('params', jsonfield.fields.JSONField(default={})),
('name', models.CharField(max_length=255)),
('role', models.CharField(max_length=255, null=True)),
],
options={
'db_table': 'devops_node',
},
),
migrations.CreateModel(
name='Volume',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('params', jsonfield.fields.JSONField(default={})),
('name', models.CharField(max_length=255)),
('backing_store', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Volume')),
('node', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Node')),
],
options={
'db_table': 'devops_volume',
},
),
migrations.CreateModel(
name='Group',
fields=[
('created', models.DateTimeField(default=datetime.datetime.utcnow)),
('name', models.CharField(max_length=255)),
('driver', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='devops.Driver')),
('environment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Environment')),
],
options={
'db_table': 'devops_group',
},
),
migrations.AddField(
model_name='networkconfig',
name='node',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devops.Node'),
),
migrations.AddField(
model_name='interface',
name='l2_network_device',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.L2NetworkDevice'),
),
migrations.AddField(
model_name='interface',
name='node',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devops.Node'),
),
migrations.AddField(
model_name='diskdevice',
name='node',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devops.Node'),
),
migrations.AddField(
model_name='diskdevice',
name='volume',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Volume'),
),
migrations.AddField(
model_name='addresspool',
name='environment',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devops.Environment'),
),
migrations.AddField(
model_name='address',
name='interface',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Interface'),
),
migrations.AlterUniqueTogether(
name='volume',
unique_together={('name', 'node')},
),
migrations.AddField(
model_name='node',
name='group',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Group'),
),
migrations.AddField(
model_name='networkpool',
name='group',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Group'),
),
migrations.AddField(
model_name='l2networkdevice',
name='group',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='devops.Group'),
),
migrations.AlterUniqueTogether(
name='addresspool',
unique_together={('name', 'environment')},
),
migrations.AlterUniqueTogether(
name='node',
unique_together={('name', 'group')},
),
]

View File

@ -1,185 +0,0 @@
# -*- coding: utf-8 -*-
# flake8: noqa
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Environment.created'
db.add_column('devops_environment', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
# Adding field 'Node.created'
db.add_column('devops_node', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
# Adding field 'Volume.created'
db.add_column('devops_volume', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
# Adding field 'Network.created'
db.add_column('devops_network', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
def backwards(self, orm):
# Deleting field 'Environment.created'
db.delete_column('devops_environment', 'created')
# Deleting field 'Node.created'
db.delete_column('devops_node', 'created')
# Deleting field 'Volume.created'
db.delete_column('devops_volume', 'created')
# Deleting field 'Network.created'
db.delete_column('devops_network', 'created')
models = {
u'devops.address': {
'Meta': {'object_name': 'Address'},
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'interface': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Interface']"}),
'ip_address': ('django.db.models.fields.GenericIPAddressField', [],
{'max_length': '39'})
},
u'devops.diskdevice': {
'Meta': {'object_name': 'DiskDevice'},
'bus': ('django.db.models.fields.CharField',
[], {'max_length': '255'}
),
'device': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Node']"}),
'target_dev': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'type': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'volume': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Volume']", 'null': 'True'})
},
u'devops.environment': {
'Meta': {'object_name': 'Environment'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'})
},
u'devops.interface': {
'Meta': {'object_name': 'Interface'},
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'mac_address': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'model': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'network': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Network']"}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Node']"}),
'type': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
u'devops.network': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Network'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'forward': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'has_dhcp_server': ('django.db.models.fields.BooleanField', [],
{}),
'has_pxe_server': ('django.db.models.fields.BooleanField', [], {}),
'has_reserved_ips': ('django.db.models.fields.BooleanField', [],
{'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'ip_network': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'tftp_root_dir': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'uuid': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
u'devops.node': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Node'},
'architecture': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'boot': ('django.db.models.fields.CharField', [],
{'default': "'[]'", 'max_length': '255'}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'has_vnc': ('django.db.models.fields.BooleanField', [],
{'default': 'True'}),
'hypervisor': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'memory': ('django.db.models.fields.IntegerField', [],
{'default': '1024'}),
'metadata': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'os_type': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'role': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'uuid': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'vcpu': ('django.db.models.fields.PositiveSmallIntegerField', [],
{'default': '1'})
},
u'devops.volume': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Volume'},
'backing_store': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Volume']", 'null': 'True'}),
'capacity': ('django.db.models.fields.BigIntegerField', [], {}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'format': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'uuid': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
}
}
complete_apps = ['devops']

View File

@ -1,568 +0,0 @@
# -*- coding: utf-8 -*-
# flake8: noqa
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Removing unique constraint on 'Volume',
# fields ['name', 'environment']
db.delete_unique('devops_volume', ['name', 'environment_id'])
# Removing unique constraint on 'Node', fields ['name', 'environment']
db.delete_unique('devops_node', ['name', 'environment_id'])
# Removing unique constraint on 'Network',
# fields ['name', 'environment']
db.delete_unique('devops_network', ['name', 'environment_id'])
# Deleting model 'Network'
db.delete_table('devops_network')
DateTimeField = self.gf('django.db.models.fields.DateTimeField')
ForeignKey = self.gf('django.db.models.fields.related.ForeignKey')
CharField = self.gf('django.db.models.fields.CharField')
OneToOneField = self.gf(
'django.db.models.fields.related.OneToOneField')
AutoField = self.gf('django.db.models.fields.AutoField')
JSONField = self.gf('jsonfield.fields.JSONField')
# Adding model 'Group'
db.create_table('devops_group', (
('created', DateTimeField(default=datetime.datetime.utcnow,
auto_now_add=True,
blank=True)),
('environment', ForeignKey(to=orm['devops.Environment'],
null=True)),
('name', CharField(max_length=255)),
('driver', OneToOneField(to=orm['devops.Driver'],
unique=True,
primary_key=True)),
))
db.send_create_signal('devops', ['Group'])
# Adding model 'AddressPool'
db.create_table('devops_address_pool', (
('id', AutoField(primary_key=True)),
('created', DateTimeField(default=datetime.datetime.utcnow,
auto_now_add=True,
blank=True)),
('params', JSONField(default={})),
('environment', ForeignKey(to=orm['devops.Environment'])),
('name', CharField(max_length=255)),
('net', CharField(unique=True, max_length=255)),
))
db.send_create_signal('devops', ['AddressPool'])
# Adding unique constraint on 'AddressPool',
# fields ['name', 'environment']
db.create_unique('devops_address_pool', ['name', 'environment_id'])
# Adding model 'L2NetworkDevice'
db.create_table('devops_l2_network_device', (
('id', AutoField(primary_key=True)),
('created', DateTimeField(default=datetime.datetime.utcnow,
auto_now_add=True,
blank=True)),
('params', JSONField(default={})),
('group', ForeignKey(to=orm['devops.Group'], null=True)),
('address_pool', ForeignKey(to=orm['devops.AddressPool'],
null=True)),
('name', CharField(max_length=255)),
))
db.send_create_signal('devops', ['L2NetworkDevice'])
# Adding model 'NetworkConfig'
db.create_table('devops_network_config', (
('id', AutoField(primary_key=True)),
('label', CharField(max_length=255)),
('node', ForeignKey(to=orm['devops.Node'])),
('networks', JSONField(default=[])),
('aggregation', CharField(max_length=255, null=True)),
('parents', JSONField(default=[])),
))
db.send_create_signal('devops', ['NetworkConfig'])
# Adding model 'Driver'
db.create_table('devops_driver', (
('id', AutoField(primary_key=True)),
('created', DateTimeField(default=datetime.datetime.utcnow,
auto_now_add=True,
blank=True)),
('params', JSONField(default={})),
('name', CharField(max_length=512)),
))
db.send_create_signal('devops', ['Driver'])
# Adding model 'NetworkPool'
db.create_table('devops_network_pool', (
('id', AutoField(primary_key=True)),
('created', DateTimeField(default=datetime.datetime.utcnow,
auto_now_add=True,
blank=True)),
('group', ForeignKey(to=orm['devops.Group'], null=True)),
('address_pool', ForeignKey(to=orm['devops.AddressPool'],
null=True)),
('name', CharField(max_length=255)),
))
db.send_create_signal('devops', ['NetworkPool'])
# Deleting field 'Interface.network'
db.delete_column('devops_interface', 'network_id')
# Adding field 'Interface.l2_network_device'
db.add_column('devops_interface',
'l2_network_device',
ForeignKey(to=orm['devops.L2NetworkDevice'],
null=True),
keep_default=False)
# Adding field 'Interface.label'
db.add_column('devops_interface',
'label',
CharField(max_length=255, null=True),
keep_default=False)
# Deleting field 'Node.uuid'
db.delete_column('devops_node', 'uuid')
# Deleting field 'Node.has_vnc'
db.delete_column('devops_node', 'has_vnc')
# Deleting field 'Node.vcpu'
db.delete_column('devops_node', 'vcpu')
# Deleting field 'Node.hypervisor'
db.delete_column('devops_node', 'hypervisor')
# Deleting field 'Node.boot'
db.delete_column('devops_node', 'boot')
# Deleting field 'Node.environment'
db.delete_column('devops_node', 'environment_id')
# Deleting field 'Node.architecture'
db.delete_column('devops_node', 'architecture')
# Deleting field 'Node.memory'
db.delete_column('devops_node', 'memory')
# Deleting field 'Node.os_type'
db.delete_column('devops_node', 'os_type')
# Deleting field 'Node.metadata'
db.delete_column('devops_node', 'metadata')
# Adding field 'Node.params'
db.add_column('devops_node',
'params',
JSONField(default={}),
keep_default=False)
# Adding field 'Node.group'
db.add_column('devops_node',
'group',
ForeignKey(to=orm['devops.Group'], null=True),
keep_default=False)
# Adding unique constraint on 'Node', fields ['name', 'group']
db.create_unique('devops_node', ['name', 'group_id'])
# Deleting field 'Volume.environment'
db.delete_column('devops_volume', 'environment_id')
# Deleting field 'Volume.capacity'
db.delete_column('devops_volume', 'capacity')
# Deleting field 'Volume.format'
db.delete_column('devops_volume', 'format')
# Deleting field 'Volume.uuid'
db.delete_column('devops_volume', 'uuid')
# Adding field 'Volume.params'
db.add_column('devops_volume', 'params',
self.gf('jsonfield.fields.JSONField')(default={}),
keep_default=False)
# Adding field 'Volume.node'
db.add_column('devops_volume',
'node',
ForeignKey(to=orm['devops.Node'], null=True),
keep_default=False)
# Adding unique constraint on 'Volume', fields ['name', 'node']
db.create_unique('devops_volume', ['name', 'node_id'])
# Changing field 'Address.interface'
db.alter_column('devops_address',
'interface_id',
ForeignKey(to=orm['devops.Interface'], null=True))
def backwards(self, orm):
# Removing unique constraint on 'Volume', fields ['name', 'group']
db.delete_unique('devops_volume', ['name', 'node_id'])
# Removing unique constraint on 'Node', fields ['name', 'group']
db.delete_unique('devops_node', ['name', 'group_id'])
# Removing unique constraint on 'AddressPool',
# fields ['name', 'environment']
db.delete_unique('devops_address_pool', ['name', 'environment_id'])
DateTimeField = self.gf('django.db.models.fields.DateTimeField')
ForeignKey = self.gf('django.db.models.fields.related.ForeignKey')
CharField = self.gf('django.db.models.fields.CharField')
AutoField = self.gf('django.db.models.fields.AutoField')
BooleanField = self.gf('django.db.models.fields.BooleanField')
PositiveSmallIntegerField = self.gf(
'django.db.models.fields.PositiveSmallIntegerField')
IntegerField = self.gf('django.db.models.fields.IntegerField')
BigIntegerField = self.gf('django.db.models.fields.BigIntegerField')
# Adding model 'Network'
db.create_table('devops_network', (
('ip_network', CharField(max_length=255, unique=True)),
('has_reserved_ips', BooleanField(default=True)),
('id', AutoField(primary_key=True)),
('uuid', CharField(max_length=255)),
('has_pxe_server', BooleanField()),
('name', CharField(max_length=255)),
('created', DateTimeField(default=datetime.datetime.utcnow,
auto_now_add=True,
blank=True)),
('environment', ForeignKey(to=orm['devops.Environment'],
null=True)),
('tftp_root_dir', CharField(max_length=255)),
('forward', CharField(max_length=255, null=True)),
('has_dhcp_server', BooleanField()),
))
db.send_create_signal('devops', ['Network'])
# Adding unique constraint on 'Network', fields ['name', 'environment']
db.create_unique('devops_network', ['name', 'environment_id'])
# Deleting model 'Group'
db.delete_table('devops_group')
# Deleting model 'AddressPool'
db.delete_table('devops_address_pool')
# Deleting model 'L2NetworkDevice'
db.delete_table('devops_l2_network_device')
# Deleting model 'NetworkConfig'
db.delete_table('devops_network_config')
# Deleting model 'Driver'
db.delete_table('devops_driver')
# Deleting model 'NetworkPool'
db.delete_table('devops_network_pool')
# Adding field 'Interface.network'
db.add_column('devops_interface',
'network',
ForeignKey(default=None, null=True,
to=orm['devops.Network']),
keep_default=False)
# Deleting field 'Interface.l2_network_device'
db.delete_column('devops_interface', 'l2_network_device_id')
# Deleting field 'Interface.label'
db.delete_column('devops_interface', 'label')
# Adding field 'Node.uuid'
db.add_column('devops_node', 'uuid',
CharField(default=None, max_length=255),
keep_default=False)
# Adding field 'Node.has_vnc'
db.add_column('devops_node', 'has_vnc',
BooleanField(default=True),
keep_default=False)
# Adding field 'Node.vcpu'
db.add_column('devops_node', 'vcpu',
PositiveSmallIntegerField(default=1),
keep_default=False)
# Adding field 'Node.hypervisor'
db.add_column('devops_node', 'hypervisor',
CharField(default=None, max_length=255),
keep_default=False)
# Adding field 'Node.boot'
db.add_column('devops_node', 'boot',
CharField(default='[]', max_length=255),
keep_default=False)
# Adding field 'Node.environment'
db.add_column('devops_node', 'environment',
ForeignKey(to=orm['devops.Environment'], null=True),
keep_default=False)
# Adding field 'Node.architecture'
db.add_column('devops_node', 'architecture',
CharField(default=None, max_length=255),
keep_default=False)
# Adding field 'Node.memory'
db.add_column('devops_node',
'memory',
IntegerField(default=1024),
keep_default=False)
# Adding field 'Node.os_type'
db.add_column('devops_node',
'os_type',
CharField(default=None, max_length=255),
keep_default=False)
# Adding field 'Node.metadata'
db.add_column('devops_node',
'metadata',
CharField(max_length=255, null=True),
keep_default=False)
# Deleting field 'Node.params'
db.delete_column('devops_node', 'params')
# Deleting field 'Node.group'
db.delete_column('devops_node', 'group_id')
# Adding unique constraint on 'Node', fields ['name', 'environment']
db.create_unique('devops_node', ['name', 'environment_id'])
# Adding field 'Volume.environment'
db.add_column('devops_volume',
'environment',
ForeignKey(to=orm['devops.Environment'], null=True),
keep_default=False)
# Adding field 'Volume.capacity'
db.add_column('devops_volume',
'capacity',
BigIntegerField(default=None),
keep_default=False)
# Adding field 'Volume.format'
db.add_column('devops_volume',
'format',
CharField(default=None, max_length=255),
keep_default=False)
# Adding field 'Volume.uuid'
db.add_column('devops_volume',
'uuid',
CharField(default=None, max_length=255),
keep_default=False)
# Deleting field 'Volume.params'
db.delete_column('devops_volume', 'params')
# Deleting field 'Volume.node'
db.delete_column('devops_volume', 'node_id')
# Adding unique constraint on 'Volume', fields ['name', 'environment']
db.create_unique('devops_volume', ['name', 'environment_id'])
# Changing field 'Address.interface'
db.alter_column('devops_address',
'interface_id',
ForeignKey(default=None, to=orm['devops.Interface']))
models = {
'devops.address': {
'Meta': {'object_name': 'Address'},
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'interface': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Interface']",
'null': 'True'}),
'ip_address': ('django.db.models.fields.GenericIPAddressField',
[], {'max_length': '39'})
},
'devops.addresspool': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'db_table': "'devops_address_pool'",
'object_name': 'AddressPool'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Environment']"}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'net': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'params': ('jsonfield.fields.JSONField', [], {'default': '{}'})
},
'devops.diskdevice': {
'Meta': {'object_name': 'DiskDevice'},
'bus': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'device': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Node']"}),
'target_dev': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'type': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'volume': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Volume']", 'null': 'True'})
},
'devops.driver': {
'Meta': {'object_name': 'Driver'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '512'}),
'params': ('jsonfield.fields.JSONField', [],
{'default': '{}'})
},
'devops.environment': {
'Meta': {'object_name': 'Environment'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'})
},
'devops.group': {
'Meta': {'object_name': 'Group'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'driver': ('django.db.models.fields.related.OneToOneField', [],
{'to': "orm['devops.Driver']",
'unique': 'True',
'primary_key': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Environment']",
'null': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
'devops.interface': {
'Meta': {'object_name': 'Interface'},
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'l2_network_device': ('django.db.models.fields.related.ForeignKey',
[], {'to': "orm['devops.L2NetworkDevice']",
'null': 'True'}),
'label': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'mac_address': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'model': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Node']"}),
'type': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
'devops.l2networkdevice': {
'Meta': {'object_name': 'L2NetworkDevice',
'db_table': "'devops_l2_network_device'"},
'address_pool': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.AddressPool']",
'null': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Group']", 'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'params': ('jsonfield.fields.JSONField', [], {'default': '{}'})
},
'devops.networkconfig': {
'Meta': {'object_name': 'NetworkConfig'},
'aggregation': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'label': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'networks': ('jsonfield.fields.JSONField', [], {'default': '[]'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Node']"}),
'parents': ('jsonfield.fields.JSONField', [], {'default': '[]'})
},
'devops.networkpool': {
'Meta': {'object_name': 'NetworkPool',
'db_table': "'devops_network_pool'"},
'address_pool': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.AddressPool']",
'null': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Group']", 'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
'devops.node': {
'Meta': {'unique_together': "(('name', 'group'),)",
'object_name': 'Node'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Group']", 'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'params': ('jsonfield.fields.JSONField', [], {'default': '{}'}),
'role': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'})
},
'devops.volume': {
'Meta': {'unique_together': "(('name', 'node'),)",
'object_name': 'Volume'},
'backing_store': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Volume']", 'null': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True',
'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': "orm['devops.Node']", 'null': 'True'}),
'params': ('jsonfield.fields.JSONField', [], {'default': '{}'})
}
}
complete_apps = ['devops']

View File

@ -13,7 +13,17 @@
# under the License.
import os
import django
from django.apps import apps
from django.core.exceptions import AppRegistryNotReady
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "devops.settings")
try:
if not apps.is_installed('devops'):
django.setup()
except AppRegistryNotReady:
django.setup()
from devops.models.driver import Driver
from devops.models.environment import Environment
@ -26,3 +36,7 @@ from devops.models.network import L2NetworkDevice
from devops.models.node import Node
from devops.models.volume import Volume
from devops.models.volume import DiskDevice
__all__ = ['Driver', 'Environment', 'Group', 'Address', 'Interface',
'AddressPool', 'NetworkPool', 'L2NetworkDevice', 'Node',
'Volume', 'DiskDevice']

View File

@ -41,7 +41,7 @@ class BaseModel(models.Model):
class Meta(object):
abstract = True
created = models.DateTimeField(auto_now_add=True, default=datetime.utcnow)
created = models.DateTimeField(default=datetime.utcnow)
class ParamedModelType(ModelBase):
@ -266,14 +266,37 @@ class ParamMultiField(ParamFieldBase):
class ParamedModelQuerySet(query.QuerySet):
"""Custom QuerySet for ParamedModel"""
def filter(self, **kwargs):
def __get_all_field_names(self):
field_names = set()
_meta = self.model._meta
fields = _meta.get_fields()
for field in fields:
# For backwards compatibility GenericForeignKey should not be
# included in the results.
if field.is_relation and field.many_to_one and \
field.related_model is None:
continue
# Relations to child proxy models should not be included.
if field.model != _meta.model and\
field.model._meta.concrete_model == _meta.concrete_model:
continue
field_names.add(field.name)
if hasattr(field, 'attname'):
field_names.add(field.attname)
return field_names
def filter(self, *args, **kwargs):
super_filter = super(ParamedModelQuerySet, self).filter
# split kwargs which django db are not aware of
# to separete dict
# to separate dict
kwargs_for_params = {}
db_kwargs = {}
field_names = self.model._meta.get_all_field_names()
# Fix deprecated code usage from django
field_names = self.__get_all_field_names()
for param in kwargs.keys():
first_subparam = param.split('__')[0]
if first_subparam not in field_names:
@ -282,7 +305,7 @@ class ParamedModelQuerySet(query.QuerySet):
db_kwargs[param] = kwargs[param]
# filter using db arguments
queryset = super_filter(**db_kwargs)
queryset = super_filter(*args, **db_kwargs)
if not kwargs_for_params:
# return db queryset if there is no params

View File

@ -71,6 +71,17 @@ class Environment(BaseModel):
def add_groups(self, groups):
for group_data in groups:
driver_data = group_data['driver']
if driver_data['name'] == 'devops.driver.libvirt.libvirt_driver':
warn(
"Driver 'devops.driver.libvirt.libvirt_driver' "
"has been renamed to 'devops.driver.libvirt', "
"please update the tests!",
DeprecationWarning)
logger.warn(
"Driver 'devops.driver.libvirt.libvirt_driver' "
"has been renamed to 'devops.driver.libvirt', "
"please update the tests!")
driver_data['name'] = 'devops.driver.libvirt'
self.add_group(
group_name=group_data['name'],
driver_name=driver_data['name'],

View File

@ -22,7 +22,7 @@ def get_var_as_bool(name, default):
value = os.environ.get(name, '')
return _boolean_states.get(value.lower(), default)
DRIVER = 'devops.driver.libvirt.libvirt_driver'
DRIVER = 'devops.driver.libvirt'
DRIVER_PARAMETERS = {
'connection_string': os.environ.get('CONNECTION_STRING', 'qemu:///system'),
'storage_pool_name': os.environ.get('STORAGE_POOL_NAME', 'default'),
@ -32,7 +32,7 @@ DRIVER_PARAMETERS = {
'enable_acpi': get_var_as_bool('DRIVER_ENABLE_ACPI', False),
}
INSTALLED_APPS = ['south', 'devops']
INSTALLED_APPS = ['devops']
DATABASES = {
'default': {

View File

@ -79,7 +79,7 @@ template:
groups:
- name: rack-01
driver:
name: devops.driver.libvirt.libvirt_driver
name: devops.driver.libvirt
params:
connection_string: !os_env CONNECTION_STRING, qemu:///system
storage_pool_name: !os_env STORAGE_POOL_NAME, default

View File

@ -15,5 +15,4 @@
from devops.settings import * # noqa
# make tests faster
SOUTH_TESTS_MIGRATE = False
DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}

View File

@ -77,7 +77,7 @@ class TestLibvirtDriver(LibvirtTestCase):
self.env = Environment.create('test_env')
self.group = self.env.add_group(
group_name='test_group',
driver_name='devops.driver.libvirt.libvirt_driver',
driver_name='devops.driver.libvirt',
connection_string='test:///default')
self.ap = self.env.add_address_pool(

View File

@ -25,7 +25,7 @@ class TestLibvirtL2NetworkDevice(TestCase):
self.env = Environment.create('test_env')
self.group = self.env.add_group(
group_name='test_group',
driver_name='devops.driver.libvirt.libvirt_driver',
driver_name='devops.driver.libvirt',
connection_string='test:///default')
self.ap = self.env.add_address_pool(

View File

@ -33,7 +33,7 @@ class TestLibvirtNode(LibvirtTestCase):
self.env = Environment.create('test_env')
self.group = self.env.add_group(
group_name='test_group',
driver_name='devops.driver.libvirt.libvirt_driver',
driver_name='devops.driver.libvirt',
connection_string='test:///default',
storage_pool_name='default-pool',
vnc_password='123456',

View File

@ -37,7 +37,7 @@ class TestLibvirtNodeSnapshotBase(LibvirtTestCase):
self.env = Environment.create('tenv')
self.group = self.env.add_group(
group_name='test_group',
driver_name='devops.driver.libvirt.libvirt_driver',
driver_name='devops.driver.libvirt',
connection_string='test:///default',
storage_pool_name='default-pool',
vnc_password='123456',

View File

@ -82,7 +82,7 @@ template:
groups:
- name: rack-01
driver:
name: devops.driver.libvirt.libvirt_driver
name: devops.driver.libvirt
params:
connection_string: test:///default
storage_pool_name: default-pool

View File

@ -42,7 +42,7 @@ class TestLibvirtVolume(LibvirtTestCase):
self.env = Environment.create('test_env')
self.group = self.env.add_group(
group_name='test_group',
driver_name='devops.driver.libvirt.libvirt_driver',
driver_name='devops.driver.libvirt',
connection_string='test:///default',
storage_pool_name='default-pool')

View File

@ -156,7 +156,7 @@ class TestParamedModel(TestCase):
assert o.get(name='t2', multi__sub1='abc').id == t2.id
def test_related_queryset(self):
d = Driver(name='devops.driver.libvirt.libvirt_driver')
d = Driver(name='devops.driver.libvirt')
d.save()
g = Group(name='test', driver=d)
g.save()

View File

@ -110,7 +110,7 @@ class TestDefaultTemplate(TestCase):
env_name: fuel_system_test
groups:
- driver:
name: devops.driver.libvirt.libvirt_driver
name: devops.driver.libvirt
params:
connection_string: qemu:///system
enable_acpi: false
@ -340,7 +340,7 @@ class TestDefaultTemplate(TestCase):
env_name: fuel_system_test
groups:
- driver:
name: devops.driver.libvirt.libvirt_driver
name: devops.driver.libvirt
params:
connection_string: qemu:///system
enable_acpi: true

10
manage.py Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "devops.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)

View File

@ -34,20 +34,19 @@ setup(
(os.path.expanduser('~/.devops/log'), [])],
scripts=['bin/dos.py'],
install_requires=[
'netaddr',
'paramiko',
'django<1.7',
'netaddr>=0.7.12,!=0.7.16',
'paramiko>=1.16.0',
'Django>=1.8,<1.9',
'jsonfield',
'psycopg2',
'south',
'PyYAML',
'psycopg2>=2.5',
'PyYAML>=3.1.0',
'libvirt-python',
'tabulate',
'factory_boy>=2.4.1',
'pytest>=2.7.1',
'pytest-django >= 2.8.0',
'mock>=1.0.1',
'sphinx',
'six',
'mock>=1.2',
'sphinx>=1.4',
'six>=1.9.0',
]
)