def _initializePoolKeywordArgs()

in api-server/tesazure/backends/batch/__init__.py [0:0]


    def _initializePoolKeywordArgs(self, vm_size, executor_image_names=[]):
        """Returns kwargs used for pool initialization."""
        admin_user = None
        if current_app.config['BATCH_NODE_ADMIN_USERNAME'] and current_app.config['BATCH_NODE_ADMIN_PASSWORD']:
            # Add a debug admin user if requested
            current_app.logger.debug(f"Adding user {current_app.config['BATCH_NODE_ADMIN_USERNAME']} to pool")
            admin_user = [azbatch.models.UserAccount(elevation_level=azbatch.models.ElevationLevel.admin, name=current_app.config['BATCH_NODE_ADMIN_USERNAME'], password=current_app.config['BATCH_NODE_ADMIN_PASSWORD'])]

        pool_start_task = None
        if 'BATCH_STORAGE_FILESHARE_NAME' in current_app.config and current_app.config['BATCH_STORAGE_FILESHARE_NAME'] is not None:
            current_app.logger.info(f"Creating pool with Azure files share '{current_app.config['BATCH_STORAGE_FILESHARE_NAME']}'")
            share_name = current_app.config['BATCH_STORAGE_FILESHARE_NAME']
            file_service = azfiles.FileService(account_name=current_app.config['STORAGE_ACCOUNT_NAME'], account_key=current_app.config['STORAGE_ACCOUNT_KEY'])
            file_service.create_share(share_name)

            azfiles_mountpoint = "/mnt/batch/tasks/shared-azfiles"
            # FIXME: core.windows.net suffix could theoretically vary
            azfiles_endpoint = f"//{file_service.account_name}.file.core.windows.net/{share_name}"
            node_start_command = f'/bin/bash -c "mkdir -p {shlex.quote(azfiles_mountpoint)} && mount -t cifs {shlex.quote(azfiles_endpoint)} {shlex.quote(azfiles_mountpoint)} -o vers=3.0,username={shlex.quote(current_app.config["STORAGE_ACCOUNT_NAME"])},password={current_app.config["STORAGE_ACCOUNT_KEY"]},dir_mode=0777,file_mode=0777,serverino,mfsymlinks"'

            pool_start_task = azbatch.models.StartTask(
                command_line=node_start_command,
                wait_for_success=True,
                user_identity=azbatch.models.UserIdentity(
                    auto_user=azbatch.models.AutoUserSpecification(
                        scope=azbatch.models.AutoUserScope.pool,
                        elevation_level=azbatch.models.ElevationLevel.admin
                    )
                )
            )

        acr_registry = None
        if current_app.config['PRIVATE_DOCKER_REGISTRY_URL']:
            # Check if we need to add a private registry to the pool
            # Note images are only downloaded upon creation, never updated later
            current_app.logger.debug(f"Adding private Docker registry {current_app.config['PRIVATE_DOCKER_REGISTRY_URL']} to pool")
            acr_registry = azbatch.models.ContainerRegistry(
                registry_server=current_app.config['PRIVATE_DOCKER_REGISTRY_URL'],
                user_name=current_app.config['PRIVATE_DOCKER_REGISTRY_USERNAME'],
                password=current_app.config['PRIVATE_DOCKER_REGISTRY_PASSWORD']
            )

        container_conf = azbatch.models.ContainerConfiguration(
            container_image_names=['alpine'] + executor_image_names,
            container_registries=[acr_registry] if acr_registry else None)

        image = azbatch.models.VirtualMachineConfiguration(
            image_reference=azbatch.models.ImageReference(
                publisher="microsoft-azure-batch",
                offer="ubuntu-server-container",
                sku="16-04-lts",
                version="latest"
            ),
            container_configuration=container_conf,
            node_agent_sku_id="batch.node.ubuntu 16.04"
        )

        return {
            'vm_size': vm_size,
            'target_dedicated_nodes': current_app.config['BATCH_POOL_DEDICATED_NODE_COUNT'],
            'target_low_priority_nodes': current_app.config['BATCH_POOL_LOW_PRIORITY_NODE_COUNT'],
            'user_accounts': admin_user,
            'start_task': pool_start_task,
            'virtual_machine_configuration': image
        }