From a5a18d02a48da638dcf0384dd0aa5e3798e1c4c2 Mon Sep 17 00:00:00 2001 From: Bhuvaneswari Santharam <31025851+Bhuvaneswari-Santharam@users.noreply.github.com> Date: Mon, 22 Jul 2019 20:20:11 -0700 Subject: [PATCH 01/79] Custom vnet changes (#80) * Create customVnetClusterDefinition.json * Update azuredeploy.parameters.json * Update azuredeploy.json * Update MainTemplate.json * Update script.sh * Update azuredeploy.json * Update MainTemplate.json * Update MainTemplate.json * Update azuredeploy.json * Update azuredeploy.parameters.json * Update MainTemplate.json * Update script.sh * Update azuredeploy.json * Delete customVnetClusterDefinition.json --- .../DeploymentTemplates/MainTemplate.json | 44 ++++++++++++++++++- .../DeploymentTemplates/azuredeploy.json | 32 +++++++++++++- .../azuredeploy.parameters.json | 16 ++++++- .../template/DeploymentTemplates/script.sh | 23 ++++++++++ 4 files changed, 109 insertions(+), 6 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index ece113d..5216802 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -129,6 +129,34 @@ "description": "The name of the file containing the cluster definition" } }, + "customVnetName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the custom vnet" + } + }, + "masterSubnetName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the master subnet" + } + }, + "agentSubnetName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the agent subnet" + } + }, + "firstConsecutiveStaticIP": { + "type": "string", + "defaultValue": "10.100.0.5", + "metadata": { + "description": "First Consective Static IP" + } + }, "nodeDistro": { "defaultValue": "ubuntu", "allowedValues": [ @@ -176,7 +204,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" }, "resources": [ { @@ -229,6 +257,18 @@ "nodeDistro": { "value": "[parameters('nodeDistro')]" }, + "customVnetName": { + "value": "[parameters('customVnetName')]" + }, + "masterSubnetName": { + "value": "[parameters('masterSubnetName')]" + }, + "agentSubnetName": { + "value": "[parameters('agentSubnetName')]" + }, + "firstConsecutiveStaticIP": { + "value": "[parameters('firstConsecutiveStaticIP')]" + }, "aksEngineBaseURL": { "value": "[parameters('aksEngineBaseURL')]" }, @@ -257,4 +297,4 @@ "value": "[reference('dvmdeployment').outputs.dvmPublicIpFqdn.value]" } } -} \ No newline at end of file +} diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 19c0768..9b191d4 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -128,6 +128,34 @@ "description": "The base for Kubernetes images" } }, + "customVnetName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the custom vnet" + } + }, + "masterSubnetName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the master subnet" + } + }, + "agentSubnetName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the agent subnet" + } + }, + "firstConsecutiveStaticIP": { + "type": "string", + "defaultValue": "10.100.0.5", + "metadata": { + "description": "First Consective Static IP" + } + }, "nodeDistro": { "defaultValue": "ubuntu", "allowedValues": [ @@ -168,7 +196,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" }, "resources": [ { @@ -281,7 +309,7 @@ "vmSize": "[variables('vmSize')]" }, "osProfile": { - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "computerName": "[variables('vmName')]", "adminUsername": "[parameters('linuxAdminUsername')]", "linuxConfiguration": { diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json index adbf847..6257cdd 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json @@ -40,7 +40,19 @@ }, "nodeDistro": { "value": "" - }, + }, + "customVnetName": { + "value": "" + }, + "masterSubnetName": { + "value": "" + }, + "agentSubnetName": { + "value": "" + }, + "firstConsecutiveStaticIP": { + "value": "" + }, "aksEngineBaseURL": { "value": "" }, @@ -60,4 +72,4 @@ "value": "" } } -} \ No newline at end of file +} diff --git a/kubernetes/template/DeploymentTemplates/script.sh b/kubernetes/template/DeploymentTemplates/script.sh index 05797f4..10f3e68 100644 --- a/kubernetes/template/DeploymentTemplates/script.sh +++ b/kubernetes/template/DeploymentTemplates/script.sh @@ -221,9 +221,12 @@ log_level -i "------------------------------------------------------------------ log_level -i "ADMIN_USERNAME: $ADMIN_USERNAME" log_level -i "AGENT_COUNT: $AGENT_COUNT" log_level -i "AGENT_SIZE: $AGENT_SIZE" +log_level -i "AGENT_SUBNET_NAME: $AGENT_SUBNET_NAME" log_level -i "AKSE_BASE_URL $AKSE_BASE_URL" log_level -i "AKSE_RELEASE_VERSION $AKSE_RELEASE_VERSION" +log_level -i "CUSTOM_VNET_NAME: $CUSTOM_VNET_NAME" log_level -i "DEFINITION_TEMPLATE_NAME: $DEFINITION_TEMPLATE_NAME" +log_level -i "FIRST_CONSECUTIVE_STATIC_IP: $FIRST_CONSECUTIVE_STATIC_IP" log_level -i "GALLERY_BRANCH: $GALLERY_BRANCH" log_level -i "GALLERY_REPO: $GALLERY_REPO" log_level -i "IDENTITY_SYSTEM: $IDENTITY_SYSTEM" @@ -232,6 +235,7 @@ log_level -i "K8S_IMAGE_BASE $K8S_IMAGE_BASE" log_level -i "MASTER_COUNT: $MASTER_COUNT" log_level -i "MASTER_DNS_PREFIX: $MASTER_DNS_PREFIX" log_level -i "MASTER_SIZE: $MASTER_SIZE" +log_level -i "MASTER_SUBNET_NAME: $MASTER_SUBNET_NAME" log_level -i "NODE_DISTRO: $NODE_DISTRO" log_level -i "PUBLICIP_DNS: $PUBLICIP_DNS" log_level -i "PUBLICIP_FQDN: $PUBLICIP_FQDN" @@ -333,6 +337,25 @@ fi log_level -i "ENDPOINT_ACTIVE_DIRECTORY_ENDPOINT: $ENDPOINT_ACTIVE_DIRECTORY_ENDPOINT" +##################################################################################### +#custom vnet config + +if [ $CUSTOM_VNET_NAME != "" ]; then + log_level -i "Setting general custom vnet properties." + MASTER_VNET_ID="/subscriptions/$TENANT_SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$CUSTOM_VNET_NAME/subnets/$MASTER_SUBNET_NAME" + AGENT_VNET_ID="/subscriptions/$TENANT_SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$CUSTOM_VNET_NAME/subnets/$AGENT_SUBNET_NAME" + + cat $AZURESTACK_CONFIGURATION | \ + jq --arg MASTER_VNET_ID $MASTER_VNET_ID '.properties.masterProfile += {"vnetSubnetId": $MASTER_VNET_ID } '| \ + jq --arg FIRST_CONSECUTIVE_STATIC_IP $FIRST_CONSECUTIVE_STATIC_IP '.properties.masterProfile += {"firstConsecutiveStaticIP": $FIRST_CONSECUTIVE_STATIC_IP } ' | \ + jq --arg AGENT_VNET_ID $AGENT_VNET_ID '.properties.agentPoolProfiles[0] += {"vnetSubnetId": $AGENT_VNET_ID } ' \ + > $AZURESTACK_CONFIGURATION_TEMP + + validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL + + log_level -i "Done building custom vnet definition." +fi + ##################################################################################### # apimodel gen From 1d4222ffe743b67ab979d71e845f8d95d27a5700 Mon Sep 17 00:00:00 2001 From: Bhuvaneswari Santharam <31025851+Bhuvaneswari-Santharam@users.noreply.github.com> Date: Mon, 29 Jul 2019 16:47:42 -0700 Subject: [PATCH 02/79] Changing the ip range in collect logs for nodes (#82) * Changing the ip range in collect logs for nodes --- diagnosis/hosts.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/diagnosis/hosts.sh b/diagnosis/hosts.sh index ccc5980..b90afdd 100644 --- a/diagnosis/hosts.sh +++ b/diagnosis/hosts.sh @@ -14,11 +14,12 @@ HOSTLIST=$WD/host.list rm -f $HOSTLIST echo "[$(date +%Y%m%d%H%M%S)][INFO] Searching for cluster nodes" -for ip in 10.240.0.{4..21}; +#If the node count increases ip ranges needs to be modified +for ip in 10.240.0.{4..100}; do ping -c 1 -W 1 $ip | grep "64 bytes" | cut -d " " -f 4 | cut -d ":" -f 1 >> $HOSTLIST done -for ip in 10.240.255.{5..12}; +for ip in 10.240.255.{5..100}; do ping -c 1 -W 1 $ip | grep "64 bytes" | cut -d " " -f 4 | cut -d ":" -f 1 >> $HOSTLIST done From 002aa1eefa7f467582ae97c1bb185758ff06e4e7 Mon Sep 17 00:00:00 2001 From: Bhuvaneswari Santharam <31025851+Bhuvaneswari-Santharam@users.noreply.github.com> Date: Tue, 30 Jul 2019 11:07:48 -0700 Subject: [PATCH 03/79] Changing aksEngine Version to v0.38.5 (#81) --- kubernetes/template/DeploymentTemplates/MainTemplate.json | 2 +- kubernetes/template/DeploymentTemplates/azuredeploy.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index 5216802..231c2fc 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -103,7 +103,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.37.4", + "defaultValue": "v0.38.5", "metadata": { "description": "The version of AKS Engine to download" } diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 9b191d4..5c6ecdc 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -95,7 +95,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.37.4", + "defaultValue": "v0.38.5", "metadata": { "description": "The version of AKS Engine to download" } From f2b64b5657b1a8cf6f56b75668af53efca807c54 Mon Sep 17 00:00:00 2001 From: Rohit Date: Wed, 7 Aug 2019 17:11:49 -0700 Subject: [PATCH 04/79] Adding parameter support for network plugin and availability profile. (#84) --- .../DeploymentTemplates/MainTemplate.json | 35 ++++++++++++-- .../DeploymentTemplates/azuredeploy.json | 29 +++++++++-- .../azuredeploy.parameters.json | 6 +++ .../createUiDefinition.json | 48 ++++++++++++++++++- .../template/DeploymentTemplates/script.sh | 8 +++- 5 files changed, 117 insertions(+), 9 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index 231c2fc..8cdd9aa 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -136,6 +136,29 @@ "description": "Name of the custom vnet" } }, + "networkPlugin": { + "defaultValue": "flannel", + "allowedValues": [ + "flannel", + "azure", + "kubenet" + ], + "metadata": { + "description": "Network plugin which will deployed in Kubernetes cluster" + }, + "type": "string" + }, + "availabilityProfile": { + "defaultValue": "AvailabilitySet", + "allowedValues": [ + "AvailabilitySet", + "VirtualMachineScaleSets" + ], + "metadata": { + "description": "Availability profile that nodes in the Kubernetes cluster will be deployed with" + }, + "type": "string" + }, "masterSubnetName": { "type": "string", "defaultValue": "", @@ -154,14 +177,14 @@ "type": "string", "defaultValue": "10.100.0.5", "metadata": { - "description": "First Consective Static IP" + "description": "First consecutive static IP" } }, "nodeDistro": { "defaultValue": "ubuntu", "allowedValues": [ "ubuntu", - "aks" + "aks-ubuntu-16.04" ], "metadata": { "description": "Node distro to be used to deploy Kubernetes on Azure Stack." @@ -204,7 +227,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" }, "resources": [ { @@ -260,6 +283,12 @@ "customVnetName": { "value": "[parameters('customVnetName')]" }, + "networkPlugin": { + "value": "[parameters('networkPlugin')]" + }, + "availabilityProfile": { + "value": "[parameters('availabilityProfile')]" + }, "masterSubnetName": { "value": "[parameters('masterSubnetName')]" }, diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 5c6ecdc..5ba4598 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -156,11 +156,34 @@ "description": "First Consective Static IP" } }, + "networkPlugin": { + "defaultValue": "flannel", + "allowedValues": [ + "flannel", + "azure", + "kubenet" + ], + "metadata": { + "description": "Network plugin which will deployed in Kubernetes cluster" + }, + "type": "string" + }, + "availabilityProfile": { + "defaultValue": "AvailabilitySet", + "allowedValues": [ + "AvailabilitySet", + "VirtualMachineScaleSets" + ], + "metadata": { + "description": "Availability profile that nodes in the Kubernetes cluster will be deployed with" + }, + "type": "string" + }, "nodeDistro": { "defaultValue": "ubuntu", "allowedValues": [ "ubuntu", - "aks" + "aks-ubuntu-16.04" ], "metadata": { "description": "Node distro to be used to deploy Kubernetes on Azure Stack." @@ -196,7 +219,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" }, "resources": [ { @@ -309,7 +332,7 @@ "vmSize": "[variables('vmSize')]" }, "osProfile": { - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "computerName": "[variables('vmName')]", "adminUsername": "[parameters('linuxAdminUsername')]", "linuxConfiguration": { diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json index 6257cdd..46531be 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json @@ -68,6 +68,12 @@ "clusterDefinitionFileName": { "value": "" }, + "networkPlugin": { + "value": "flannel" + }, + "availabilityProfile": { + "value": "AvailabilitySet" + }, "kubernetesImageBase": { "value": "" } diff --git a/kubernetes/template/DeploymentTemplates/createUiDefinition.json b/kubernetes/template/DeploymentTemplates/createUiDefinition.json index e859ac9..f85c55b 100644 --- a/kubernetes/template/DeploymentTemplates/createUiDefinition.json +++ b/kubernetes/template/DeploymentTemplates/createUiDefinition.json @@ -375,7 +375,7 @@ }, { "label": "AKS", - "value": "aks" + "value": "aks-ubuntu-16.04" } ] }, @@ -476,6 +476,50 @@ }, "visible": false }, + { + "name": "networkPlugin", + "type": "Microsoft.Common.DropDown", + "label": "Network Plugin name", + "defaultValue": "Flannel", + "toolTip": "Network plugin which will deployed in Kubernetes cluster", + "constraints": { + "allowedValues": [ + { + "label": "Flannel", + "value": "flannel" + }, + { + "label": "Azure CNI", + "value": "azure" + }, + { + "label": "Kubenet", + "value": "kubenet" + } + ] + }, + "visible": false + }, + { + "name": "availabilityProfile", + "type": "Microsoft.Common.DropDown", + "label": "Availability profile name", + "defaultValue": "Availability Set", + "toolTip": "Availability profile that nodes in the Kubernetes cluster will be deployed with", + "constraints": { + "allowedValues": [ + { + "label": "Availability Set", + "value": "AvailabilitySet" + }, + { + "label": "Virtual Machine Scale Sets", + "value": "VirtualMachineScaleSets" + } + ] + }, + "visible": false + }, { "name": "kubernetesImageBase", "type": "Microsoft.Common.TextBox", @@ -507,6 +551,8 @@ "galleryRepository": "[steps('KubernetesClusterSettings').galleryRepository]", "galleryBranch": "[steps('KubernetesClusterSettings').galleryBranch]", "clusterDefinitionFileName": "[steps('KubernetesClusterSettings').clusterDefinitionFileName]", + "networkPlugin": "[steps('KubernetesClusterSettings').networkPlugin]", + "availabilityProfile": "[steps('KubernetesClusterSettings').availabilityProfile]", "kubernetesImageBase": "[steps('KubernetesClusterSettings').kubernetesImageBase]" } } diff --git a/kubernetes/template/DeploymentTemplates/script.sh b/kubernetes/template/DeploymentTemplates/script.sh index 10f3e68..40e5e79 100644 --- a/kubernetes/template/DeploymentTemplates/script.sh +++ b/kubernetes/template/DeploymentTemplates/script.sh @@ -224,6 +224,7 @@ log_level -i "AGENT_SIZE: $AGENT_SIZE" log_level -i "AGENT_SUBNET_NAME: $AGENT_SUBNET_NAME" log_level -i "AKSE_BASE_URL $AKSE_BASE_URL" log_level -i "AKSE_RELEASE_VERSION $AKSE_RELEASE_VERSION" +log_level -i "AVAILABILITY_PROFILE $AVAILABILITY_PROFILE" log_level -i "CUSTOM_VNET_NAME: $CUSTOM_VNET_NAME" log_level -i "DEFINITION_TEMPLATE_NAME: $DEFINITION_TEMPLATE_NAME" log_level -i "FIRST_CONSECUTIVE_STATIC_IP: $FIRST_CONSECUTIVE_STATIC_IP" @@ -236,6 +237,7 @@ log_level -i "MASTER_COUNT: $MASTER_COUNT" log_level -i "MASTER_DNS_PREFIX: $MASTER_DNS_PREFIX" log_level -i "MASTER_SIZE: $MASTER_SIZE" log_level -i "MASTER_SUBNET_NAME: $MASTER_SUBNET_NAME" +log_level -i "NETWORK_PLUGIN: $NETWORK_PLUGIN" log_level -i "NODE_DISTRO: $NODE_DISTRO" log_level -i "PUBLICIP_DNS: $PUBLICIP_DNS" log_level -i "PUBLICIP_FQDN: $PUBLICIP_FQDN" @@ -340,7 +342,7 @@ log_level -i "ENDPOINT_ACTIVE_DIRECTORY_ENDPOINT: $ENDPOINT_ACTIVE_DIRECTORY_END ##################################################################################### #custom vnet config -if [ $CUSTOM_VNET_NAME != "" ]; then +if [ "$CUSTOM_VNET_NAME" != "" ]; then log_level -i "Setting general custom vnet properties." MASTER_VNET_ID="/subscriptions/$TENANT_SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$CUSTOM_VNET_NAME/subnets/$MASTER_SUBNET_NAME" AGENT_VNET_ID="/subscriptions/$TENANT_SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$CUSTOM_VNET_NAME/subnets/$AGENT_SUBNET_NAME" @@ -369,6 +371,7 @@ jq --arg NODE_DISTRO $NODE_DISTRO '.properties.masterProfile.distro = $NODE_DIST jq '.properties.agentPoolProfiles[0].count'=$AGENT_COUNT | \ jq --arg AGENT_SIZE $AGENT_SIZE '.properties.agentPoolProfiles[0].vmSize=$AGENT_SIZE' | \ jq --arg NODE_DISTRO $NODE_DISTRO '.properties.agentPoolProfiles[0].distro=$NODE_DISTRO' | \ +jq --arg AVAILABILITY_PROFILE $AVAILABILITY_PROFILE '.properties.agentPoolProfiles[0].availabilityProfile=$AVAILABILITY_PROFILE' | \ jq '.properties.masterProfile.count'=$MASTER_COUNT | \ jq --arg MASTER_SIZE $MASTER_SIZE '.properties.masterProfile.vmSize=$MASTER_SIZE' | \ jq --arg ADMIN_USERNAME $ADMIN_USERNAME '.properties.linuxProfile.adminUsername = $ADMIN_USERNAME' | \ @@ -378,7 +381,8 @@ jq --arg SPN_CLIENT_ID $SPN_CLIENT_ID '.properties.servicePrincipalProfile.clien jq --arg SPN_CLIENT_SECRET $SPN_CLIENT_SECRET '.properties.servicePrincipalProfile.secret = $SPN_CLIENT_SECRET' | \ jq --arg IDENTITY_SYSTEM_LOWER $IDENTITY_SYSTEM_LOWER '.properties.customCloudProfile.identitySystem=$IDENTITY_SYSTEM_LOWER' | \ jq --arg K8S_VERSION $K8S_AZURE_CLOUDPROVIDER_VERSION '.properties.orchestratorProfile.orchestratorRelease=$K8S_VERSION' | \ -jq --arg K8S_IMAGE_BASE $K8S_IMAGE_BASE '.properties.orchestratorProfile.kubernetesConfig.kubernetesImageBase=$K8S_IMAGE_BASE' \ +jq --arg K8S_IMAGE_BASE $K8S_IMAGE_BASE '.properties.orchestratorProfile.kubernetesConfig.kubernetesImageBase=$K8S_IMAGE_BASE' | \ +jq --arg NETWORK_PLUGIN $NETWORK_PLUGIN '.properties.orchestratorProfile.kubernetesConfig.networkPlugin=$NETWORK_PLUGIN' \ > $AZURESTACK_CONFIGURATION_TEMP validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL From 2efa13a34445adfd784de2bbe4c7c3d3058ca5b3 Mon Sep 17 00:00:00 2001 From: Rohit Date: Mon, 12 Aug 2019 10:43:12 -0700 Subject: [PATCH 05/79] feat: windows node support in k8s cluster (#91) feat: windows node support in k8s cluster (#91) --- .../DeploymentTemplates/MainTemplate.json | 70 ++++++- .../DeploymentTemplates/azuredeploy.json | 56 +++++- .../azuredeploy.parameters.json | 18 ++ .../clusterDefinition.json | 12 +- .../createUiDefinition.json | 190 +++++++++++++++++- .../template/DeploymentTemplates/script.sh | 31 +++ 6 files changed, 357 insertions(+), 20 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index 8cdd9aa..a59cbaf 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -6,7 +6,7 @@ "type": "string", "defaultValue": "azureuser", "metadata": { - "description": "User name for the Linux Virtual Machines that are part of the Kubernetes cluster and DVM." + "description": "User name for the Linux virtual machines that are part of the Kubernetes cluster and DVM." } }, "sshPublicKey": { @@ -24,14 +24,14 @@ "agentPoolProfileCount": { "defaultValue": 3, "metadata": { - "description": "Kubernetes Node Pool Profile Count" + "description": "Kubernetes linux node pool profile count" }, "type": "int" }, "agentPoolProfileVMSize": { "defaultValue": "Standard_D2_v2", "metadata": { - "description": "The VMSize of Kubernetes node VMs" + "description": "The virtual machine size of the Kubernetes linux agent nodes" }, "type": "string" }, @@ -45,7 +45,7 @@ "masterPoolProfileVMSize": { "defaultValue": "Standard_D2_v2", "metadata": { - "description": "The VMSize of Kubernetes master VMs" + "description": "The virtual machine size of the Kubernetes master nodes" }, "type": "string" }, @@ -147,6 +147,48 @@ "description": "Network plugin which will deployed in Kubernetes cluster" }, "type": "string" + }, + "windowsAdminUsername": { + "defaultValue": "azureuser", + "metadata": { + "description": "User name for the Windows virtual machines that are part of the Kubernetes cluster." + }, + "type": "string" + }, + "windowsAdminPassword": { + "defaultValue": "", + "metadata": { + "description": "User password for the Windows virtual machines that are part of the Kubernetes cluster." + }, + "type": "securestring" + }, + "windowsPackageBaseURL": { + "defaultValue": "", + "metadata": { + "description": "URL path from where Windows binaries will be downloaded." + }, + "type": "string" + }, + "windowsPackageName": { + "defaultValue": "", + "metadata": { + "description": "Name of the Windows package which will be installed." + }, + "type": "string" + }, + "windowsAgentPoolProfileCount": { + "defaultValue": "0", + "metadata": { + "description": "Kubernetes Windows node pool profile count" + }, + "type": "string" + }, + "windowsAgentPoolProfileVMSize": { + "defaultValue": "Standard_D2_v2", + "metadata": { + "description": "The virtual machine size of the Kubernetes Windows nodes" + }, + "type": "string" }, "availabilityProfile": { "defaultValue": "AvailabilitySet", @@ -227,7 +269,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_PACKAGE_NAME=','\"',parameters('windowsPackageName'),'\"' ,' WINDOWS_PACKAGE_URL=','\"',parameters('windowsPackageBaseURL'),'\"' ,' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" }, "resources": [ { @@ -313,6 +355,24 @@ "clusterDefinitionFileName": { "value": "[parameters('clusterDefinitionFileName')]" }, + "windowsAgentPoolProfileCount": { + "value": "[parameters('windowsAgentPoolProfileCount')]" + }, + "windowsAgentPoolProfileVMSize": { + "value": "[parameters('windowsAgentPoolProfileVMSize')]" + }, + "windowsAdminUsername": { + "value": "[parameters('windowsAdminUsername')]" + }, + "windowsAdminPassword": { + "value": "[parameters('windowsAdminPassword')]" + }, + "windowsPackageBaseURL": { + "value": "[parameters('windowsPackageBaseURL')]" + }, + "windowsPackageName": { + "value": "[parameters('windowsPackageName')]" + }, "kubernetesImageBase": { "value": "[parameters('kubernetesImageBase')]" } diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 5ba4598..0eae6f6 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -6,7 +6,7 @@ "type": "string", "defaultValue": "azureuser", "metadata": { - "description": "User name for the Linux Virtual Machines that are part of the Kubernetes cluster and DVM." + "description": "User name for the Linux virtual machines that are part of the Kubernetes cluster and DVM." } }, "sshPublicKey": { @@ -24,28 +24,28 @@ "agentPoolProfileCount": { "defaultValue": 3, "metadata": { - "description": "Kubernetes Node Pool Profile Count" + "description": "Kubernetes linux node pool profile count" }, "type": "int" }, "agentPoolProfileVMSize": { "defaultValue": "Standard_D2_v2", "metadata": { - "description": "The VMSize of Kubernetes node VMs" + "description": "The virtual machine size of the Kubernetes linux agent nodes" }, "type": "string" }, "masterPoolProfileCount": { "defaultValue": 3, "metadata": { - "description": "Kubernetes Master Pool Profile Count" + "description": "Kubernetes master pool profile count" }, "type": "int" }, "masterPoolProfileVMSize": { "defaultValue": "Standard_D2_v2", "metadata": { - "description": "The VMSize of Kubernetes master VMs" + "description": "The virtual machine size of the Kubernetes master nodes" }, "type": "string" }, @@ -179,6 +179,48 @@ }, "type": "string" }, + "windowsAgentPoolProfileCount": { + "defaultValue": "0", + "metadata": { + "description": "Kubernetes Windows node pool profile count" + }, + "type": "string" + }, + "windowsAgentPoolProfileVMSize": { + "defaultValue": "Standard_D2_v2", + "metadata": { + "description": "The virtual machine size of the Kubernetes Windows agent nodes" + }, + "type": "string" + }, + "windowsAdminUsername": { + "defaultValue": "azureuser", + "metadata": { + "description": "User name for the Windows virtual machines that are part of the Kubernetes cluster." + }, + "type": "string" + }, + "windowsAdminPassword": { + "defaultValue": "", + "metadata": { + "description": "Password for the Windows virtual machines that are part of the Kubernetes cluster." + }, + "type": "securestring" + }, + "windowsPackageBaseURL": { + "defaultValue": "", + "metadata": { + "description": "URL path from where Windows binaries will be downloaded." + }, + "type": "string" + }, + "windowsPackageName": { + "defaultValue": "", + "metadata": { + "description": "Name of the Windows package which will be installed." + }, + "type": "string" + }, "nodeDistro": { "defaultValue": "ubuntu", "allowedValues": [ @@ -219,7 +261,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_PACKAGE_NAME=','\"',parameters('windowsPackageName'),'\"' ,' WINDOWS_PACKAGE_URL=','\"',parameters('windowsPackageBaseURL'),'\"' ,' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" }, "resources": [ { @@ -332,7 +374,7 @@ "vmSize": "[variables('vmSize')]" }, "osProfile": { - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "computerName": "[variables('vmName')]", "adminUsername": "[parameters('linuxAdminUsername')]", "linuxConfiguration": { diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json index 46531be..508ca13 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json @@ -74,6 +74,24 @@ "availabilityProfile": { "value": "AvailabilitySet" }, + "windowsAgentPoolProfileCount": { + "value": "0" + }, + "windowsAgentPoolProfileVMSize": { + "value": "Standard_D2_v2" + }, + "windowsAdminUsername": { + "value": "azureuser" + }, + "windowsAdminPassword": { + "value": "" + }, + "windowsPackageBaseURL": { + "value": "" + }, + "windowsPackageName": { + "value": "" + }, "kubernetesImageBase": { "value": "" } diff --git a/kubernetes/template/DeploymentTemplates/clusterDefinition.json b/kubernetes/template/DeploymentTemplates/clusterDefinition.json index 583c234..90f3d35 100644 --- a/kubernetes/template/DeploymentTemplates/clusterDefinition.json +++ b/kubernetes/template/DeploymentTemplates/clusterDefinition.json @@ -8,7 +8,8 @@ "kubernetesConfig": { "kubernetesImageBase": "", "useInstanceMetadata": false, - "networkPlugin": "flannel" + "networkPlugin": "flannel", + "customWindowsPackageURL": "" } }, "customCloudProfile": { @@ -42,6 +43,15 @@ ] } }, + "windowsProfile": { + "adminUsername": "azureuser", + "adminPassword": "", + "imageVersion": "latest", + "WindowsPublisher": "MicrosoftWindowsServer", + "WindowsOffer": "WindowsServer", + "WindowsSku": "2019-Datacenter-Core-with-Containers", + "sshEnabled": true + }, "servicePrincipalProfile": { "clientId": "", "secret": "" diff --git a/kubernetes/template/DeploymentTemplates/createUiDefinition.json b/kubernetes/template/DeploymentTemplates/createUiDefinition.json index f85c55b..5b4d8d6 100644 --- a/kubernetes/template/DeploymentTemplates/createUiDefinition.json +++ b/kubernetes/template/DeploymentTemplates/createUiDefinition.json @@ -17,7 +17,7 @@ "type": "Microsoft.Common.TextBox", "label": "Linux VM admin username", "defaultValue": "azureuser", - "toolTip": "User name for the Linux Virtual Machines that are part of the Kubernetes cluster and DVM.", + "toolTip": "User name for the Linux virtual machines that are part of the Kubernetes cluster and DVM.", "constraints": { "required": true } @@ -88,9 +88,9 @@ { "name": "masterPoolProfileVMSize", "type": "Microsoft.Common.DropDown", - "label": "The VMSize of Kubernetes master VMs", + "label": "The virtual machine size of the Kubernetes master nodes", "defaultValue": "Standard_D2_v2", - "toolTip": "The VMSize of Kubernetes master VMs", + "toolTip": "The virtual machine size of the Kubernetes master nodes", "constraints": { "allowedValues": [ { @@ -172,9 +172,9 @@ { "name": "agentPoolProfileCount", "type": "Microsoft.Common.DropDown", - "label": "Kubernetes node pool profile count", + "label": "Kubernetes linux node pool profile count", "defaultValue": "3", - "toolTip": "The number of agents for the Kubernetes cluster.", + "toolTip": "The number of linux agents for Kubernetes cluster.", "constraints": { "allowedValues": [{ "label": "1", @@ -245,9 +245,9 @@ { "name": "agentPoolProfileVMSize", "type": "Microsoft.Common.DropDown", - "label": "The VMSize of Kubernetes node VMs", + "label": "The virtual machine size of Kubernetes linux agent nodes", "defaultValue": "Standard_D2_v2", - "toolTip": "The VMSize of Kubernetes node VMs", + "toolTip": "The virtual machine size of Kubernetes linux agent nodes", "constraints": { "allowedValues": [ { @@ -520,6 +520,176 @@ }, "visible": false }, + { + "name": "windowsAgentPoolProfileCount", + "type": "Microsoft.Common.TextBox", + "label": "Kubernetes Windows node pool profile count", + "defaultValue": "0", + "toolTip": "The number of Windows agent nodes in Kubernetes cluster.", + "constraints": { + "allowedValues": [{ + "label": "0", + "value": "0" + }, + { + "label": "1", + "value": "1" + }, + { + "label": "2", + "value": "2" + }, + { + "label": "3", + "value": "3" + }, + { + "label": "4", + "value": "4" + }, + { + "label": "5", + "value": "5" + }, + { + "label": "6", + "value": "6" + }, + { + "label": "7", + "value": "7" + }, { + "label": "8", + "value": "8" + }, + { + "label": "9", + "value": "9" + }, + { + "label": "10", + "value": "10" + } + ] + }, + "visible": false + }, + { + "name": "windowsAgentPoolProfileVMSize", + "type": "Microsoft.Common.DropDown", + "label": "The virtual machine size of the Kubernetes Windows agent nodes", + "defaultValue": "Standard_D2_v2", + "toolTip": "The virtual machine size of the Kubernetes Windows agent nodes", + "constraints": { + "allowedValues": [ + { + "label": "Standard_D1_v2", + "value": "Standard_D1_v2" + }, + { + "label": "Standard_D2_v2", + "value": "Standard_D2_v2" + }, + { + "label": "Standard_D3_v2", + "value": "Standard_D3_v2" + }, + { + "label": "Standard_D4_v2", + "value": "Standard_D4_v2" + }, + { + "label": "Standard_D5_v2", + "value": "Standard_D5_v2" + }, + { + "label": "Standard_D11_v2", + "value": "Standard_D11_v2" + }, + { + "label": "Standard_D12_v2", + "value": "Standard_D12_v2" + }, + { + "label": "Standard_D13_v2", + "value": "Standard_D13_v2" + }, + { + "label": "Standard_D14_v2", + "value": "Standard_D14_v2" + }, + { + "label": "Standard_DS1_v2", + "value": "Standard_DS1_v2" + }, + { + "label": "Standard_DS2_v2", + "value": "Standard_DS2_v2" + }, + { + "label": "Standard_DS3_v2", + "value": "Standard_DS3_v2" + }, + { + "label": "Standard_DS4_v2", + "value": "Standard_DS4_v2" + }, + { + "label": "Standard_DS5_v2", + "value": "Standard_DS5_v2" + }, + { + "label": "Standard_DS11_v2", + "value": "Standard_DS11_v2" + }, + { + "label": "Standard_DS12_v2", + "value": "Standard_DS12_v2" + }, + { + "label": "Standard_DS13_v2", + "value": "Standard_DS13_v2" + }, + { + "label": "Standard_DS14_v2", + "value": "Standard_DS14_v2" + } + ] + }, + "visible": false + }, + { + "name": "windowsAdminUsername", + "type": "Microsoft.Common.TextBox", + "label": "Windows VM admin username", + "defaultValue": "azureuser", + "toolTip": "User name for Windows virtual machines that are part of Kubernetes cluster.", + "visible": false + }, + { + "name": "windowsAdminPassword", + "type": "Microsoft.Common.TextBox", + "label": "Windows VM admin password", + "defaultValue": "", + "toolTip": "Password for Windows virtual machines that are part of Kubernetes cluster.", + "visible": false + }, + { + "name": "windowsPackageBaseURL", + "type": "Microsoft.Common.TextBox", + "label": "Windows package URL", + "defaultValue": "", + "toolTip": "URL path from where Windows binaries will be downloaded.", + "visible": false + }, + { + "name": "windowsPackageName", + "type": "Microsoft.Common.TextBox", + "label": "Windows package name", + "defaultValue": "", + "toolTip": "Name of Windows package that will be installed.", + "visible": false + }, { "name": "kubernetesImageBase", "type": "Microsoft.Common.TextBox", @@ -553,6 +723,12 @@ "clusterDefinitionFileName": "[steps('KubernetesClusterSettings').clusterDefinitionFileName]", "networkPlugin": "[steps('KubernetesClusterSettings').networkPlugin]", "availabilityProfile": "[steps('KubernetesClusterSettings').availabilityProfile]", + "windowsAgentPoolProfileCount": "[steps('KubernetesClusterSettings').windowsAgentPoolProfileCount]", + "windowsAgentPoolProfileVMSize": "[steps('KubernetesClusterSettings').windowsAgentPoolProfileVMSize]", + "windowsAdminUsername": "[steps('KubernetesClusterSettings').windowsAdminUsername]", + "windowsAdminPassword": "[steps('KubernetesClusterSettings').windowsAdminPassword]", + "windowsPackageBaseURL": "[steps('KubernetesClusterSettings').windowsPackageBaseURL]", + "windowsPackageName": "[steps('KubernetesClusterSettings').windowsPackageName]", "kubernetesImageBase": "[steps('KubernetesClusterSettings').kubernetesImageBase]" } } diff --git a/kubernetes/template/DeploymentTemplates/script.sh b/kubernetes/template/DeploymentTemplates/script.sh index 40e5e79..a21273a 100644 --- a/kubernetes/template/DeploymentTemplates/script.sh +++ b/kubernetes/template/DeploymentTemplates/script.sh @@ -249,6 +249,14 @@ log_level -i "SSH_PUBLICKEY: ----" log_level -i "STORAGE_PROFILE: $STORAGE_PROFILE" log_level -i "TENANT_ID: $TENANT_ID" log_level -i "TENANT_SUBSCRIPTION_ID: $TENANT_SUBSCRIPTION_ID" +log_level -i "WINDOWS_ADMIN_USERNAME: $WINDOWS_ADMIN_USERNAME" +log_level -i "WINDOWS_ADMIN_PASSWORD: ----" +log_level -i "WINDOWS_AGENT_COUNT: $WINDOWS_AGENT_COUNT" +log_level -i "WINDOWS_AGENT_SIZE: $WINDOWS_AGENT_SIZE" +log_level -i "WINDOWS_PACKAGE_NAME: $WINDOWS_PACKAGE_NAME" +log_level -i "WINDOWS_PACKAGE_URL: $WINDOWS_PACKAGE_URL" + + log_level -i "------------------------------------------------------------------------" log_level -i "Constants" @@ -387,6 +395,29 @@ jq --arg NETWORK_PLUGIN $NETWORK_PLUGIN '.properties.orchestratorProfile.kuberne validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL +if [ "$WINDOWS_AGENT_COUNT" != "0" ]; then + log_level -i "Update cluster definition with Windows node details." + + WINDOWS_PACKAGE_FULL_URL="$WINDOWS_PACKAGE_URL/$WINDOWS_PACKAGE_NAME" + log_level -i "WINDOWS_PACKAGE_FULL_URL: $WINDOWS_PACKAGE_FULL_URL" + cat $AZURESTACK_CONFIGURATION | \ + jq --arg WINDOWS_ADMIN_USERNAME $WINDOWS_ADMIN_USERNAME '.properties.windowsProfile.adminUsername=$WINDOWS_ADMIN_USERNAME' | \ + jq --arg WINDOWS_ADMIN_PASSWORD $WINDOWS_ADMIN_PASSWORD '.properties.windowsProfile.adminPassword=$WINDOWS_ADMIN_PASSWORD' | \ + jq --arg WINDOWS_PACKAGE_FULL_URL $WINDOWS_PACKAGE_FULL_URL '.properties.orchestratorProfile.kubernetesConfig.customWindowsPackageURL=$WINDOWS_PACKAGE_FULL_URL' \ + > $AZURESTACK_CONFIGURATION_TEMP + + validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL + + cat $AZURESTACK_CONFIGURATION | \ + jq --arg winAgentCount $WINDOWS_AGENT_COUNT --arg winAgentSize $WINDOWS_AGENT_SIZE --arg winAvailabilityProfile $AVAILABILITY_PROFILE\ + '.properties.agentPoolProfiles += [{"name": "windowspool", "osDiskSizeGB": 128, "AcceleratedNetworkingEnabled": false, "osType": "Windows", "count": $winAgentCount | tonumber, "vmSize": $winAgentSize, "availabilityProfile": $winAvailabilityProfile}]' \ + > $AZURESTACK_CONFIGURATION_TEMP + + validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL + + log_level -i "Updating cluster definition done with Windows node details." +fi + log_level -i "Done building cluster definition." ##################################################################################### From 85260e6465735b40612ea03f332a56ab81882309 Mon Sep 17 00:00:00 2001 From: Rohit Date: Mon, 12 Aug 2019 13:52:49 -0700 Subject: [PATCH 06/79] AKSe version upgrade. (#97) --- kubernetes/template/DeploymentTemplates/MainTemplate.json | 2 +- kubernetes/template/DeploymentTemplates/azuredeploy.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index a59cbaf..d054eb5 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -103,7 +103,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.38.5", + "defaultValue": "v0.39.1", "metadata": { "description": "The version of AKS Engine to download" } diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 0eae6f6..d90d0ff 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -95,7 +95,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.38.5", + "defaultValue": "v0.39.1", "metadata": { "description": "The version of AKS Engine to download" } From 7724ed77bc160ccb39e0ac851701432cfbb107b7 Mon Sep 17 00:00:00 2001 From: Rohit Date: Tue, 13 Aug 2019 15:44:18 -0700 Subject: [PATCH 07/79] feat: enable options to have different combination of agent node deployment (#103) Making multi deployment support. --- .../DeploymentTemplates/azuredeploy.json | 2 +- .../clusterDefinition.json | 11 +------- .../template/DeploymentTemplates/script.sh | 28 +++++++++++++++---- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index d90d0ff..0e34b7e 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -374,7 +374,7 @@ "vmSize": "[variables('vmSize')]" }, "osProfile": { - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "computerName": "[variables('vmName')]", "adminUsername": "[parameters('linuxAdminUsername')]", "linuxConfiguration": { diff --git a/kubernetes/template/DeploymentTemplates/clusterDefinition.json b/kubernetes/template/DeploymentTemplates/clusterDefinition.json index 90f3d35..9e28f0f 100644 --- a/kubernetes/template/DeploymentTemplates/clusterDefinition.json +++ b/kubernetes/template/DeploymentTemplates/clusterDefinition.json @@ -22,16 +22,7 @@ "count": 3, "vmSize": "Standard_D2_v2" }, - "agentPoolProfiles": [ - { - "name": "linuxpool", - "osDiskSizeGB": 200, - "count": 3, - "vmSize": "Standard_D2_v2", - "distro": "ubuntu", - "availabilityProfile": "AvailabilitySet", - "AcceleratedNetworkingEnabled": false - } + "agentPoolProfiles": [ ], "linuxProfile": { "adminUsername": "azureuser", diff --git a/kubernetes/template/DeploymentTemplates/script.sh b/kubernetes/template/DeploymentTemplates/script.sh index a21273a..1627821 100644 --- a/kubernetes/template/DeploymentTemplates/script.sh +++ b/kubernetes/template/DeploymentTemplates/script.sh @@ -4,6 +4,7 @@ ERR_APT_INSTALL_TIMEOUT=9 # Timeout installing required apt packages ERR_AKSE_DOWNLOAD=10 # Failure downloading AKS-Engine binaries ERR_AKSE_DEPLOY=12 # Failure calling AKS-Engine's deploy operation ERR_TEMPLATE_DOWNLOAD=13 # Failure downloading AKS-Engine template +ERR_INVALID_AGENT_COUNT_VALUE=14 # Both Windows and Linux agent value is zero ERR_CACERT_INSTALL=20 # Failure moving CA certificate ERR_METADATA_ENDPOINT=30 # Failure calling the metadata endpoint ERR_API_MODEL=40 # Failure building API model using user input @@ -257,6 +258,9 @@ log_level -i "WINDOWS_PACKAGE_NAME: $WINDOWS_PACKAGE_NAME" log_level -i "WINDOWS_PACKAGE_URL: $WINDOWS_PACKAGE_URL" +if [[ "$WINDOWS_AGENT_COUNT" == "0" ]] && [[ "$AGENT_COUNT" == "0" ]]; then + exit $ERR_INVALID_AGENT_COUNT_VALUE +fi log_level -i "------------------------------------------------------------------------" log_level -i "Constants" @@ -376,10 +380,6 @@ jq --arg ENDPOINT_PORTAL $ENDPOINT_PORTAL '.properties.customCloudProfile.portal jq --arg REGION_NAME $REGION_NAME '.location = $REGION_NAME' | \ jq --arg MASTER_DNS_PREFIX $MASTER_DNS_PREFIX '.properties.masterProfile.dnsPrefix = $MASTER_DNS_PREFIX' | \ jq --arg NODE_DISTRO $NODE_DISTRO '.properties.masterProfile.distro = $NODE_DISTRO' | \ -jq '.properties.agentPoolProfiles[0].count'=$AGENT_COUNT | \ -jq --arg AGENT_SIZE $AGENT_SIZE '.properties.agentPoolProfiles[0].vmSize=$AGENT_SIZE' | \ -jq --arg NODE_DISTRO $NODE_DISTRO '.properties.agentPoolProfiles[0].distro=$NODE_DISTRO' | \ -jq --arg AVAILABILITY_PROFILE $AVAILABILITY_PROFILE '.properties.agentPoolProfiles[0].availabilityProfile=$AVAILABILITY_PROFILE' | \ jq '.properties.masterProfile.count'=$MASTER_COUNT | \ jq --arg MASTER_SIZE $MASTER_SIZE '.properties.masterProfile.vmSize=$MASTER_SIZE' | \ jq --arg ADMIN_USERNAME $ADMIN_USERNAME '.properties.linuxProfile.adminUsername = $ADMIN_USERNAME' | \ @@ -395,8 +395,24 @@ jq --arg NETWORK_PLUGIN $NETWORK_PLUGIN '.properties.orchestratorProfile.kuberne validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL +if [ "$AGENT_COUNT" != "0" ]; then + log_level -i "Update cluster definition with Linux agent node details." + + cat $AZURESTACK_CONFIGURATION | \ + jq --arg linuxAgentCount $AGENT_COUNT \ + --arg linuxAgentSize $AGENT_SIZE \ + --arg linuxAvailabilityProfile $AVAILABILITY_PROFILE \ + --arg NODE_DISTRO $NODE_DISTRO \ + '.properties.agentPoolProfiles += [{"name": "linuxpool", "osDiskSizeGB": 200, "AcceleratedNetworkingEnabled": false, "distro": $NODE_DISTRO, "count": $linuxAgentCount | tonumber, "vmSize": $linuxAgentSize, "availabilityProfile": $linuxAvailabilityProfile}]' \ + > $AZURESTACK_CONFIGURATION_TEMP + + validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL + + log_level -i "Updating cluster definition done with Linux agent node details." +fi + if [ "$WINDOWS_AGENT_COUNT" != "0" ]; then - log_level -i "Update cluster definition with Windows node details." + log_level -i "Update cluster definition with Windows agent node details." WINDOWS_PACKAGE_FULL_URL="$WINDOWS_PACKAGE_URL/$WINDOWS_PACKAGE_NAME" log_level -i "WINDOWS_PACKAGE_FULL_URL: $WINDOWS_PACKAGE_FULL_URL" @@ -415,7 +431,7 @@ if [ "$WINDOWS_AGENT_COUNT" != "0" ]; then validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL - log_level -i "Updating cluster definition done with Windows node details." + log_level -i "Updating cluster definition done with Windows agent node details." fi log_level -i "Done building cluster definition." From fb97e3617c3635b54ecf106c339eaf515dc055b5 Mon Sep 17 00:00:00 2001 From: Rohit Date: Wed, 14 Aug 2019 13:36:08 -0700 Subject: [PATCH 08/79] Fix for custom vnet case. (#109) --- .../DeploymentTemplates/azuredeploy.json | 2 +- .../template/DeploymentTemplates/script.sh | 32 +++++++++++-------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 0e34b7e..29fc847 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -374,7 +374,7 @@ "vmSize": "[variables('vmSize')]" }, "osProfile": { - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "computerName": "[variables('vmName')]", "adminUsername": "[parameters('linuxAdminUsername')]", "linuxConfiguration": { diff --git a/kubernetes/template/DeploymentTemplates/script.sh b/kubernetes/template/DeploymentTemplates/script.sh index 1627821..c056432 100644 --- a/kubernetes/template/DeploymentTemplates/script.sh +++ b/kubernetes/template/DeploymentTemplates/script.sh @@ -351,6 +351,24 @@ fi log_level -i "ENDPOINT_ACTIVE_DIRECTORY_ENDPOINT: $ENDPOINT_ACTIVE_DIRECTORY_ENDPOINT" +##################################################################################### +#Linux agent +if [ "$AGENT_COUNT" != "0" ]; then + log_level -i "Update cluster definition with Linux agent node details." + + cat $AZURESTACK_CONFIGURATION | \ + jq --arg linuxAgentCount $AGENT_COUNT \ + --arg linuxAgentSize $AGENT_SIZE \ + --arg linuxAvailabilityProfile $AVAILABILITY_PROFILE \ + --arg NODE_DISTRO $NODE_DISTRO \ + '.properties.agentPoolProfiles += [{"name": "linuxpool", "osDiskSizeGB": 200, "AcceleratedNetworkingEnabled": false, "distro": $NODE_DISTRO, "count": $linuxAgentCount | tonumber, "vmSize": $linuxAgentSize, "availabilityProfile": $linuxAvailabilityProfile}]' \ + > $AZURESTACK_CONFIGURATION_TEMP + + validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL + + log_level -i "Updating cluster definition done with Linux agent node details." +fi + ##################################################################################### #custom vnet config @@ -395,21 +413,7 @@ jq --arg NETWORK_PLUGIN $NETWORK_PLUGIN '.properties.orchestratorProfile.kuberne validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL -if [ "$AGENT_COUNT" != "0" ]; then - log_level -i "Update cluster definition with Linux agent node details." - cat $AZURESTACK_CONFIGURATION | \ - jq --arg linuxAgentCount $AGENT_COUNT \ - --arg linuxAgentSize $AGENT_SIZE \ - --arg linuxAvailabilityProfile $AVAILABILITY_PROFILE \ - --arg NODE_DISTRO $NODE_DISTRO \ - '.properties.agentPoolProfiles += [{"name": "linuxpool", "osDiskSizeGB": 200, "AcceleratedNetworkingEnabled": false, "distro": $NODE_DISTRO, "count": $linuxAgentCount | tonumber, "vmSize": $linuxAgentSize, "availabilityProfile": $linuxAvailabilityProfile}]' \ - > $AZURESTACK_CONFIGURATION_TEMP - - validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL - - log_level -i "Updating cluster definition done with Linux agent node details." -fi if [ "$WINDOWS_AGENT_COUNT" != "0" ]; then log_level -i "Update cluster definition with Windows agent node details." From 676d53cc2f65fc96c901e2a109bbb3f5a5852cf1 Mon Sep 17 00:00:00 2001 From: deaborch <44680211+deaborch@users.noreply.github.com> Date: Wed, 21 Aug 2019 15:40:39 -0700 Subject: [PATCH 09/79] feat: arm template telemetry for market place (#119) * enabled telemetry * enabled telemetry first pass * enabled telemetry * enabled telemetry first pass * deployment api version fix * changed API version * Reformated to code sample --- .../template/DeploymentTemplates/MainTemplate.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index d054eb5..1859134 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -242,6 +242,7 @@ } }, "variables": { + "apiVersionDeployments": "2015-11-01", "resourceGroupName": "[resourceGroup().name]", "dnsNameForPublicIP": "[toLower(concat('vmd-dns', parameters('masterProfileDnsPrefix')))]", "location": "[resourceGroup().location]", @@ -272,6 +273,19 @@ "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_PACKAGE_NAME=','\"',parameters('windowsPackageName'),'\"' ,' WINDOWS_PACKAGE_URL=','\"',parameters('windowsPackageBaseURL'),'\"' ,' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" }, "resources": [ + { + "apiVersion": "[variables('apiVersionDeployments')]", + "name": "pid-b8a190d4-9ecc-4bd5-a9ba-3cc60c6e0c1f", + "properties": { + "mode": "Incremental", + "template": { + "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "resources": [] + } + }, + "type": "Microsoft.Resources/deployments" + }, { "apiVersion": "2015-01-01", "name": "dvmdeployment", From e6a556bf084d9660d8061448ebe0b5936336b064 Mon Sep 17 00:00:00 2001 From: Rohit Date: Thu, 22 Aug 2019 12:14:06 -0700 Subject: [PATCH 10/79] Update K8s and AKSe version to use latest bits. (#121) --- .../template/DeploymentTemplates/MainTemplate.json | 4 ++-- .../template/DeploymentTemplates/azuredeploy.json | 4 ++-- .../DeploymentTemplates/createUiDefinition.json | 14 +++++++++----- kubernetes/template/strings/resources.resjson | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index 1859134..8a4e8e4 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -82,7 +82,7 @@ }, "kubernetesAzureCloudProviderVersion": { "type": "string", - "defaultValue": "1.12", + "defaultValue": "1.13", "metadata": { "description": "This is the version for the Kubernetes Azure cloud provider. We would use a custom Kubernetes build specifically for Azure Stack for each version." } @@ -103,7 +103,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.39.1", + "defaultValue": "v0.39.2", "metadata": { "description": "The version of AKS Engine to download" } diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 29fc847..82e41ce 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -81,7 +81,7 @@ }, "kubernetesAzureCloudProviderVersion": { "type": "string", - "defaultValue": "1.12", + "defaultValue": "1.13", "metadata": { "description": "This is the version for the Kubernetes Azure cloud provider. We would use a custom Kubernetes build specifically for Azure Stack for each version." } @@ -95,7 +95,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.39.1", + "defaultValue": "v0.39.2", "metadata": { "description": "The version of AKS Engine to download" } diff --git a/kubernetes/template/DeploymentTemplates/createUiDefinition.json b/kubernetes/template/DeploymentTemplates/createUiDefinition.json index 5b4d8d6..3fe3b5f 100644 --- a/kubernetes/template/DeploymentTemplates/createUiDefinition.json +++ b/kubernetes/template/DeploymentTemplates/createUiDefinition.json @@ -405,17 +405,21 @@ "name": "kubernetesAzureCloudProviderVersion", "type": "Microsoft.Common.DropDown", "label": "Kubernetes version", - "defaultValue": "1.12", + "defaultValue": "1.13", "toolTip": "This is the version for the Kubernetes Azure cloud provider.", "constraints": { "allowedValues": [ - { - "label": "1.12", - "value": "1.12" - }, { "label": "1.13", "value": "1.13" + }, + { + "label": "1.14", + "value": "1.14" + }, + { + "label": "1.15", + "value": "1.15" } ] }, diff --git a/kubernetes/template/strings/resources.resjson b/kubernetes/template/strings/resources.resjson index b1ac2bf..582d430 100644 --- a/kubernetes/template/strings/resources.resjson +++ b/kubernetes/template/strings/resources.resjson @@ -3,7 +3,7 @@ "publisherDisplayName": "Microsoft", "summary": "An IaaS based template for deploying a standalone Kubernetes Cluster", "longSummary": "This solution deploys Kubernetes cluster running as an standalone cluster with templates generated using AKS Engine.", - "description": "This solution deploys a Kubernetes cluster running as a standalone cluster with templates generated using AKS Engine.

Kubernetes is a distributed system platform used to build scalable, reliable, and easily-managed applications for the cloud. You can use Kubernetes to:

• Develop upgradeable and scalable applications using Helm that can be deployed in seconds.
• Easily monitor and diagnose the health of your applications.", + "description": "This solution deploys a Kubernetes cluster running as a standalone cluster with templates generated using AKS Engine.

This solution is intended for testing, development and demo scenarios. Not for production deployments of applications.

Kubernetes is a distributed system platform used to build scalable, reliable, and easily-managed applications for the cloud. You can use Kubernetes to:

• Develop upgradeable and scalable applications using Helm that can be deployed in seconds.
• Easily monitor and diagnose the health of your applications.", "documentationLink": "Kubernetes Help", "documentationLink2": "Add a Kubernetes Cluster to the Azure Stack Marketplace", "documentationLink3": "Deploy a Kubernetes cluster to Azure Stack", From 285599e336b0c78b0202207cda6a6a17b9335cc5 Mon Sep 17 00:00:00 2001 From: Rohit Date: Thu, 22 Aug 2019 16:06:33 -0700 Subject: [PATCH 11/79] description changes for marketplace (#123) --- kubernetes/template/strings/resources.resjson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubernetes/template/strings/resources.resjson b/kubernetes/template/strings/resources.resjson index 582d430..f9258b0 100644 --- a/kubernetes/template/strings/resources.resjson +++ b/kubernetes/template/strings/resources.resjson @@ -3,7 +3,7 @@ "publisherDisplayName": "Microsoft", "summary": "An IaaS based template for deploying a standalone Kubernetes Cluster", "longSummary": "This solution deploys Kubernetes cluster running as an standalone cluster with templates generated using AKS Engine.", - "description": "This solution deploys a Kubernetes cluster running as a standalone cluster with templates generated using AKS Engine.

This solution is intended for testing, development and demo scenarios. Not for production deployments of applications.

Kubernetes is a distributed system platform used to build scalable, reliable, and easily-managed applications for the cloud. You can use Kubernetes to:

• Develop upgradeable and scalable applications using Helm that can be deployed in seconds.
• Easily monitor and diagnose the health of your applications.", + "description": "This solution deploys a Kubernetes cluster running as a standalone cluster with templates generated using AKS Engine.

This solution is intended for testing, development and demo scenarios. Not for production deployments of applications.

Kubernetes is a distributed system platform used to build scalable, reliable, and easily-managed applications for the cloud.

", "documentationLink": "Kubernetes Help", "documentationLink2": "Add a Kubernetes Cluster to the Azure Stack Marketplace", "documentationLink3": "Deploy a Kubernetes cluster to Azure Stack", From 40fae312886780f4a169b223a2aecedbaa4768ab Mon Sep 17 00:00:00 2001 From: Rohit Date: Wed, 4 Sep 2019 13:17:31 -0700 Subject: [PATCH 12/79] feat: move to latest akse version. (#128) --- kubernetes/template/DeploymentTemplates/MainTemplate.json | 2 +- kubernetes/template/DeploymentTemplates/azuredeploy.json | 2 +- kubernetes/template/DeploymentTemplates/clusterDefinition.json | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index 8a4e8e4..d6db857 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -103,7 +103,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.39.2", + "defaultValue": "v0.40.0", "metadata": { "description": "The version of AKS Engine to download" } diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index 82e41ce..f1d2402 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -95,7 +95,7 @@ }, "aksEngineReleaseVersion": { "type": "string", - "defaultValue": "v0.39.2", + "defaultValue": "v0.40.0", "metadata": { "description": "The version of AKS Engine to download" } diff --git a/kubernetes/template/DeploymentTemplates/clusterDefinition.json b/kubernetes/template/DeploymentTemplates/clusterDefinition.json index 9e28f0f..560a5d4 100644 --- a/kubernetes/template/DeploymentTemplates/clusterDefinition.json +++ b/kubernetes/template/DeploymentTemplates/clusterDefinition.json @@ -9,7 +9,8 @@ "kubernetesImageBase": "", "useInstanceMetadata": false, "networkPlugin": "flannel", - "customWindowsPackageURL": "" + "cloudProviderRateLimitBucket": 0, + "cloudProviderRateLimitBucketWrite": 0 } }, "customCloudProfile": { From 863cd975f968482e592cb8835de7d0a7f3489188 Mon Sep 17 00:00:00 2001 From: Rohit Date: Wed, 4 Sep 2019 14:29:42 -0700 Subject: [PATCH 13/79] Remove package URL parameter. (#129) --- .../DeploymentTemplates/MainTemplate.json | 26 +++---------------- .../DeploymentTemplates/azuredeploy.json | 18 ++----------- .../azuredeploy.parameters.json | 6 ----- .../createUiDefinition.json | 18 ------------- .../template/DeploymentTemplates/script.sh | 5 ---- 5 files changed, 5 insertions(+), 68 deletions(-) diff --git a/kubernetes/template/DeploymentTemplates/MainTemplate.json b/kubernetes/template/DeploymentTemplates/MainTemplate.json index d6db857..b9ee80d 100644 --- a/kubernetes/template/DeploymentTemplates/MainTemplate.json +++ b/kubernetes/template/DeploymentTemplates/MainTemplate.json @@ -161,21 +161,7 @@ "description": "User password for the Windows virtual machines that are part of the Kubernetes cluster." }, "type": "securestring" - }, - "windowsPackageBaseURL": { - "defaultValue": "", - "metadata": { - "description": "URL path from where Windows binaries will be downloaded." - }, - "type": "string" - }, - "windowsPackageName": { - "defaultValue": "", - "metadata": { - "description": "Name of the Windows package which will be installed." - }, - "type": "string" - }, + }, "windowsAgentPoolProfileCount": { "defaultValue": "0", "metadata": { @@ -270,7 +256,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_PACKAGE_NAME=','\"',parameters('windowsPackageName'),'\"' ,' WINDOWS_PACKAGE_URL=','\"',parameters('windowsPackageBaseURL'),'\"' ,' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"')]" }, "resources": [ { @@ -380,13 +366,7 @@ }, "windowsAdminPassword": { "value": "[parameters('windowsAdminPassword')]" - }, - "windowsPackageBaseURL": { - "value": "[parameters('windowsPackageBaseURL')]" - }, - "windowsPackageName": { - "value": "[parameters('windowsPackageName')]" - }, + }, "kubernetesImageBase": { "value": "[parameters('kubernetesImageBase')]" } diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.json b/kubernetes/template/DeploymentTemplates/azuredeploy.json index f1d2402..2b6d603 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.json @@ -207,20 +207,6 @@ }, "type": "securestring" }, - "windowsPackageBaseURL": { - "defaultValue": "", - "metadata": { - "description": "URL path from where Windows binaries will be downloaded." - }, - "type": "string" - }, - "windowsPackageName": { - "defaultValue": "", - "metadata": { - "description": "Name of the Windows package which will be installed." - }, - "type": "string" - }, "nodeDistro": { "defaultValue": "ubuntu", "allowedValues": [ @@ -261,7 +247,7 @@ "tenantSubscriptionId": "[subscription().subscriptionId]", "scriptName": "script", "singleQuote": "'", - "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_PACKAGE_NAME=','\"',parameters('windowsPackageName'),'\"' ,' WINDOWS_PACKAGE_URL=','\"',parameters('windowsPackageBaseURL'),'\"' ,' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" + "scriptParameters": "[concat('IDENTITY_SYSTEM=','\"',parameters('identitySystem'),'\"',' WINDOWS_AGENT_COUNT=','\"',parameters('windowsAgentPoolProfileCount'),'\"' ,' WINDOWS_AGENT_SIZE=','\"',parameters('windowsAgentPoolProfileVMSize'),'\"',' WINDOWS_ADMIN_USERNAME=','\"',parameters('windowsAdminUsername'),'\"',' WINDOWS_ADMIN_PASSWORD=','\"',parameters('windowsAdminPassword'),'\"',' NETWORK_PLUGIN=','\"',parameters('networkPlugin'),'\"',' AVAILABILITY_PROFILE=','\"',parameters('availabilityProfile'),'\"',' FIRST_CONSECUTIVE_STATIC_IP=','\"',parameters('firstConsecutiveStaticIP'),'\"',' AGENT_SUBNET_NAME=','\"',parameters('agentSubnetName'),'\"',' MASTER_SUBNET_NAME=','\"',parameters('masterSubnetName'),'\"',' CUSTOM_VNET_NAME=','\"',parameters('customVnetName'),'\"',' NODE_DISTRO=','\"',parameters('nodeDistro'),'\"',' RESOURCE_GROUP_NAME=','\"',variables('resourceGroupName'),'\"',' PUBLICIP_DNS=','\"',variables('dnsNameForPublicIP'),'\"' ,' TENANT_ID=','\"',subscription().tenantId,'\"' ,' TENANT_SUBSCRIPTION_ID=','\"',variables('tenantSubscriptionId'),'\"',' ADMIN_USERNAME=','\"',parameters('linuxAdminUsername'),'\"',' MASTER_DNS_PREFIX=','\"',parameters('masterProfileDnsPrefix'),'\"' ,' AGENT_COUNT=','\"',parameters('agentPoolProfileCount'),'\"' ,' AGENT_SIZE=','\"',parameters('agentPoolProfileVMSize'),'\"' ,' MASTER_COUNT=','\"',parameters('masterPoolProfileCount'),'\"',' MASTER_SIZE=','\"',parameters('masterPoolProfileVMSize'),'\"' ,' SPN_CLIENT_ID=','\"',parameters('servicePrincipalClientId'),'\"' ,' SPN_CLIENT_SECRET=','\"',parameters('servicePrincipalClientSecret'),'\"' ,' K8S_AZURE_CLOUDPROVIDER_VERSION=','\"',parameters('kubernetesAzureCloudProviderVersion'),'\"' ,' REGION_NAME=','\"',variables('location'),'\"' ,' SSH_PUBLICKEY=','\"',parameters('sshPublicKey'),'\"' ,' STORAGE_PROFILE=','\"',parameters('storageProfile'),'\"',' AKSE_BASE_URL=','\"',parameters('aksEngineBaseURL'), '\"', ' AKSE_RELEASE_VERSION=','\"',parameters('aksEngineReleaseVersion'),'\"',' GALLERY_REPO=','\"',parameters('galleryRepository'),'\"',' GALLERY_BRANCH=','\"',parameters('galleryBranch'),'\"',' DEFINITION_TEMPLATE_NAME=','\"',parameters('clusterDefinitionFileName'),'\"',' K8S_IMAGE_BASE=','\"',parameters('kubernetesImageBase'),'\"')]" }, "resources": [ { @@ -374,7 +360,7 @@ "vmSize": "[variables('vmSize')]" }, "osProfile": { - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/containers/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "computerName": "[variables('vmName')]", "adminUsername": "[parameters('linuxAdminUsername')]", "linuxConfiguration": { diff --git a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json index 508ca13..7683017 100644 --- a/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json +++ b/kubernetes/template/DeploymentTemplates/azuredeploy.parameters.json @@ -86,12 +86,6 @@ "windowsAdminPassword": { "value": "" }, - "windowsPackageBaseURL": { - "value": "" - }, - "windowsPackageName": { - "value": "" - }, "kubernetesImageBase": { "value": "" } diff --git a/kubernetes/template/DeploymentTemplates/createUiDefinition.json b/kubernetes/template/DeploymentTemplates/createUiDefinition.json index 3fe3b5f..f7acbf9 100644 --- a/kubernetes/template/DeploymentTemplates/createUiDefinition.json +++ b/kubernetes/template/DeploymentTemplates/createUiDefinition.json @@ -678,22 +678,6 @@ "toolTip": "Password for Windows virtual machines that are part of Kubernetes cluster.", "visible": false }, - { - "name": "windowsPackageBaseURL", - "type": "Microsoft.Common.TextBox", - "label": "Windows package URL", - "defaultValue": "", - "toolTip": "URL path from where Windows binaries will be downloaded.", - "visible": false - }, - { - "name": "windowsPackageName", - "type": "Microsoft.Common.TextBox", - "label": "Windows package name", - "defaultValue": "", - "toolTip": "Name of Windows package that will be installed.", - "visible": false - }, { "name": "kubernetesImageBase", "type": "Microsoft.Common.TextBox", @@ -731,8 +715,6 @@ "windowsAgentPoolProfileVMSize": "[steps('KubernetesClusterSettings').windowsAgentPoolProfileVMSize]", "windowsAdminUsername": "[steps('KubernetesClusterSettings').windowsAdminUsername]", "windowsAdminPassword": "[steps('KubernetesClusterSettings').windowsAdminPassword]", - "windowsPackageBaseURL": "[steps('KubernetesClusterSettings').windowsPackageBaseURL]", - "windowsPackageName": "[steps('KubernetesClusterSettings').windowsPackageName]", "kubernetesImageBase": "[steps('KubernetesClusterSettings').kubernetesImageBase]" } } diff --git a/kubernetes/template/DeploymentTemplates/script.sh b/kubernetes/template/DeploymentTemplates/script.sh index c056432..6d60981 100644 --- a/kubernetes/template/DeploymentTemplates/script.sh +++ b/kubernetes/template/DeploymentTemplates/script.sh @@ -254,8 +254,6 @@ log_level -i "WINDOWS_ADMIN_USERNAME: $WINDOWS_ADMIN_USERNAME" log_level -i "WINDOWS_ADMIN_PASSWORD: ----" log_level -i "WINDOWS_AGENT_COUNT: $WINDOWS_AGENT_COUNT" log_level -i "WINDOWS_AGENT_SIZE: $WINDOWS_AGENT_SIZE" -log_level -i "WINDOWS_PACKAGE_NAME: $WINDOWS_PACKAGE_NAME" -log_level -i "WINDOWS_PACKAGE_URL: $WINDOWS_PACKAGE_URL" if [[ "$WINDOWS_AGENT_COUNT" == "0" ]] && [[ "$AGENT_COUNT" == "0" ]]; then @@ -418,12 +416,9 @@ validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTA if [ "$WINDOWS_AGENT_COUNT" != "0" ]; then log_level -i "Update cluster definition with Windows agent node details." - WINDOWS_PACKAGE_FULL_URL="$WINDOWS_PACKAGE_URL/$WINDOWS_PACKAGE_NAME" - log_level -i "WINDOWS_PACKAGE_FULL_URL: $WINDOWS_PACKAGE_FULL_URL" cat $AZURESTACK_CONFIGURATION | \ jq --arg WINDOWS_ADMIN_USERNAME $WINDOWS_ADMIN_USERNAME '.properties.windowsProfile.adminUsername=$WINDOWS_ADMIN_USERNAME' | \ jq --arg WINDOWS_ADMIN_PASSWORD $WINDOWS_ADMIN_PASSWORD '.properties.windowsProfile.adminPassword=$WINDOWS_ADMIN_PASSWORD' | \ - jq --arg WINDOWS_PACKAGE_FULL_URL $WINDOWS_PACKAGE_FULL_URL '.properties.orchestratorProfile.kubernetesConfig.customWindowsPackageURL=$WINDOWS_PACKAGE_FULL_URL' \ > $AZURESTACK_CONFIGURATION_TEMP validate_and_restore_cluster_definition $AZURESTACK_CONFIGURATION_TEMP $AZURESTACK_CONFIGURATION || exit $ERR_API_MODEL From 5974431d836ef1b904cf29514c34daf59b2ead82 Mon Sep 17 00:00:00 2001 From: Javier Darsie <44655727+jadarsie@users.noreply.github.com> Date: Tue, 10 Sep 2019 15:14:50 -0700 Subject: [PATCH 14/79] docker container registry initial commit (#125) (#135) * docker container registry initial commit * added logs section to readme * authorize spn to read sa key * remove azpkg --- .gitignore | 1 + registry/DeploymentTemplates/azuredeploy.json | 323 ++++++++++++++++++ .../azuredeploy.parameters-example.json | 63 ++++ .../azuredeploy.parameters.json | 63 ++++ .../createUiDefinition.json | 180 ++++++++++ registry/Icons/Large.png | Bin 0 -> 728 bytes registry/Icons/Medium.png | Bin 0 -> 784 bytes registry/Icons/Small.png | Bin 0 -> 281 bytes registry/Icons/Wide.png | Bin 0 -> 1290 bytes registry/README.md | 71 ++++ registry/Screenshots/screenshot.png | Bin 0 -> 14372 bytes registry/Scripts/connect.ps1 | 12 + registry/Scripts/gallery.ps1 | 21 ++ registry/Scripts/pre-reqs.ps1 | 73 ++++ registry/Scripts/script.sh | 254 ++++++++++++++ registry/Scripts/self-signed.ps1 | 9 + registry/Strings/resources.resjson | 7 + registry/manifest.json | 84 +++++ registry/uidefinition.json | 9 + 19 files changed, 1170 insertions(+) create mode 100644 .gitignore create mode 100644 registry/DeploymentTemplates/azuredeploy.json create mode 100644 registry/DeploymentTemplates/azuredeploy.parameters-example.json create mode 100644 registry/DeploymentTemplates/azuredeploy.parameters.json create mode 100644 registry/DeploymentTemplates/createUiDefinition.json create mode 100644 registry/Icons/Large.png create mode 100644 registry/Icons/Medium.png create mode 100644 registry/Icons/Small.png create mode 100644 registry/Icons/Wide.png create mode 100644 registry/README.md create mode 100644 registry/Screenshots/screenshot.png create mode 100644 registry/Scripts/connect.ps1 create mode 100644 registry/Scripts/gallery.ps1 create mode 100644 registry/Scripts/pre-reqs.ps1 create mode 100644 registry/Scripts/script.sh create mode 100644 registry/Scripts/self-signed.ps1 create mode 100644 registry/Strings/resources.resjson create mode 100644 registry/manifest.json create mode 100644 registry/uidefinition.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79b5594 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/.DS_Store diff --git a/registry/DeploymentTemplates/azuredeploy.json b/registry/DeploymentTemplates/azuredeploy.json new file mode 100644 index 0000000..cfdd2dd --- /dev/null +++ b/registry/DeploymentTemplates/azuredeploy.json @@ -0,0 +1,323 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "adminUsername": { + "type": "string", + "defaultValue": "azureuser", + "metadata": { + "description": "The linux user name." + } + }, + "adminPublicKey": { + "type": "string", + "metadata": { + "description": "User's RSA public key." + } + }, + "virtualMachineSize": { + "type": "string", + "defaultValue": "Standard_F8s_v2", + "metadata": { + "description": "The VM size." + } + }, + "virtualMachinePublisher": { + "type": "string", + "defaultValue": "Canonical", + "metadata": { + "description": "The guest OS image publisher." + } + }, + "virtualMachineOffer": { + "type": "string", + "defaultValue": "UbuntuServer", + "metadata": { + "description": "The guest OS image offer." + } + }, + "virtualMachineSku": { + "type": "string", + "defaultValue": "16.04-LTS", + "metadata": { + "description": "The guest OS image SKU." + } + }, + "virtualMachineVersion": { + "type": "string", + "defaultValue": "latest", + "metadata": { + "description": "The guest OS image version." + } + }, + "pipName": { + "type": "string", + "metadata": { + "description": "The public IP resource name." + } + }, + "pipDomainNameLabel": { + "type": "string", + "metadata": { + "description": "The public IP DNS label." + } + }, + "pipAllocationMethod": { + "type": "string", + "defaultValue": "dynamic", + "metadata": { + "description": "The public IP allocation method." + } + }, + "storageAccountResourceId": { + "type": "string", + "metadata": { + "description": "An already existing storage account resource identifier." + } + }, + "storageAccountContainer": { + "type": "string", + "metadata": { + "description": "An already existing storage account container name." + } + }, + "pfxKeyVaultResourceId": { + "type": "string", + "metadata": { + "description": "The Key Vault resource identifier." + } + }, + "pfxKeyVaultSecretUrl": { + "type": "string", + "metadata": { + "description": "Absolute URL to the Key Vault secret that stores the pfx certificate." + } + }, + "pfxThumbprint": { + "type": "string", + "metadata": { + "description": "The certificate thumbprint." + } + }, + "registryTag": { + "type": "string", + "defaultValue": "2.7.1", + "metadata": { + "description": "Docker registry version (image tag)." + } + }, + "registryReplicas": { + "type": "string", + "defaultValue": "20", + "metadata": { + "description": "Docker registry replicas." + } + }, + "servicePrincipalClientId": { + "type": "securestring", + "metadata": { + "description": "Client ID with access to list and get secrets from the credentials Key Vault instance" + } + }, + "servicePrincipalClientSecret": { + "type": "securestring", + "metadata": { + "description": "Secret of the client with access to list and get secrets from the credentials Key Vault instance" + } + } + }, + "variables": { + "rgname": "[resourceGroup().name]", + "nsgName": "[concat(variables('rgname'), '-nsg')]", + "nicName": "[concat(variables('rgname'), '-nic')]", + "vnetName": "[concat(variables('rgname'), '-vnet')]", + "vnetId": "[resourceId('Microsoft.Network/virtualNetworks',variables('vnetName'))]", + "subnetRef": "[concat(variables('vnetId'), '/subnets/default')]", + "tenantId": "[subscription().tenantId]", + "location": "[resourceGroup().location]", + "provisionScriptParameters": "[concat('ADMIN_USER_NAME=', parameters('adminUsername'),' SA_RESOURCE_ID=', parameters('storageAccountResourceId'),' SA_CONTAINER=', parameters('storageAccountContainer'),' KV_RESOURCE_ID=', parameters('pfxKeyVaultResourceId'),' CERT_THUMBPRINT=', parameters('pfxThumbprint'),' PIP_LABEL=', parameters('pipDomainNameLabel'),' REGISTRY_TAG=', parameters('registryTag'),' SPN_CLIENT_ID=',parameters('servicePrincipalClientId'),' SPN_CLIENT_SECRET=',parameters('servicePrincipalClientSecret'),' REGISTRY_REPLICAS=', parameters('registryReplicas'))]" + }, + "resources": [ + { + "type": "Microsoft.Compute/virtualMachines", + "name": "[concat(variables('rgname'),'-vm')]", + "apiVersion": "2017-03-30", + "location": "[resourceGroup().location]", + "properties": { + "osProfile": { + "computerName": "[concat(variables('rgname'),'-vm')]", + "adminUsername": "[parameters('adminUsername')]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/registry/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]", + "keyData": "[parameters('adminPublicKey')]" + } + ] + } + }, + "secrets": [ + { + "sourceVault": { + "id": "[parameters('pfxKeyVaultResourceId')]" + }, + "vaultCertificates": [ + { + "certificateUrl": "[parameters('pfxKeyVaultSecretUrl')]" + } + ] + } + ] + }, + "hardwareProfile": { + "vmSize": "[parameters('virtualMachineSize')]" + }, + "storageProfile": { + "imageReference": { + "publisher": "[parameters('virtualMachinePublisher')]", + "offer": "[parameters('virtualMachineOffer')]", + "sku": "[parameters('virtualMachineSku')]", + "version": "[parameters('virtualMachineVersion')]" + }, + "osDisk": { + "createOption": "FromImage", + "diskSizeGB": 30, + "managedDisk": { + "storageAccountType": "Premium_LRS" + } + }, + "dataDisks": [] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]" + } + ] + } + }, + "dependsOn": [ + "[concat('Microsoft.Network/networkInterfaces/',variables('nicName'))]" + ] + }, + { + "apiVersion": "2017-03-30", + "dependsOn": [ + "[concat('Microsoft.Compute/virtualMachines/',variables('rgname'),'-vm')]" + ], + "location": "[resourceGroup().location]", + "name": "[concat(variables('rgname'),'-vm/cse')]", + "properties": { + "protectedSettings": { + "commandToExecute": "[concat(variables('provisionScriptParameters'),' LOCATION=',variables('location'),' TENANT_ID=',variables('tenantId'),' PIP_FQDN=', '\"', reference(resourceId('Microsoft.Network/publicIPAddresses',parameters('pipName')),'2017-10-01').dnsSettings.fqdn,'\"',' /opt/azure/registry/script.sh >> /var/log/azure/docker-registry.log 2>&1')]" + }, + "publisher": "Microsoft.Azure.Extensions", + "settings": {}, + "type": "CustomScript", + "typeHandlerVersion": "2.0", + "autoUpgradeMinorVersion": true + }, + "type": "Microsoft.Compute/virtualMachines/extensions" + }, + { + "type": "Microsoft.Network/virtualNetworks", + "name": "[concat(variables('rgname'),'-vnet')]", + "apiVersion": "2017-10-01", + "location": "[resourceGroup().location]", + "properties": { + "addressSpace": { + "addressPrefixes": [ + "172.16.0.0/24" + ] + }, + "subnets": [ + { + "name": "default", + "properties": { + "addressPrefix": "172.16.0.0/24" + } + } + ] + } + }, + { + "type": "Microsoft.Network/networkInterfaces", + "name": "[variables('nicName')]", + "apiVersion": "2017-10-01", + "location": "[resourceGroup().location]", + "properties": { + "ipConfigurations": [ + { + "name": "ipconfig1", + "properties": { + "subnet": { + "id": "[variables('subnetRef')]" + }, + "privateIPAllocationMethod": "Dynamic", + "publicIpAddress": { + "id": "[resourceId('Microsoft.Network/publicIpAddresses',parameters('pipName'))]" + } + } + } + ], + "networkSecurityGroup": { + "id": "[resourceId('Microsoft.Network/networkSecurityGroups',variables('nsgName'))]" + } + }, + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/',variables('rgname'),'-vnet')]", + "[concat('Microsoft.Network/publicIpAddresses/',parameters('pipName'))]", + "[concat('Microsoft.Network/networkSecurityGroups/',variables('nsgName'))]" + ] + }, + { + "type": "Microsoft.Network/publicIPAddresses", + "sku": { + "name": "Basic" + }, + "name": "[parameters('pipName')]", + "apiVersion": "2017-10-01", + "location": "[resourceGroup().location]", + "properties": { + "publicIpAllocationMethod": "[parameters('pipAllocationMethod')]", + "dnsSettings": { + "domainNameLabel": "[parameters('pipDomainNameLabel')]" + } + } + }, + { + "type": "Microsoft.Network/networkSecurityGroups", + "name": "[variables('nsgName')]", + "apiVersion": "2017-10-01", + "location": "[resourceGroup().location]", + "properties": { + "securityRules": [ + { + "name": "HTTPS", + "properties": { + "priority": 320, + "protocol": "Tcp", + "access": "Allow", + "direction": "Inbound", + "sourceApplicationSecurityGroups": [], + "destinationApplicationSecurityGroups": [], + "sourceAddressPrefix": "*", + "sourcePortRange": "*", + "destinationAddressPrefix": "*", + "destinationPortRange": "443" + } + } + ] + } + } + ], + "outputs": { + "adminUsername": { + "type": "string", + "value": "[parameters('adminUsername')]" + } + } +} \ No newline at end of file diff --git a/registry/DeploymentTemplates/azuredeploy.parameters-example.json b/registry/DeploymentTemplates/azuredeploy.parameters-example.json new file mode 100644 index 0000000..f358cf6 --- /dev/null +++ b/registry/DeploymentTemplates/azuredeploy.parameters-example.json @@ -0,0 +1,63 @@ +{ + "schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "adminUsername": { + "value": "azureuser" + }, + "adminPublicKey": { + "value": "ssh-rsa ...." + }, + "virtualMachineSize": { + "value": "Standard_F8s_v2" + }, + "virtualMachinePublisher": { + "value": "Canonical" + }, + "virtualMachineOffer": { + "value": "UbuntuServer" + }, + "virtualMachineSku": { + "value": "16.04-LTS" + }, + "virtualMachineVersion": { + "value": "latest" + }, + "pipName": { + "value": "registry" + }, + "pipDomainNameLabel": { + "value": "registry" + }, + "pipAllocationMethod": { + "value": "dynamic" + }, + "storageAccountResourceId": { + "value": "/subscriptions/{SUBSCRIPTION}/resourceGroups/{RESOURCE-GROUP}/providers/Microsoft.Storage/storageaccounts/{SA-NAME}" + }, + "storageAccountContainer": { + "value": "images" + }, + "pfxKeyVaultResourceId": { + "value": "/subscriptions/{SUBSCRIPTION}/resourceGroups/{RESOURCE-GROUP}/providers/Microsoft.KeyVault/vaults/{KV-NAME}" + }, + "pfxKeyVaultSecretUrl": { + "value": "https://{KV-NAME}.vault.{FQDN}/secrets/{RESOURCE-GROUP}/{SECRET-VERSION}" + }, + "pfxThumbprint": { + "value": "" + }, + "registryTag": { + "value": "2.7.1" + }, + "registryReplicas": { + "value": "20" + }, + "servicePrincipalClientId": { + "value": "" + }, + "servicePrincipalClientSecret": { + "value": "" + } + } +} \ No newline at end of file diff --git a/registry/DeploymentTemplates/azuredeploy.parameters.json b/registry/DeploymentTemplates/azuredeploy.parameters.json new file mode 100644 index 0000000..b7bc5ec --- /dev/null +++ b/registry/DeploymentTemplates/azuredeploy.parameters.json @@ -0,0 +1,63 @@ +{ + "schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "adminUsername": { + "value": "" + }, + "adminPublicKey": { + "value": "" + }, + "virtualMachineSize": { + "value": "" + }, + "virtualMachinePublisher": { + "value": "" + }, + "virtualMachineOffer": { + "value": "" + }, + "virtualMachineSku": { + "value": "" + }, + "virtualMachineVersion": { + "value": "" + }, + "pipName": { + "value": "" + }, + "pipDomainNameLabel": { + "value": "" + }, + "pipAllocationMethod": { + "value": "" + }, + "storageAccountResourceId": { + "value": "" + }, + "storageAccountContainer": { + "value": "" + }, + "pfxKeyVaultResourceId": { + "value": "" + }, + "pfxKeyVaultSecretUrl": { + "value": "" + }, + "pfxThumbprint": { + "value": "" + }, + "registryTag": { + "value": "" + }, + "registryReplicas": { + "value": "" + }, + "servicePrincipalClientId": { + "value": "" + }, + "servicePrincipalClientSecret": { + "value": "" + } + } +} \ No newline at end of file diff --git a/registry/DeploymentTemplates/createUiDefinition.json b/registry/DeploymentTemplates/createUiDefinition.json new file mode 100644 index 0000000..d03d767 --- /dev/null +++ b/registry/DeploymentTemplates/createUiDefinition.json @@ -0,0 +1,180 @@ +{ + "handler": "Microsoft.Compute.MultiVm", + "version": "0.4.0-preview", + "parameters": { + "basics": [], + "steps": [ + { + "name": "VirtualMachineStep", + "label": "Virtual Machine", + "subLabel": { + "preValidation": "Provide virtual machine settings", + "postValidation": "Done" + }, + "bladeTitle": "Virtual machine configuration", + "elements": [ + { + "name": "adminUsername", + "type": "Microsoft.Compute.UserNameTextBox", + "label": "Username", + "defaultValue": "azureuser", + "constraints": { + "required": true, + "regex": "^[a-z0-9A-Z]{1,30}$", + "validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-30 characters long." + }, + "osPlatform": "Linux" + }, + { + "name": "adminPublicKey", + "type": "Microsoft.Compute.CredentialsCombo", + "label": { + "authenticationType": "Authentication type", + "password": "Password", + "confirmPassword": "Confirm password", + "sshPublicKey": "SSH public key" + }, + "constraints": { + "required": true, + "customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{12,}$", + "customValidationMessage": "The password must be alphanumeric, contain at least 12 characters, and have at least 1 letter and 1 number." + }, + "options": { + "hideConfirmation": false, + "hidePassword": true + }, + "osPlatform": "Linux" + }, + { + "name": "virtualMachineSize", + "type": "Microsoft.Compute.SizeSelector", + "label": "Size", + "osPlatform": "Linux", + "defaultValue": "Standard_F8s_v2", + "recommendedSizes": [ + "Standard_F8s_v2" + ], + "options": { + "hideDiskTypeFilter": false + } + }, + { + "name": "publicIp", + "type": "Microsoft.Network.PublicIpAddressCombo", + "label": { + "publicIpAddress": "Public IP address", + "domainNameLabel": "Domain name label" + }, + "constraints": { + "required": { + "domainNameLabel": true + } + }, + "options": { + "hideNone": true, + "hideDomainNameLabel": false, + "hideExisting": true + } + }, + { + "name": "registryReplicas", + "type": "Microsoft.Common.TextBox", + "label": "Replicas", + "defaultValue": "20", + "toolTip": "Docker registry replica count", + "constraints": { + "required": true, + "regex": "^[0-9]{1,2}$" + } + }, + { + "name": "servicePrincipalClientId", + "type": "Microsoft.Common.TextBox", + "label": "Client ID", + "constraints": { + "required": true + } + }, + { + "name": "servicePrincipalClientSecret", + "type": "Microsoft.Common.PasswordBox", + "label": { + "password": "Password", + "confirmPassword": "Confirm password" + }, + "constraints": { + "required": true + } + } + ] + }, + { + "name": "StoragePfxStep", + "label": "Storage and Key Vault", + "subLabel": { + "preValidation": "Provide storage and Key Vault settings", + "postValidation": "Done" + }, + "bladeTitle": "Storage and Key Vault configuration", + "elements": [ + { + "name": "storageAccountResourceId", + "type": "Microsoft.Common.TextBox", + "label": "Existing backend Storage Account resource ID", + "constraints": { + "required": true + } + }, + { + "name": "storageAccountContainer", + "type": "Microsoft.Common.TextBox", + "label": "Existing backend blob container", + "constraints": { + "required": true + } + }, + { + "name": "keyVaultResourceId", + "type": "Microsoft.Common.TextBox", + "label": "PFX Certificate Key Vault Resource Id", + "constraints": { + "required": true + } + }, + { + "name": "keyVaultSecretUrl", + "type": "Microsoft.Common.TextBox", + "label": "PFX Certificate Key Vault Secret URL", + "constraints": { + "required": true + } + }, + { + "name": "certificateThumbprint", + "type": "Microsoft.Common.TextBox", + "label": "PFX Certificate Thumbprint", + "constraints": { + "required": true + } + } + ] + } + ], + "outputs": { + "adminUsername": "[steps('VirtualMachineStep').adminUsername]", + "adminPublicKey": "[steps('VirtualMachineStep').adminPublicKey.sshPublicKey]", + "virtualMachineSize": "[steps('VirtualMachineStep').virtualMachineSize]", + "pipName": "[steps('VirtualMachineStep').publicIp.name]", + "pipDomainNameLabel": "[steps('VirtualMachineStep').publicIp.domainNameLabel]", + "pipAllocationMethod": "[steps('VirtualMachineStep').publicIp.publicIPAllocationMethod]", + "storageAccountResourceId": "[steps('StoragePfxStep').storageAccountResourceId]", + "storageAccountContainer": "[steps('StoragePfxStep').storageAccountContainer]", + "pfxKeyVaultResourceId": "[steps('StoragePfxStep').keyVaultResourceId]", + "pfxKeyVaultSecretUrl": "[steps('StoragePfxStep').keyVaultSecretUrl]", + "pfxThumbprint": "[steps('StoragePfxStep').certificateThumbprint]", + "registryReplicas": "[steps('VirtualMachineStep').registryReplicas]", + "servicePrincipalClientId": "[steps('VirtualMachineStep').servicePrincipalClientId]", + "servicePrincipalClientSecret": "[steps('VirtualMachineStep').servicePrincipalClientSecret]" + } + } +} \ No newline at end of file diff --git a/registry/Icons/Large.png b/registry/Icons/Large.png new file mode 100644 index 0000000000000000000000000000000000000000..ef12143ce11e1f4b86e88408d74d2dd42a40b9c9 GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^#URYV1|(NI+dczQjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r$I{1!&FymBhK53w!WQl7;NpOBzNqJ&XDuZK6ep0G}XKrG8YEWuo zN@d~6R2v2cCJ#>+$B>G+x3?Vg4jBkI1isk!{Po(ZCzsrMk1T4rp(uC$&%f;pS9^VU zypeNf-M;!edQKJ5@vI3x0?ADh!b=>^y#BSymNlvBM&8pIteWzdORK}}mRY}=n=E!@ zhC*MY0KWr}obdYX@n74!ic^7FfWpUE4AnXe9eX$*EuN+ym8YKelOc9y`(L#)TZDQl zBlboA;Y|9q`}nkbq4p|i@p9YW=gGaoOV!FM8t?|4kud~Jj2hYe$={`~RS zCTqC=TDWU= ztlPRXOnw$;@6FuUc6Wxi$NnW(Hb`Hd@H5Bs<*_;nE`fe4#m zjz0EJR>>VH`4ehdc;;0O+~Y8JB83G)=yI~&dD9;`hb@;KkC|ujY2{+GYVp0v+a~Po z-lx3mwfgS98Sip#TBdbpM0y?5S(G~280`0(OO8FvPw=@EK2z#_YJ$)HQ*)Mnom_H8 z?1Ghe4`);V&-rb(cF$hBPyhGd;5Cz%kn!itjrM2nmkUoe_w@N?(6ckbmZ4FkcV?x| z`Ct>Z|2!lvI6;>1s;*b3=DinK$vl=HlH+5P_o1|q9iy!t)x7$D3!r6B|j-u!8128JvAsb zF{QHbWU37V15<;ii(^Pd+}l~+Ma>2RF1g{AGe18K+qpqpCHR5AWrLf+<*X-l(wi9? z@AX7YdHebN_3s5jFJqRS4?TBz`HepBEm3v$dKZ)Ig?Jw+MtwB!zw+;kz}YPi4Q;(c zn1kHh`&Y02-IJyn^?gxf(u(Sfx-+6(h2|c(qctf*;Q7P;mk}z9`q&gNDyT@cxHM15 z5D?;ZTIBfRc%;B9DBHt?qmwV??OLb%_ZkD-;YvWlAbnc<_ihe;{qJ{j`fJy{yB5Fx zpP+hDxvMYs$8C>AG+BqTX+tW`>0?%2>Si%~tEh^R*(k928OZztG4ekXvxdjY%l?%1O8K7&C{9 zZSmj!{nPJn&{2!n(%3a|liQKtJDCc%98Nx4I5DHy*-Xn$s>>|katvGOt7D4<3tX-o zbjgooe3~ury31ut`6_3xdZns)E?eqXy$!CFZa?!P>*n>>B^UUZE`H_S{;lg_+3dbs zjtW-hJUJz8J1kR5t~A_uVI$C)7C4D{Vn+0Xzo*o?`zGbIZMn;q=(hf3-2002RT-gL zm(Fg8Yxn#X^VC*fD(K?AcQs4h;ws<#2)a;Kl6QS-$n|MEc~-vo(b;$B_|bNDhb`qn zhLhvvmwuBgWM%L8W|wnjNz!$vnCF-C+V%oN)h@0i#$wH9C8<(xy(Ht>nWsOyEsg#b z#nJPs+x>n8->PpJ2E0#Bz1Z6|ef|5b75^J^+D_XZ7ICk1-9AxvQL1lLmci52&t;ucLK6Ue CI9UGx literal 0 HcmV?d00001 diff --git a/registry/Icons/Small.png b/registry/Icons/Small.png new file mode 100644 index 0000000000000000000000000000000000000000..32d767feb0d5c1b9be0874d5c5fa5a89668957fb GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sDEfH31!Z9ZwBpk#?_L`iUdT1k0gQ7VIDN`6wRf@f}GdTLN= zVoGJ<$y6JlqE1g2$B+p3x7Q7Y8Web3F1FnJT&cZYCbdaSB6nLtcWp1vRe1@=zc;=a z2-zMf{*m!>#`5bcw4(ej={)j&?CYJ}U0E4(Y=+QZE-ith|0k{4@A=E~&r|^(?H}9i z>e!27N=4^3Yp^bQ!Mt+c3hi4-QriIv_KG6>k5Ze3Mg3Q&jw8=b|$}M=^N1 L`njxgN@xNAG=X7+ literal 0 HcmV?d00001 diff --git a/registry/Icons/Wide.png b/registry/Icons/Wide.png new file mode 100644 index 0000000000000000000000000000000000000000..7e041a1dcbe91b734b3093e1a27dd6deba332819 GIT binary patch literal 1290 zcmV+l1@-!gP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf02y>eSaefwW^{L9 za%BKPWN%_+AW3auXJt}lVPtu6$z?nM00eqTL_t(|UhUk$cH1@(1yH;DeqaBppIo=9 ztXPpq9f}0N!OXoIXOUw|z`PlNk@NZYpMQOQ0OkDg{S_!i_@OA_hoXcZiV}V(O8B8D z;fJDxABy_?`p@^DfkI4vC`$ODDB*{qgdd6$eke-#p(x>pqWotbP?X6}AfMk~8A137 z#36Jf;ZLvqG+q0S=Js5KKfS%vbUn(C-|_Z0&F#4ee^Ohf@awQ{kFwCuN%)i65=h7N z+Wbl{6lL;5QNj;J2|pAi{7{teLs7yHMF~F?HO;T|UOtfG0}0Sh(8>S&*)ze1wt|LV z)S)+b{?2@UevF@WHaNB_9sV}Kd|hlxag3jJ)^4{d6aJ-=XcNrW#nz(~HI)7C_oMnc zrVM|-pug+0%g^o6P^!4!kH>Yawyx8L|J6oC=;+tiSADk3WofrEH-v%VZ@Y}qV(*cu&ai?>YRqao3^Ix8c~&bTs-lCJ4W+ zh8`ve|Lu_Hum>$obnL&J0GtBIZ_Ai#k%YnK1XR%O zxmTj_dl;CFcD|(Dsw6%3E1L|o^S+XXU)jt~`+nAXO$t2lQ${n=zMr*TlLFyaMzEwn z_<<$D&s1FE+7bQ(6ykU;aqS5I0Sb{8&Ke?5;aAWw)>)Z*3csT))Zo|;f%P25!ViJ{ z^Zm64;eX=dLmVdmAlHTV$dmpeRGIMK5qn07aK03NC`$N$G54uO_Jhm#WtB;85D*OfA7vke3<>;lwrDxf;bs5_tgg>dXCXJKBKG)_j zwsi`B5|3q*aRO(2Pd8^YP2o?X!o+o|XiNC{U*@UGvfsk50Ooac?@ZNtehdF&0cZyE zI3v93V{R{x{ieZLMz8$7pQk>KI(G#R-}!a_9)4DJ%=+5J(XK0g?z$fi|8nnAOs$x% zIYrpl!{J}1WFfjv;U_02x}zekpz!ksC%U5|t)TFCGisa1%n~zy-K=Z#BK+6lwds3} zTDdVz#>`(g>)N~s|Fw9R-k63Em7QU`UB`Y?;2k4Z%g&55|605AcV`;sH2=O13jeK3 z3c_scSYCs|e=DK;qf-2apzvKJ_KROVCm#FbH-xpq*A!}cZ{Op$&0u%__zmGAdsEQd zmc@_rdnS0`H%CLb$Wk2HikxK=gn!9A4PlMxI*WH&;aqKV((o^NZU~Xv!BUxM2ob%r zD|78&qVPX^ZU^%<1n4Do_?OJq5QuHwn)&$n7fzd)t#J0O!~g&Q07*qoM6N<$f?SA^ At^fc4 literal 0 HcmV?d00001 diff --git a/registry/README.md b/registry/README.md new file mode 100644 index 0000000..b13bc21 --- /dev/null +++ b/registry/README.md @@ -0,0 +1,71 @@ +# Docker Container Registry Marketplace Item + +## Install Gallery Item + +### Build Package + +Create `azpkg` and upload to a ßstorage account. + +```powershell +PackageGenerator\AzureGalleryPackager.exe -m -o +``` + +### Side-load Package + +Connect to management endpoint and install package. + +```powershell +Scripts\gallery.ps1 +``` + +## Solution Pre-requisites + +### Create Self-signed Certificate (optional) + +```powershell +Scripts\self-signed.ps1 +``` + +### Create Backend Storage and Key Vault + +Connect to tenant space + +```powershell +Scripts\connect.ps1 +``` + +Create backend storage and key vault + +```powershell +Scripts\pre-reqs.ps1 +``` + +## Deploy Solution + +From tenant portal + +``` +Create a resource -> Compute -> Docker Container Registry +``` + +Sample parameters + +``` +DeploymentTemplate\azuredeploy.parameters-example.json +``` + +## Logs + +Container logs located in directory `/var/lib/docker/containers/` + +Query all logs: `cat /var/lib/docker/containers/*/*-json.log | grep "authentication failure"` + +## TODO + +- Review strings in `Strings\resources.resjson` +- Review strings in `manifest.json` +- Replace `Screenshots\screenshot.png` +- Replace `Icons\*.png` +- Review UI labels in `DeploymentTemplates\createUiDefinition` +- Add tooltips to UI elements to `DeploymentTemplates\createUiDefinition` if needed +- Use AKS Base Image diff --git a/registry/Screenshots/screenshot.png b/registry/Screenshots/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..a2174427a6b5d70dd74010be2793735c955f1b7f GIT binary patch literal 14372 zcmb`ucRXAF-#1RFQ6s9YSyHVUrAFXS#h zL`0Wv5D^hSqPPTX0XG`2058ODx+;o9r2{wDfj6YK3YrQ;MCCB5GmFc>drFrlhHgYe zwCxvv#NEyXuZV~w>Qo;oJo7T$PIE4{9`(*p9hOv0dGht1a?IJ?n2iX(2+Q2q@6S%= z5YKNE77gp4(DiagrxZmy6ndnFn9DHB2xmD?Us;G+tp7wK9?VQ#O)f$$BE&9B-6xp{ zAqx(o3MLkzHg~Y!zWN~^{vReS<$XM(B* ze0W3X6eYdCfjL6x!szf693es>YbwAC$0LX$1qZc7CUgr~wYe~QvKJ0Ho5ePJc7I|s zaR+u764rstwn!V-IQe(e|HqcnN$>4erSSNKCfw2XY(=_)TjB= zA;a%32mLk01z?$7NuM!izkNP!2+Y6r6RsRX=wO9I`(?00_6L?jkQC>E0`wO|FM)anGG58a(Tu z4l`~qTFc~dj^lc9Rg5@OpY?ulUBwnAG)cW6@8^iR_*gSNSN>7OGm#LQl~lKZ_2R|t zk;{cH(UU^g-EzPZD6ARMb$c7`*n2d1_S+TD6M8GfS!OS>u=;wgCMwSgIsi60KHVIE zJiJD7VnGpFX3+eGvCBIF6^s%Jz%6#?b=hcLN{s*I^O2ppZO^JQSp_(Vs^h!IS2nR>a9awx|R`CU>|nlUt_^vLir z@}(1rUH;X!E-M@1MT2;bU4whvU|y2t@&p#Odzs0(0;9%VuJ}J)bSW0m7b__J`ti3x zCC^dG!Qq3KkkT2qQ0u810siYpB~AN7>I9oQ=;!38RCfChG+hPmxdOL&TaoO{1WxV{ zn>k~Fh`)?Xb(*cQp}%cUXnj_2HD(37KS8?UfN5_jTki;Fl8onKO<-Be?zKT9N>f>E zDOjVtr;%s65UZ&^t%s~1P+vsX{g`caxYh1QAY8<4GQW2n9R`~+(v5u*EW|wBgr}zLYW1i>AwfOMF&Y0fAU?K-9_V+QQjvGJxE354nuRR^_x(nR9XIiep6*>m> z!Z-t)ZarQ~R!Eh&>V z)B_+_ySg9ZB|WxY;LJ8lUqr0`on1kvR~0EN20lQ6oMuuyyc0s#M)yBu_R=|$PBGDq zY(vG_egA8 z90>Q3eWDs6yi0JUvms{RJlVuU_NE<8(x@x3}4Fk%}tNf^N5jwv96zp(z3x2WC zr&^`^Qok3D>BPyu>K*N(1_g3<2!FIK+m5(EiKGHY8{=biVIzk{AS*+}*{zbV))?YIIh|bZG@07++WLljA1tM*X{b>= zPAPgu@mfM)^qEkmPw(7Sx&NF}qVYI#@@cc)>Yr?Z*zqwF4JP-Ps*@(|lKM)irV`a@ z&bMJ+%V4c=k^4quQv~S`hp6DMVvW%jd;s(_SY{6 z8;?uKCuey%s;j+{!O~Cd6mr5Ugh@=qs`J5z^?_v`enH!e2D^WD?PX7e=gy5>r46SL z+Hs8zb{vEZA#!`*fN_uY!QS zkwU5~^}DlA(PX`A%PfgaJD1bp41t{E`Lp|Cp~@{_yD$%*?015MT1%^Z1CvX%;;S}P z#wj>bIhV3y
  • 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 Storage Account Resource ID:" $sa.Id + +Write-Host "Assigning contributor role to" $spnName +New-AzureRMRoleAssignment -ApplicationId $spnName -RoleDefinitionName "Contributor" -Scope $sa.Id + +# KEY VAULT +# ============================================= + +# Create key vault enabled for deployment +Write-Host "Creating key vault:" $kvName +$kv = New-AzureRmKeyVault -ResourceGroupName $resourceGroup -VaultName $kvName -Location $location -Sku standard -EnabledForDeployment +Write-Host "=> Key Vault Resource ID:" $kv.ResourceId + +Write-Host "Setting access polices for client" $spnName +Set-AzureRmKeyVaultAccessPolicy -VaultName $kvName -ServicePrincipalName $spnName -PermissionsToSecrets GET,LIST + +# Store certificate as secret +Write-Host "Storing certificate in key vault:" $pfxPath +$fileContentBytes = get-content $pfxPath -Encoding Byte +$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes) +$jsonObject = @" +{ +"data": "$filecontentencoded", +"dataType" :"pfx", +"password": "$pfxPass" +} +"@ +$jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject) +$jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes) +$secret = ConvertTo-SecureString -String $jsonEncoded -AsPlainText -Force +$kvSecret = Set-AzureKeyVaultSecret -VaultName $kvName -Name $pfxSecret -SecretValue $secret -ContentType pfx + +# Compute certificate thumbprint +Write-Host "Computing certificate thumbprint" +$tp = Get-PfxCertificate -FilePath $pfxPath + +Write-Host "=> Certificate URL:" $kvSecret.Id +Write-Host "=> Certificate thumbprint:" $tp.Thumbprint + +# Write-Host "Storing secret for sample user: admin" +# $userSecret = ConvertTo-SecureString -String "admin" -AsPlainText -Force +# Set-AzureKeyVaultSecret -VaultName $kvName -Name "admin" -SecretValue $userSecret | out-null diff --git a/registry/Scripts/script.sh b/registry/Scripts/script.sh new file mode 100644 index 0000000..178ac04 --- /dev/null +++ b/registry/Scripts/script.sh @@ -0,0 +1,254 @@ +#!/bin/bash -x + +ERR_APT_INSTALL_TIMEOUT=9 # Timeout installing required apt packages +ERR_MISSING_CRT_FILE=10 # Bad cert thumbprint OR pfx not in key vault OR template misconfigured VM secrets section +ERR_MISSING_KEY_FILE=11 # Bad cert thumbprint OR pfx not in key vault OR template misconfigured VM secrets section +ERR_REGISTRY_NOT_RUNNING=13 # The container registry failed to start successfully +ERR_MOBY_APT_LIST_TIMEOUT=25 # Timeout waiting for moby apt sources +ERR_MS_GPG_KEY_DOWNLOAD_TIMEOUT=26 # Timeout waiting for MS GPG key download +ERR_MOBY_INSTALL_TIMEOUT=27 # Timeout waiting for moby install +ERR_METADATA=30 # Error querying metadata +ERR_MS_PROD_DEB_DOWNLOAD_TIMEOUT=42 # Timeout waiting for https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb +ERR_MS_PROD_DEB_PKG_ADD_FAIL=43 # Failed to add repo pkg file +ERR_APT_UPDATE_TIMEOUT=99 # Timeout waiting for apt-get update to complete + +retrycmd_if_failure() { + retries=$1; wait_sleep=$2; timeout=$3; + shift && shift && shift + for i in $(seq 1 $retries); do + timeout $timeout ${@} && break || \ + if [ $i -eq $retries ]; then + return 1 + else + sleep $wait_sleep + fi + done +} +wait_for_apt_locks() { + while fuser /var/lib/dpkg/lock /var/lib/apt/lists/lock /var/cache/apt/archives/lock >/dev/null 2>&1; do + echo 'Waiting for release of apt locks' + sleep 3 + done +} +apt_get_update() { + retries=10 + apt_update_output=/tmp/apt-get-update.out + for i in $(seq 1 $retries); do + wait_for_apt_locks + dpkg --configure -a + apt-get -f -y install + ! (apt-get update 2>&1 | tee $apt_update_output | grep -E "^([WE]:.*)|([eE]rr.*)$") && \ + cat $apt_update_output && break || \ + cat $apt_update_output + if [ $i -eq $retries ]; then + return 1 + else sleep 5 + fi + done + wait_for_apt_locks +} +apt_get_install() { + retries=$1; wait_sleep=$2; timeout=$3; + shift && shift && shift + for i in $(seq 1 $retries); do + wait_for_apt_locks + dpkg --configure -a + apt-get install -o Dpkg::Options::="--force-confold" --no-install-recommends -y ${@} && break || \ + if [ $i -eq $retries ]; then + return 1 + else + sleep $wait_sleep + apt_get_update + fi + done + wait_for_apt_locks +} +installDeps() { + UBUNTU_RELEASE=$(lsb_release -r -s) + MOBY_VERSION="3.0.6" + + retrycmd_if_failure 120 5 25 curl https://packages.microsoft.com/config/ubuntu/${UBUNTU_RELEASE}/prod.list > /tmp/microsoft-prod.list || exit $ERR_MOBY_APT_LIST_TIMEOUT + retrycmd_if_failure 10 5 10 cp /tmp/microsoft-prod.list /etc/apt/sources.list.d/ || exit $ERR_MOBY_APT_LIST_TIMEOUT + retrycmd_if_failure 120 5 25 curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg || exit $ERR_MS_GPG_KEY_DOWNLOAD_TIMEOUT + retrycmd_if_failure 10 5 10 cp /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/ || exit $ERR_MS_GPG_KEY_DOWNLOAD_TIMEOUT + apt_get_update || exit $ERR_APT_UPDATE_TIMEOUT + + apt_get_install 20 30 120 apache2-utils moby-engine=${MOBY_VERSION} moby-cli=${MOBY_VERSION} --allow-downgrades || exit $ERR_MOBY_INSTALL_TIMEOUT + usermod -aG docker ${ADMIN_USER_NAME} + + for apt_package in curl jq; do + if ! apt_get_install 30 1 600 $apt_package; then + journalctl --no-pager -u $apt_package + exit $ERR_APT_INSTALL_TIMEOUT + fi + done +} +fetchOAuth() { + ENDPOINTS=$(mktemp) + curl -s --retry 5 --retry-delay 10 --max-time 60 -f \ + https://management.${FQDN}/metadata/endpoints?api-version=2015-01-01 > ${ENDPOINTS} + + if [ $? -ne 0 ]; then + exit $ERR_METADATA + fi + + OAUTH=$(jq -r .authentication.loginEndpoint ${ENDPOINTS}) + echo ${OAUTH} | grep -e "/adfs$" + + if [ $? -eq 0 ]; then + TOKEN_URL="${OAUTH}adfs/oauth2/token" + else + TOKEN_URL="${OAUTH}${TENANT_ID}/oauth2/token" + fi +} +fetchCredentials() { + RESOURCE=$(jq -r .authentication.audiences[0] ${ENDPOINTS} | sed "s|https://management.|https://vault.|") + + TOKEN=$(curl -s --retry 5 --retry-delay 10 --max-time 60 -f -X POST \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "grant_type=client_credentials" \ + -d "client_id=${SPN_CLIENT_ID}" \ + --data-urlencode "client_secret=${SPN_CLIENT_SECRET}" \ + --data-urlencode "resource=${RESOURCE}" \ + ${TOKEN_URL} | jq -r '.access_token') + + KV_URL="https://${KV_NAME}.vault.${FQDN}/secrets" + SECRETS=$(curl -s --retry 5 --retry-delay 10 --max-time 60 -f \ + "${KV_URL}?api-version=2016-10-01" -H "Authorization: Bearer ${TOKEN}" | jq -r .value[].id) + + rm .htpasswd + touch .htpasswd + for secret in ${SECRETS} + do + SECRET_NAME_VERSION="${secret//$KV_URL}" + SECRET_NAME=$(echo ${SECRET_NAME_VERSION} | cut -d '/' -f 2) + SECRET_VALUE=$(curl -s --retry 5 --retry-delay 10 --max-time 60 -f \ + "${secret}?api-version=2016-10-01" -H "Authorization: Bearer ${TOKEN}" | jq -r .value) + htpasswd -Bb .htpasswd ${SECRET_NAME} ${SECRET_VALUE} + done +} +fetchStorageKeys() { + RESOURCE=$(jq -r .authentication.audiences[0] ${ENDPOINTS}) + + TOKEN=$(curl -s --retry 5 --retry-delay 10 --max-time 60 -f -X POST \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "grant_type=client_credentials" \ + -d "client_id=${SPN_CLIENT_ID}" \ + --data-urlencode "client_secret=${SPN_CLIENT_SECRET}" \ + --data-urlencode "resource=${RESOURCE}" \ + ${TOKEN_URL} | jq -r '.access_token') + + SA_URL="https://management.${FQDN}/${SA_RESOURCE_ID}/listKeys?api-version=2017-10-01" + SA_KEY=$(curl -s --retry 5 --retry-delay 10 --max-time 60 -f -X POST \ + "${SA_URL}" -H "Authorization: Bearer ${TOKEN}" -H "Content-Length: 0" | jq -r ".keys[0].value") +} + +echo LOCATION: ${LOCATION} +echo TENANT_ID: ${TENANT_ID} +echo ADMIN_USER_NAME: ${ADMIN_USER_NAME} +echo SA_RESOURCE_ID: ${SA_RESOURCE_ID} +echo SA_CONTAINER: ${SA_CONTAINER} +echo KV_RESOURCE_ID: ${KV_RESOURCE_ID} +echo CERT_THUMBPRINT: ${CERT_THUMBPRINT} +echo PIP_FQDN: ${PIP_FQDN} +echo PIP_LABEL: ${PIP_LABEL} +echo REGISTRY_TAG: ${REGISTRY_TAG} +echo REGISTRY_REPLICAS: ${REGISTRY_REPLICAS} +echo SPN_CLIENT_ID: ${SPN_CLIENT_ID} +echo SPN_CLIENT_SECRET: *** + +SA_NAME=$(echo ${SA_RESOURCE_ID} | grep -oh -e '[[:alnum:]]*$') +KV_NAME=$(echo ${KV_RESOURCE_ID} | grep -oh -e '[[:alnum:]]*$') + +EXT_DOMAIN_NAME="${PIP_FQDN//$PIP_LABEL.$LOCATION.cloudapp.}" +FQDN=${LOCATION}.${EXT_DOMAIN_NAME} + +CRT_FILE="${CERT_THUMBPRINT}.crt" +KEY_FILE="${CERT_THUMBPRINT}.prv" +SECRET=$(openssl rand -base64 32) + +if [ -f /var/log.vhd/azure/golden-image-install.complete ]; then + echo "golden image; skipping dependencies installation" + rm -rf /home/packer + deluser packer + groupdel packer +else + installDeps +fi + +echo validating dependencies +if [ ! -f "/var/lib/waagent/${CRT_FILE}" ]; then + exit $ERR_MISSING_CRT_FILE +fi + +if [ ! -f "/var/lib/waagent/${KEY_FILE}" ]; then + exit $ERR_MISSING_KEY_FILE +fi + +echo adding certs to the ca-store +cp "/var/lib/waagent/Certificates.pem" "/usr/local/share/ca-certificates/azsCertificate.crt" +update-ca-certificates + +echo copy user cert to mount point +STORE="/etc/ssl/certs/registry" +mkdir -p $STORE +cp "/var/lib/waagent/${CRT_FILE}" "${STORE}/${CRT_FILE}" +cp "/var/lib/waagent/${KEY_FILE}" "${STORE}/${KEY_FILE}" + +echo getting management endpoints +fetchOAuth + +echo fetching storage key +fetchStorageKeys + +echo fetching user credentials +HTPASSWD_DIR="/root/auth" +mkdir -p $HTPASSWD_DIR +fetchCredentials +cp .htpasswd $HTPASSWD_DIR/.htpasswd + +echo starting registry container +cat <> docker-compose.yml +version: '3' +services: + registry: + image: registry:${REGISTRY_TAG} + deploy: + mode: replicated + replicas: ${REGISTRY_REPLICAS} + restart_policy: + condition: on-failure + delay: 5s + ports: + - "443:5000" + volumes: + - /etc/ssl/certs:/etc/ssl/certs:ro + - /root/auth:/auth + environment: + - REGISTRY_LOG_ACCESSLOG_DISABLED=false + - REGISTRY_STORAGE=azure + - REGISTRY_STORAGE_AZURE_ACCOUNTNAME=${SA_NAME} + - REGISTRY_STORAGE_AZURE_ACCOUNTKEY=${SA_KEY} + - REGISTRY_STORAGE_AZURE_CONTAINER=${SA_CONTAINER} + - REGISTRY_STORAGE_AZURE_REALM=${FQDN} + - REGISTRY_AUTH=htpasswd + - REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd + - REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" + - REGISTRY_HTTP_ADDR=0.0.0.0:5000 + - REGISTRY_HTTP_SECRET=${SECRET} + - REGISTRY_HTTP_TLS_KEY=/etc/ssl/certs/registry/${KEY_FILE} + - REGISTRY_HTTP_TLS_CERTIFICATE=/etc/ssl/certs/registry/${CRT_FILE} +EOF + +docker swarm init +docker stack deploy registry -c docker-compose.yml + +sleep 30 +sudo docker system prune -a -f & + +echo validationg container status +CID=$(docker ps | grep "registry_registry.1\." | head -c 12) +STATUS=$(docker inspect ${CID} | jq ".[0].State.Status" | xargs) +if [[ ! $STATUS == "running" ]]; then + exit $ERR_REGISTRY_NOT_RUNNING +fi diff --git a/registry/Scripts/self-signed.ps1 b/registry/Scripts/self-signed.ps1 new file mode 100644 index 0000000..418a353 --- /dev/null +++ b/registry/Scripts/self-signed.ps1 @@ -0,0 +1,9 @@ +# Create a self-signed certificate +$PASSWORD="" +$CN="" +$PATH="" + +$ssc = New-SelfSignedCertificate -certstorelocation cert:\LocalMachine\My -dnsname $CN +$crt = "cert:\localMachine\my\" + $ssc.Thumbprint +$pwd = ConvertTo-SecureString -String $PASSWORD -Force -AsPlainText +Export-PfxCertificate -cert $crt -FilePath $PATH -Password $pwd diff --git a/registry/Strings/resources.resjson b/registry/Strings/resources.resjson new file mode 100644 index 0000000..aff73f0 --- /dev/null +++ b/registry/Strings/resources.resjson @@ -0,0 +1,7 @@ +{ + "displayName": "Docker Container Registry", + "publisherDisplayName": "Microsoft", + "summary": "An IaaS based template for deploying a standalone open source Docker container registry", + "longSummary": "This solution deploys a Docker container registry.", + "description": "This solution deploys a Docker container registry." +} \ No newline at end of file diff --git a/registry/manifest.json b/registry/manifest.json new file mode 100644 index 0000000..e265fa8 --- /dev/null +++ b/registry/manifest.json @@ -0,0 +1,84 @@ +{ + "$schema": "https://gallery.azure.com/schemas/2015-10-01/manifest.json#", + "name": "AzureStackDockerContainerRegistry", + "publisher": "Microsoft", + "version": "0.1.3", + "displayName": "ms-resource:displayName", + "publisherDisplayName": "ms-resource:publisherDisplayName", + "publisherLegalName": "ms-resource:publisherDisplayName", + "summary": "ms-resource:summary", + "longSummary": "ms-resource:longSummary", + "description": "ms-resource:description", + "artifacts": [ + { + "name": "DefaultTemplate", + "type": "Template", + "path": "DeploymentTemplates\\azuredeploy.json", + "isDefault": true + }, + { + "name": "createUiDefinition", + "type": "Custom", + "path": "DeploymentTemplates\\createUiDefinition.json", + "isDefault": false + } + ], + "products": [ + { + "displayName": "ms-resource:displayName", + "publisherDisplayName": "ms-resource:publisherDisplayName", + "legalTerms": "

    MICROSOFT SOFTWARE LICENSE TERMS<\/b> <\/p>

    AKS ENGINE FOR AZURE STACK PREVIEW<\/b><\/p>

    ________________________________________<\/p>

    These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsoft\u2019s rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS.<\/p>

    1. INSTALLATION AND USE RIGHTS.<\/p>

    a) General. You may install and use any number of copies of the software on your devices. You may not use the software in a live operating environment unless Microsoft permits you to do so under another agreement.<\/p>

    b) Third Party Software. The software may include third party applications that Microsoft, not the third party, licenses to you under this agreement. Any included notices for third party applications are for your information only.<\/p>

    c) Open Source Components. The software may contain third party copyrighted software licensed under open source licenses with source code availability obligations. Copies of those licenses are included in the ThirdPartyNotices file or other accompanying notices file. <\/p>

    2. TIME-SENSITIVE SOFTWARE.<\/p>

    a) Term. The term of this agreement is until 01\/06\/2019 (day\/month\/year).<\/p>

    b) Notice. You may receive periodic reminder notices of this date through the software.<\/p>

    c) Access to data. You may not be able to access data used in the software when it stops running.<\/p>

    3. PRE-RELEASE SOFTWARE. The software is a pre-release version. It may not operate correctly. It may be different from the commercially released version.<\/p>

    4. FEEDBACK. If you give feedback about the software to Microsoft, you give to Microsoft, without charge, the right to use, share and commercialize your feedback in any way and for any purpose. You will not give feedback that is subject to a license that requires Microsoft to license its software or documentation to third parties because Microsoft includes your feedback in them. These rights survive this agreement.<\/p>

    5. DATA COLLECTION. The software may collect information about you and your use of the software and send that to Microsoft. Microsoft may use this information to provide services and improve Microsoft\u2019s products and services. Your opt-out rights, if any, are described in the product documentation. Some features in the software may enable collection of data from users of your applications that access or use the software. If you use these features to enable data collection in your applications, you must comply with applicable law, including getting any required user consent, and maintain a prominent privacy policy that accurately informs users about how you use, collect, and share their data. You can learn more about Microsoft\u2019s data collection and use in the product documentation and the Microsoft Privacy Statement at https:\/\/go.microsoft.com\/fwlink\/?LinkId=521839. You agree to comply with all applicable provisions of the Microsoft Privacy Statement.<\/p>

    6. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to):<\/p>

    a) work around any technical limitations in the software that only allow you to use it in certain ways;<\/p>

    b) b)\treverse engineer, decompile, or disassemble the software, or attempt to do so, except and only to the extent required by third party licensing terms governing the use of certain open-source components that may be included with the software;<\/p>

    c) remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software;<\/p>

    d) use the software for commercial, non-profit, or revenue-generating activities;<\/p>

    e) use the software in any way that is against the law or to create or propagate malware; or<\/p>

    f) share, publish, distribute, or lend the software, provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party.<\/p>

    7. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit http:\/\/aka.ms\/exporting<\/a>.<\/p>

    8. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is \u201Cas is\u201D, \u201Cwith all faults\u201D, and without warranty of any kind.<\/p>

    9. UPDATES. The software may periodically check for updates, and download and install them for you. You may obtain updates only from Microsoft or authorized sources. Microsoft may need to update your system to provide you with updates. You agree to receive these automatic updates without any additional notice. Updates may not include or support all existing software features, services, or peripheral devices.<\/p>

    10. TERMINATION. Without prejudice to any other rights, Microsoft may terminate this agreement if you fail to comply with any of its terms or conditions. In such event, you must destroy all copies of the software and all of its component parts.<\/p>

    11. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software.<\/p>

    12. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles. If you acquired the software in any other country, its laws apply. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court. If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court.<\/p>

    13. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state, province, or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state, province, or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you:<\/p>

    a) Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.<\/p>

    b) Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.<\/p>

    c) Germany and Austria.<\/p>

    i. Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software.<\/p>

    ii. Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law.<\/p>

    Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence.<\/p>

    14. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \u201CAS IS.\u201D YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.<\/p>

    15. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.<\/p>

    This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law.<\/p>

    It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages.<\/p>

    Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French.<\/p>

    Remarque: Ce logiciel \u00E9tant distribu\u00E9 au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\u00E7ais.<\/p>

    EXON\u00C9RATION DE GARANTIE. Le logiciel vis\u00E9 par une licence est offert \u00AB tel quel \u00BB. Toute utilisation de ce logiciel est \u00E0 votre seule risque et p\u00E9ril. Microsoft n\u2019accorde aucune autre garantie expresse. Vous pouvez b\u00E9n\u00E9ficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\u00E9 marchande, d\u2019ad\u00E9quation \u00E0 un usage particulier et d\u2019absence de contrefa\u00E7on sont exclues.<\/p>

    LIMITATION DES DOMMAGES-INT\u00C9R\u00CATS ET EXCLUSION DE RESPONSABILIT\u00C9 POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \u00E0 hauteur de 5,00 $ US. Vous ne pouvez pr\u00E9tendre \u00E0 aucune indemnisation pour les autres dommages, y compris les dommages sp\u00E9ciaux, indirects ou accessoires et pertes de b\u00E9n\u00E9fices. Cette limitation concerne:<\/p>

    \u2022 tout ce qui est reli\u00E9 au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et<\/p>

    \u2022 les r\u00E9clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\u00E9 stricte, de n\u00E9gligence ou d\u2019une autre faute dans la limite autoris\u00E9e par la loi en vigueur.<\/p>

    Elle s\u2019applique \u00E9galement, m\u00EAme si Microsoft connaissait ou devrait conna\u00EEtre l\u2019\u00E9ventualit\u00E9 d\u2019un tel dommage. Si votre pays n\u2019autorise pas l\u2019exclusion ou la limitation de responsabilit\u00E9 pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l\u2019exclusion ci-dessus ne s\u2019appliquera pas \u00E0 votre \u00E9gard.<\/p>

    EFFET JURIDIQUE. Le pr\u00E9sent contrat d\u00E9crit certains droits juridiques. Vous pourriez avoir d\u2019autres droits pr\u00E9vus par les lois de votre pays. Le pr\u00E9sent contrat ne modifie pas les droits que vous conf\u00E8rent les lois de votre pays si celles-ci ne le permettent pas.<\/p>", + "privacyPolicy": "https://privacy.microsoft.com/en-us/privacystatement", + "offerDetails": { + "publisherId": "msk8sazurestack", + "offerId": "msk8s", + "plans": [ + { + "planId": "msk8splan", + "displayName": "ms-resource:displayName", + "summary": "ms-resource:summary", + "description": "ms-resource:description" + } + ] + } + } + ], + "images": [ + { + "context": "ibiza", + "items": [ + { + "id": "small", + "path": "Icons\\Small.png", + "type": "icon" + }, + { + "id": "medium", + "path": "Icons\\Medium.png", + "type": "icon" + }, + { + "id": "large", + "path": "Icons\\Large.png", + "type": "icon" + }, + { + "id": "wide", + "path": "Icons\\Wide.png", + "type": "icon" + }, + { + "id": "screenshot", + "path": "Screenshots\\screenshot.png", + "type": "screenshot" + } + ] + } + ], + "categories": [ + "Compute" + ], + "uiDefinition": { + "path": "uidefinition.json" + } +} \ No newline at end of file diff --git a/registry/uidefinition.json b/registry/uidefinition.json new file mode 100644 index 0000000..6b9a9e4 --- /dev/null +++ b/registry/uidefinition.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://gallery.azure.com/schemas/2015-02-12/UIDefinition.json#", + "createDefinition": { + "createBlade": { + "name": "CreateMultiVmWizardBlade", + "extension": "Microsoft_Azure_Compute" + } + } +} \ No newline at end of file From 7debd80f4e61a904bb6a367fb7e6b5b697c22ae4 Mon Sep 17 00:00:00 2001 From: Rohit Date: Thu, 12 Sep 2019 10:03:22 -0700 Subject: [PATCH 15/79] feat: add check for empty htpasswd file and user login creation (#136) Fix for no admin cred present. --- registry/DeploymentTemplates/azuredeploy.json | 2 +- registry/Scripts/pre-reqs.ps1 | 8 +++++--- registry/Scripts/script.sh | 11 +++++++++++ registry/manifest.json | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/registry/DeploymentTemplates/azuredeploy.json b/registry/DeploymentTemplates/azuredeploy.json index cfdd2dd..9b7f299 100644 --- a/registry/DeploymentTemplates/azuredeploy.json +++ b/registry/DeploymentTemplates/azuredeploy.json @@ -147,7 +147,7 @@ "osProfile": { "computerName": "[concat(variables('rgname'),'-vm')]", "adminUsername": "[parameters('adminUsername')]", - "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/registry/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", + "customData": "[base64(concat('#cloud-config\n\nwrite_files:\n- path: \"/opt/azure/registry/script.sh\"\n permissions: \"0744\"\n encoding: gzip\n owner: \"root\"\n content: !!binary |\n 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'))]", "linuxConfiguration": { "disablePasswordAuthentication": true, "ssh": { diff --git a/registry/Scripts/pre-reqs.ps1 b/registry/Scripts/pre-reqs.ps1 index 4eb48f1..7897114 100644 --- a/registry/Scripts/pre-reqs.ps1 +++ b/registry/Scripts/pre-reqs.ps1 @@ -7,6 +7,8 @@ $pfxSecret = "" $pfxPath = "" $pfxPass = "" $spnName = "" +$userName = "" +$userPass = "" # RESOURCE GROUP @@ -68,6 +70,6 @@ $tp = Get-PfxCertificate -FilePath $pfxPath Write-Host "=> Certificate URL:" $kvSecret.Id Write-Host "=> Certificate thumbprint:" $tp.Thumbprint -# Write-Host "Storing secret for sample user: admin" -# $userSecret = ConvertTo-SecureString -String "admin" -AsPlainText -Force -# Set-AzureKeyVaultSecret -VaultName $kvName -Name "admin" -SecretValue $userSecret | out-null +Write-Host "Storing secret for sample user: $userName" +$userSecret = ConvertTo-SecureString -String $userPass -AsPlainText -Force +Set-AzureKeyVaultSecret -VaultName $kvName -Name $userName -SecretValue $userSecret -ContentType "user credentials" | out-null diff --git a/registry/Scripts/script.sh b/registry/Scripts/script.sh index 178ac04..6a9bebc 100644 --- a/registry/Scripts/script.sh +++ b/registry/Scripts/script.sh @@ -3,6 +3,7 @@ ERR_APT_INSTALL_TIMEOUT=9 # Timeout installing required apt packages ERR_MISSING_CRT_FILE=10 # Bad cert thumbprint OR pfx not in key vault OR template misconfigured VM secrets section ERR_MISSING_KEY_FILE=11 # Bad cert thumbprint OR pfx not in key vault OR template misconfigured VM secrets section +ERR_MISSING_USER_CREDENTIALS=12 # No user credentials secret found on given key vault ERR_REGISTRY_NOT_RUNNING=13 # The container registry failed to start successfully ERR_MOBY_APT_LIST_TIMEOUT=25 # Timeout waiting for moby apt sources ERR_MS_GPG_KEY_DOWNLOAD_TIMEOUT=26 # Timeout waiting for MS GPG key download @@ -126,6 +127,11 @@ fetchCredentials() { "${secret}?api-version=2016-10-01" -H "Authorization: Bearer ${TOKEN}" | jq -r .value) htpasswd -Bb .htpasswd ${SECRET_NAME} ${SECRET_VALUE} done + + if [ ! -s .htpasswd ]; then + echo ".htpasswd file is empty." + return $ERR_MISSING_USER_CREDENTIALS + fi } fetchStorageKeys() { RESOURCE=$(jq -r .authentication.audiences[0] ${ENDPOINTS}) @@ -205,6 +211,11 @@ echo fetching user credentials HTPASSWD_DIR="/root/auth" mkdir -p $HTPASSWD_DIR fetchCredentials +returnCode=$? +if [[ $returnCode != 0 ]]; then + exit $returnCode +fi + cp .htpasswd $HTPASSWD_DIR/.htpasswd echo starting registry container diff --git a/registry/manifest.json b/registry/manifest.json index e265fa8..4156c0c 100644 --- a/registry/manifest.json +++ b/registry/manifest.json @@ -2,7 +2,7 @@ "$schema": "https://gallery.azure.com/schemas/2015-10-01/manifest.json#", "name": "AzureStackDockerContainerRegistry", "publisher": "Microsoft", - "version": "0.1.3", + "version": "0.1.4", "displayName": "ms-resource:displayName", "publisherDisplayName": "ms-resource:publisherDisplayName", "publisherLegalName": "ms-resource:publisherDisplayName", From 1566e18b27873ba00cb757c3145fa714a699b567 Mon Sep 17 00:00:00 2001 From: Javier Darsie <44655727+jadarsie@users.noreply.github.com> Date: Mon, 16 Sep 2019 21:37:34 -0700 Subject: [PATCH 16/79] chore: update registry manifest (#137) --- .../ContainerRegistryLegal-PreRelease.docx | Bin 0 -> 45468 bytes .../ContainerRegistryLegal-PreRelease.html | 128 ++++++++++++++++++ .../createUiDefinition.json | 6 +- registry/Strings/resources.resjson | 10 +- registry/manifest.json | 14 +- 5 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 registry/ContainerRegistryLegal-PreRelease.docx create mode 100644 registry/ContainerRegistryLegal-PreRelease.html diff --git a/registry/ContainerRegistryLegal-PreRelease.docx b/registry/ContainerRegistryLegal-PreRelease.docx new file mode 100644 index 0000000000000000000000000000000000000000..d735ea6cf4848f81fb111d1f80f4a9daa1960ec3 GIT binary patch literal 45468 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 SOFTWARE LICENSE TERMS +

    CONTAINER REGISTRY TEMPLATE

    + +

    These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They + apply to the software named above and any Microsoft services or software updates (except to the extent such + services or updates are accompanied by new or additional terms, in which case those different terms apply + prospectively and do not alter your or Microsoft’s rights relating to pre-updated software or services). IF YOU + COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. +

    +

    1. INSTALLATION AND USE RIGHTS.

    +

    a) General. You may install and use any number of copies of the software on your devices.

    +

    b) Third Party Software. The software may include third party applications that Microsoft, not the third + party, licenses to you under this agreement. Any included notices for third party applications are for your + information only.

    +

    2. TIME-SENSITIVE SOFTWARE.

    +

    a) Period. This agreement is effective on your acceptance and terminates on the earlier of (i) 30 days + following first availability of a commercial release of the software or (ii) upon termination by Microsoft. + Microsoft may extend this agreement in its discretion.

    +

    b) Notice. You may receive periodic reminder notices of this date through the software.

    +

    c) Access to data. You may not be able to access data used in the software when it stops running.

    +

    3. PRE-RELEASE SOFTWARE. The software is a pre-release version. It may not operate correctly. It may be + different from the commercially released version.

    +

    4. FEEDBACK. If you give feedback about the software to Microsoft, you give to Microsoft, without charge, + the right to use, share and commercialize your feedback in any way and for any purpose. You will not give + feedback that is subject to a license that requires Microsoft to license its software or documentation to third + parties because Microsoft includes your feedback in them. These rights survive this agreement.

    +

    5. DATA COLLECTION. The software may collect information about you and your use of the software and send + that to Microsoft. Microsoft may use this information to provide services and improve Microsoft’s products and + services. Your opt-out rights, if any, are described in the product documentation. Some features in the software + may enable collection of data from users of your applications that access or use the software. If you use these + features to enable data collection in your applications, you must comply with applicable law, including getting + any required user consent, and maintain a prominent privacy policy that accurately informs users about how you + use, collect, and share their data. You can learn more about Microsoft’s data collection and use in the product + documentation and the Microsoft Privacy Statement at http://aka.ms/privacy. + You agree to comply with all applicable provisions of the Microsoft Privacy Statement.

    +

    6. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless + applicable law gives you more rights despite this limitation, you will not (and have no right to):

    +

    a) work around any technical limitations in the software that only allow you to use it in certain ways; +

    +

    b) reverse engineer, decompile or disassemble the software;

    +

    c) remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software;

    +

    d) use the software for commercial, non-profit, or revenue-generating activities;

    +

    e) use the software in any way that is against the law or to create or propagate malware; or

    +

    f) share, publish, distribute, or lend the software, provide the software as a stand-alone hosted + solution for others to use, or transfer the software or this agreement to any third party.

    +

    7. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations + that apply to the software, which include restrictions on destinations, end users, and end use. For further + information on export restrictions, visit http://aka.ms/exporting.

    +

    8. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for + the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind.

    +

    9. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, + or third-party applications, is the entire agreement for the software.

    +

    10. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or + Canada, the laws of the state or province where you live (or, if a business, where your principal place of + business is located) govern the interpretation of this agreement, claims for its breach, and all other claims + (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles. + If you acquired the software in any other country, its laws apply. If U.S. federal jurisdiction exists, you and + Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all + disputes heard in court. If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior + Court of King County, Washington for all disputes heard in court.

    +

    11. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may + have other rights, including consumer rights, under the laws of your state, province, or country. Separate and + apart from your relationship with Microsoft, you may also have rights with respect to the party from which you + acquired the software. This agreement does not change those other rights if the laws of your state, province, or + country do not permit it to do so. For example, if you acquired the software in one of the below regions, or + mandatory country law applies, then the following provisions apply to you:

    +

    a) Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this + agreement is intended to affect those rights.

    +

    b) Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the + automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the + Internet, however, the software will resume checking for and installing updates), or uninstalling the software. + The product documentation, if any, may also specify how to turn off updates for your specific device or + software. +

    +

    c) Germany and Austria.

    +

    i. Warranty. The properly licensed software will perform substantially as described in any Microsoft + materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the + licensed software.

    +

    ii. Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the + Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable + according to the statutory law.

    +

    Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in + breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this + agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a + party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft + will not be liable for slight negligence.

    +

    12. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES + NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT + EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT.

    +

    13. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE + PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO + U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT + OR INCIDENTAL DAMAGES.

    +

    This limitation applies to (a) anything related to the software, services, content (including code) on third + party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, + guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to + the extent permitted by applicable law.

    +

    It also applies even if Microsoft knew or should have known about the possibility of the damages. The above + limitation or exclusion may not apply to you because your state, province, or country may not allow the + exclusion or limitation of incidental, consequential, or other damages.

    +

    Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided + below in French.

    +

    Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies + ci-dessous en français.

    +

    EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce + logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez + bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce + contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité + marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues.

    +

    LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de + Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ + US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages + spéciaux, indirects ou accessoires et pertes de bénéfices.

    +

    Cette limitation concerne:

    +
      +
    • tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des + sites Internet tiers ou dans des programmes tiers; et
    • +
    • les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité + stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur.
    • +
    +

    Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. + Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, + accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne + s’appliquera pas à votre égard.

    +

    EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits + prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois + de votre pays si celles-ci ne le permettent pas.

    \ No newline at end of file diff --git a/registry/DeploymentTemplates/createUiDefinition.json b/registry/DeploymentTemplates/createUiDefinition.json index d03d767..6e4d221 100644 --- a/registry/DeploymentTemplates/createUiDefinition.json +++ b/registry/DeploymentTemplates/createUiDefinition.json @@ -90,7 +90,7 @@ { "name": "servicePrincipalClientId", "type": "Microsoft.Common.TextBox", - "label": "Client ID", + "label": "Service Principal Client ID", "constraints": { "required": true } @@ -99,8 +99,8 @@ "name": "servicePrincipalClientSecret", "type": "Microsoft.Common.PasswordBox", "label": { - "password": "Password", - "confirmPassword": "Confirm password" + "password": "Service Principal password", + "confirmPassword": "Confirm Service Principal password" }, "constraints": { "required": true diff --git a/registry/Strings/resources.resjson b/registry/Strings/resources.resjson index aff73f0..baca5bd 100644 --- a/registry/Strings/resources.resjson +++ b/registry/Strings/resources.resjson @@ -1,7 +1,9 @@ { - "displayName": "Docker Container Registry", + "displayName": "Container Registry Template", "publisherDisplayName": "Microsoft", - "summary": "An IaaS based template for deploying a standalone open source Docker container registry", - "longSummary": "This solution deploys a Docker container registry.", - "description": "This solution deploys a Docker container registry." + "summary": "Deploy and manage a Docker private registry", + "longSummary": "Deploy and manage a Docker private registry", + "description": "

    Deploy and manage a Docker private registry

    Container Registry Template is a solution template that deploys and configures a Docker private registry for hosting container images in an Ubuntu VM image. Using the Container Registry Template, you can store and distribute Docker-formatted images for all types of container deployments. Users can benefit from using familiar tooling capable of working with the open source Docker Registry v2. This solution template requires the AKS Base Image for deployment.

    Use Container Registry Template to: