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.

752 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": "ReverseProxyHttpRule",
  372. "properties": {
  373. "backendAddressPool": {
  374. "id": "[variables('lbPoolID0')]"
  375. },
  376. "backendPort": "[parameters('nt0reverseProxyEndpointPort')]",
  377. "enableFloatingIP": "false",
  378. "frontendIPConfiguration": {
  379. "id": "[variables('lbIPConfig0')]"
  380. },
  381. "frontendPort": "[parameters('nt0reverseProxyEndpointPort')]",
  382. "idleTimeoutInMinutes": "5",
  383. "probe": {
  384. "id": "[variables('lbHttpProbeID0')]"
  385. },
  386. "protocol": "tcp"
  387. }
  388. },
  389. {
  390. "name": "WebMVCHttpRule",
  391. "properties": {
  392. "backendAddressPool": {
  393. "id": "[variables('lbPoolID0')]"
  394. },
  395. "backendPort": "[parameters('webMvcHttpPort')]",
  396. "enableFloatingIP": "false",
  397. "frontendIPConfiguration": {
  398. "id": "[variables('lbIPConfig0')]"
  399. },
  400. "frontendPort": "[parameters('webMvcHttpPort')]",
  401. "idleTimeoutInMinutes": "5",
  402. "probe": {
  403. "id": "[variables('lbHttpProbeID0')]"
  404. },
  405. "protocol": "tcp"
  406. }
  407. },
  408. {
  409. "name": "WebSPAHttpRule",
  410. "properties": {
  411. "backendAddressPool": {
  412. "id": "[variables('lbPoolID0')]"
  413. },
  414. "backendPort": "[parameters('webSpaHttpPort')]",
  415. "enableFloatingIP": "false",
  416. "frontendIPConfiguration": {
  417. "id": "[variables('lbIPConfig0')]"
  418. },
  419. "frontendPort": "[parameters('webSpaHttpPort')]",
  420. "idleTimeoutInMinutes": "5",
  421. "probe": {
  422. "id": "[variables('lbHttpProbeID0')]"
  423. },
  424. "protocol": "tcp"
  425. }
  426. },
  427. {
  428. "name": "WebStatusHttpRule",
  429. "properties": {
  430. "backendAddressPool": {
  431. "id": "[variables('lbPoolID0')]"
  432. },
  433. "backendPort": "[parameters('webStatusHttpPort')]",
  434. "enableFloatingIP": "false",
  435. "frontendIPConfiguration": {
  436. "id": "[variables('lbIPConfig0')]"
  437. },
  438. "frontendPort": "[parameters('webStatusHttpPort')]",
  439. "idleTimeoutInMinutes": "5",
  440. "probe": {
  441. "id": "[variables('lbHttpProbeID0')]"
  442. },
  443. "protocol": "tcp"
  444. }
  445. },
  446. {
  447. "name": "IdSrvHttpRule",
  448. "properties": {
  449. "backendAddressPool": {
  450. "id": "[variables('lbPoolID0')]"
  451. },
  452. "backendPort": "[parameters('IdSrvHttpRule')]",
  453. "enableFloatingIP": "false",
  454. "frontendIPConfiguration": {
  455. "id": "[variables('lbIPConfig0')]"
  456. },
  457. "frontendPort": "[parameters('IdSrvHttpRule')]",
  458. "idleTimeoutInMinutes": "5",
  459. "probe": {
  460. "id": "[variables('lbHttpProbeID0')]"
  461. },
  462. "protocol": "tcp"
  463. }
  464. }
  465. ],
  466. "probes": [
  467. {
  468. "name": "FabricGatewayProbe",
  469. "properties": {
  470. "intervalInSeconds": 5,
  471. "numberOfProbes": 2,
  472. "port": "[parameters('nt0fabricTcpGatewayPort')]",
  473. "protocol": "tcp"
  474. }
  475. },
  476. {
  477. "name": "FabricHttpGatewayProbe",
  478. "properties": {
  479. "intervalInSeconds": 5,
  480. "numberOfProbes": 2,
  481. "port": "[parameters('nt0fabricHttpGatewayPort')]",
  482. "protocol": "tcp"
  483. }
  484. }
  485. ],
  486. "inboundNatPools": [
  487. {
  488. "name": "LoadBalancerBEAddressNatPool",
  489. "properties": {
  490. "backendPort": "3389",
  491. "frontendIPConfiguration": {
  492. "id": "[variables('lbIPConfig0')]"
  493. },
  494. "frontendPortRangeEnd": "4500",
  495. "frontendPortRangeStart": "3389",
  496. "protocol": "tcp"
  497. }
  498. }
  499. ]
  500. },
  501. "tags": {
  502. "resourceType": "Service Fabric",
  503. "clusterName": "[parameters('clusterName')]"
  504. }
  505. },
  506. {
  507. "apiVersion": "[variables('storageApiVersion')]",
  508. "type": "Microsoft.Storage/storageAccounts",
  509. "name": "[variables('uniqueStringArray0')[copyIndex()]]",
  510. "location": "[parameters('computeLocation')]",
  511. "dependsOn": [],
  512. "properties": {},
  513. "copy": {
  514. "name": "storageLoop",
  515. "count": 5
  516. },
  517. "kind": "Storage",
  518. "sku": {
  519. "name": "[parameters('storageAccountType')]"
  520. },
  521. "tags": {
  522. "resourceType": "Service Fabric",
  523. "clusterName": "[parameters('clusterName')]"
  524. }
  525. },
  526. {
  527. "apiVersion": "[variables('vmssApiVersion')]",
  528. "type": "Microsoft.Compute/virtualMachineScaleSets",
  529. "name": "[parameters('vmNodeType0Name')]",
  530. "location": "[parameters('computeLocation')]",
  531. "dependsOn": [
  532. "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
  533. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0])]",
  534. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1])]",
  535. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2])]",
  536. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]",
  537. "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]",
  538. "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
  539. "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]",
  540. "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]"
  541. ],
  542. "properties": {
  543. "overprovision": "[parameters('overProvision')]",
  544. "upgradePolicy": {
  545. "mode": "Automatic"
  546. },
  547. "virtualMachineProfile": {
  548. "extensionProfile": {
  549. "extensions": [
  550. {
  551. "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]",
  552. "properties": {
  553. "type": "ServiceFabricNode",
  554. "autoUpgradeMinorVersion": true,
  555. "protectedSettings": {
  556. "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
  557. "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
  558. },
  559. "publisher": "Microsoft.Azure.ServiceFabric",
  560. "settings": {
  561. "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
  562. "nodeTypeRef": "[parameters('vmNodeType0Name')]",
  563. "dataPath": "D:\\\\SvcFab",
  564. "durabilityLevel": "Bronze",
  565. "enableParallelJobs": true,
  566. "nicPrefixOverride": "[parameters('subnet0Prefix')]"
  567. },
  568. "typeHandlerVersion": "1.0"
  569. }
  570. },
  571. {
  572. "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]",
  573. "properties": {
  574. "type": "IaaSDiagnostics",
  575. "autoUpgradeMinorVersion": true,
  576. "protectedSettings": {
  577. "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
  578. "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
  579. "storageAccountEndPoint": "https://core.windows.net/"
  580. },
  581. "publisher": "Microsoft.Azure.Diagnostics",
  582. "settings": {
  583. "WadCfg": {
  584. "DiagnosticMonitorConfiguration": {
  585. "overallQuotaInMB": "50000",
  586. "EtwProviders": {
  587. "EtwEventSourceProviderConfiguration": [
  588. {
  589. "provider": "Microsoft-ServiceFabric-Actors",
  590. "scheduledTransferKeywordFilter": "1",
  591. "scheduledTransferPeriod": "PT5M",
  592. "DefaultEvents": {
  593. "eventDestination": "ServiceFabricReliableActorEventTable"
  594. }
  595. },
  596. {
  597. "provider": "Microsoft-ServiceFabric-Services",
  598. "scheduledTransferPeriod": "PT5M",
  599. "DefaultEvents": {
  600. "eventDestination": "ServiceFabricReliableServiceEventTable"
  601. }
  602. }
  603. ],
  604. "EtwManifestProviderConfiguration": [
  605. {
  606. "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
  607. "scheduledTransferLogLevelFilter": "Information",
  608. "scheduledTransferKeywordFilter": "4611686018427387904",
  609. "scheduledTransferPeriod": "PT5M",
  610. "DefaultEvents": {
  611. "eventDestination": "ServiceFabricSystemEventTable"
  612. }
  613. }
  614. ]
  615. }
  616. }
  617. },
  618. "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
  619. },
  620. "typeHandlerVersion": "1.5"
  621. }
  622. }
  623. ]
  624. },
  625. "networkProfile": {
  626. "networkInterfaceConfigurations": [
  627. {
  628. "name": "[concat(parameters('nicName'), '-0')]",
  629. "properties": {
  630. "ipConfigurations": [
  631. {
  632. "name": "[concat(parameters('nicName'),'-',0)]",
  633. "properties": {
  634. "loadBalancerBackendAddressPools": [
  635. {
  636. "id": "[variables('lbPoolID0')]"
  637. }
  638. ],
  639. "loadBalancerInboundNatPools": [
  640. {
  641. "id": "[variables('lbNatPoolID0')]"
  642. }
  643. ],
  644. "subnet": {
  645. "id": "[variables('subnet0Ref')]"
  646. }
  647. }
  648. }
  649. ],
  650. "primary": true
  651. }
  652. }
  653. ]
  654. },
  655. "osProfile": {
  656. "adminPassword": "[parameters('adminPassword')]",
  657. "adminUsername": "[parameters('adminUsername')]",
  658. "computernamePrefix": "[parameters('vmNodeType0Name')]"
  659. },
  660. "storageProfile": {
  661. "imageReference": {
  662. "publisher": "[parameters('vmImagePublisher')]",
  663. "offer": "[parameters('vmImageOffer')]",
  664. "sku": "[parameters('vmImageSku')]",
  665. "version": "[parameters('vmImageVersion')]"
  666. },
  667. "osDisk": {
  668. "caching": "ReadOnly",
  669. "createOption": "FromImage",
  670. "vhdContainers": [
  671. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  672. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  673. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  674. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]",
  675. "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]"
  676. ],
  677. "name": "vmssosdisk"
  678. }
  679. }
  680. }
  681. },
  682. "sku": {
  683. "name": "[parameters('vmNodeType0Size')]",
  684. "capacity": "[parameters('nt0InstanceCount')]",
  685. "tier": "Standard"
  686. },
  687. "tags": {
  688. "resourceType": "Service Fabric",
  689. "clusterName": "[parameters('clusterName')]"
  690. }
  691. },
  692. {
  693. "apiVersion": "2017-07-01-preview",
  694. "type": "Microsoft.ServiceFabric/clusters",
  695. "name": "[parameters('clusterName')]",
  696. "location": "[parameters('clusterLocation')]",
  697. "dependsOn": [
  698. "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]"
  699. ],
  700. "properties": {
  701. "addonFeatures": [
  702. "DnsService"
  703. ],
  704. "clientCertificateCommonNames": [],
  705. "clientCertificateThumbprints": [],
  706. "clusterCodeVersion": "5.7.207.9494",
  707. "clusterState": "Default",
  708. "diagnosticsStorageAccountConfig": {
  709. "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]",
  710. "protectedAccountKeyName": "StorageAccountKey1",
  711. "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]",
  712. "storageAccountName": "[parameters('supportLogStorageAccountName')]",
  713. "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]"
  714. },
  715. "fabricSettings": [],
  716. "managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]",
  717. "nodeTypes": [
  718. {
  719. "name": "[parameters('vmNodeType0Name')]",
  720. "applicationPorts": {
  721. "endPort": "[parameters('nt0applicationEndPort')]",
  722. "startPort": "[parameters('nt0applicationStartPort')]"
  723. },
  724. "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]",
  725. "durabilityLevel": "Bronze",
  726. "ephemeralPorts": {
  727. "endPort": "[parameters('nt0ephemeralEndPort')]",
  728. "startPort": "[parameters('nt0ephemeralStartPort')]"
  729. },
  730. "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]",
  731. "isPrimary": true,
  732. "reverseProxyEndpointPort": "[parameters('nt0reverseProxyEndpointPort')]",
  733. "vmInstanceCount": "[parameters('nt0InstanceCount')]"
  734. }
  735. ],
  736. "provisioningState": "Default",
  737. "reliabilityLevel": "None",
  738. "upgradeMode": "Manual",
  739. "vmImage": "Windows"
  740. },
  741. "tags": {
  742. "resourceType": "Service Fabric",
  743. "clusterName": "[parameters('clusterName')]"
  744. }
  745. }
  746. ],
  747. "outputs": {
  748. "clusterProperties": {
  749. "value": "[reference(parameters('clusterName'))]",
  750. "type": "object"
  751. }
  752. }
  753. }