You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

604 lines
32 KiB

  1. {
  2. "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  3. "contentVersion": "1.0.0.0",
  4. "parameters": {
  5. "clusterLocation": {
  6. "type": "string",
  7. "metadata": {
  8. "description": "Location of the Cluster"
  9. }
  10. },
  11. "clusterName": {
  12. "type": "string",
  13. "defaultValue": "Cluster",
  14. "metadata": {
  15. "description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only"
  16. }
  17. },
  18. "nt0applicationStartPort": {
  19. "type": "int",
  20. "defaultValue": 20000
  21. },
  22. "nt0applicationEndPort": {
  23. "type": "int",
  24. "defaultValue": 30000
  25. },
  26. "nt0ephemeralStartPort": {
  27. "type": "int",
  28. "defaultValue": 49152
  29. },
  30. "nt0ephemeralEndPort": {
  31. "type": "int",
  32. "defaultValue": 65534
  33. },
  34. "nt0fabricTcpGatewayPort": {
  35. "type": "int",
  36. "defaultValue": 19000
  37. },
  38. "nt0fabricHttpGatewayPort": {
  39. "type": "int",
  40. "defaultValue": 19080
  41. },
  42. "subnet0Name": {
  43. "type": "string",
  44. "defaultValue": "Subnet-0"
  45. },
  46. "subnet0Prefix": {
  47. "type": "string",
  48. "defaultValue": "10.0.0.0/24"
  49. },
  50. "computeLocation": {
  51. "type": "string"
  52. },
  53. "publicIPAddressName": {
  54. "type": "string",
  55. "defaultValue": "PublicIP-VM"
  56. },
  57. "publicIPAddressType": {
  58. "type": "string",
  59. "allowedValues": [
  60. "Dynamic"
  61. ],
  62. "defaultValue": "Dynamic"
  63. },
  64. "vmStorageAccountContainerName": {
  65. "type": "string",
  66. "defaultValue": "vhds"
  67. },
  68. "adminUserName": {
  69. "type": "string",
  70. "defaultValue": "testadm",
  71. "metadata": {
  72. "description": "Remote desktop user Id"
  73. }
  74. },
  75. "adminPassword": {
  76. "type": "securestring",
  77. "metadata": {
  78. "description": "Remote desktop user password. Must be a strong password"
  79. }
  80. },
  81. "virtualNetworkName": {
  82. "type": "string",
  83. "defaultValue": "VNet"
  84. },
  85. "addressPrefix": {
  86. "type": "string",
  87. "defaultValue": "10.0.0.0/16"
  88. },
  89. "dnsName": {
  90. "type": "string"
  91. },
  92. "nicName": {
  93. "type": "string",
  94. "defaultValue": "NIC"
  95. },
  96. "lbName": {
  97. "type": "string",
  98. "defaultValue": "LoadBalancer"
  99. },
  100. "lbIPName": {
  101. "type": "string",
  102. "defaultValue": "PublicIP-LB-FE"
  103. },
  104. "overProvision": {
  105. "type": "string",
  106. "defaultValue": "false"
  107. },
  108. "vmImagePublisher": {
  109. "type": "string",
  110. "defaultValue": "Microsoft.Azure.ServiceFabric"
  111. },
  112. "vmImageOffer": {
  113. "type": "string",
  114. "defaultValue": "UbuntuServer"
  115. },
  116. "vmImageSku": {
  117. "type": "string",
  118. "defaultValue": "16.04"
  119. },
  120. "vmImageVersion": {
  121. "type": "string",
  122. "defaultValue": "6.0.12"
  123. },
  124. "storageAccountType": {
  125. "type": "string",
  126. "allowedValues": [
  127. "Standard_LRS",
  128. "Standard_GRS"
  129. ],
  130. "defaultValue": "Standard_LRS",
  131. "metadata": {
  132. "description": "Replication option for the VM image storage account"
  133. }
  134. },
  135. "supportLogStorageAccountType": {
  136. "type": "string",
  137. "allowedValues": [
  138. "Standard_LRS",
  139. "Standard_GRS"
  140. ],
  141. "defaultValue": "Standard_LRS",
  142. "metadata": {
  143. "description": "Replication option for the support log storage account"
  144. }
  145. },
  146. "supportLogStorageAccountName": {
  147. "type": "string",
  148. "defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]",
  149. "metadata": {
  150. "description": "Name for the storage account that contains support logs from the cluster"
  151. }
  152. },
  153. "applicationDiagnosticsStorageAccountType": {
  154. "type": "string",
  155. "allowedValues": [
  156. "Standard_LRS",
  157. "Standard_GRS"
  158. ],
  159. "defaultValue": "Standard_LRS",
  160. "metadata": {
  161. "description": "Replication option for the application diagnostics storage account"
  162. }
  163. },
  164. "applicationDiagnosticsStorageAccountName": {
  165. "type": "string",
  166. "defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]",
  167. "metadata": {
  168. "description": "Name for the storage account that contains application diagnostics data from the cluster"
  169. }
  170. },
  171. "nt0InstanceCount": {
  172. "type": "int",
  173. "defaultValue": 1,
  174. "metadata": {
  175. "description": "Instance count for node type"
  176. }
  177. },
  178. "vmNodeType0Name": {
  179. "type": "string",
  180. "defaultValue": "Primary",
  181. "maxLength": 9
  182. },
  183. "vmNodeType0Size": {
  184. "type": "string",
  185. "defaultValue": "Standard_D1_v2"
  186. }
  187. },
  188. "variables": {
  189. "vmssApiVersion": "2017-03-30",
  190. "lbApiVersion": "2015-06-15",
  191. "vNetApiVersion": "2015-06-15",
  192. "storageApiVersion": "2016-01-01",
  193. "publicIPApiVersion": "2015-06-15",
  194. "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
  195. "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]",
  196. "wadlogs": "<WadCfg><DiagnosticMonitorConfiguration>",
  197. "wadperfcounters1": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\"><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\AvailableMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentAvailableMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. percent available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\UsedMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory used\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Memory percentage\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedByCache\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. used by cache\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIdleTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU idle time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentUserTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU user time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentProcessorTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU percentage guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIOWaitTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU IO wait time\" locale=\"en-us\"/></PerformanceCounterConfiguration>",
  198. "wadperfcounters2": "<PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\BytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk total bytes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk read guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WriteBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk write guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\TransfersPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk transfers\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadsPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk reads\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WritesPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk writes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageReadTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk read time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageWriteTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk write time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageTransferTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk transfer time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageDiskQueueLength\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Disk queue length\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>",
  199. "wadcfgxstart": "[concat(variables('wadlogs'),variables('wadperfcounters1'),variables('wadperfcounters2'),'<Metrics resourceId=\"')]",
  200. "wadcfgxend": "[concat('\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>')]",
  201. "lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
  202. "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]",
  203. "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]",
  204. "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]",
  205. "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]",
  206. "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]",
  207. "vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]",
  208. "uniqueStringArray0": [
  209. "[concat(variables('vmStorageAccountName0'), '0')]",
  210. "[concat(variables('vmStorageAccountName0'), '1')]",
  211. "[concat(variables('vmStorageAccountName0'), '2')]",
  212. "[concat(variables('vmStorageAccountName0'), '3')]",
  213. "[concat(variables('vmStorageAccountName0'), '4')]"
  214. ],
  215. "wadmetricsresourceid0": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name ,'/providers/','Microsoft.Compute/virtualMachineScaleSets/', parameters('vmNodeType0Name'))]"
  216. },
  217. "resources": [
  218. {
  219. "apiVersion": "[variables('storageApiVersion')]",
  220. "type": "Microsoft.Storage/storageAccounts",
  221. "name": "[parameters('supportLogStorageAccountName')]",
  222. "location": "[parameters('computeLocation')]",
  223. "dependsOn": [],
  224. "properties": {},
  225. "kind": "Storage",
  226. "sku": {
  227. "name": "[parameters('supportLogStorageAccountType')]"
  228. },
  229. "tags": {
  230. "resourceType": "Service Fabric",
  231. "clusterName": "[parameters('clusterName')]"
  232. }
  233. },
  234. {
  235. "apiVersion": "[variables('storageApiVersion')]",
  236. "type": "Microsoft.Storage/storageAccounts",
  237. "name": "[parameters('applicationDiagnosticsStorageAccountName')]",
  238. "location": "[parameters('computeLocation')]",
  239. "dependsOn": [],
  240. "properties": {},
  241. "kind": "Storage",
  242. "sku": {
  243. "name": "[parameters('applicationDiagnosticsStorageAccountType')]"
  244. },
  245. "tags": {
  246. "resourceType": "Service Fabric",
  247. "clusterName": "[parameters('clusterName')]"
  248. }
  249. },
  250. {
  251. "apiVersion": "[variables('vNetApiVersion')]",
  252. "type": "Microsoft.Network/virtualNetworks",
  253. "name": "[parameters('virtualNetworkName')]",
  254. "location": "[parameters('computeLocation')]",
  255. "dependsOn": [],
  256. "properties": {
  257. "addressSpace": {
  258. "addressPrefixes": [
  259. "[parameters('addressPrefix')]"
  260. ]
  261. },
  262. "subnets": [
  263. {
  264. "name": "[parameters('subnet0Name')]",
  265. "properties": {
  266. "addressPrefix": "[parameters('subnet0Prefix')]"
  267. }
  268. }
  269. ]
  270. },
  271. "tags": {
  272. "resourceType": "Service Fabric",
  273. "clusterName": "[parameters('clusterName')]"
  274. }
  275. },
  276. {
  277. "apiVersion": "[variables('publicIPApiVersion')]",
  278. "type": "Microsoft.Network/publicIPAddresses",
  279. "name": "[concat(parameters('lbIPName'),'-','0')]",
  280. "location": "[parameters('computeLocation')]",
  281. "properties": {
  282. "dnsSettings": {
  283. "domainNameLabel": "[parameters('dnsName')]"
  284. },
  285. "publicIPAllocationMethod": "Dynamic"
  286. },
  287. "tags": {
  288. "resourceType": "Service Fabric",
  289. "clusterName": "[parameters('clusterName')]"
  290. }
  291. },
  292. {
  293. "apiVersion": "[variables('lbApiVersion')]",
  294. "type": "Microsoft.Network/loadBalancers",
  295. "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]",
  296. "location": "[parameters('computeLocation')]",
  297. "dependsOn": [
  298. "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]"
  299. ],
  300. "properties": {
  301. "frontendIPConfigurations": [
  302. {
  303. "name": "LoadBalancerIPConfig",
  304. "properties": {
  305. "publicIPAddress": {
  306. "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]"
  307. }
  308. }
  309. }
  310. ],
  311. "backendAddressPools": [
  312. {
  313. "name": "LoadBalancerBEAddressPool",
  314. "properties": {}
  315. }
  316. ],
  317. "loadBalancingRules": [
  318. {
  319. "name": "LBRule",
  320. "properties": {
  321. "backendAddressPool": {
  322. "id": "[variables('lbPoolID0')]"
  323. },
  324. "backendPort": "[parameters('nt0fabricTcpGatewayPort')]",
  325. "enableFloatingIP": "false",
  326. "frontendIPConfiguration": {
  327. "id": "[variables('lbIPConfig0')]"
  328. },
  329. "frontendPort": "[parameters('nt0fabricTcpGatewayPort')]",
  330. "idleTimeoutInMinutes": "5",
  331. "probe": {
  332. "id": "[variables('lbProbeID0')]"
  333. },
  334. "protocol": "tcp"
  335. }
  336. },
  337. {
  338. "name": "LBHttpRule",
  339. "properties": {
  340. "backendAddressPool": {
  341. "id": "[variables('lbPoolID0')]"
  342. },
  343. "backendPort": "[parameters('nt0fabricHttpGatewayPort')]",
  344. "enableFloatingIP": "false",
  345. "frontendIPConfiguration": {
  346. "id": "[variables('lbIPConfig0')]"
  347. },
  348. "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]",
  349. "idleTimeoutInMinutes": "5",
  350. "probe": {
  351. "id": "[variables('lbHttpProbeID0')]"
  352. },
  353. "protocol": "tcp"
  354. }
  355. }
  356. ],
  357. "probes": [
  358. {
  359. "name": "FabricGatewayProbe",
  360. "properties": {
  361. "intervalInSeconds": 5,
  362. "numberOfProbes": 2,
  363. "port": "[parameters('nt0fabricTcpGatewayPort')]",
  364. "protocol": "tcp"
  365. }
  366. },
  367. {
  368. "name": "FabricHttpGatewayProbe",
  369. "properties": {
  370. "intervalInSeconds": 5,
  371. "numberOfProbes": 2,
  372. "port": "[parameters('nt0fabricHttpGatewayPort')]",
  373. "protocol": "tcp"
  374. }
  375. }
  376. ],
  377. "inboundNatPools": [
  378. {
  379. "name": "LoadBalancerBEAddressNatPool",
  380. "properties": {
  381. "backendPort": "22",
  382. "frontendIPConfiguration": {
  383. "id": "[variables('lbIPConfig0')]"
  384. },
  385. "frontendPortRangeEnd": "4500",
  386. "frontendPortRangeStart": "3389",
  387. "protocol": "tcp"
  388. }
  389. }
  390. ]
  391. },
  392. "tags": {
  393. "resourceType": "Service Fabric",
  394. "clusterName": "[parameters('clusterName')]"
  395. }
  396. },
  397. {
  398. "apiVersion": "[variables('storageApiVersion')]",
  399. "type": "Microsoft.Storage/storageAccounts",
  400. "name": "[variables('uniqueStringArray0')[copyIndex()]]",
  401. "location": "[parameters('computeLocation')]",
  402. "dependsOn": [],
  403. "properties": {},
  404. "copy": {
  405. "name": "storageLoop",
  406. "count": 5
  407. },
  408. "kind": "Storage",
  409. "sku": {
  410. "name": "[parameters('storageAccountType')]"
  411. },
  412. "tags": {
  413. "resourceType": "Service Fabric",
  414. "clusterName": "[parameters('clusterName')]"
  415. }
  416. },
  417. {
  418. "apiVersion": "[variables('vmssApiVersion')]",
  419. "type": "Microsoft.Compute/virtualMachineScaleSets",
  420. "name": "[parameters('vmNodeType0Name')]",
  421. "location": "[parameters('computeLocation')]",
  422. "dependsOn": [
  423. "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
  424. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0])]",
  425. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1])]",
  426. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2])]",
  427. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]",
  428. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]",
  429. "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
  430. "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]",
  431. "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]"
  432. ],
  433. "properties": {
  434. "overprovision": "[parameters('overProvision')]",
  435. "upgradePolicy": {
  436. "mode": "Automatic"
  437. },
  438. "virtualMachineProfile": {
  439. "extensionProfile": {
  440. "extensions": [
  441. {
  442. "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricLinuxNode')]",
  443. "properties": {
  444. "type": "ServiceFabricLinuxNode",
  445. "autoUpgradeMinorVersion": true,
  446. "protectedSettings": {
  447. "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
  448. "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
  449. },
  450. "publisher": "Microsoft.Azure.ServiceFabric",
  451. "settings": {
  452. "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
  453. "nodeTypeRef": "[parameters('vmNodeType0Name')]",
  454. "durabilityLevel": "Bronze",
  455. "enableParallelJobs": true,
  456. "nicPrefixOverride": "[parameters('subnet0Prefix')]"
  457. },
  458. "typeHandlerVersion": "1.0"
  459. }
  460. },
  461. {
  462. "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]",
  463. "properties": {
  464. "type": "LinuxDiagnostic",
  465. "autoUpgradeMinorVersion": true,
  466. "protectedSettings": {
  467. "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
  468. "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
  469. "storageAccountEndPoint": "https://core.windows.net/"
  470. },
  471. "publisher": "Microsoft.OSTCExtensions",
  472. "settings": {
  473. "xmlCfg": "[base64(concat(variables('wadcfgxstart'),variables('wadmetricsresourceid0'),variables('wadcfgxend')))]",
  474. "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
  475. },
  476. "typeHandlerVersion": "2.3"
  477. }
  478. }
  479. ]
  480. },
  481. "networkProfile": {
  482. "networkInterfaceConfigurations": [
  483. {
  484. "name": "[concat(parameters('nicName'), '-0')]",
  485. "properties": {
  486. "ipConfigurations": [
  487. {
  488. "name": "[concat(parameters('nicName'),'-',0)]",
  489. "properties": {
  490. "loadBalancerBackendAddressPools": [
  491. {
  492. "id": "[variables('lbPoolID0')]"
  493. }
  494. ],
  495. "loadBalancerInboundNatPools": [
  496. {
  497. "id": "[variables('lbNatPoolID0')]"
  498. }
  499. ],
  500. "subnet": {
  501. "id": "[variables('subnet0Ref')]"
  502. }
  503. }
  504. }
  505. ],
  506. "primary": true
  507. }
  508. }
  509. ]
  510. },
  511. "osProfile": {
  512. "adminPassword": "[parameters('adminPassword')]",
  513. "adminUsername": "[parameters('adminUsername')]",
  514. "computernamePrefix": "[parameters('vmNodeType0Name')]"
  515. },
  516. "storageProfile": {
  517. "imageReference": {
  518. "publisher": "[parameters('vmImagePublisher')]",
  519. "offer": "[parameters('vmImageOffer')]",
  520. "sku": "[parameters('vmImageSku')]",
  521. "version": "[parameters('vmImageVersion')]"
  522. },
  523. "osDisk": {
  524. "caching": "ReadOnly",
  525. "createOption": "FromImage",
  526. "vhdContainers": [
  527. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  528. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  529. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  530. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  531. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]"
  532. ],
  533. "name": "vmssosdisk"
  534. }
  535. }
  536. }
  537. },
  538. "sku": {
  539. "name": "[parameters('vmNodeType0Size')]",
  540. "capacity": "[parameters('nt0InstanceCount')]",
  541. "tier": "Standard"
  542. },
  543. "tags": {
  544. "resourceType": "Service Fabric",
  545. "clusterName": "[parameters('clusterName')]"
  546. }
  547. },
  548. {
  549. "apiVersion": "2017-07-01-preview",
  550. "type": "Microsoft.ServiceFabric/clusters",
  551. "name": "[parameters('clusterName')]",
  552. "location": "[parameters('clusterLocation')]",
  553. "dependsOn": [
  554. "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]"
  555. ],
  556. "properties": {
  557. "addonFeatures": [],
  558. "clientCertificateCommonNames": [],
  559. "clientCertificateThumbprints": [],
  560. "clusterState": "Default",
  561. "diagnosticsStorageAccountConfig": {
  562. "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]",
  563. "protectedAccountKeyName": "StorageAccountKey1",
  564. "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]",
  565. "storageAccountName": "[parameters('supportLogStorageAccountName')]",
  566. "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]"
  567. },
  568. "fabricSettings": [],
  569. "managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]",
  570. "nodeTypes": [
  571. {
  572. "name": "[parameters('vmNodeType0Name')]",
  573. "applicationPorts": {
  574. "endPort": "[parameters('nt0applicationEndPort')]",
  575. "startPort": "[parameters('nt0applicationStartPort')]"
  576. },
  577. "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]",
  578. "durabilityLevel": "Bronze",
  579. "ephemeralPorts": {
  580. "endPort": "[parameters('nt0ephemeralEndPort')]",
  581. "startPort": "[parameters('nt0ephemeralStartPort')]"
  582. },
  583. "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]",
  584. "isPrimary": true,
  585. "vmInstanceCount": "[parameters('nt0InstanceCount')]"
  586. }
  587. ],
  588. "provisioningState": "Default",
  589. "reliabilityLevel": "None",
  590. "upgradeMode": "Automatic",
  591. "vmImage": "Linux"
  592. },
  593. "tags": {
  594. "resourceType": "Service Fabric",
  595. "clusterName": "[parameters('clusterName')]"
  596. }
  597. }
  598. ],
  599. "outputs": {
  600. "clusterProperties": {
  601. "value": "[reference(parameters('clusterName'))]",
  602. "type": "object"
  603. }
  604. }
  605. }