--- /dev/null
+# Generated by Django 2.2 on 2020-02-18 15:36
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import resource_inventory.models
+
+
+def populate_servers(apps, schema_editor):
+    """Convert old Host models to Server Resources."""
+    Host = apps.get_model('resource_inventory', 'Host')
+    Server = apps.get_model('resource_inventory', 'Server')
+    for h in Host.objects.all():
+        Server.objects.create(
+            working=h.working,
+            vendor=h.vendor,
+            labid=h.labid,
+            booked=h.booked,
+            name=h.labid
+        )
+
+
+def populate_resource_templates(apps, schema_editor):
+    """
+    Convert old GenericResourceBundles to ResourceTemplate.
+
+    This will be kept blank for now. If, during testing, we realize
+    we want to implement this, we will. For now, it seems
+    fine to let the old models just die and create
+    new ones as needed.
+    """
+    pass
+
+
+def populate_resource_profiles(apps, schema_editor):
+    """
+    Convert old HostProfile models to ResourceProfiles.
+
+    Also updates all the foreign keys pointed to the old
+    host profile. This change was basically only a name change.
+    """
+    HostProfile = apps.get_model('resource_inventory', 'HostProfile')
+    ResourceProfile = apps.get_model('resource_inventory', 'ResourceProfile')
+    for hp in HostProfile.objects.all():
+        rp = ResourceProfile.objects.create(name=hp.name, description=hp.description)
+        rp.labs.add(*list(hp.labs.all()))
+        rp.interfaceprofile = hp.interfaceprofile
+        rp.storageprofile = hp.storageprofile
+        rp.cpuprofile = hp.cpuprofile
+        rp.ramprofile = hp.ramprofile
+        rp.save()
+        rp.interfaceprofile.host = rp
+        rp.storageprofile.host = rp
+        rp.cpuprofile.host = rp
+        rp.ramprofile.host = rp
+        rp.interfaceprofile.save()
+        rp.storageprofile.save()
+        rp.cpuprofile.save()
+        rp.ramprofile.save()
+
+
+class Migration(migrations.Migration):
+    """TODO: Creation of the following models.
+
+    - Server
+    - ResourceTemplate
+    - ResourceProfile
+    - ResourceConfiguration (?)
+    - InterfaceConfiguration (?)
+
+    And set the correct defaults for the following fields:
+    - Interface.profile
+    - OpnfvConfig.template (?)
+    - physicalnetwork.lab
+    - physicalnetwork.profile
+    """
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('booking', '0007_remove_booking_config_bundle'),
+        ('account', '0004_downtime'),
+        ('api', '0011_auto_20200218_1536'),
+        ('resource_inventory', '0012_auto_20200103_1850'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='InterfaceConfiguration',
+            fields=[
+                ('id', models.AutoField(primary_key=True, serialize=False)),
+                ('connections', models.ManyToManyField(to='resource_inventory.NetworkConnection')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='ResourceConfiguration',
+            fields=[
+                ('id', models.AutoField(primary_key=True, serialize=False)),
+                ('is_head_node', models.BooleanField(default=False)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='ResourceOPNFVConfig',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='ResourceProfile',
+            fields=[
+                ('id', models.AutoField(primary_key=True, serialize=False)),
+                ('name', models.CharField(max_length=200, unique=True)),
+                ('description', models.TextField()),
+                ('labs', models.ManyToManyField(related_name='resourceprofiles', to='account.Lab')),
+            ],
+        ),
+        migrations.RunPython(populate_resource_profiles),
+        migrations.CreateModel(
+            name='ResourceTemplate',
+            fields=[
+                ('id', models.AutoField(primary_key=True, serialize=False)),
+                ('name', models.CharField(max_length=300, unique=True)),
+                ('xml', models.TextField()),
+                ('description', models.CharField(default='', max_length=1000)),
+                ('public', models.BooleanField(default=False)),
+                ('hidden', models.BooleanField(default=False)),
+                ('lab', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='resourcetemplates', to='account.Lab')),
+                ('owner', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+        migrations.RunPython(populate_resource_templates),
+        migrations.CreateModel(
+            name='Server',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('working', models.BooleanField(default=True)),
+                ('vendor', models.CharField(default='unknown', max_length=100)),
+                ('model', models.CharField(default='unknown', max_length=150)),
+                ('labid', models.CharField(default='default_id', max_length=200, unique=True)),
+                ('booked', models.BooleanField(default=False)),
+                ('name', models.CharField(max_length=200, unique=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.RunPython(populate_servers),
+        migrations.RemoveField(
+            model_name='generichost',
+            name='profile',
+        ),
+        migrations.RemoveField(
+            model_name='generichost',
+            name='resource',
+        ),
+        migrations.RemoveField(
+            model_name='genericinterface',
+            name='connections',
+        ),
+        migrations.RemoveField(
+            model_name='genericinterface',
+            name='host',
+        ),
+        migrations.RemoveField(
+            model_name='genericinterface',
+            name='profile',
+        ),
+        migrations.RemoveField(
+            model_name='genericresource',
+            name='bundle',
+        ),
+        migrations.RemoveField(
+            model_name='genericresourcebundle',
+            name='lab',
+        ),
+        migrations.RemoveField(
+            model_name='genericresourcebundle',
+            name='owner',
+        ),
+        migrations.RemoveField(
+            model_name='host',
+            name='bundle',
+        ),
+        migrations.RemoveField(
+            model_name='host',
+            name='config',
+        ),
+        migrations.RemoveField(
+            model_name='host',
+            name='lab',
+        ),
+        migrations.RemoveField(
+            model_name='host',
+            name='profile',
+        ),
+        migrations.RemoveField(
+            model_name='host',
+            name='remote_management',
+        ),
+        migrations.RemoveField(
+            model_name='host',
+            name='template',
+        ),
+        migrations.RemoveField(
+            model_name='hostconfiguration',
+            name='bundle',
+        ),
+        migrations.RemoveField(
+            model_name='hostconfiguration',
+            name='host',
+        ),
+        migrations.RemoveField(
+            model_name='hostconfiguration',
+            name='image',
+        ),
+        migrations.RemoveField(
+            model_name='hostopnfvconfig',
+            name='host_config',
+        ),
+        migrations.RemoveField(
+            model_name='hostopnfvconfig',
+            name='opnfv_config',
+        ),
+        migrations.RemoveField(
+            model_name='hostopnfvconfig',
+            name='role',
+        ),
+        migrations.RemoveField(
+            model_name='hostprofile',
+            name='labs',
+        ),
+        migrations.RemoveField(
+            model_name='interface',
+            name='host',
+        ),
+        migrations.RemoveField(
+            model_name='interface',
+            name='name',
+        ),
+        migrations.RemoveField(
+            model_name='opnfvconfig',
+            name='bundle',
+        ),
+        migrations.AddField(
+            model_name='interface',
+            name='profile',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='resource_inventory.InterfaceProfile'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='interfaceprofile',
+            name='order',
+            field=models.IntegerField(default=-1),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='bundle',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.ResourceBundle'),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='interfaces',
+            field=models.ManyToManyField(to='resource_inventory.Interface'),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='lab',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='account.Lab'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='labid',
+            field=models.CharField(default='default_id', max_length=200, unique=True),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='model',
+            field=models.CharField(default='unknown', max_length=150),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='remote_management',
+            field=models.ForeignKey(default=resource_inventory.models.get_default_remote_info, on_delete=models.SET(resource_inventory.models.get_default_remote_info), to='resource_inventory.RemoteInfo'),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='vendor',
+            field=models.CharField(default='unknown', max_length=100),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='working',
+            field=models.BooleanField(default=True),
+        ),
+        migrations.AlterField(
+            model_name='cpuprofile',
+            name='host',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cpuprofile', to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AlterField(
+            model_name='diskprofile',
+            name='host',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='storageprofile', to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AlterField(
+            model_name='image',
+            name='host_type',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AlterField(
+            model_name='interfaceprofile',
+            name='host',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interfaceprofile', to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AlterField(
+            model_name='network',
+            name='bundle',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='networks', to='resource_inventory.ResourceTemplate'),
+        ),
+        migrations.AlterField(
+            model_name='ramprofile',
+            name='host',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ramprofile', to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AlterField(
+            model_name='resourcebundle',
+            name='template',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.ResourceTemplate'),
+        ),
+        migrations.DeleteModel(
+            name='ConfigBundle',
+        ),
+        migrations.DeleteModel(
+            name='GenericHost',
+        ),
+        migrations.DeleteModel(
+            name='GenericInterface',
+        ),
+        migrations.DeleteModel(
+            name='GenericResource',
+        ),
+        migrations.DeleteModel(
+            name='GenericResourceBundle',
+        ),
+        migrations.DeleteModel(
+            name='Host',
+        ),
+        migrations.DeleteModel(
+            name='HostConfiguration',
+        ),
+        migrations.DeleteModel(
+            name='HostOPNFVConfig',
+        ),
+        migrations.DeleteModel(
+            name='HostProfile',
+        ),
+        migrations.AddField(
+            model_name='server',
+            name='bundle',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.ResourceBundle'),
+        ),
+        migrations.AddField(
+            model_name='server',
+            name='config',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.ResourceConfiguration'),
+        ),
+        migrations.AddField(
+            model_name='server',
+            name='interfaces',
+            field=models.ManyToManyField(to='resource_inventory.Interface'),
+        ),
+        migrations.AddField(
+            model_name='server',
+            name='lab',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='account.Lab'),
+        ),
+        migrations.AddField(
+            model_name='server',
+            name='profile',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AddField(
+            model_name='server',
+            name='remote_management',
+            field=models.ForeignKey(default=resource_inventory.models.get_default_remote_info, on_delete=models.SET(resource_inventory.models.get_default_remote_info), to='resource_inventory.RemoteInfo'),
+        ),
+        migrations.AddField(
+            model_name='resourceopnfvconfig',
+            name='opnfv_config',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='resource_opnfv_config', to='resource_inventory.OPNFVConfig'),
+        ),
+        migrations.AddField(
+            model_name='resourceopnfvconfig',
+            name='resource_config',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='resource_opnfv_config', to='resource_inventory.ResourceConfiguration'),
+        ),
+        migrations.AddField(
+            model_name='resourceopnfvconfig',
+            name='role',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='resource_opnfv_configs', to='resource_inventory.OPNFVRole'),
+        ),
+        migrations.AddField(
+            model_name='resourceconfiguration',
+            name='image',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='resource_inventory.Image'),
+        ),
+        migrations.AddField(
+            model_name='resourceconfiguration',
+            name='profile',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resource_inventory.ResourceProfile'),
+        ),
+        migrations.AddField(
+            model_name='resourceconfiguration',
+            name='template',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='resourceConfigurations', to='resource_inventory.ResourceTemplate'),
+        ),
+        migrations.AddField(
+            model_name='interfaceconfiguration',
+            name='profile',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resource_inventory.InterfaceProfile'),
+        ),
+        migrations.AddField(
+            model_name='interfaceconfiguration',
+            name='resource_config',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interface_configs', to='resource_inventory.ResourceConfiguration'),
+        ),
+        migrations.AddField(
+            model_name='interface',
+            name='acts_as',
+            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.InterfaceConfiguration'),
+        ),
+        migrations.AddField(
+            model_name='opnfvconfig',
+            name='template',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='opnfv_config', to='resource_inventory.ResourceTemplate'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='config',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='resource_inventory.ResourceConfiguration'),
+        ),
+        migrations.AddField(
+            model_name='physicalnetwork',
+            name='profile',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='resource_inventory.ResourceProfile'),
+            preserve_default=False,
+        ),
+    ]