Merge lp:~mpontillo/maas/networks-list-view into lp:~maas-committers/maas/trunk

Proposed by Mike Pontillo
Status: Rejected
Rejected by: MAAS Lander
Proposed branch: lp:~mpontillo/maas/networks-list-view
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 212 lines (+156/-0)
5 files modified
src/maasserver/__init__.py (+2/-0)
src/maasserver/dbviews.py (+58/-0)
src/maasserver/migrations/builtin/maasserver/0108_network_view.py (+31/-0)
src/maasserver/models/__init__.py (+4/-0)
src/maasserver/models/network.py (+61/-0)
To merge this branch: bzr merge lp:~mpontillo/maas/networks-list-view
Reviewer Review Type Date Requested Status
MAAS Maintainers Pending
Review via email: mp+315645@code.launchpad.net

Commit message

WIP

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

Transitioned to Git.

lp:maas has now moved from Bzr to Git.
Please propose your branches with Launchpad using Git.

git clone https://git.launchpad.net/maas

Unmerged revisions

5659. By Mike Pontillo

Bring migrations up to date.

5658. By Mike Pontillo

Merge trunk.

5657. By Mike Pontillo

New approach: unmanaged multi-table inheritance.

5656. By Mike Pontillo

Investigate providing the networks listing based on a database view.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/__init__.py'
--- src/maasserver/__init__.py 2016-12-07 12:46:14 +0000
+++ src/maasserver/__init__.py 2017-01-26 04:30:59 +0000
@@ -32,6 +32,8 @@
3232
33class DefaultViewMeta(DefaultMeta):33class DefaultViewMeta(DefaultMeta):
34 """Default `Meta` class for a view-backed model."""34 """Default `Meta` class for a view-backed model."""
35 # When managed is False, Django will not create a migration for this
36 # model class. This is required for model classes based on views.
35 managed = False37 managed = False
3638
3739
3840
=== modified file 'src/maasserver/dbviews.py'
--- src/maasserver/dbviews.py 2017-01-08 02:48:36 +0000
+++ src/maasserver/dbviews.py 2017-01-26 04:30:59 +0000
@@ -139,6 +139,63 @@
139 AND family(sip_left.ip) = family(sip_right.ip)139 AND family(sip_left.ip) = family(sip_right.ip)
140 """)140 """)
141141
142maasserver_network = dedent("""\
143 SELECT
144 -- subnet.*,
145 subnet.id AS "subnet_ptr_id",
146 fabric.id AS "fabric_id", fabric.name AS "fabric_name",
147 vlan.vid AS "vlan_vid", vlan.name AS "vlan_name",
148 space.id AS "space_id", space.name AS "space_name"
149 FROM maasserver_fabric fabric
150 LEFT OUTER JOIN maasserver_vlan vlan ON vlan.fabric_id = fabric.id
151 LEFT OUTER JOIN maasserver_subnet subnet ON subnet.vlan_id = vlan.id
152 LEFT OUTER JOIN maasserver_space space
153 ON space.id IS NOT DISTINCT FROM vlan.space_id
154 ORDER BY
155 fabric.name,
156 vlan.vid,
157 subnet.cidr
158""")
159
160maasserver_networks_by_fabric = dedent("""\
161 SELECT
162 subnet.*,
163 fabric.id AS "fabric_id", fabric.name AS "fabric_name",
164 vlan.vid AS "vlan_vid", vlan.name AS "vlan_name",
165 subnet.id AS "subnet_id", subnet.name AS "subnet_name",
166 subnet.cidr AS "subnet_cidr",
167 space.id AS "space_id", space.name AS "space_name"
168 FROM maasserver_fabric fabric
169 LEFT OUTER JOIN maasserver_vlan vlan ON vlan.fabric_id = fabric.id
170 LEFT OUTER JOIN maasserver_subnet subnet ON subnet.vlan_id = vlan.id
171 LEFT OUTER JOIN maasserver_space space
172 ON space.id IS NOT DISTINCT FROM vlan.space_id
173 ORDER BY
174 fabric.name,
175 vlan.vid,
176 subnet.cidr
177""")
178
179
180maasserver_networks_by_space = dedent("""\
181 SELECT
182 subnet.*,
183 space.id AS "space_id", space.name AS "space_name",
184 fabric.id AS "fabric_id", fabric.name AS "fabric_name",
185 vlan.vid AS "vlan_vid", vlan.name AS "vlan_name",
186 subnet.id AS "subnet_id", subnet.name AS "subnet_name",
187 subnet.cidr AS "subnet_cidr"
188 FROM maasserver_subnet subnet
189 LEFT OUTER JOIN maasserver_vlan vlan ON subnet.vlan_id = vlan.id
190 LEFT OUTER JOIN maasserver_space space ON space.id
191 IS NOT DISTINCT FROM vlan.space_id
192 LEFT OUTER JOIN maasserver_fabric fabric ON vlan.fabric_id = fabric.id
193 ORDER BY
194 space.name,
195 vlan.name,
196 subnet.cidr
197""")
198
142199
143# Views that are helpful for supporting MAAS.200# Views that are helpful for supporting MAAS.
144# These can be batch-run using the maas-region-support-dump script.201# These can be batch-run using the maas-region-support-dump script.
@@ -274,6 +331,7 @@
274_ALL_VIEWS = {331_ALL_VIEWS = {
275 "maasserver_discovery": maasserver_discovery,332 "maasserver_discovery": maasserver_discovery,
276 "maasserver_routable_pairs": maasserver_routable_pairs,333 "maasserver_routable_pairs": maasserver_routable_pairs,
334 "maasserver_network": maasserver_network,
277 "maas_support__node_overview": maas_support__node_overview,335 "maas_support__node_overview": maas_support__node_overview,
278 "maas_support__device_overview": maas_support__device_overview,336 "maas_support__device_overview": maas_support__device_overview,
279 "maas_support__node_networking": maas_support__node_networking,337 "maas_support__node_networking": maas_support__node_networking,
280338
=== added file 'src/maasserver/migrations/builtin/maasserver/0108_network_view.py'
--- src/maasserver/migrations/builtin/maasserver/0108_network_view.py 1970-01-01 00:00:00 +0000
+++ src/maasserver/migrations/builtin/maasserver/0108_network_view.py 2017-01-26 04:30:59 +0000
@@ -0,0 +1,31 @@
1# -*- coding: utf-8 -*-
2from __future__ import unicode_literals
3
4from django.db import migrations, models
5
6
7class Migration(migrations.Migration):
8
9 dependencies = [
10 ('maasserver', '0107_chassis_to_pods'),
11 ]
12
13 operations = [
14 migrations.CreateModel(
15 name='Network',
16 fields=[
17 ('subnet_ptr', models.OneToOneField(serialize=False, primary_key=True, to='maasserver.Subnet', auto_created=True, parent_link=True)),
18 ('space_name', models.CharField(blank=True, max_length=256, null=True, editable=False)),
19 ('fabric_name', models.CharField(blank=True, max_length=256, null=True, editable=False)),
20 ('vlan_name', models.CharField(blank=True, max_length=256, null=True, editable=False)),
21 ('vlan_vid', models.IntegerField(blank=True, null=True)),
22 ],
23 options={
24 'managed': False,
25 'verbose_name': 'Network',
26 'verbose_name_plural': 'Networks',
27 'db_table': 'maasserver_network',
28 },
29 bases=('maasserver.subnet', models.Model),
30 ),
31 ]
032
=== modified file 'src/maasserver/models/__init__.py'
--- src/maasserver/models/__init__.py 2017-01-23 19:56:16 +0000
+++ src/maasserver/models/__init__.py 2017-01-26 04:30:59 +0000
@@ -43,6 +43,7 @@
43 'Machine',43 'Machine',
44 'MDNS',44 'MDNS',
45 'Neighbour',45 'Neighbour',
46 'Networks',
46 'Node',47 'Node',
47 'NodeGroupToRackController',48 'NodeGroupToRackController',
48 'Notification',49 'Notification',
@@ -142,6 +143,9 @@
142from maasserver.models.licensekey import LicenseKey143from maasserver.models.licensekey import LicenseKey
143from maasserver.models.mdns import MDNS144from maasserver.models.mdns import MDNS
144from maasserver.models.neighbour import Neighbour145from maasserver.models.neighbour import Neighbour
146from maasserver.models.network import (
147 Network,
148)
145from maasserver.models.node import (149from maasserver.models.node import (
146 Controller,150 Controller,
147 Device,151 Device,
148152
=== added file 'src/maasserver/models/network.py'
--- src/maasserver/models/network.py 1970-01-01 00:00:00 +0000
+++ src/maasserver/models/network.py 2017-01-26 04:30:59 +0000
@@ -0,0 +1,61 @@
1# Copyright 2017 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Model definition for a `Discovery` (a discovered network device)."""
5
6__all__ = [
7 'Network',
8 'NetworksByFabric',
9 'NetworksBySpace',
10]
11
12from django.db.models import (
13 CharField,
14 DO_NOTHING,
15 ForeignKey,
16 IntegerField,
17)
18from maasserver import DefaultViewMeta
19from maasserver.models.subnet import Subnet
20from maasserver.models.viewmodel import ViewModel
21from provisioningserver.logger import get_maas_logger
22
23
24maaslog = get_maas_logger("discovery")
25
26
27class Network(Subnet, ViewModel):
28 """A `Network` object represents the combined data for a MAAS network."""
29
30 class Meta(DefaultViewMeta):
31 managed = False
32 db_table = "maasserver_network"
33 verbose_name = "Network"
34 verbose_name_plural = "Networks"
35
36 fabric = ForeignKey(
37 'Fabric', related_name='+', unique=False, blank=False, null=False,
38 editable=False, on_delete=DO_NOTHING)
39
40 space = ForeignKey(
41 'VLAN', related_name='+', unique=False, blank=False, null=True,
42 editable=False, on_delete=DO_NOTHING)
43
44 space_name = CharField(
45 max_length=256, editable=False, null=True, blank=True)
46
47 fabric_name = CharField(
48 max_length=256, editable=False, null=True, blank=True)
49
50 vlan_name = CharField(
51 max_length=256, editable=False, null=True, blank=True)
52
53 vlan_vid = IntegerField(null=True, blank=True)
54
55 def save(self, *args, **kwargs):
56 # Hack to allow saving this unmanaged model.
57 self.__class__ = Subnet
58 Subnet.save(self, *args, **kwargs)
59 self.__class__ = Network
60
61