|
4 | 4 | "version": "0.1.2-preview", |
5 | 5 | "parameters": { |
6 | 6 | "basics": [ |
| 7 | + { |
| 8 | + "name": "extendedZone", |
| 9 | + "type": "Microsoft.Common.DropDown", |
| 10 | + "label": "Extended Zone", |
| 11 | + "defaultValue": "None", |
| 12 | + "toolTip": "Deploy in Azure Extended Zone for ultra-low latency edge computing. Los Angeles Extended Zone requires West US region. Perth Extended Zone requires Australia East region. Extended Zone requires Premium_LRS and is supported for R81.20 and above. Extended Zone cannot be combined with Public IP Prefix.", |
| 13 | + "visible": "[not(equals(basics('availabilityZonesChoice'), 'Yes'))]", |
| 14 | + "constraints": { |
| 15 | + "allowedValues": [ |
| 16 | + { |
| 17 | + "label": "None", |
| 18 | + "value": "None" |
| 19 | + }, |
| 20 | + { |
| 21 | + "label": "Los Angeles (requires West US region)", |
| 22 | + "value": "losangeles" |
| 23 | + }, |
| 24 | + { |
| 25 | + "label": "Perth (requires Australia East region)", |
| 26 | + "value": "perth" |
| 27 | + } |
| 28 | + ], |
| 29 | + "required": true |
| 30 | + }, |
| 31 | + "validations": [ |
| 32 | + { |
| 33 | + "isValid": "[or(equals(basics('extendedZone'), 'None'), and(equals(basics('extendedZone'), 'losangeles'), equals(location(), 'westus')), and(equals(basics('extendedZone'), 'perth'), equals(location(), 'australiaeast')))]", |
| 34 | + "message": "Extended Zone selection is not compatible with the selected region. Los Angeles Extended Zone requires West US region, Perth Extended Zone requires Australia East region." |
| 35 | + }, |
| 36 | + { |
| 37 | + "isValid": "[or(equals(basics('extendedZone'), 'None'), not(equals(steps('chkp-advanced').publicIPPrefix, 'yes')))]", |
| 38 | + "message": "Extended Zone cannot be combined with Public IP Prefix." |
| 39 | + }, |
| 40 | + { |
| 41 | + "isValid": "[or(equals(basics('extendedZone'), 'None'), and(not(contains(createArray('R81.10'), steps('chkp').cloudGuardVersion)), equals(steps('chkp-advanced').VMDiskType, 'Premium_LRS')))]", |
| 42 | + "message": "Extended Zone requires version R81.20 or above and VM disk type Premium_LRS (Premium SSD)." |
| 43 | + } |
| 44 | + ] |
| 45 | + }, |
7 | 46 | { |
8 | 47 | "name": "zoneInfo", |
9 | 48 | "type": "Microsoft.Solutions.ArmApiControl", |
|
24 | 63 | { "label": "Yes", "value": "Yes" } |
25 | 64 | ] |
26 | 65 | }, |
27 | | - "visible": "[and(not(empty(basics('zoneInfo').value)), greater(int(if(greater(length(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))), 0), if(greater(length(first(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))).availabilityZoneMappings), 0), string(length(first(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))).availabilityZoneMappings)), '0'), '0')), 0))]" |
| 66 | + "visible": "[and(equals(basics('extendedZone'), 'None'), and(not(empty(basics('zoneInfo').value)), greater(int(if(greater(length(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))), 0), if(greater(length(first(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))).availabilityZoneMappings), 0), string(length(first(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))).availabilityZoneMappings)), '0'), '0')), 0)))]" |
28 | 67 | }, |
29 | 68 | { |
30 | 69 | "name": "zonesDropdown", |
|
39 | 78 | "allowedValues": "[map(range(1, int(string(length(first(filter(basics('zoneInfo').value, (r) => equals(r.name, location()))).availabilityZoneMappings)))), (item) => parse(concat('{\"label\":\"Zone ', string(item), '\",\"value\":\"', string(item), '\"}')))]", |
40 | 79 | "required": false |
41 | 80 | }, |
42 | | - "visible": "[equals(basics('availabilityZonesChoice'), 'Yes')]" |
| 81 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(basics('availabilityZonesChoice'), 'Yes'))]" |
43 | 82 | }, |
44 | 83 | { |
45 | 84 | "name": "zonesTooMany", |
46 | 85 | "type": "Microsoft.Common.InfoBox", |
47 | | - "visible": "[and(equals(basics('availabilityZonesChoice'), 'Yes'), greater(length(coalesce(basics('zonesDropdown'), parse('[]'))), 2))]", |
| 86 | + "visible": "[and(equals(basics('extendedZone'), 'None'), and(equals(basics('availabilityZonesChoice'), 'Yes'), greater(length(coalesce(basics('zonesDropdown'), parse('[]'))), 2)))]", |
48 | 87 | "options": { |
49 | 88 | "icon": "Error", |
50 | 89 | "text": "HA cluster deploys exactly 2 VMs. Please select at most 2 availability zones." |
|
1384 | 1423 | } |
1385 | 1424 | ] |
1386 | 1425 | }, |
1387 | | - "visible": true |
| 1426 | + "visible": "[equals(basics('extendedZone'), 'None')]" |
1388 | 1427 | }, |
1389 | 1428 | { |
1390 | 1429 | "name": "createNewIPPrefix", |
|
1404 | 1443 | } |
1405 | 1444 | ] |
1406 | 1445 | }, |
1407 | | - "visible": "[equals(steps('chkp-advanced').publicIPPrefix, 'yes')]" |
| 1446 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(steps('chkp-advanced').publicIPPrefix, 'yes'))]" |
1408 | 1447 | }, |
1409 | 1448 | { |
1410 | 1449 | "name": "ipPrefixExistingResourceId", |
|
1417 | 1456 | "regex": "^[a-z0-9A-Z -.:/n]{1,}$", |
1418 | 1457 | "validationMessage": "Only alphanumeric characters, hyphens, spaces, periods, and colons are allowed." |
1419 | 1458 | }, |
1420 | | - "visible": "[equals(steps('chkp-advanced').createNewIPPrefix, 'no')]" |
| 1459 | + "visible": "[and(equals(basics('extendedZone'), 'None'), and(equals(steps('chkp-advanced').publicIPPrefix, 'yes'), equals(steps('chkp-advanced').createNewIPPrefix, 'no')))]" |
1421 | 1460 | } |
1422 | 1461 | ] |
1423 | 1462 | }, |
|
1753 | 1792 | ], |
1754 | 1793 | "required": true |
1755 | 1794 | }, |
1756 | | - "visible": true |
| 1795 | + "visible": "[equals(basics('extendedZone'), 'None')]" |
1757 | 1796 | }, |
1758 | 1797 | { |
1759 | 1798 | "name": "addStorageAccountIpRules", |
|
1774 | 1813 | ], |
1775 | 1814 | "required": "[equals(steps('network').storageAccountDeployMode, 'New')]" |
1776 | 1815 | }, |
1777 | | - "visible": "[equals(steps('network').storageAccountDeployMode, 'New')]" |
| 1816 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(steps('network').storageAccountDeployMode, 'New'))]" |
1778 | 1817 | }, |
1779 | 1818 | { |
1780 | 1819 | "name": "existingStorageAccount", |
|
1786 | 1825 | "constraints": { |
1787 | 1826 | "required": "[equals(steps('network').storageAccountDeployMode, 'Existing')]" |
1788 | 1827 | }, |
1789 | | - "visible": "[equals(steps('network').storageAccountDeployMode, 'Existing')]" |
| 1828 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(steps('network').storageAccountDeployMode, 'Existing'))]" |
1790 | 1829 | }, |
1791 | 1830 | { |
1792 | 1831 | "name": "infoExistingStorageAccount", |
1793 | 1832 | "type": "Microsoft.Common.InfoBox", |
1794 | | - "visible": "[equals(steps('network').storageAccountDeployMode, 'Existing')]", |
| 1833 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(steps('network').storageAccountDeployMode, 'Existing'))]", |
1795 | 1834 | "options": { |
1796 | 1835 | "icon": "Info", |
1797 | 1836 | "text": "The Storage Account must allow network access from the Serial Console feature, for more information - <a href='https://learn.microsoft.com/en-us/troubleshoot/azure/virtual-machines/linux/serial-console-linux?WT.mc_id=Portal-Microsoft_Azure_CreateUIDef' target='_blank'>Serial Console Security</a>." |
|
1800 | 1839 | { |
1801 | 1840 | "name": "infoManagedStorageAccount", |
1802 | 1841 | "type": "Microsoft.Common.InfoBox", |
1803 | | - "visible": "[equals(steps('network').storageAccountDeployMode, 'Managed')]", |
| 1842 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(steps('network').storageAccountDeployMode, 'Managed'))]", |
1804 | 1843 | "options": { |
1805 | 1844 | "icon": "Info", |
1806 | 1845 | "text": "Azure will use a managed Storage Account for the deployment, no additional configuration is required." |
|
1809 | 1848 | { |
1810 | 1849 | "name": "warningNoneStorageAccount", |
1811 | 1850 | "type": "Microsoft.Common.InfoBox", |
1812 | | - "visible": "[equals(steps('network').storageAccountDeployMode, 'None')]", |
| 1851 | + "visible": "[and(equals(basics('extendedZone'), 'None'), equals(steps('network').storageAccountDeployMode, 'None'))]", |
1813 | 1852 | "options": { |
1814 | 1853 | "icon": "Warning", |
1815 | 1854 | "text": "Please note that deploying without a Storage Account will not allow you to use the Serial Console feature. For more information - <a href='https://learn.microsoft.com/en-us/troubleshoot/azure/virtual-machines/linux/serial-console-linux?WT.mc_id=Portal-Microsoft_Azure_CreateUIDef' target='_blank'>Azure Serial Console</a>." |
|
1851 | 1890 | ], |
1852 | 1891 | "outputs": { |
1853 | 1892 | "location": "[location()]", |
| 1893 | + "extendedZone": "[basics('extendedZone')]", |
1854 | 1894 | "cloudGuardVersion": "[concat(steps('chkp').cloudGuardVersion, ' - ', coalesce(steps('chkp').R80Offer, 'Bring Your Own License'))]", |
1855 | 1895 | "adminPassword": "[basics('auth').password]", |
1856 | 1896 | "authenticationType": "[basics('auth').authenticationType]", |
|
1874 | 1914 | "diskType": "[if(contains('R81.10' , steps('chkp').cloudGuardVersion) , steps('chkp-advanced').VMDiskTypeOldVersions , steps('chkp-advanced').VMDiskType)]", |
1875 | 1915 | "managedSystemAssigned": "[steps('chkp-advanced').managedSystemAssigned]", |
1876 | 1916 | "sourceImageVhdUri": "[coalesce(steps('chkp-advanced').sourceImageVhdUri, 'noCustomUri')]", |
1877 | | - "availabilityZones": "[if(equals(basics('availabilityZonesChoice'), 'Yes'), if(greater(length(coalesce(basics('zonesDropdown'), parse('[]'))), 0), basics('zonesDropdown'), parse('[\"1\", \"2\"]')), parse('[]'))]", |
1878 | | - "availabilityZonesChoice": "[basics('availabilityZonesChoice')]", |
| 1917 | + "availabilityZones": "[if(and(equals(basics('extendedZone'), 'None'), equals(basics('availabilityZonesChoice'), 'Yes')), if(greater(length(coalesce(basics('zonesDropdown'), parse('[]'))), 0), basics('zonesDropdown'), parse('[\"1\", \"2\"]')), parse('[]'))]", |
| 1918 | + "availabilityZonesChoice": "[if(equals(basics('extendedZone'), 'None'), basics('availabilityZonesChoice'), 'No')]", |
1879 | 1919 | "customMetrics": "[steps('chkp-advanced').customMetrics]", |
1880 | 1920 | "floatingIP": "[steps('chkp-advanced').floatingIP]", |
1881 | | - "publicIPPrefix": "[steps('chkp-advanced').publicIPPrefix]", |
1882 | | - "createNewIPPrefix": "[steps('chkp-advanced').createNewIPPrefix]", |
1883 | | - "ipPrefixExistingResourceId": "[steps('chkp-advanced').ipPrefixExistingResourceId]", |
| 1921 | + "publicIPPrefix": "[if(equals(basics('extendedZone'), 'None'), steps('chkp-advanced').publicIPPrefix, 'no')]", |
| 1922 | + "createNewIPPrefix": "[if(and(equals(basics('extendedZone'), 'None'), equals(steps('chkp-advanced').publicIPPrefix, 'yes')), steps('chkp-advanced').createNewIPPrefix, 'no')]", |
| 1923 | + "ipPrefixExistingResourceId": "[if(and(equals(basics('extendedZone'), 'None'), equals(steps('chkp-advanced').publicIPPrefix, 'yes'), equals(steps('chkp-advanced').createNewIPPrefix, 'no')), steps('chkp-advanced').ipPrefixExistingResourceId, '')]", |
1884 | 1924 | "adminShell": "[steps('chkp-advanced').adminShell]", |
1885 | 1925 | "smart1CloudTokenA": "[steps('chkp').Smart1CloudTokenA]", |
1886 | 1926 | "smart1CloudTokenB": "[steps('chkp').Smart1CloudTokenB]", |
|
0 commit comments