def get_hosts_xml_content(self):
        """
        Create hosts.xml for multinode vespa with 3 config nodes.
        Generates (number_of_replicas + 1) groups of number_of shards content nodes each.
        """

        logger.info(f"Writing content for `hosts.xml` with {self.number_of_shards} shards and {self.number_of_replicas} replicas.")
        TOTAL_CONTENT_NODES = (self.number_of_replicas + 1) * self.number_of_shards
        TOTAL_API_NODES = max(MINIMUM_API_NODES, math.ceil(TOTAL_CONTENT_NODES / 4))
        logger.info(f"Total content nodes: {TOTAL_CONTENT_NODES}, Total API nodes: {TOTAL_API_NODES}")

        # Define the root element
        hosts = ET.Element('hosts')

        # Config Nodes (3)
        config_0 = ET.SubElement(hosts, 'host', {'name': 'config-0.vespanet'})
        alias_config_0 = ET.SubElement(config_0, 'alias')
        alias_config_0.text = 'config-0'

        config_1 = ET.SubElement(hosts, 'host', {'name': 'config-1.vespanet'})
        alias_config_1 = ET.SubElement(config_1, 'alias')
        alias_config_1.text = 'config-1'

        config_2 = ET.SubElement(hosts, 'host', {'name': 'config-2.vespanet'})
        alias_config_2 = ET.SubElement(config_2, 'alias')
        alias_config_2.text = 'config-2'

        # API Nodes (container)
        for api_node_number in range(TOTAL_API_NODES):
            api_node = ET.SubElement(hosts, 'host',
                                     {'name': f'api-{api_node_number}.vespanet'})
            alias_api_node = ET.SubElement(api_node, 'alias')
            alias_api_node.text = f'api-{api_node_number}'

        # Content Nodes
        for group_number in range(self.number_of_replicas + 1):  # +1 for the primary group
            for shard_number in range(self.number_of_shards):
                content_node = ET.SubElement(hosts, 'host',
                                             {'name': f'content-{group_number}-{shard_number}.vespanet'})
                alias_content_node = ET.SubElement(content_node, 'alias')
                alias_content_node.text = f'content-{group_number}-{shard_number}'

        # Convert the ElementTree to a string
        rough_string = ET.tostring(hosts, 'utf-8')
        reparsed = minidom.parseString(rough_string)
        pretty_xml_bytes = reparsed.toprettyxml(indent="    ", encoding='utf-8')
        pretty_xml = pretty_xml_bytes.decode('utf-8')

        logger.info("Generated hosts.xml content successfully!")
        return pretty_xml

        Create hosts.xml for multinode vespa with 3 config nodes.
        Generates (number_of_replicas + 1) groups of number_of shards content nodes each.
        
scripts/vespa_local/vespa_local.py