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.

733 lines
34 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. "nt0reverseProxyEndpointPort": {
  43. "type": "int",
  44. "defaultValue": 19081
  45. },
  46. "webMvcHttpPort": {
  47. "type": "int",
  48. "defaultValue": 5100
  49. },
  50. "webSpaHttpPort": {
  51. "type": "int",
  52. "defaultValue": 5104
  53. },
  54. "webStatusHttpPort": {
  55. "type": "int",
  56. "defaultValue": 5107
  57. },
  58. "IdSrvHttpRule": {
  59. "type": "int",
  60. "defaultValue": 5105
  61. },
  62. "subnet0Name": {
  63. "type": "string",
  64. "defaultValue": "Subnet-0"
  65. },
  66. "subnet0Prefix": {
  67. "type": "string",
  68. "defaultValue": "10.0.0.0/24"
  69. },
  70. "computeLocation": {
  71. "type": "string"
  72. },
  73. "publicIPAddressName": {
  74. "type": "string",
  75. "defaultValue": "PublicIP-VM"
  76. },
  77. "publicIPAddressType": {
  78. "type": "string",
  79. "allowedValues": [
  80. "Dynamic"
  81. ],
  82. "defaultValue": "Dynamic"
  83. },
  84. "vmStorageAccountContainerName": {
  85. "type": "string",
  86. "defaultValue": "vhds"
  87. },
  88. "adminUserName": {
  89. "type": "string",
  90. "defaultValue": "testadm",
  91. "metadata": {
  92. "description": "Remote desktop user Id"
  93. }
  94. },
  95. "adminPassword": {
  96. "type": "securestring",
  97. "metadata": {
  98. "description": "Remote desktop user password. Must be a strong password"
  99. }
  100. },
  101. "virtualNetworkName": {
  102. "type": "string",
  103. "defaultValue": "VNet"
  104. },
  105. "addressPrefix": {
  106. "type": "string",
  107. "defaultValue": "10.0.0.0/16"
  108. },
  109. "dnsName": {
  110. "type": "string"
  111. },
  112. "nicName": {
  113. "type": "string",
  114. "defaultValue": "NIC"
  115. },
  116. "lbName": {
  117. "type": "string",
  118. "defaultValue": "LoadBalancer"
  119. },
  120. "lbIPName": {
  121. "type": "string",
  122. "defaultValue": "PublicIP-LB-FE"
  123. },
  124. "overProvision": {
  125. "type": "string",
  126. "defaultValue": "false"
  127. },
  128. "vmImagePublisher": {
  129. "type": "string",
  130. "defaultValue": "MicrosoftWindowsServer"
  131. },
  132. "vmImageOffer": {
  133. "type": "string",
  134. "defaultValue": "WindowsServer"
  135. },
  136. "vmImageSku": {
  137. "type": "string",
  138. "defaultValue": "2012-R2-Datacenter"
  139. },
  140. "vmImageVersion": {
  141. "type": "string",
  142. "defaultValue": "latest"
  143. },
  144. "storageAccountType": {
  145. "type": "string",
  146. "allowedValues": [
  147. "Standard_LRS",
  148. "Standard_GRS"
  149. ],
  150. "defaultValue": "Standard_LRS",
  151. "metadata": {
  152. "description": "Replication option for the VM image storage account"
  153. }
  154. },
  155. "supportLogStorageAccountType": {
  156. "type": "string",
  157. "allowedValues": [
  158. "Standard_LRS",
  159. "Standard_GRS"
  160. ],
  161. "defaultValue": "Standard_LRS",
  162. "metadata": {
  163. "description": "Replication option for the support log storage account"
  164. }
  165. },
  166. "supportLogStorageAccountName": {
  167. "type": "string",
  168. "defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]",
  169. "metadata": {
  170. "description": "Name for the storage account that contains support logs from the cluster"
  171. }
  172. },
  173. "applicationDiagnosticsStorageAccountType": {
  174. "type": "string",
  175. "allowedValues": [
  176. "Standard_LRS",
  177. "Standard_GRS"
  178. ],
  179. "defaultValue": "Standard_LRS",
  180. "metadata": {
  181. "description": "Replication option for the application diagnostics storage account"
  182. }
  183. },
  184. "applicationDiagnosticsStorageAccountName": {
  185. "type": "string",
  186. "defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]",
  187. "metadata": {
  188. "description": "Name for the storage account that contains application diagnostics data from the cluster"
  189. }
  190. },
  191. "nt0InstanceCount": {
  192. "type": "int",
  193. "defaultValue": 1,
  194. "metadata": {
  195. "description": "Instance count for node type"
  196. }
  197. },
  198. "vmNodeType0Name": {
  199. "type": "string",
  200. "defaultValue": "primary",
  201. "maxLength": 9
  202. },
  203. "vmNodeType0Size": {
  204. "type": "string",
  205. "defaultValue": "Standard_D2_v2"
  206. }
  207. },
  208. "variables": {
  209. "vmssApiVersion": "2017-03-30",
  210. "lbApiVersion": "2015-06-15",
  211. "vNetApiVersion": "2015-06-15",
  212. "storageApiVersion": "2016-01-01",
  213. "publicIPApiVersion": "2015-06-15",
  214. "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
  215. "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]",
  216. "lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
  217. "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]",
  218. "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]",
  219. "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]",
  220. "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]",
  221. "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]",
  222. "vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]",
  223. "uniqueStringArray0": [
  224. "[concat(variables('vmStorageAccountName0'), '0')]",
  225. "[concat(variables('vmStorageAccountName0'), '1')]",
  226. "[concat(variables('vmStorageAccountName0'), '2')]",
  227. "[concat(variables('vmStorageAccountName0'), '3')]",
  228. "[concat(variables('vmStorageAccountName0'), '4')]"
  229. ]
  230. },
  231. "resources": [
  232. {
  233. "apiVersion": "[variables('storageApiVersion')]",
  234. "type": "Microsoft.Storage/storageAccounts",
  235. "name": "[parameters('supportLogStorageAccountName')]",
  236. "location": "[parameters('computeLocation')]",
  237. "dependsOn": [],
  238. "properties": {},
  239. "kind": "Storage",
  240. "sku": {
  241. "name": "[parameters('supportLogStorageAccountType')]"
  242. },
  243. "tags": {
  244. "resourceType": "Service Fabric",
  245. "clusterName": "[parameters('clusterName')]"
  246. }
  247. },
  248. {
  249. "apiVersion": "[variables('storageApiVersion')]",
  250. "type": "Microsoft.Storage/storageAccounts",
  251. "name": "[parameters('applicationDiagnosticsStorageAccountName')]",
  252. "location": "[parameters('computeLocation')]",
  253. "dependsOn": [],
  254. "properties": {},
  255. "kind": "Storage",
  256. "sku": {
  257. "name": "[parameters('applicationDiagnosticsStorageAccountType')]"
  258. },
  259. "tags": {
  260. "resourceType": "Service Fabric",
  261. "clusterName": "[parameters('clusterName')]"
  262. }
  263. },
  264. {
  265. "apiVersion": "[variables('vNetApiVersion')]",
  266. "type": "Microsoft.Network/virtualNetworks",
  267. "name": "[parameters('virtualNetworkName')]",
  268. "location": "[parameters('computeLocation')]",
  269. "dependsOn": [],
  270. "properties": {
  271. "addressSpace": {
  272. "addressPrefixes": [
  273. "[parameters('addressPrefix')]"
  274. ]
  275. },
  276. "subnets": [
  277. {
  278. "name": "[parameters('subnet0Name')]",
  279. "properties": {
  280. "addressPrefix": "[parameters('subnet0Prefix')]"
  281. }
  282. }
  283. ]
  284. },
  285. "tags": {
  286. "resourceType": "Service Fabric",
  287. "clusterName": "[parameters('clusterName')]"
  288. }
  289. },
  290. {
  291. "apiVersion": "[variables('publicIPApiVersion')]",
  292. "type": "Microsoft.Network/publicIPAddresses",
  293. "name": "[concat(parameters('lbIPName'),'-','0')]",
  294. "location": "[parameters('computeLocation')]",
  295. "properties": {
  296. "dnsSettings": {
  297. "domainNameLabel": "[parameters('dnsName')]"
  298. },
  299. "publicIPAllocationMethod": "Dynamic"
  300. },
  301. "tags": {
  302. "resourceType": "Service Fabric",
  303. "clusterName": "[parameters('clusterName')]"
  304. }
  305. },
  306. {
  307. "apiVersion": "[variables('lbApiVersion')]",
  308. "type": "Microsoft.Network/loadBalancers",
  309. "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]",
  310. "location": "[parameters('computeLocation')]",
  311. "dependsOn": [
  312. "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]"
  313. ],
  314. "properties": {
  315. "frontendIPConfigurations": [
  316. {
  317. "name": "LoadBalancerIPConfig",
  318. "properties": {
  319. "publicIPAddress": {
  320. "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]"
  321. }
  322. }
  323. }
  324. ],
  325. "backendAddressPools": [
  326. {
  327. "name": "LoadBalancerBEAddressPool",
  328. "properties": {}
  329. }
  330. ],
  331. "loadBalancingRules": [
  332. {
  333. "name": "LBRule",
  334. "properties": {
  335. "backendAddressPool": {
  336. "id": "[variables('lbPoolID0')]"
  337. },
  338. "backendPort": "[parameters('nt0fabricTcpGatewayPort')]",
  339. "enableFloatingIP": "false",
  340. "frontendIPConfiguration": {
  341. "id": "[variables('lbIPConfig0')]"
  342. },
  343. "frontendPort": "[parameters('nt0fabricTcpGatewayPort')]",
  344. "idleTimeoutInMinutes": "5",
  345. "probe": {
  346. "id": "[variables('lbProbeID0')]"
  347. },
  348. "protocol": "tcp"
  349. }
  350. },
  351. {
  352. "name": "LBHttpRule",
  353. "properties": {
  354. "backendAddressPool": {
  355. "id": "[variables('lbPoolID0')]"
  356. },
  357. "backendPort": "[parameters('nt0fabricHttpGatewayPort')]",
  358. "enableFloatingIP": "false",
  359. "frontendIPConfiguration": {
  360. "id": "[variables('lbIPConfig0')]"
  361. },
  362. "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]",
  363. "idleTimeoutInMinutes": "5",
  364. "probe": {
  365. "id": "[variables('lbHttpProbeID0')]"
  366. },
  367. "protocol": "tcp"
  368. }
  369. },
  370. {
  371. "name": "WebMVCHttpRule",
  372. "properties": {
  373. "backendAddressPool": {
  374. "id": "[variables('lbPoolID0')]"
  375. },
  376. "backendPort": "[parameters('webMvcHttpPort')]",
  377. "enableFloatingIP": "false",
  378. "frontendIPConfiguration": {
  379. "id": "[variables('lbIPConfig0')]"
  380. },
  381. "frontendPort": "[parameters('webMvcHttpPort')]",
  382. "idleTimeoutInMinutes": "5",
  383. "probe": {
  384. "id": "[variables('lbHttpProbeID0')]"
  385. },
  386. "protocol": "tcp"
  387. }
  388. },
  389. {
  390. "name": "WebSPAHttpRule",
  391. "properties": {
  392. "backendAddressPool": {
  393. "id": "[variables('lbPoolID0')]"
  394. },
  395. "backendPort": "[parameters('webSpaHttpPort')]",
  396. "enableFloatingIP": "false",
  397. "frontendIPConfiguration": {
  398. "id": "[variables('lbIPConfig0')]"
  399. },
  400. "frontendPort": "[parameters('webSpaHttpPort')]",
  401. "idleTimeoutInMinutes": "5",
  402. "probe": {
  403. "id": "[variables('lbHttpProbeID0')]"
  404. },
  405. "protocol": "tcp"
  406. }
  407. },
  408. {
  409. "name": "WebStatusHttpRule",
  410. "properties": {
  411. "backendAddressPool": {
  412. "id": "[variables('lbPoolID0')]"
  413. },
  414. "backendPort": "[parameters('webStatusHttpPort')]",
  415. "enableFloatingIP": "false",
  416. "frontendIPConfiguration": {
  417. "id": "[variables('lbIPConfig0')]"
  418. },
  419. "frontendPort": "[parameters('webStatusHttpPort')]",
  420. "idleTimeoutInMinutes": "5",
  421. "probe": {
  422. "id": "[variables('lbHttpProbeID0')]"
  423. },
  424. "protocol": "tcp"
  425. }
  426. },
  427. {
  428. "name": "IdSrvHttpRule",
  429. "properties": {
  430. "backendAddressPool": {
  431. "id": "[variables('lbPoolID0')]"
  432. },
  433. "backendPort": "[parameters('IdSrvHttpRule')]",
  434. "enableFloatingIP": "false",
  435. "frontendIPConfiguration": {
  436. "id": "[variables('lbIPConfig0')]"
  437. },
  438. "frontendPort": "[parameters('IdSrvHttpRule')]",
  439. "idleTimeoutInMinutes": "5",
  440. "probe": {
  441. "id": "[variables('lbHttpProbeID0')]"
  442. },
  443. "protocol": "tcp"
  444. }
  445. }
  446. ],
  447. "probes": [
  448. {
  449. "name": "FabricGatewayProbe",
  450. "properties": {
  451. "intervalInSeconds": 5,
  452. "numberOfProbes": 2,
  453. "port": "[parameters('nt0fabricTcpGatewayPort')]",
  454. "protocol": "tcp"
  455. }
  456. },
  457. {
  458. "name": "FabricHttpGatewayProbe",
  459. "properties": {
  460. "intervalInSeconds": 5,
  461. "numberOfProbes": 2,
  462. "port": "[parameters('nt0fabricHttpGatewayPort')]",
  463. "protocol": "tcp"
  464. }
  465. }
  466. ],
  467. "inboundNatPools": [
  468. {
  469. "name": "LoadBalancerBEAddressNatPool",
  470. "properties": {
  471. "backendPort": "3389",
  472. "frontendIPConfiguration": {
  473. "id": "[variables('lbIPConfig0')]"
  474. },
  475. "frontendPortRangeEnd": "4500",
  476. "frontendPortRangeStart": "3389",
  477. "protocol": "tcp"
  478. }
  479. }
  480. ]
  481. },
  482. "tags": {
  483. "resourceType": "Service Fabric",
  484. "clusterName": "[parameters('clusterName')]"
  485. }
  486. },
  487. {
  488. "apiVersion": "[variables('storageApiVersion')]",
  489. "type": "Microsoft.Storage/storageAccounts",
  490. "name": "[variables('uniqueStringArray0')[copyIndex()]]",
  491. "location": "[parameters('computeLocation')]",
  492. "dependsOn": [],
  493. "properties": {},
  494. "copy": {
  495. "name": "storageLoop",
  496. "count": 5
  497. },
  498. "kind": "Storage",
  499. "sku": {
  500. "name": "[parameters('storageAccountType')]"
  501. },
  502. "tags": {
  503. "resourceType": "Service Fabric",
  504. "clusterName": "[parameters('clusterName')]"
  505. }
  506. },
  507. {
  508. "apiVersion": "[variables('vmssApiVersion')]",
  509. "type": "Microsoft.Compute/virtualMachineScaleSets",
  510. "name": "[parameters('vmNodeType0Name')]",
  511. "location": "[parameters('computeLocation')]",
  512. "dependsOn": [
  513. "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
  514. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0])]",
  515. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1])]",
  516. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2])]",
  517. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]",
  518. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]",
  519. "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
  520. "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]",
  521. "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]"
  522. ],
  523. "properties": {
  524. "overprovision": "[parameters('overProvision')]",
  525. "upgradePolicy": {
  526. "mode": "Automatic"
  527. },
  528. "virtualMachineProfile": {
  529. "extensionProfile": {
  530. "extensions": [
  531. {
  532. "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]",
  533. "properties": {
  534. "type": "ServiceFabricNode",
  535. "autoUpgradeMinorVersion": true,
  536. "protectedSettings": {
  537. "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
  538. "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
  539. },
  540. "publisher": "Microsoft.Azure.ServiceFabric",
  541. "settings": {
  542. "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
  543. "nodeTypeRef": "[parameters('vmNodeType0Name')]",
  544. "dataPath": "D:\\\\SvcFab",
  545. "durabilityLevel": "Bronze",
  546. "enableParallelJobs": true,
  547. "nicPrefixOverride": "[parameters('subnet0Prefix')]"
  548. },
  549. "typeHandlerVersion": "1.0"
  550. }
  551. },
  552. {
  553. "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]",
  554. "properties": {
  555. "type": "IaaSDiagnostics",
  556. "autoUpgradeMinorVersion": true,
  557. "protectedSettings": {
  558. "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
  559. "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
  560. "storageAccountEndPoint": "https://core.windows.net/"
  561. },
  562. "publisher": "Microsoft.Azure.Diagnostics",
  563. "settings": {
  564. "WadCfg": {
  565. "DiagnosticMonitorConfiguration": {
  566. "overallQuotaInMB": "50000",
  567. "EtwProviders": {
  568. "EtwEventSourceProviderConfiguration": [
  569. {
  570. "provider": "Microsoft-ServiceFabric-Actors",
  571. "scheduledTransferKeywordFilter": "1",
  572. "scheduledTransferPeriod": "PT5M",
  573. "DefaultEvents": {
  574. "eventDestination": "ServiceFabricReliableActorEventTable"
  575. }
  576. },
  577. {
  578. "provider": "Microsoft-ServiceFabric-Services",
  579. "scheduledTransferPeriod": "PT5M",
  580. "DefaultEvents": {
  581. "eventDestination": "ServiceFabricReliableServiceEventTable"
  582. }
  583. }
  584. ],
  585. "EtwManifestProviderConfiguration": [
  586. {
  587. "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
  588. "scheduledTransferLogLevelFilter": "Information",
  589. "scheduledTransferKeywordFilter": "4611686018427387904",
  590. "scheduledTransferPeriod": "PT5M",
  591. "DefaultEvents": {
  592. "eventDestination": "ServiceFabricSystemEventTable"
  593. }
  594. }
  595. ]
  596. }
  597. }
  598. },
  599. "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
  600. },
  601. "typeHandlerVersion": "1.5"
  602. }
  603. }
  604. ]
  605. },
  606. "networkProfile": {
  607. "networkInterfaceConfigurations": [
  608. {
  609. "name": "[concat(parameters('nicName'), '-0')]",
  610. "properties": {
  611. "ipConfigurations": [
  612. {
  613. "name": "[concat(parameters('nicName'),'-',0)]",
  614. "properties": {
  615. "loadBalancerBackendAddressPools": [
  616. {
  617. "id": "[variables('lbPoolID0')]"
  618. }
  619. ],
  620. "loadBalancerInboundNatPools": [
  621. {
  622. "id": "[variables('lbNatPoolID0')]"
  623. }
  624. ],
  625. "subnet": {
  626. "id": "[variables('subnet0Ref')]"
  627. }
  628. }
  629. }
  630. ],
  631. "primary": true
  632. }
  633. }
  634. ]
  635. },
  636. "osProfile": {
  637. "adminPassword": "[parameters('adminPassword')]",
  638. "adminUsername": "[parameters('adminUsername')]",
  639. "computernamePrefix": "[parameters('vmNodeType0Name')]"
  640. },
  641. "storageProfile": {
  642. "imageReference": {
  643. "publisher": "[parameters('vmImagePublisher')]",
  644. "offer": "[parameters('vmImageOffer')]",
  645. "sku": "[parameters('vmImageSku')]",
  646. "version": "[parameters('vmImageVersion')]"
  647. },
  648. "osDisk": {
  649. "caching": "ReadOnly",
  650. "createOption": "FromImage",
  651. "vhdContainers": [
  652. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  653. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  654. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  655. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  656. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]"
  657. ],
  658. "name": "vmssosdisk"
  659. }
  660. }
  661. }
  662. },
  663. "sku": {
  664. "name": "[parameters('vmNodeType0Size')]",
  665. "capacity": "[parameters('nt0InstanceCount')]",
  666. "tier": "Standard"
  667. },
  668. "tags": {
  669. "resourceType": "Service Fabric",
  670. "clusterName": "[parameters('clusterName')]"
  671. }
  672. },
  673. {
  674. "apiVersion": "2017-07-01-preview",
  675. "type": "Microsoft.ServiceFabric/clusters",
  676. "name": "[parameters('clusterName')]",
  677. "location": "[parameters('clusterLocation')]",
  678. "dependsOn": [
  679. "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]"
  680. ],
  681. "properties": {
  682. "addonFeatures": [
  683. "DnsService"
  684. ],
  685. "clientCertificateCommonNames": [],
  686. "clientCertificateThumbprints": [],
  687. "clusterCodeVersion": "5.7.207.9494",
  688. "clusterState": "Default",
  689. "diagnosticsStorageAccountConfig": {
  690. "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]",
  691. "protectedAccountKeyName": "StorageAccountKey1",
  692. "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]",
  693. "storageAccountName": "[parameters('supportLogStorageAccountName')]",
  694. "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]"
  695. },
  696. "fabricSettings": [],
  697. "managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]",
  698. "nodeTypes": [
  699. {
  700. "name": "[parameters('vmNodeType0Name')]",
  701. "applicationPorts": {
  702. "endPort": "[parameters('nt0applicationEndPort')]",
  703. "startPort": "[parameters('nt0applicationStartPort')]"
  704. },
  705. "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]",
  706. "durabilityLevel": "Bronze",
  707. "ephemeralPorts": {
  708. "endPort": "[parameters('nt0ephemeralEndPort')]",
  709. "startPort": "[parameters('nt0ephemeralStartPort')]"
  710. },
  711. "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]",
  712. "isPrimary": true,
  713. "reverseProxyEndpointPort": "[parameters('nt0reverseProxyEndpointPort')]",
  714. "vmInstanceCount": "[parameters('nt0InstanceCount')]"
  715. }
  716. ],
  717. "provisioningState": "Default",
  718. "reliabilityLevel": "None",
  719. "upgradeMode": "Manual",
  720. "vmImage": "Windows"
  721. },
  722. "tags": {
  723. "resourceType": "Service Fabric",
  724. "clusterName": "[parameters('clusterName')]"
  725. }
  726. }
  727. ],
  728. "outputs": {
  729. "clusterProperties": {
  730. "value": "[reference(parameters('clusterName'))]",
  731. "type": "object"
  732. }
  733. }
  734. }