示例#1
0
    def create(self, request):
        """@description-title Create a DHCP snippet
        @description Creates a DHCP snippet.

        @param (string) "name" [required=true] The name of the DHCP snippet.

        @param (string) "value" [required=true] The snippet of config inserted
        into dhcpd.conf.

        @param (string) "description" [required=false] A description of what
        the snippet does.

        @param (boolean) "enabled" [required=false] Whether or not the snippet
        is currently enabled.

        @param (string) "node" [required=false] The node this snippet applies
        to. Cannot be used with subnet or global_snippet.

        @param (string) "subnet" [required=false] The subnet this snippet
        applies to. Cannot be used with node or global_snippet.

        @param (boolean) "global_snippet" [required=false] Whether or not this
        snippet is to be applied globally. Cannot be used with node or subnet.

        @success (http-status-code) "server-success" 200
        @success (json) "success-json" A JSON object containing the new DHCP
        snippet object.
        @success-example "success-json" [exkey=dhcp-snippets-create]
        placeholder text
        """
        form = DHCPSnippetForm(data=request.data)
        if form.is_valid():
            return form.save(ENDPOINT.API, request)
        else:
            raise MAASAPIValidationError(form.errors)
示例#2
0
 def test__creates_dhcp_snippet(self):
     name = factory.make_name('name')
     value = factory.make_string()
     description = factory.make_string()
     enabled = factory.pick_bool()
     form = DHCPSnippetForm(
         data={
             'name': name,
             'value': value,
             'description': description,
             'enabled': enabled,
         })
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(name, dhcp_snippet.name)
     self.assertEqual(value, dhcp_snippet.value.data)
     self.assertEqual(description, dhcp_snippet.description)
     self.assertEqual(enabled, dhcp_snippet.enabled)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(event.description,
                      "Created DHCP snippet '%s'." % dhcp_snippet.name)
示例#3
0
 def test_create_dhcp_snippet_with_iprange(self):
     subnet = factory.make_ipv4_Subnet_with_IPRanges()
     iprange = subnet.get_dynamic_ranges().first()
     iprange.save()
     name = factory.make_name("name")
     value = factory.make_string()
     description = factory.make_string()
     enabled = factory.pick_bool()
     form = DHCPSnippetForm(
         data={
             "name": name,
             "value": value,
             "description": description,
             "enabled": enabled,
             "subnet": subnet.id,
             "iprange": iprange.id,
         }
     )
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(name, dhcp_snippet.name)
     self.assertEqual(value, dhcp_snippet.value.data)
     self.assertEqual(description, dhcp_snippet.description)
     self.assertEqual(enabled, dhcp_snippet.enabled)
     self.assertEqual(subnet, dhcp_snippet.subnet)
     self.assertEqual(iprange, dhcp_snippet.iprange)
示例#4
0
    def create(self, params):
        """Create the object from params iff admin."""
        if not reload_object(self.user).is_superuser:
            raise HandlerPermissionError()

        request = HttpRequest()
        request.user = self.user
        # Create by using form.
        form = DHCPSnippetForm(request=request, data=params)
        if form.is_valid():
            try:
                obj = form.save(ENDPOINT.UI, request)
            except ValidationError as e:
                try:
                    raise HandlerValidationError(e.message_dict)
                except AttributeError:
                    raise HandlerValidationError({"__all__": e.message})
            return self.full_dehydrate(obj)
        else:
            raise HandlerValidationError(form.errors)

        # Create by updating the fields on the object.
        obj = self._meta.object_class()
        obj = self.full_hydrate(obj, params)
        obj.save()
        return self.full_dehydrate(obj)
