@@ -59,7 +59,8 @@ function Header({ presets, setPresets, selectedPreset, featureFlag }) {
disabled: presets[p].disabled,
iconProps: { iconName: presets[p].icon },
onClick: () => setPresets(p)
- } })
+ }
+ })
}} text={presets[selectedPreset].title} disabled={false} checked={true}
styles={{ root: { "vertical-align": "top", padding: "11px 12px 13px", border: "2px solid transparent", background: "transparent" }, label: { color: "#0067b8", fontWeight: "600", fontSize: "15px", lineHeight: "1.3" } }} />
@@ -75,17 +76,17 @@ function Header({ presets, setPresets, selectedPreset, featureFlag }) {
function Header2({ presets, setPresets, selectedPreset, featureFlag }) {
return (
-
+
AKS Construction helper
- Generate Azure deployment assets by providing your requirements to quickly create a full operational environment from best practice guidance.
+ Generate Azure deployment assets by providing your requirements to quickly create a full operational environment from best practice guidance.
Documentation and CI/CD samples are in the GitHub Repository
{ return { key: p, text: presets[p].title, disabled: presets[p].disabled, iconProps: { iconName: presets[p].icon } } })}
+ options={Object.keys(presets).map(p => { return { key: p, text: presets[p].title, disabled: presets[p].disabled, iconProps: { iconName: presets[p].icon } } })}
onChange={(ev, { key }) => setPresets(key)}
>
@@ -198,7 +199,7 @@ export default function PortalNav({ config }) {
setUrlParams((currentUrlParams) => {
- currentUrlParams.set(sectionKey, cardKey)
+ currentUrlParams.set(sectionKey, cardKey)
return currentUrlParams
})
@@ -206,7 +207,7 @@ export default function PortalNav({ config }) {
setSelected({ preset: selected.preset, values: { ...selected.values, [sectionKey]: cardKey } })
setTabValues(currentTabValues => updateTabValues(currentTabValues, sections, sectionKey, cardKey))
- //window.history.replaceState(null, null, "?"+urlParams.toString())
+ window.history.replaceState(null, null, "?"+urlParams.toString())
}
@@ -235,13 +236,13 @@ export default function PortalNav({ config }) {
return response.json();
}).then((res) => {
console.log(`useEffect Get template versions`)
- const releases = res.filter(rel => rel.assets.find(a => a.name === 'main.json') && rel.assets.find(a => a.name === 'postdeploy.sh') && rel.assets.find(a => a.name === 'dependencies.json') && rel.draft === false).map((rel, i) => {
+ const releases = res.filter(rel => rel.assets.find(a => a.name === 'main.json') && rel.assets.find(a => a.name === 'postdeploy.sh') && rel.assets.find(a => a.name === 'dependencies.json') && rel.draft === false).map((rel, i) => {
return {
key: rel.tag_name,
text: `${rel.tag_name}${i === 0 ? ' (latest)' : ''}`,
main_url: rel.assets.find(a => a.name === 'main.json').browser_download_url,
post_url: rel.assets.find(a => a.name === 'postdeploy.sh').browser_download_url,
- base_download_url: rel.assets.find(a => a.name === 'main.json').browser_download_url.replace('/main.json','')
+ base_download_url: rel.assets.find(a => a.name === 'main.json').browser_download_url.replace('/main.json', '')
}
}).concat(defaults.deploy.templateVersions)
//console.log (releases)
@@ -301,14 +302,14 @@ export default function PortalNav({ config }) {
}
//maintains the current config in querystring for easy bookmarking
- window.history.replaceState(null, null, "?"+urlParams.toString())
+ window.history.replaceState(null, null, "?" + urlParams.toString())
setTabValues((p) => {
return {
...p,
[tab]: {
- ...p[tab],
- ...updatevals
+ ...p[tab],
+ ...updatevals
}
}
})
@@ -336,7 +337,7 @@ export default function PortalNav({ config }) {
invalidFn('cluster', 'keyVaultKmsByoKeyId', cluster.keyVaultKms === "byoprivate" && !cluster.keyVaultKmsByoKeyId.match('https:\/\/[^]+.vault.azure.net/keys/[^ ]+/[^ ]+$'), 'Enter valid KeyVault Versioned Key ID (https://YOURVAULTNAME.vault.azure.net/keys/YOURKEYNAME/KEYVERSIONSTRING)')
invalidFn('cluster', 'keyVaultKmsByoRG', cluster.keyVaultKms === "byoprivate" && !cluster.keyVaultKmsByoRG, 'Enter existing KeyVault Resource Group Name')
invalidFn('addons', 'dnsZoneId', addons.dns && !addons.dnsZoneId.match('^/subscriptions/[^/ ]+/resourceGroups/[^/ ]+/providers/Microsoft.Network/(dnszones|privateDnsZones)/[^/ ]+$'), 'Enter valid Azure Public or Private DNS Zone resourceId')
- invalidFn('cluster', 'dnsApiPrivateZoneId', cluster.apisecurity === 'private' && cluster.privateClusterDnsMethod==='privateDnsZone' && !cluster.dnsApiPrivateZoneId.match('^/subscriptions/[^/ ]+/resourceGroups/[^/ ]+/providers/Microsoft.Network/privateDnsZones/[^/ ]+.azmk8s.io$'), 'Enter valid Azure Private DNS Zone resourceId')
+ invalidFn('cluster', 'dnsApiPrivateZoneId', cluster.apisecurity === 'private' && cluster.privateClusterDnsMethod === 'privateDnsZone' && !cluster.dnsApiPrivateZoneId.match('^/subscriptions/[^/ ]+/resourceGroups/[^/ ]+/providers/Microsoft.Network/privateDnsZones/[^/ ]+.azmk8s.io$'), 'Enter valid Azure Private DNS Zone resourceId')
invalidFn('addons', 'certEmail', addons.certMan && !addons.certEmail.match('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$'), 'Enter valid email for certificate generation')
invalidFn('addons', 'kvId', addons.csisecret === "akvExist" && !addons.kvId.match('^/subscriptions/[^/ ]+/resourceGroups/[^/ ]+/providers/Microsoft.KeyVault/vaults/[^/ ]+$'), 'Enter valid Azure KeyVault resourceId')
invalidFn('addons', 'appgw_privateIpAddress', addons.ingress === "appgw" && addons.appgw_privateIp && !addons.appgw_privateIpAddress.match('^(?:[0-9]{1,3}.){3}[0-9]{1,3}$'), 'Enter valid IP address')
@@ -348,9 +349,9 @@ export default function PortalNav({ config }) {
net.vnet_opt === "byo" ?
'Please de-select, when using Bring your own VNET, configure a firewall as part of your own VNET setup, (in a subnet or peered network)'
:
- 'This template can only deploy Azure Firewall in single VNET with Custom Networking' )
+ 'This template can only deploy Azure Firewall in single VNET with Custom Networking')
invalidFn('net', 'aksOutboundTrafficType', (net.aksOutboundTrafficType === 'managedNATGateway' && net.vnet_opt !== "default") || (net.aksOutboundTrafficType === 'userAssignedNATGateway' && net.vnet_opt === "default"), 'When using Managed Nat Gateway, only default networking is supported. For other networking options, use Assigned NAT Gateway')
- invalidFn('deploy', 'apiips', cluster.apisecurity === 'whitelist' && deploy.apiips.length < 7, 'Enter an IP/CIDR, or disable API Security in \'Cluster Details\' tab')
+ invalidFn('deploy', 'apiips', cluster.apisecurity === 'whitelist' && deploy.apiips.length < 7, 'Enter an IP/CIDR, or select \'Public IP with no IP restrictions\' in the \'Cluster API Server Security\' section of the \'Cluster Details\' tab')
invalidFn('deploy', 'clusterName', !deploy.clusterName || deploy.clusterName.match(/^[a-z0-9][_\-a-z0-9]+[a-z0-9]$/i) === null || deploy.clusterName.length > 19, 'Enter valid cluster name')
invalidFn('deploy', 'githubrepo', deploy.deployItemKey === 'github' && (!deploy.githubrepo || !deploy.githubrepo.match('https://github.com/[^/ ]+/[^/ ]+$')), 'enter repo URL. eg: https://github.com/org/repo')
@@ -381,11 +382,11 @@ export default function PortalNav({ config }) {
- Fine tune & Deploy
+ Fine tune & Deploy
_customRenderer('deploy', a, b)}>
- mergeState("deploy", field, value)} invalidArray={invalidArray['deploy']} invalidTabs={Object.keys(invalidArray).filter(t => invalidArray[t].length > 0).map(k => `'${tabLabels[k]}'`)} urlParams={urlParams} featureFlag={featureFlag} />
+ mergeState("deploy", field, value)} invalidArray={invalidArray['deploy']} invalidTabs={Object.keys(invalidArray).filter(t => invalidArray[t].length > 0).map(k => `'${tabLabels[k]}'`)} urlParams={urlParams} featureFlag={featureFlag} />
_customRenderer('cluster', a, b)} >
mergeState("cluster", field, value)} invalidArray={invalidArray['cluster']} />
diff --git a/helper/src/config.json b/helper/src/config.json
index b29c57aa..f0cae14e 100644
--- a/helper/src/config.json
+++ b/helper/src/config.json
@@ -8,7 +8,8 @@
},
"defaults": {
"deploy": {
- "kubernetesVersion": "1.23.8",
+ "enableTelemetry": true,
+ "kubernetesVersion": "1.23.12",
"location": "WestEurope",
"apiips": "",
"demoapp": false,
diff --git a/referencearchs.md b/referencearchs.md
index b0e0679b..ea04011c 100644
--- a/referencearchs.md
+++ b/referencearchs.md
@@ -1,12 +1,12 @@
# Referenced Projects
-## Enterprise Scale
+## Enterprise Scale (Azure Landing Zones)
Enterprise Scale provides prescriptive guidance based on authoritative design for the Azure platform as a whole.
The [AKS Construction helper](https://azure.github.io/AKS-Construction/?default=es) has an Enterprise-Scale lens, with preset configurations for each landing zone area.
-## Enterprise-Scale for AKS
+## AKS Landing Zone Accelerator
This is the [parent project](https://github.com/Azure/AKS-Landing-Zone-Accelerator/) that our work belongs to. The reference implementations in this repository are all focussed on guiding the creation of Landing Zones for AKS within an Enterprise Scale framework. They typically include deployments of Hub/Spoke infrastructure and development vm's, and includes a Terraform implementation.