Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Azure Create Storage Account

See more Azure Storage Accounts Examples

Demonstrates how to create an Azure storage account.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  jsonToken: TJsonObject;
  jsonRequestBody: TJsonObject;
  url: string;
  resp: THttpResponse;
  json: TJsonObject;
  skuName: string;
  skuTier: string;
  kind: string;
  id: string;
  name: string;
  v_type: string;
  location: string;
  propertiesNetworkAclsBypass: string;
  propertiesNetworkAclsDefaultAction: string;
  propertiesSupportsHttpsTrafficOnly: Boolean;
  propertiesEncryptionServicesFileEnabled: Boolean;
  propertiesEncryptionServicesFileLastEnabledTime: string;
  propertiesEncryptionServicesBlobEnabled: Boolean;
  propertiesEncryptionServicesBlobLastEnabledTime: string;
  propertiesEncryptionKeySource: string;
  propertiesAccessTier: string;
  propertiesProvisioningState: string;
  propertiesCreationTime: string;
  propertiesPrimaryEndpointsDfs: string;
  propertiesPrimaryEndpointsWeb: string;
  propertiesPrimaryEndpointsBlob: string;
  propertiesPrimaryEndpointsQueue: string;
  propertiesPrimaryEndpointsTable: string;
  propertiesPrimaryEndpointsFile: string;
  propertiesPrimaryLocation: string;
  propertiesStatusOfPrimary: string;
  propertiesSecondaryLocation: string;
  propertiesStatusOfSecondary: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  //  Load an OAuth2 access token previously fetched by this example:  Get Azure OAuth2 Access Token
  jsonToken := TJsonObject.Create;
  success := jsonToken.LoadFile('qa_data/tokens/azureToken.json');
  //  Assuming success..
  http.AuthToken := jsonToken.StringOf('access_token');
  WriteLn('AuthToken: ' + http.AuthToken);

  http.Accept := 'application/json';

  //  Create the following JSON:

  //  {
  //    "sku": {
  //      "name": "Standard_GRS"
  //    },
  //    "kind": "StorageV2",
  //    "location": "eastus2",
  //  }

  //  Use this online tool to generate the code from sample JSON: 
  //  Generate Code to Create JSON

  jsonRequestBody := TJsonObject.Create;
  jsonRequestBody.UpdateString('sku.name','Standard_GRS');
  jsonRequestBody.UpdateString('kind','StorageV2');
  jsonRequestBody.UpdateString('location','eastus2');

  url := 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}?api-version=2018-02-01';

  resp := THttpResponse.Create;
  success := http.HttpJson('PUT',url,jsonRequestBody,'application/json',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  WriteLn('Response Status Code: ' + resp.StatusCode);

  json := TJsonObject.Create;
  json.Load(resp.BodyStr);
  json.EmitCompact := False;
  WriteLn(json.Emit());

  if (resp.StatusCode >= 300) then
    begin
      WriteLn('Failed.');
      Exit;
    end;

  //  Successful requests to create a new account return a 202 status code with an empty response body. The storage account is created asynchronously. 
  //  If the account already exists or is being provisioned, the request response has a 200 return code with the configuration of the existing storage account in the response body.
  if (resp.StatusCode = 202) then
    begin
      WriteLn('Azure-AsyncOperation: ' + resp.GetHeaderField('Azure-AsyncOperation'));
    end;

  if (resp.StatusCode = 200) then
    begin

      //  Parse a response like this:

      //  	{
      //  	  "sku": {
      //  	    "name": "Standard_GRS",
      //  	    "tier": "Standard"
      //  	  },
      //  	  "kind": "StorageV2",
      //  	  "id": "/subscriptions/6c42643b-ebef-45f0-b917-b3583b84a57f/resourceGroups/gChilkat/providers/Microsoft.Storage/storageAccounts/chilkatsoftware",
      //  	  "name": "chilkatsoftware",
      //  	  "type": "Microsoft.Storage/storageAccounts",
      //  	  "location": "eastus2",
      //  	  "tags": {},
      //  	  "properties": {
      //  	    "networkAcls": {
      //  	      "bypass": "AzureServices",
      //  	      "virtualNetworkRules": [
      //  	      ],
      //  	      "ipRules": [
      //  	      ],
      //  	      "defaultAction": "Allow"
      //  	    },
      //  	    "supportsHttpsTrafficOnly": false,
      //  	    "encryption": {
      //  	      "services": {
      //  	        "file": {
      //  	          "enabled": true,
      //  	          "lastEnabledTime": "2019-05-14T22:18:33.2246670Z"
      //  	        },
      //  	        "blob": {
      //  	          "enabled": true,
      //  	          "lastEnabledTime": "2019-05-14T22:18:33.2246670Z"
      //  	        }
      //  	      },
      //  	      "keySource": "Microsoft.Storage"
      //  	    },
      //  	    "accessTier": "Hot",
      //  	    "provisioningState": "Succeeded",
      //  
      //  	    "creationTime": "2019-05-14T22:18:33.1309165Z",
      //  	    "primaryEndpoints": {
      //  	      "dfs": "https://chilkatsoftware.dfs.core.windows.net/",
      //  	      "web": "https://chilkatsoftware.z20.web.core.windows.net/",
      //  	      "blob": "https://chilkatsoftware.blob.core.windows.net/",
      //  	      "queue": "https://chilkatsoftware.queue.core.windows.net/",
      //  	      "table": "https://chilkatsoftware.table.core.windows.net/",
      //  	      "file": "https://chilkatsoftware.file.core.windows.net/"
      //  	    },
      //  	    "primaryLocation": "eastus2",
      //  	    "statusOfPrimary": "available",
      //  	    "secondaryLocation": "centralus",
      //  	    "statusOfSecondary": "available"
      //  	  }
      //  	}

      //  Use this online tool to generate parsing code from sample JSON: 
      //  Generate Parsing Code from JSON

      skuName := json.StringOf('sku.name');
      skuTier := json.StringOf('sku.tier');
      kind := json.StringOf('kind');
      id := json.StringOf('id');
      name := json.StringOf('name');
      v_type := json.StringOf('type');
      location := json.StringOf('location');
      propertiesNetworkAclsBypass := json.StringOf('properties.networkAcls.bypass');
      propertiesNetworkAclsDefaultAction := json.StringOf('properties.networkAcls.defaultAction');
      propertiesSupportsHttpsTrafficOnly := json.BoolOf('properties.supportsHttpsTrafficOnly');
      propertiesEncryptionServicesFileEnabled := json.BoolOf('properties.encryption.services.file.enabled');
      propertiesEncryptionServicesFileLastEnabledTime := json.StringOf('properties.encryption.services.file.lastEnabledTime');
      propertiesEncryptionServicesBlobEnabled := json.BoolOf('properties.encryption.services.blob.enabled');
      propertiesEncryptionServicesBlobLastEnabledTime := json.StringOf('properties.encryption.services.blob.lastEnabledTime');
      propertiesEncryptionKeySource := json.StringOf('properties.encryption.keySource');
      propertiesAccessTier := json.StringOf('properties.accessTier');
      propertiesProvisioningState := json.StringOf('properties.provisioningState');
      propertiesCreationTime := json.StringOf('properties.creationTime');
      propertiesPrimaryEndpointsDfs := json.StringOf('properties.primaryEndpoints.dfs');
      propertiesPrimaryEndpointsWeb := json.StringOf('properties.primaryEndpoints.web');
      propertiesPrimaryEndpointsBlob := json.StringOf('properties.primaryEndpoints.blob');
      propertiesPrimaryEndpointsQueue := json.StringOf('properties.primaryEndpoints.queue');
      propertiesPrimaryEndpointsTable := json.StringOf('properties.primaryEndpoints.table');
      propertiesPrimaryEndpointsFile := json.StringOf('properties.primaryEndpoints.file');
      propertiesPrimaryLocation := json.StringOf('properties.primaryLocation');
      propertiesStatusOfPrimary := json.StringOf('properties.statusOfPrimary');
      propertiesSecondaryLocation := json.StringOf('properties.secondaryLocation');
      propertiesStatusOfSecondary := json.StringOf('properties.statusOfSecondary');
    end;

  WriteLn('Success.');


  http.Free;
  jsonToken.Free;
  jsonRequestBody.Free;
  resp.Free;
  json.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.