Merge lp:~lamont/maas/bug-1676619 into lp:~maas-committers/maas/trunk

Proposed by LaMont Jones
Status: Merged
Approved by: LaMont Jones
Approved revision: no longer in the source branch.
Merged at revision: 5877
Proposed branch: lp:~lamont/maas/bug-1676619
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 113 lines (+23/-6)
4 files modified
src/maasserver/api/dnsresourcerecords.py (+1/-1)
src/maasserver/api/dnsresources.py (+3/-2)
src/maasserver/forms/dnsresource.py (+8/-0)
src/maasserver/forms/tests/test_dnsresource.py (+11/-3)
To merge this branch: bzr merge lp:~lamont/maas/bug-1676619
Reviewer Review Type Date Requested Status
Mike Pontillo (community) Approve
Review via email: mp+321387@code.launchpad.net

Commit message

If DNSResourceForm creates a StaticIPAddress, record the user.

Description of the change

If DNSResourceForm creates a StaticIPAddress, record the user.

To post a comment you must log in.
Revision history for this message
Mike Pontillo (mpontillo) wrote :

Looks good to me. Tested and verified working for create and update.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/api/dnsresourcerecords.py'
2--- src/maasserver/api/dnsresourcerecords.py 2017-02-17 14:23:04 +0000
3+++ src/maasserver/api/dnsresourcerecords.py 2017-03-29 22:35:30 +0000
4@@ -129,7 +129,7 @@
5 # Do we already have a DNSResource for this fqdn?
6 dnsrr = DNSResource.objects.filter(name=name, domain__id=domain.id)
7 if not dnsrr.exists():
8- form = DNSResourceForm(data=request.data)
9+ form = DNSResourceForm(data=request.data, request=request)
10 if form.is_valid():
11 form.save()
12 else:
13
14=== modified file 'src/maasserver/api/dnsresources.py'
15--- src/maasserver/api/dnsresources.py 2017-02-17 14:23:04 +0000
16+++ src/maasserver/api/dnsresources.py 2017-03-29 22:35:30 +0000
17@@ -107,7 +107,7 @@
18 "name:%s" % domainname, user=request.user,
19 perm=NODE_PERMISSION.VIEW)
20 data['domain'] = domain.id
21- form = DNSResourceForm(data=request.data)
22+ form = DNSResourceForm(data=request.data, request=request)
23 if form.is_valid():
24 return form.save()
25 else:
26@@ -164,7 +164,8 @@
27 """
28 dnsresource = DNSResource.objects.get_dnsresource_or_404(
29 id, request.user, NODE_PERMISSION.ADMIN)
30- form = DNSResourceForm(instance=dnsresource, data=request.data)
31+ form = DNSResourceForm(
32+ instance=dnsresource, data=request.data, request=request)
33 if form.is_valid():
34 return form.save()
35 else:
36
37=== modified file 'src/maasserver/forms/dnsresource.py'
38--- src/maasserver/forms/dnsresource.py 2017-03-29 21:21:58 +0000
39+++ src/maasserver/forms/dnsresource.py 2017-03-29 22:35:30 +0000
40@@ -47,6 +47,13 @@
41 'ip_addresses',
42 )
43
44+ def __init__(
45+ self, data=None, instance=None, request=None, *args, **kwargs):
46+ # Always save the user, in case we create a StaticIPAddress in save().
47+ if request is not None:
48+ self.user = request.user
49+ super().__init__(data=data, instance=instance, *args, **kwargs)
50+
51 def clean_ip(self, ipaddr):
52 """Process one IP address (id or address) and return the id."""
53 # If it's a simple number, then assume it's already an id.
54@@ -101,6 +108,7 @@
55 defaults={
56 'alloc_type': IPADDRESS_TYPE.USER_RESERVED,
57 'subnet': subnet,
58+ 'user': self.user,
59 })
60 new_list.append(static_ip.id)
61 self.cleaned_data['ip_addresses'] = new_list
62
63=== modified file 'src/maasserver/forms/tests/test_dnsresource.py'
64--- src/maasserver/forms/tests/test_dnsresource.py 2017-03-29 21:21:58 +0000
65+++ src/maasserver/forms/tests/test_dnsresource.py 2017-03-29 22:35:30 +0000
66@@ -6,6 +6,7 @@
67 __all__ = []
68
69 import random
70+from unittest.mock import Mock
71
72 from maasserver.forms.dnsresource import DNSResourceForm
73 from maasserver.testing.factory import factory
74@@ -19,11 +20,13 @@
75 name = factory.make_name("dnsresource")
76 sip = factory.make_StaticIPAddress()
77 domain = factory.make_Domain()
78+ request = Mock()
79+ request.user = factory.make_User()
80 form = DNSResourceForm({
81 "name": name,
82 "domain": domain.id,
83 "ip_addresses": [sip.id],
84- })
85+ }, request=request)
86 self.assertTrue(form.is_valid(), form.errors)
87 dnsresource = form.save()
88 self.assertEqual(name, dnsresource.name)
89@@ -49,17 +52,22 @@
90 name = factory.make_name("dnsresource")
91 domain = factory.make_Domain()
92 ips = [factory.make_ip_address() for _ in range(3)]
93+ request = Mock()
94+ request.user = factory.make_User()
95 form = DNSResourceForm({
96 "name": name,
97 "domain": domain.id,
98 "ip_addresses": " ".join(ips),
99- })
100+ }, request=request)
101 self.assertTrue(form.is_valid(), form.errors)
102 dnsresource = form.save()
103 self.assertEqual(name, dnsresource.name)
104 self.assertEqual(domain.id, dnsresource.domain.id)
105- actual = {str(ip.ip) for ip in dnsresource.ip_addresses.all()}
106+ actual_ips = dnsresource.ip_addresses.all()
107+ actual = {str(ip.ip) for ip in actual_ips}
108 self.assertItemsEqual(set(ips), actual)
109+ actual_users = {ip.user_id for ip in actual_ips}
110+ self.assertItemsEqual({request.user.id}, actual_users)
111
112 def test__accepts_mix_of_id_and_ipaddress(self):
113 name = factory.make_name("dnsresource")