示例#1
0
    def test_generate_user_data_produces_commissioning_script(self):
        # generate_user_data produces a commissioning script which contains
        # both definitions and use of various commands in python.
        node = factory.make_Node()
        user_data = generate_user_data_for_status(
            node, status=NODE_STATUS.COMMISSIONING)
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals(
            'text/x-shellscript; charset="utf-8"',
            user_data_script['Content-Type'])
        self.assertEquals(
            'base64', user_data_script['Content-Transfer-Encoding'])
        self.assertEquals(
            'attachment; filename="user_data.sh"',
            user_data_script['Content-Disposition'])
        self.assertThat(
            base64.b64decode(user_data_script.get_payload()), ContainsAll({
                b'export DEBIAN_FRONTEND=noninteractive',
                b'maas-run-remote-scripts',
                b'def detect_ipmi',
                b'class IPMIError',
                b'def signal',
                b'VALID_STATUS =',
                b'def download_and_extract_tar',
            }))
示例#2
0
    def test_generate_user_data_produces_testing_script(self):
        node = factory.make_Node()
        user_data = generate_user_data_for_status(node,
                                                  status=NODE_STATUS.TESTING)
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals(
            'text/x-shellscript; charset="utf-8"',
            user_data_script["Content-Type"],
        )
        self.assertEquals("base64",
                          user_data_script["Content-Transfer-Encoding"])
        self.assertEquals(
            'attachment; filename="user_data.sh"',
            user_data_script["Content-Disposition"],
        )
        self.assertThat(
            base64.b64decode(user_data_script.get_payload()),
            ContainsAll({
                b"export DEBIAN_FRONTEND=noninteractive",
                b"maas-run-remote-scripts",
                b"def signal",
                b"def download_and_extract_tar",
            }),
        )
示例#3
0
    def test_generate_user_data_produces_disk_erase_script(self):
        node = factory.make_Node()
        user_data = generate_user_data_for_status(
            node, status=NODE_STATUS.DISK_ERASING,
            extra_content=self.extra_content)
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals(
            'text/x-shellscript; charset="utf-8"',
            user_data_script['Content-Type'])
        self.assertEquals(
            'base64', user_data_script['Content-Transfer-Encoding'])
        self.assertEquals(
            'attachment; filename="user_data.sh"',
            user_data_script['Content-Disposition'])
        payload = base64.b64decode(user_data_script.get_payload())
        self.assertThat(
            payload, ContainsAll({
                b'export DEBIAN_FRONTEND=noninteractive',
                b'maas-wipe',
                b'def signal',
                b'VALID_STATUS =',
                b'class WipeError'
            }))
        self.assertIsNotNone(
            re.search(self.maas_wipe, payload, re.MULTILINE | re.DOTALL))
    def test_generate_user_data_produces_commissioning_script(self):
        # generate_user_data produces a commissioning script which contains
        # both definitions and use of various commands in python.
        node = factory.make_Node()
        user_data = generate_user_data_for_status(
            node, status=NODE_STATUS.COMMISSIONING
        )
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals(
            'text/x-shellscript; charset="utf-8"',
            user_data_script["Content-Type"],
        )
        self.assertEquals(
            "base64", user_data_script["Content-Transfer-Encoding"]
        )
        self.assertEquals(
            'attachment; filename="user_data.sh"',
            user_data_script["Content-Disposition"],
        )
        self.assertThat(
            base64.b64decode(user_data_script.get_payload()),
            ContainsAll(
                {
                    b"find_creds_cfg()",
                    b"main()",
                    b"# maas-run-remote-scripts -",
                }
            ),
        )
示例#5
0
    def test_generate_user_data_specifies_ipmi_user(self):
        node = factory.make_Node()
        if self.ipmi_user:
            Config.objects.set_config("maas_auto_ipmi_user", self.ipmi_user)
        user_data = generate_user_data_for_status(
            node,
            status=self.status,
            extra_content={"enlist_commissioning": True},
        )
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals(
            'text/x-shellscript; charset="utf-8"',
            user_data_script["Content-Type"],
        )
        self.assertEquals("base64",
                          user_data_script["Content-Transfer-Encoding"])
        self.assertEquals(
            'attachment; filename="user_data.sh"',
            user_data_script["Content-Disposition"],
        )
        payload = base64.b64decode(user_data_script.get_payload())
        if self.ipmi_user is None:
            # Ensure that the default user is being used.
            self.ipmi_user = "******"
        self.assertIn(f'--maas-ipmi-user "{self.ipmi_user}"',
                      payload.decode("utf-8"))
示例#6
0
 def read(self, request, version):
     check_version(version)
     rack_controller = find_rack_controller(request)
     # XXX: Set a charset for text/plain. Django automatically encodes
     # non-binary content using DEFAULT_CHARSET (which is UTF-8 by default)
     # but only sets the charset parameter in the content-type header when
     # a content-type is NOT provided.
     return HttpResponse(
         generate_user_data_for_status(
             None, NODE_STATUS.NEW, rack_controller=rack_controller,
             request=request),
         content_type="text/plain")
示例#7
0
    def test_generate_user_data_produces_rescue_mode_script(self):
        node = factory.make_Node()
        user_data = generate_user_data_for_status(
            node, status=NODE_STATUS.RESCUE_MODE)
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals('text/x-shellscript; charset="utf-8"',
                          user_data_script['Content-Type'])
        self.assertEquals('base64',
                          user_data_script['Content-Transfer-Encoding'])
        self.assertEquals('attachment; filename="user_data.sh"',
                          user_data_script['Content-Disposition'])
        self.assertThat(
            base64.b64decode(user_data_script.get_payload()),
            ContainsAll({
                b'export DEBIAN_FRONTEND=noninteractive',
                b'maas-run-remote-scripts',
                b'def signal',
                b'def download_and_extract_tar',
            }))
示例#8
0
    def test_generate_user_data_produces_enlist_script(self):
        # generate_user_data produces a commissioning script which contains
        # both definitions and use of various commands in python.
        rack = factory.make_RackController()
        user_data = generate_user_data_for_status(
            None,
            NODE_STATUS.NEW,
            rack_controller=rack,
            extra_content={"enlist_commissioning": True},
        )
        parsed_data = email.message_from_string(user_data.decode("utf-8"))
        self.assertTrue(parsed_data.is_multipart())

        user_data_script = parsed_data.get_payload()[0]
        self.assertEquals(
            'text/x-shellscript; charset="utf-8"',
            user_data_script["Content-Type"],
        )
        self.assertEquals("base64",
                          user_data_script["Content-Transfer-Encoding"])
        self.assertEquals(
            'attachment; filename="user_data.sh"',
            user_data_script["Content-Disposition"],
        )
        self.assertThat(
            base64.b64decode(user_data_script.get_payload()),
            ContainsAll({
                b"export DEBIAN_FRONTEND=noninteractive",
                b"maas-run-remote-scripts",
                b"def detect_ipmi",
                b"class IPMIError",
                b"def signal",
                b"VALID_STATUS =",
                b"def download_and_extract_tar",
                b"COMMISSIONING",
                b"maas-enlist",
            }),
        )