示例#5
0
 def test__update_global_snippet_resets_node(self):
     node = factory.make_Node()
     dhcp_snippet = factory.make_DHCPSnippet(node=node)
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={"global_snippet": True})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertIsNone(dhcp_snippet.node)
示例#6
0
 def test__updates_subnet(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     subnet = factory.make_Subnet()
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'subnet': subnet.id})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(subnet, dhcp_snippet.subnet)
示例#7
0
 def test__updates_node(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     node = factory.make_Node()
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'node': node.system_id})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(node, dhcp_snippet.node)
示例#8
0
 def test__updates_enabled(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     enabled = not dhcp_snippet.enabled
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'enabled': enabled})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(enabled, dhcp_snippet.enabled)
示例#9
0
 def test__updates_description(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     description = factory.make_string()
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'description': description})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(description, dhcp_snippet.description)
示例#10
0
 def test__update_global_snippet_resets_subnet(self):
     subnet = factory.make_Subnet()
     dhcp_snippet = factory.make_DHCPSnippet(subnet=subnet)
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={"global_snippet": True})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertIsNone(dhcp_snippet.subnet)
示例#11
0
 def test__updates_name(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     name = factory.make_name('name')
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'name': name})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(name, dhcp_snippet.name)
示例#12
0
 def test__cannot_update_both_node_and_subnet(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={
                                'node': factory.make_Node().system_id,
                                'subnet': factory.make_Subnet().id,
                            })
     self.assertFalse(form.is_valid())
示例#13
0
 def test__updates_subnet_when_node_set(self):
     dhcp_snippet = factory.make_DHCPSnippet(node=factory.make_Node())
     subnet = factory.make_Subnet()
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'subnet': subnet.id})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertIsNone(dhcp_snippet.node)
     self.assertEquals(subnet, dhcp_snippet.subnet)
示例#14
0
 def test__update_failure_doesnt_delete_value(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     value = dhcp_snippet.value.data
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={
                                'node': factory.make_Node().system_id,
                                'subnet': factory.make_Subnet().id,
                            })
     self.assertFalse(form.is_valid())
     self.assertEquals(value, reload_object(dhcp_snippet).value.data)
示例#15
0
 def test__updates_value(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     old_value = dhcp_snippet.value.data
     new_value = factory.make_string()
     form = DHCPSnippetForm(
         instance=dhcp_snippet, data={'value': new_value})
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(new_value, dhcp_snippet.value.data)
     self.assertEqual(old_value, dhcp_snippet.value.previous_version.data)
示例#16
0
 def test__updates_enabled(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     enabled = not dhcp_snippet.enabled
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'enabled': enabled})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(enabled, dhcp_snippet.enabled)
示例#17
0
 def test__updates_description(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     description = factory.make_string()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'description': description})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(description, dhcp_snippet.description)
示例#18
0
 def test__updates_subnet(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     subnet = factory.make_Subnet()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'subnet': subnet.id})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(subnet, dhcp_snippet.subnet)
示例#19
0
 def test__update_global_snippet_resets_subnet(self):
     subnet = factory.make_Subnet()
     dhcp_snippet = factory.make_DHCPSnippet(subnet=subnet)
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={"global_snippet": True})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertIsNone(dhcp_snippet.subnet)
示例#20
0
 def test__updates_node(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     node = factory.make_Node()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'node': node.system_id})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(node, dhcp_snippet.node)
示例#21
0
 def test_updates_subnet_when_node_set(self):
     dhcp_snippet = factory.make_DHCPSnippet(node=factory.make_Node())
     subnet = factory.make_Subnet()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={"subnet": subnet.id})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertIsNone(dhcp_snippet.node)
     self.assertEquals(subnet, dhcp_snippet.subnet)
示例#22
0
 def test__updates_value(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     old_value = dhcp_snippet.value.data
     new_value = factory.make_string()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'value': new_value})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(new_value, dhcp_snippet.value.data)
     self.assertEqual(old_value, dhcp_snippet.value.previous_version.data)
