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', }))
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", }), )
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 -", } ), )
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"))
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")
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', }))
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", }), )