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
}