示例#23
0
 def test__updates_name(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     name = factory.make_name('name')
     form = DHCPSnippetForm(instance=dhcp_snippet, data={'name': name})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(name, dhcp_snippet.name)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(event.description,
                      "Updated DHCP snippet '%s'." % dhcp_snippet.name)
示例#24
0
 def test__create_dhcp_snippet_defaults_to_enabled(self):
     name = factory.make_name('name')
     value = factory.make_string()
     description = factory.make_string()
     form = DHCPSnippetForm(data={
         'name': name,
         'value': value,
         'description': description,
     })
     self.assertTrue(form.is_valid(), form.errors)
     dhcp_snippet = form.save()
     self.assertEqual(name, dhcp_snippet.name)
     self.assertEqual(value, dhcp_snippet.value.data)
     self.assertEqual(description, dhcp_snippet.description)
     self.assertTrue(dhcp_snippet.enabled)
示例#25
0
 def test_create_dhcp_snippet_defaults_to_enabled(self):
     name = factory.make_name("name")
     value = factory.make_string()
     description = factory.make_string()
     form = DHCPSnippetForm(
         data={"name": name, "value": value, "description": description}
     )
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(name, dhcp_snippet.name)
     self.assertEqual(value, dhcp_snippet.value.data)
     self.assertEqual(description, dhcp_snippet.description)
     self.assertTrue(dhcp_snippet.enabled)
示例#26
0
 def test__cannt_create_dhcp_snippet_with_node_and_subnet(self):
     node = factory.make_Node()
     subnet = factory.make_Subnet()
     name = factory.make_name('name')
     value = factory.make_string()
     description = factory.make_string()
     enabled = factory.pick_bool()
     form = DHCPSnippetForm(data={
         'name': name,
         'value': value,
         'description': description,
         'enabled': enabled,
         'node': node.system_id,
         'subnet': subnet.id,
     })
     self.assertFalse(form.is_valid())
示例#27
0
 def test_cannt_create_dhcp_snippet_with_node_and_subnet(self):
     node = factory.make_Node()
     subnet = factory.make_Subnet()
     name = factory.make_name("name")
     value = factory.make_string()
     description = factory.make_string()
     enabled = factory.pick_bool()
     form = DHCPSnippetForm(
         data={
             "name": name,
             "value": value,
             "description": description,
             "enabled": enabled,
             "node": node.system_id,
             "subnet": subnet.id,
         })
     self.assertFalse(form.is_valid())
示例#28
0
 def test_create_dhcp_snippet_with_iprange_requires_subnet(self):
     subnet = factory.make_ipv4_Subnet_with_IPRanges()
     iprange = subnet.get_dynamic_ranges().first()
     iprange.save()
     name = factory.make_name("name")
     value = factory.make_string()
     description = factory.make_string()
     enabled = factory.pick_bool()
     form = DHCPSnippetForm(
         data={
             "name": name,
             "value": value,
             "dscription": description,
             "enabled": enabled,
             "iprange": iprange.id,
         }
     )
     self.assertFalse(form.is_valid(), form.errors)
示例#29
0
 def test__fail_validation_on_create_cleans_value(self):
     node = factory.make_Node()
     subnet = factory.make_Subnet()
     name = factory.make_name('name')
     value = factory.make_string()
     description = factory.make_string()
     enabled = factory.pick_bool()
     form = DHCPSnippetForm(data={
         'name': name,
         'value': value,
         'description': description,
         'enabled': enabled,
         'node': node.system_id,
         'subnet': subnet.id,
     })
     self.assertFalse(form.is_valid())
     self.assertItemsEqual([], DHCPSnippet.objects.all())
     self.assertItemsEqual([], VersionedTextFile.objects.all())
示例#30
0
    def update(self, params):
        """Update the object from params iff admin."""
        if not self.user.is_superuser:
            raise HandlerPermissionError()

        obj = self.get_object(params)
        request = HttpRequest()
        request.user = self.user
        # Update by using form.
        form = DHCPSnippetForm(instance=obj, request=request, data=params)
        if form.is_valid():
            try:
                obj = form.save(ENDPOINT.UI, request)
            except ValidationError as e:
                raise HandlerValidationError(e.error_dict)
            return self.full_dehydrate(obj)
        else:
            raise HandlerValidationError(form.errors)