def get_services_xml_content(self):
        """
        Create services.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 `services.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 with namespaces
        services = ET.Element('services', {
            'version': '1.0',
            'xmlns:deploy': 'vespa',
            'xmlns:preprocess': 'properties'
        })

        # Admin Section
        admin = ET.SubElement(services, 'admin', {'version': '2.0'})

        configservers = ET.SubElement(admin, 'configservers')
        ET.SubElement(configservers, 'configserver', {'hostalias': 'config-0'})
        ET.SubElement(configservers, 'configserver', {'hostalias': 'config-1'})
        ET.SubElement(configservers, 'configserver', {'hostalias': 'config-2'})

        cluster_controllers = ET.SubElement(admin, 'cluster-controllers')
        ET.SubElement(cluster_controllers, 'cluster-controller', {
            'hostalias': 'config-0',
            'jvm-options': '-Xms32M -Xmx64M'
        })
        ET.SubElement(cluster_controllers, 'cluster-controller', {
            'hostalias': 'config-1',
            'jvm-options': '-Xms32M -Xmx64M'
        })
        ET.SubElement(cluster_controllers, 'cluster-controller', {
            'hostalias': 'config-2',
            'jvm-options': '-Xms32M -Xmx64M'
        })

        slobroks = ET.SubElement(admin, 'slobroks')
        ET.SubElement(slobroks, 'slobrok', {'hostalias': 'config-0'})
        ET.SubElement(slobroks, 'slobrok', {'hostalias': 'config-1'})
        ET.SubElement(slobroks, 'slobrok', {'hostalias': 'config-2'})

        # Note: We only have 1 config node for admin.
        ET.SubElement(admin, 'adminserver', {'hostalias': 'config-0'})

        # Container Section (API nodes)
        container = ET.SubElement(services, 'container', {'id': 'default', 'version': '1.0'})
        ET.SubElement(container, 'document-api')
        ET.SubElement(container, 'search')

        nodes = ET.SubElement(container, 'nodes')
        ET.SubElement(nodes, 'jvm', {
            'options': '-Xms32M -Xmx256M -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005'
        })
        for api_node_number in range(TOTAL_API_NODES):
            ET.SubElement(nodes, 'node', {'hostalias': f'api-{api_node_number}'})

        # Content Section
        content = ET.SubElement(services, 'content', {'id': 'content_default', 'version': '1.0'})
        # Optional: Redundancy can be commented out or adjusted
        redundancy = ET.SubElement(content, 'redundancy')
        redundancy.text = str(self.number_of_replicas + 1)  # As per Vespa's redundancy calculation

        documents = ET.SubElement(content, 'documents')
        ET.SubElement(documents, 'document', {
            'type': 'test_vespa_client',
            'mode': 'index'
        })

        group_parent = ET.SubElement(content, 'group')

        # Distribution configuration
        ET.SubElement(group_parent, 'distribution', {'partitions': '1|' * self.number_of_replicas + "*"})

        # Generate Groups and Nodes
        node_distribution_key = 0
        for group_number in range(self.number_of_replicas + 1):  # +1 for the primary group
            group = ET.SubElement(group_parent, 'group', {
                'name': f'group-{group_number}',
                'distribution-key': str(group_number)
            })
            for shard_number in range(self.number_of_shards):
                hostalias = f'content-{group_number}-{shard_number}'
                ET.SubElement(group, 'node', {
                    'hostalias': hostalias,
                    'distribution-key': str(node_distribution_key)
                })
                node_distribution_key += 1

        # Convert the ElementTree to a string
        rough_string = ET.tostring(services, '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 services.xml content successfully!")
        return pretty_xml

        Create services.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