Merge lp:~rvb/maas/metadata-fix-hostname-1.2 into lp:~maas-committers/maas/trunk

Proposed by Raphaël Badin
Status: Superseded
Proposed branch: lp:~rvb/maas/metadata-fix-hostname-1.2
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 182 lines (+88/-5) (has conflicts)
5 files modified
src/maasserver/templates/maasserver/tag_view.html (+6/-0)
src/maasserver/tests/test_views_tags.py (+58/-0)
src/maasserver/views/tags.py (+9/-0)
src/metadataserver/api.py (+1/-1)
src/metadataserver/tests/test_api.py (+14/-4)
Text conflict in src/maasserver/templates/maasserver/tag_view.html
Text conflict in src/maasserver/tests/test_views_tags.py
Text conflict in src/maasserver/views/tags.py
To merge this branch: bzr merge lp:~rvb/maas/metadata-fix-hostname-1.2
Reviewer Review Type Date Requested Status
Launchpad code reviewers Pending
Review via email: mp+134303@code.launchpad.net

Commit message

Return node.fqdn instead of node.hostname in the metadataservice.

Description of the change

Return node.fqdn instead of node.hostname in the metadataservice.

(This is a backport of https://code.launchpad.net/~rvb/maas/metadata-fix-hostname/+merge/134302)

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/api.py'
2=== modified file 'src/maasserver/forms.py'
3=== modified file 'src/maasserver/templates/maasserver/tag_view.html'
4--- src/maasserver/templates/maasserver/tag_view.html 2012-11-08 10:40:48 +0000
5+++ src/maasserver/templates/maasserver/tag_view.html 2012-11-14 14:44:20 +0000
6@@ -39,9 +39,15 @@
7 {% endif %}
8 </ul>
9 <div id="nodes" class="block first pad-top">
10+<<<<<<< TREE
11 <h2 class="block first line-top pad-top">{{ paginator.count }} Node{{ paginator.count|pluralize }}</h2>
12 {% include "maasserver/nodes_listing.html" with sorting="false" %}
13 {% include "maasserver/pagination.html" %}
14+=======
15+ <h2 class="block first line-top pad-top">{{ paginator.count }} Node{{ paginator.count|pluralize }}</h2>
16+ {% include "maasserver/nodes_listing.html" %}
17+ {% include "maasserver/pagination.html" %}
18+>>>>>>> MERGE-SOURCE
19 </div>
20 {% endblock %}
21
22
23=== modified file 'src/maasserver/tests/test_api.py'
24=== modified file 'src/maasserver/tests/test_forms.py'
25=== modified file 'src/maasserver/tests/test_views_tags.py'
26--- src/maasserver/tests/test_views_tags.py 2012-11-08 12:58:48 +0000
27+++ src/maasserver/tests/test_views_tags.py 2012-11-14 14:44:20 +0000
28@@ -20,6 +20,17 @@
29 from maasserver.testing.testcase import LoggedInTestCase
30 from maasserver.views import tags as tags_views
31 from maastesting.matchers import ContainsAll
32+<<<<<<< TREE
33+=======
34+from maasserver.testing import (
35+ get_content_links,
36+ )
37+from maasserver.testing.factory import factory
38+from maasserver.testing.testcase import (
39+ LoggedInTestCase,
40+ )
41+from maasserver.views import tags as tags_views
42+>>>>>>> MERGE-SOURCE
43
44
45 class TagViewsTest(LoggedInTestCase):
46@@ -88,6 +99,7 @@
47 content_text = doc.cssselect('#content')[0].text_content()
48 self.assertIn(node.hostname, content_text)
49 self.assertNotIn(node2.hostname, content_text)
50+<<<<<<< TREE
51
52 def test_view_tag_shows_kernel_params(self):
53 tag = factory.make_tag(kernel_opts='--test tag params')
54@@ -143,3 +155,49 @@
55 self.assertEqual([("first", "."), ("previous", "?page=2")],
56 [(a.text.lower(), a.get("href"))
57 for a in expr_page_anchors(page3)])
58+=======
59+
60+ def test_view_tag_paginates_nodes(self):
61+ """Listing of nodes with tag is split across multiple pages
62+
63+ Copy-coded from NodeViewsTest.test_node_list_paginates evilly.
64+ """
65+ # Set a very small page size to save creating lots of nodes
66+ page_size = 2
67+ self.patch(tags_views.TagView, 'paginate_by', page_size)
68+ tag = factory.make_tag()
69+ nodes = [factory.make_node(created="2012-10-12 12:00:%02d" % i)
70+ for i in range(page_size * 2 + 1)]
71+ for node in nodes:
72+ node.tags = [tag]
73+ # Order node links with newest first as the view is expected to
74+ node_links = [reverse('node-view', args=[node.system_id])
75+ for node in reversed(nodes)]
76+ expr_node_links = XPath("//div[@id='nodes']/table//a/@href")
77+ expr_page_anchors = XPath("//div[@class='pagination']//a")
78+ # Fetch first page, should link newest two nodes and page 2
79+ response = self.client.get(reverse('tag-view', args=[tag.name]))
80+ page1 = fromstring(response.content)
81+ self.assertEqual(node_links[:page_size], expr_node_links(page1))
82+ self.assertEqual([("next", "?page=2"), ("last", "?page=3")],
83+ [(a.text.lower(), a.get("href"))
84+ for a in expr_page_anchors(page1)])
85+ # Fetch second page, should link next nodes and adjacent pages
86+ response = self.client.get(reverse('tag-view', args=[tag.name]),
87+ {"page": 2})
88+ page2 = fromstring(response.content)
89+ self.assertEqual(node_links[page_size:page_size * 2],
90+ expr_node_links(page2))
91+ self.assertEqual([("first", "."), ("previous", "."),
92+ ("next", "?page=3"), ("last", "?page=3")],
93+ [(a.text.lower(), a.get("href"))
94+ for a in expr_page_anchors(page2)])
95+ # Fetch third page, should link oldest node and node list page
96+ response = self.client.get(reverse('tag-view', args=[tag.name]),
97+ {"page": 3})
98+ page3 = fromstring(response.content)
99+ self.assertEqual(node_links[page_size * 2:], expr_node_links(page3))
100+ self.assertEqual([("first", "."), ("previous", "?page=2")],
101+ [(a.text.lower(), a.get("href"))
102+ for a in expr_page_anchors(page3)])
103+>>>>>>> MERGE-SOURCE
104
105=== modified file 'src/maasserver/views/tags.py'
106--- src/maasserver/views/tags.py 2012-11-08 12:58:48 +0000
107+++ src/maasserver/views/tags.py 2012-11-14 14:44:20 +0000
108@@ -30,6 +30,7 @@
109 name=kwargs.get('name', None),
110 user=self.request.user,
111 to_edit=False)
112+<<<<<<< TREE
113 return super(TagView, self).get(request, *args, **kwargs)
114
115 def get_queryset(self):
116@@ -39,6 +40,14 @@
117 nodes = nodes.prefetch_related('nodegroup')
118 nodes = nodes.prefetch_related('nodegroup__nodegroupinterface_set')
119 return nodes
120+=======
121+ return super(TagView, self).get(request, *args, **kwargs)
122+
123+ def get_queryset(self):
124+ return Tag.objects.get_nodes(
125+ self.tag, user=self.request.user, prefetch_mac=True,
126+ ).order_by('-created')
127+>>>>>>> MERGE-SOURCE
128
129 def get_context_data(self, **kwargs):
130 context = super(TagView, self).get_context_data(**kwargs)
131
132=== modified file 'src/metadataserver/api.py'
133--- src/metadataserver/api.py 2012-11-08 06:34:48 +0000
134+++ src/metadataserver/api.py 2012-11-14 14:44:20 +0000
135@@ -310,7 +310,7 @@
136
137 def local_hostname(self, node, version, item):
138 """Produce local-hostname attribute."""
139- return make_text_response(node.hostname)
140+ return make_text_response(node.fqdn)
141
142 def instance_id(self, node, version, item):
143 """Produce instance-id attribute."""
144
145=== modified file 'src/metadataserver/tests/test_api.py'
146--- src/metadataserver/tests/test_api.py 2012-10-05 14:11:43 +0000
147+++ src/metadataserver/tests/test_api.py 2012-11-14 14:44:20 +0000
148@@ -20,7 +20,11 @@
149 from django.conf import settings
150 from django.core.exceptions import PermissionDenied
151 from django.core.urlresolvers import reverse
152-from maasserver.enum import NODE_STATUS
153+from maasserver.enum import (
154+ NODE_STATUS,
155+ NODEGROUP_STATUS,
156+ NODEGROUPINTERFACE_MANAGEMENT,
157+ )
158 from maasserver.exceptions import (
159 MAASAPINotFound,
160 Unauthorized,
161@@ -220,13 +224,19 @@
162 producers = map(handler.get_attribute_producer, handler.fields)
163 self.assertNotIn(None, producers)
164
165- def test_meta_data_local_hostname_returns_hostname(self):
166+ def test_meta_data_local_hostname_returns_fqdn(self):
167+ nodegroup = factory.make_node_group(
168+ status=NODEGROUP_STATUS.ACCEPTED,
169+ management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS)
170 hostname = factory.getRandomString()
171- client = self.make_node_client(factory.make_node(hostname=hostname))
172+ domain = factory.getRandomString()
173+ node = factory.make_node(
174+ hostname='%s.%s' % (hostname, domain), nodegroup=nodegroup)
175+ client = self.make_node_client(node)
176 url = reverse('metadata-meta-data', args=['latest', 'local-hostname'])
177 response = client.get(url)
178 self.assertEqual(
179- (httplib.OK, hostname),
180+ (httplib.OK, node.fqdn),
181 (response.status_code, response.content.decode('ascii')))
182 self.assertIn('text/plain', response['Content-Type'])
183