Azure / Batch

Microsoft Azure Batch
https://aka.ms/batch
Creative Commons Attribution 4.0 International
24 stars 20 forks source link

Can't create pool from az batch cli using json file #162

Open see24 opened 1 year ago

see24 commented 1 year ago

Problem Description

I am trying to create a pool that is configured with a JSON file. It works fine if I upload the JSON file in the create pool GUI interface except that I have to type to pool id by hand. However if I use the same file with Azure CLI I get an error saying I need to provide an id. My file matches the format described here

Also the documentation here says that you should call az batch pool <your-batch-pool-configuration>.json to use a JSON file to configure a new Batch pool resource but that is incorrect and gives a "not recognized" error.

Steps to Reproduce

az login
az batch account login -g <group> -n <name>
az batch pool create --json-file template_add_pool.json

Json file

{
    "properties": {
        "id": "poolId",
        "vmSize": "standard_A1_v2",
        "deploymentConfiguration": {
            "virtualMachineConfiguration": {
                "imageReference": {
                    "publisher": "microsoft-azure-batch",
                    "offer": "ubuntu-server-container",
                    "sku": "20-04-lts",
                    "version": "latest"
                },
                "nodeAgentSKUId": "batch.node.ubuntu 20.04",
                "containerConfiguration": {
                  "type": "dockerCompatible",
                  "containerImageNames": [
                    "rocker/r-bspm:jammy"
                  ]
                },
                "nodePlacementConfiguration": {
                  "policy": "regional"
                }
            }
        },
        "scaleSettings": {
            "fixedScale": {
                "targetDedicatedNodes": 1
            }
        },
        "networkConfiguration": {
            "subnetId": <subnetID>
        }
    }
}

Expected Results

A pool is created

Actual Results

ERROR: Parameter 'PoolAddParameter.id' can not be None.

If I try to supply the id outside the Json with --id "cli_id_test" I get:

ERROR: --json-file cannot be combined with:
--id
see24 commented 1 year ago

I was able to get it to work in the end by trail and error of changing much of the JSON syntax. The Json that worked was the following:

{
    "type": "Microsoft.Batch/batchAccounts/pools",
    "apiVersion": "2016-12-01",
    "id": "test_pool_json_cli",
    "vmSize": "standard_A1_v2",
    "virtualMachineConfiguration": {
        "imageReference": {
            "publisher": "microsoft-azure-batch",
            "offer": "ubuntu-server-container",
            "sku": "20-04-lts",
            "version": "latest"
        },
        "nodeAgentSKUId": "batch.node.ubuntu 20.04",
        "containerConfiguration": {
          "type": "dockerCompatible",
          "containerImageNames": [
            "rocker/r-bspm:jammy"
          ]
        },
        "nodePlacementConfiguration": {
          "policy": "regional"
        }
    },
        "targetDedicatedNodes": 1,
    "networkConfiguration": {
        "subnetId":<subnetID>
        }
}

But this file is not accepted in the GUI Add (JSON editor) method of creating a pool. This is very confusing and makes everything much harder to use. Also it is not at all clear from the documentation which structure should be used where or why.