diff --git a/documentation/site/content/managing-domains/aks/_index.md b/documentation/site/content/managing-domains/aks/_index.md index 5ad74a8cf86..c0ad0934c7b 100644 --- a/documentation/site/content/managing-domains/aks/_index.md +++ b/documentation/site/content/managing-domains/aks/_index.md @@ -9,15 +9,17 @@ description: "Deploy WebLogic Server on Azure Kubernetes Service." ### Introduction -This document is the reference documentation for the Azure Marketplace offer for WebLogic Server on Azure Kubernetes Service. The offer makes it easy to get started with WebLogic Server on Azure. The offer handles all the initial setup, creating the AKS cluster, container registry, WebLogic Kubernetes Operator installation, and domain creation using the model-in-image domain home source type. +This document is the reference for the Azure Marketplace offer for WebLogic Server on Azure Kubernetes Service. The offer makes it easy to get started with WebLogic Server on Azure. The offer handles all the initial setup, creating the AKS cluster, container registry, load-balancer, WebLogic Kubernetes Operator installation, and domain creation using the model-in-image domain home source type. To deploy the offer from the Azure portal, see [WebLogic Server on Azure](https://aka.ms/wls-aks-portal). +{{< img "WLS AKS Marketplace Solution Screenshot" "images/aks-solution.png" >}} + {{< readfile file="/samples/azure-kubernetes-service/includes/aks-value-prop.txt" >}} For complete details on domain home source types, see [Choose a domain home source type]({{< relref "/managing-domains/choosing-a-model/_index.md" >}}). -It is also possible to run the WebLogic Kubernetes Operator manually, without the aid of the Azure Marketplace offer. The steps for doing so are documented in the sample [Azure Kubernetes Service]({{< relref "/samples/azure-kubernetes-service/_index.md" >}}). +It is also possible to run the WebLogic Kubernetes Operator manually, without the aid of the Azure Marketplace offer. The steps for doing so are documented in the [Azure Kubernetes Service]({{< relref "/samples/azure-kubernetes-service/_index.md" >}}) sample. The remaining steps on this page document the user experience for the Azure Marketplace offer for WebLogic Server on Azure Kubernetes Service. @@ -93,11 +95,11 @@ In this section, you can configure the image that is deployed using the model-in #### Application -In this section you can deploy a Java EE Application along with the WebLogic Server deployment. +In this section, you can deploy an application along with WebLogic Server. | Field | Description | |-------|-------------| -| Deploy an application? | If set to **Yes**, you must specify a Java EE WAR, EAR, or JAR file suitable for deployment with the selected version of WebLogic Server. If set to **No**, no application is deployed.| +| Deploy an application? | If set to **Yes**, you must specify a WAR, EAR, or JAR file suitable for deployment with the selected version of WebLogic Server. If set to **No**, no application is deployed.| | Application package (.war,.ear,.jar) | With the **Browse** button, you can select a file from a pre-existing Azure Storage Account and Storage Container within that account. To learn how to create a Storage Account and Container, see [Create a storage account](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-portal) and [Create a Storage Container and upload application files](https://docs.microsoft.com/azure/storage/blobs/storage-quickstart-blobs-portal). | | Number of WebLogic Managed Server replicas | The initial value of the `replicas` field of the Domain. For information, see [Scaling]({{< relref "/managing-domains/domain-lifecycle/scaling.md" >}}). | @@ -106,10 +108,10 @@ In this section you can deploy a Java EE Application along with the WebLogic Ser | Field | Description | |-------|-------------| | Show advanced configuration? | If you want to retain the default values for the optional configuration, such as **Enable Container insights**, **Create Persistent Volume using Azure File share service** and others, set the toggle button to **No**, and click **Next** to configure TLS/SSL. If you want to specify different values for the optional configuration, set the toggle button to **Yes**, and enter the following details. | -|Enable Container insights| If selected, cause the deployment to create an Azure Monitoring workspace and connect it to the AKS cluster as the Azure Monitoring Agent. Azure Monitoring Agent is a tool that collects data and sends it to Azure Container Insights. Container insights gives you performance visibility by collecting memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API. Container logs are also collected. Metrics are written to the metrics store and log data is written to the logs store associated with your Log Analytics workspace. For more information, see [Azure Monitor Agent overview](/azure/azure-monitor/agents/agents-overview) and [Container insights overview](https://aka.ms/wls-aks-container-insights). | +|Enable Container insights| If selected, causes the deployment to create an Azure Monitoring workspace and connect it to the AKS cluster as the Azure Monitoring Agent. Azure Monitoring Agent is a tool that collects data and sends it to Azure Container Insights. Container insights gives you performance visibility by collecting memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API. Container logs are also collected. Metrics are written to the metrics store and log data is written to the logs store associated with your Log Analytics workspace. For more information, see [Azure Monitor Agent overview](/azure/azure-monitor/agents/agents-overview) and [Container insights overview](https://aka.ms/wls-aks-container-insights). | |Create Persistent Volume using Azure File share service|If selected, an Azure Storage Account and an Azure Files share will be provisioned. The file system type is NFS. The name of the Azure Files share is **weblogic**. The mount point is `/shared` as a persistent volume in the nodes of the AKS cluster. For more information, see [Oracle WebLogic Server persistent storage]({{< relref "/managing-domains/persistent-storage/_index.md" >}}) and [persistent volume with Azure Files share on AKS](https://docs.microsoft.com/azure/aks/azure-files-volume).| -| Bring your own WebLogic Server Docker image from Azure Container Registry? | If check the checkbox, the subsequent options are constrained to allow only selecting from a set of pre-existing WebLogic Server Docker images stored in the Oracle Container Registry. | -| Select existing ACR instance | This option is shown only if **Bring your own WebLogic Server Docker image from Azure Container Registry?** is checked. If visible, select an existing Acure Container Registry instance. | +| Bring your own WebLogic Server Docker image from Azure Container Registry? | If the checkbox is selected, you can use your own WebLogic Server Docker image from a pre-existing Azure Container Registry instance. | +| Select existing ACR instance | This option is shown only if **Bring your own WebLogic Server Docker image from Azure Container Registry?** is checked. If visible, select an existing Azure Container Registry instance. | | Please provide the image path | This option is shown only if **Bring your own WebLogic Server Docker image from Azure Container Registry?** is checked. If visible, the value must be a fully qualified Docker tag of an image within the specified ACR. | When you are satisfied with your selections, select **Next** and open **TLS/SSL** blade. @@ -118,7 +120,7 @@ When you are satisfied with your selections, select **Next** and open **TLS/SSL* With the **TLS/SSL** blade, you can configure Oracle WebLogic Server Administration Console on a secure HTTPS port, with your own SSL certificate provided by a Certifying Authority (CA). See [Oracle WebLogic Server Keystores configuration](https://aka.ms/arm-oraclelinux-wls-ssl-configuration) for more information. -Select **Yes** or **No** for the option **Configure WebLogic Server Administration Console, Remote Console, and cluster to use HTTPS (Secure) ports, with your own TLS/SSL certificate.** based on your preference. If you select **No**, you don't have to provide any details, and can proceed by selecting **Next**. If you select **Yes**, you can choose to provide the required configuration details by either uploading existing keystores or by using keystores stored in Azure Key Vault. +Select **Yes** or **No** for the option **Configure WebLogic Server Administration Console, Remote Console, and cluster to use HTTPS (Secure) ports, with your own TLS/SSL certificate.** If you select **No**, you don't have to provide any details, and can proceed by selecting **Next**. If you select **Yes**, you can choose to provide the required configuration details by either uploading existing keystores or by using keystores stored in Azure Key Vault. If you want to upload existing keystores, select **Upload existing KeyStores** for the option **How would you like to provide required configuration**, and enter the values for the fields listed in the following table. @@ -233,7 +235,7 @@ You can fill in any valid value in this column. **Target** and **Port** column: -For the ports, the recommended values are the usual 7001 for the **admin-server** and 8001 for the **cluster-1**. +For the ports, the recommended values are the usual 7001 for **admin-server** and 8001 for **cluster-1**. When you are satisfied with your selections, select **Next** and open **DNS** blade. @@ -280,7 +282,7 @@ Use the Database blade to configure Oracle WebLogic Server to connect to an exis | JNDI Name | Enter the JNDI name for your database JDBC connection. | | DataSource Connection String | Enter the JDBC connection string for your database. For information about obtaining the JDBC connection string, see [Obtain the JDBC Connection String for Your Database](https://docs.oracle.com/en/middleware/standalone/weblogic-server/wlazu/obtain-jdbc-connection-string-your-database.html#GUID-6523B742-EB68-4AF4-A85C-8B4561C133F3). | | Global transactions protocol | Determines the transaction protocol (global transaction processing behavior) for the data source. For more information, see [JDBC Data Source Transaction Options](https://docs.oracle.com/en/middleware/standalone/weblogic-server/14.1.1.0/jdbca/transactions.html#GUID-4C929E67-5FD7-477B-A749-1EA0F4FD25D4). **IMPORTANT: The correct value for this parameter depends on the selected database type. For PostgreSQL, select EmulateTwoPhaseCommit**. | -| Use passwordless datasource connection | If you select a database type that supports passwordless connection, then this check box will appear. If selected, configure passwordless connections to the data source. For more information, see [Passwordless connections for Azure services](https://learn.microsoft.com/azure/developer/intro/passwordless-overview). | +| Use passwordless datasource connection | If you select a database type that supports passwordless connection, this check box will appear. If selected, a passwordless connection to the data source will be configured. For more information, see [Passwordless connections for Azure services](https://learn.microsoft.com/azure/developer/intro/passwordless-overview). | | Database Username | Enter the user name of your database. | | Database Password | Enter the password for the database user. | | Confirm password | Re-enter the value of the preceding field. | @@ -298,7 +300,7 @@ When you are satisfied with your selections, select **Next** and open **Autoscal ### Autoscaling -Use the Autoscaling blade to configure metric that scales the WebLogic cluster. Select **Yes** or **No** for the option **Provision resources for horizontal autoscaling?** based on your preference. If you select **No**, you don't have to provide any details, and can proceed by clicking **Review + create**. If you select **Yes**, you must specify the details of your autoscaling option and autoscaling settings. +Use the Autoscaling blade to configure metrics that scale the WebLogic cluster. Select **Yes** or **No** for the option **Provision resources for horizontal autoscaling?**, based on your preference. If you select **No**, you don't have to provide any details, and can proceed by clicking **Review + create**. If you select **Yes**, you must specify the details of your autoscaling settings. You must select one of the following two options, each described in turn. @@ -310,19 +312,19 @@ You must select one of the following two options, each described in turn. | Field | Description | |-------|-------------| | Select metric | There are two options:{{< line_break >}}{{< line_break >}} • Average CPU Utilization {{< line_break >}} • Average Memory Utilization | -| Average CPU Utilization | Pick average CPU utilization in percent. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down action occur when the average CPU is consistently over the utilization. | -| Average Memory Utilization | Pick average memory utilization in percent. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down action occur when the average memory is consistently over the utilization.| +| Average CPU Utilization | Pick average CPU utilization in percent. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster member up to the maximum of cluster members, and the scale up or down action occurs when the average CPU is consistently over/under the utilization. | +| Average Memory Utilization | Pick average memory utilization in percent. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster member up to the maximum of cluster members, and the scale up or down action occurs when the average memory is consistently over/under the utilization.| #### WebLogic Monitoring Exporter (advanced autoscaling) -This option installs all the software necessary to allow you to create Java metric aware KEDA scaling rules. The offer provisions the following deployments. Right-click and select **Open Link in New Tab** to follow links: +This option installs all the software necessary to allow you to create Java metric aware KEDA scaling rules. The offer provisions the following software. Right-click and select **Open Link in New Tab** to follow links and learn more: * [Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics](https://aka.ms/wls-exporter). * [Install AKS Prometheus metrics addon](https://aka.ms/aks-enable-monitoring). * [Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus](https://aka.ms/aks-prometheus-metrics-scrape-configuration). * [Integrate KEDA with AKS cluster](https://aka.ms/aks-integrate-keda). -After the provisioning is completed, you can create KEDA scaling rules. A sample rule is provided in the deployment outputs. The following steps show how to see the sample rule. +After the provisioning is complete, you can create KEDA scaling rules. A sample rule is provided in the deployment outputs. The following steps show how to see the sample rule. * View the resource group for this deployment in the Azure portal. * In the **Settings** section, select **Deployments**. @@ -337,13 +339,13 @@ When you are satisfied with your selections, select **Review + create**. In the **Review + create blade**, review the details you provided for deploying Oracle WebLogic Server on AKS. If you want to make changes to any of the fields, click **< previous** or click on the respective blade and update the details. -If you want to use this template to automate the deployment, download it by selecting **Download a template for automation**. +If you want to use the underlying template to further customize it yourself (for example, as part of your CI/CD pipeline), download it by selecting **Download a template for automation**. -Click **Create** to create this offer. This process may take 30 to 60 minutes. +Click **Create** to start the deployment. This process may take 30 to 60 minutes. ### Template outputs -After clicking **Create** to create this offer, you will go to the **Deployment is in progress** page. When the deployment is completed, the page shows **Your deployment is complete**. In the left panel, select **Outputs**. These are the outputs from the deployment. The following table is a reference guide to the deployment outputs. +After clicking **Create**, you will go to the **Deployment is in progress** page. When the deployment is complete, the page shows **Your deployment is complete**. In the left panel, select **Outputs**. These are the outputs from the deployment. The following table is a reference to the deployment outputs. | Field | Description | |-------|-------------| diff --git a/documentation/site/content/samples/azure-kubernetes-service/_index.md b/documentation/site/content/samples/azure-kubernetes-service/_index.md index 3dfbfaa3780..c26c642cc0b 100644 --- a/documentation/site/content/samples/azure-kubernetes-service/_index.md +++ b/documentation/site/content/samples/azure-kubernetes-service/_index.md @@ -11,11 +11,10 @@ description: "Sample for using the operator to set up a WLS cluster on the Azure This sample demonstrates how to use the [WebLogic Kubernetes Operator]({{< relref "/_index.md" >}}) (hereafter "the operator") to set up a WebLogic Server (WLS) cluster on the Azure Kubernetes Service (AKS). After going through the steps, your WLS domain runs on an AKS cluster. You have several options for managing the cluster, depending on which [domain home source type]({{< relref "/managing-domains/choosing-a-model/_index.md" >}}) you choose. With Domain on PV, you can manage your WLS domain by accessing the WebLogic Server Administration Console or WLST. With Model in Image, you use the operator to perform WLS administrative operations. -**NOTE**: For an alternative approach to this sample, -see the [Oracle WebLogic Server on AKS from the Azure Marketplace]({{}}) -offering which automates the provisioning of -AKS cluster, AKS resources, the Azure Container Registry (ACR), - WebLogic Kubernetes Operator, and WebLogic Server images. +{{% notice note %}} +For an alternative approach to this sample, see the [Oracle WebLogic Server on AKS Azure Marketplace offering]({{}}), which automates the provisioning of +the AKS cluster, AKS resources, Azure Container Registry (ACR), load-balancer, WebLogic Kubernetes Operator, and WebLogic Server images. +{{% /notice %}} #### Azure Kubernetes Service cluster diff --git a/documentation/site/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/site/content/samples/azure-kubernetes-service/domain-on-pv.md index e45405c7cc6..e44d9cabe0c 100644 --- a/documentation/site/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/site/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -5,7 +5,7 @@ weight: 2 description: "Sample for creating a WebLogic domain home on an existing PV or PVC on the Azure Kubernetes Service." --- -This sample demonstrates how to use the [WebLogic Kubernetes Operator](https://oracle.github.io/weblogic-kubernetes-operator) (hereafter "the operator") to set up a WebLogic Server (WLS) cluster on the Azure Kubernetes Service (AKS) using the domain on PV approach. After going through the steps, your WLS domain runs on an AKS cluster instance and you can manage your WLS domain by accessing the WebLogic Server Administration Console. +This sample demonstrates how to use the [WebLogic Kubernetes Operator](https://oracle.github.io/weblogic-kubernetes-operator) (hereafter "the operator") to set up a WebLogic Server (WLS) cluster on the Azure Kubernetes Service (AKS) using the domain on PV approach. After going through the steps, your WLS domain runs on an AKS cluster and you can manage your WLS domain by accessing the WebLogic Server Administration Console. #### Contents @@ -32,6 +32,8 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](https://o ##### Prepare parameters +Set required parameters by running the following commands. + ```shell # Change these parameters as needed for your own environment export ORACLE_SSO_EMAIL= @@ -59,11 +61,11 @@ export ACR_NAME="${NAME_PREFIX}acr${TIMESTAMP}" {{< readfile file="/samples/azure-kubernetes-service/includes/sign-in-azure.txt" >}} +{{< readfile file="/samples/azure-kubernetes-service/includes/download-samples-zip.txt" >}} + {{% notice info %}} The following sections of the sample instructions will guide you, step-by-step, through the process of setting up a WebLogic cluster on AKS - remaining as close as possible to a native Kubernetes experience. This lets you understand and customize each step. If you wish to have a more automated experience that abstracts some lower level details, you can skip to the [Automation](#automation) section. {{% /notice %}} -{{< readfile file="/samples/azure-kubernetes-service/includes/download-samples-zip.txt" >}} - {{< readfile file="/samples/azure-kubernetes-service/includes/create-resource-group.txt" >}} {{< readfile file="/samples/azure-kubernetes-service/includes/create-aks-cluster-body-02.txt" >}} @@ -121,7 +123,7 @@ See [Understanding your first archive]({{< relref "/samples/domains/domain-home- ##### Staging a ZIP file of the archive -Delete existing archive.zip in case we have an old leftover version. +Delete any possible existing archive.zip in case we have an old leftover version. ```shell $ rm -f ${WDT_MODEL_FILES_PATH}/WLS-v1/archive.zip @@ -215,7 +217,7 @@ Now that you have created the AKS cluster, installed the operator, and verified ##### Create secrets -You will use the `$BASE_DIR/sample-scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh` script to create the domain WebLogic administrator credentials as a Kubernetes secret. Please run: +You will use the `$BASE_DIR/sample-scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh` script to create the domain WebLogic administrator credentials as a Kubernetes secret. Please run the following commands: ``` cd $BASE_DIR/sample-scripts/create-weblogic-domain-credentials @@ -223,19 +225,24 @@ cd $BASE_DIR/sample-scripts/create-weblogic-domain-credentials ```shell $ ./create-weblogic-credentials.sh -u ${WEBLOGIC_USERNAME} -p ${WEBLOGIC_PASSWORD} -d domain1 ``` + +The output will show something similar to the following: + ``` secret/domain1-weblogic-credentials created secret/domain1-weblogic-credentials labeled The secret domain1-weblogic-credentials has been successfully created in the default namespace. ``` - -You will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-docker-credentials-secret.sh` script to create the Docker credentials as a Kubernetes secret. Please run: +You will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-docker-credentials-secret.sh` script to create the Docker credentials as a Kubernetes secret. Please run the following commands: ``` shell $ cd $BASE_DIR/sample-scripts/create-kubernetes-secrets $ ./create-docker-credentials-secret.sh -s ${SECRET_NAME_DOCKER} -e ${ORACLE_SSO_EMAIL} -p ${ORACLE_SSO_PASSWORD} -u ${ORACLE_SSO_EMAIL} ``` + +The output will show something similar to the following: + ``` secret/wlsregcred created The secret wlsregcred has been successfully created in the default namespace. @@ -246,6 +253,9 @@ Verify secrets with the following command: ```shell $ kubectl get secret ``` + +The output will show something similar to the following: + ``` NAME TYPE DATA AGE domain1-weblogic-credentials Opaque 2 2m32s @@ -268,7 +278,7 @@ kubectl label namespace default weblogic-operator=enabled ##### Create WebLogic Domain Now, you deploy a `sample-domain1` domain resource and an associated `sample-domain1-cluster-1` cluster resource using a single YAML resource file which defines both resources. The domain resource and cluster resource tells the operator how to deploy a WebLogic domain. They do not replace the traditional WebLogic configuration files, but instead cooperate with those files to describe the Kubernetes artifacts of the corresponding domain. -- Run the following command to generate resource files. +- Run the following commands to generate resource files. Export `Domain_Creation_Image_tag`, which will be referred in `create-domain-on-aks-generate-yaml.sh`. @@ -296,12 +306,19 @@ The domain resource references the cluster resource, a WebLogic Server installat ```shell $ kubectl apply -f admin-lb.yaml ``` + + The output will show something similar to the following: + ``` service/domain1-admin-server-external-lb created ``` + ```shell $ kubectl apply -f cluster-lb.yaml ``` + + The output will show something similar to the following: + ``` service/domain1-cluster-1-external-lb created ``` @@ -363,7 +380,7 @@ The domain resource references the cluster resource, a WebLogic Server installat ``` - In the example, the URL to access the Administration Server is: `http://4.157.147.131/console`. + In the example, the URL to access the Administration Server is: `http://4.157.147.131:7001/console`. The user name and password that you enter for the Administration Console must match the ones you specified for the `domain1-weblogic-credentials` secret in the [Create secrets](#create-secrets) step. If the WLS Administration Console is still not available, use `kubectl get events --sort-by='.metadata.creationTimestamp' ` to troubleshoot. @@ -372,25 +389,20 @@ The domain resource references the cluster resource, a WebLogic Server installat $ kubectl get events --sort-by='.metadata.creationTimestamp' ``` -To access the sample application on WLS, you may skip to the section [Access sample application](#access-sample-application). The next section includes a script that automates all of the preceding steps. +To access the sample application on WLS, skip to the section [Access sample application](#access-sample-application). The next section includes a script that automates all of the preceding steps. #### Automation -If you want to automate the above steps of creating AKS cluster and WLS domain, you can use the script `${BASE_DIR}/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh`. +If you want to automate the above steps of creating the AKS cluster and WLS domain, you can use the script `${BASE_DIR}/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh`. The sample script will create a WLS domain home on the AKS cluster, including: - Creating a new Azure resource group, with a new Azure Storage Account and Azure File Share to allow WebLogic to persist its configuration and data separately from the Kubernetes pods that run WLS workloads. - Creating WLS domain home. - Generating the domain resource YAML files, which can be used to restart the Kubernetes artifacts of the corresponding domain. -For input values, you can edit `${BASE_DIR}/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.sh` directly. The following values must be specified: +To customize the WLS domain, you can optionally edit `${BASE_DIR}/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.sh`. -| Name in YAML file | Example value | Notes | -|-------------------|---------------------|------------------------------------------------------------------------------------------------| -| `dockerEmail` | `yourDockerEmail` | Oracle Single Sign-On (SSO) account email, used to pull the WebLogic Server Docker image. | -| `dockerPassword` | `yourDockerPassword` | Password for Oracle SSO account, used to pull the WebLogic Server Docker image, in clear text. | -| `weblogicUserName` | `weblogic` | Uername for WebLogic user account. | -| `weblogicAccountPassword` | `Secret123456` | Password for WebLogic user account. | +You can now run the script. ```shell $ cd ${BASE_DIR}/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service @@ -400,7 +412,7 @@ $ cd ${BASE_DIR}/sample-scripts/create-weblogic-domain-on-azure-kubernetes-servi $ ./create-domain-on-aks.sh ``` -The script will print the Administration Server address after a successful deployment. +The script will take some time to run. The script will print the Administration Server address after a successful deployment. To interact with the cluster using `kubectl`, use `az aks get-credentials` as shown in the script output. {{% notice info %}} You now have created an AKS cluster with Azure Files NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. @@ -421,12 +433,11 @@ Access the sample application using the cluster load balancer IP address. $ CLUSTER_IP=$(kubectl get svc domain1-cluster-1-lb -o=jsonpath='{.status.loadBalancer.ingress[0].ip}') ``` - ```shell $ curl http://${CLUSTER_IP}:8001/myapp_war/index.jsp ``` -The test application will list the server host and server IP on the output, like the following: +The test application will list the server host on the output, like the following: ```html
@@ -478,7 +489,7 @@ wlsstorage1612795811.file.core.windows.net:/wlsstorage1612795811/wls-weblogic-16
 
 {{< readfile file="/samples/azure-kubernetes-service/includes/clean-up-resources-body-01.txt" >}}
 
-If you created the AKS cluster step by step, run the following commands to clean up resources.
+If you created the AKS cluster step by step, run the following command to clean up resources.
 
 {{< readfile file="/samples/azure-kubernetes-service/includes/clean-up-resources-body-02.txt" >}}
 
diff --git a/documentation/site/content/samples/azure-kubernetes-service/includes/aks-connect-acr.txt b/documentation/site/content/samples/azure-kubernetes-service/includes/aks-connect-acr.txt
index ebf6eacc499..2ad69117b4b 100644
--- a/documentation/site/content/samples/azure-kubernetes-service/includes/aks-connect-acr.txt
+++ b/documentation/site/content/samples/azure-kubernetes-service/includes/aks-connect-acr.txt
@@ -1,4 +1,4 @@
-Finally, connect AKS to the ACR.  For more details on connecting ACR to an existing AKS, see [Configure ACR integration for existing AKS clusters](https://learn.microsoft.com/en-us/azure/aks/cluster-container-registry-integration?tabs=azure-cli#configure-acr-integration-for-an-existing-aks-cluster).
+Finally, connect the AKS cluster to the ACR. For more details on connecting ACR to an existing AKS, see [Configure ACR integration for existing AKS clusters](https://learn.microsoft.com/en-us/azure/aks/cluster-container-registry-integration?tabs=azure-cli#configure-acr-integration-for-an-existing-aks-cluster).
 
 ```shell
 $ export ACR_ID=$(az acr show -n $ACR_NAME --resource-group $AKS_PERS_RESOURCE_GROUP --query "id" -o tsv)
diff --git a/documentation/site/content/samples/azure-kubernetes-service/includes/clean-up-resources-body-01.txt b/documentation/site/content/samples/azure-kubernetes-service/includes/clean-up-resources-body-01.txt
index 1253deb30a6..05ad4cf46e6 100644
--- a/documentation/site/content/samples/azure-kubernetes-service/includes/clean-up-resources-body-01.txt
+++ b/documentation/site/content/samples/azure-kubernetes-service/includes/clean-up-resources-body-01.txt
@@ -1,4 +1,4 @@
-The output from the `create-domain-on-aks.sh` script includes a statement about the Azure resources created by the script.  To delete the cluster and free all related resources, simply delete the resource groups.  The output will list the resource groups, such as.
+If you used the automation script, the output from the `create-domain-on-aks.sh` script includes a statement about the Azure resources created by the script. To delete the cluster and free all related resources, simply delete the resource groups. The output will list the resource groups, such as:
 
 ```shell
 The following Azure Resouces have been created:
diff --git a/documentation/site/content/samples/azure-kubernetes-service/includes/create-acr.txt b/documentation/site/content/samples/azure-kubernetes-service/includes/create-acr.txt
index 74085cd3308..036f8968511 100644
--- a/documentation/site/content/samples/azure-kubernetes-service/includes/create-acr.txt
+++ b/documentation/site/content/samples/azure-kubernetes-service/includes/create-acr.txt
@@ -12,7 +12,7 @@ Closely examine the JSON output from this command. Save the value of the `loginS
 "loginServer": "contosoresourcegroup1610068510.azurecr.io",
 ```
 
-Use this value to sign in to the ACR instance. Note that because you are signing in with the `az` cli, you do not need a password because your identity is already conveyed by having done `az login` previously.
+Use this value to sign in to the ACR instance. Note that because you are signing in with the `az` CLI, you do not need a password because your identity is already conveyed by having done `az login` previously.
 
 ```shell
 $ export LOGIN_SERVER=$(az acr show -n $ACR_NAME --resource-group $AKS_PERS_RESOURCE_GROUP --query "loginServer" -o tsv)
diff --git a/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-01.txt b/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-01.txt
index e5fbcee33b2..d0c1a75e184 100644
--- a/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-01.txt
+++ b/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-01.txt
@@ -1,9 +1,11 @@
 ##### Oracle Container Registry
 
-You will need an Oracle account. The following steps will direct you to accept the license agreement for WebLogic Server.  Make note of your Oracle Account password and email.  This sample pertains to 12.2.1.4, but other versions may work as well.
+The following steps will direct you to accept the license agreement for WebLogic Server. Make note of your Oracle Account password and email. This sample pertains to 12.2.1.4, but other versions may work as well.
 
   - In a web browser, navigate to https://container-registry.oracle.com and log in using the Oracle Single Sign-On authentication service. If you do not already have SSO credentials, at the top of the page, click the **Sign In** link to create them.
   - The Oracle Container Registry provides a WebLogic 12.2.1.4 General Availability (GA) installation image that is used in this sample.
+    - In the Oracle Container Registry, navigate to **Middleware**, then **weblogic**.
+    - On the left, choose a language and accept the license agreement. You will then see a message such as: "You last accepted the Oracle Standard Terms and Restrictions on 08/10/2020 at 06:12 AM Coordinated Universal Time (UTC)."
   - **NOTE**: General Availability (GA) images are suitable for demonstration and development purposes _only_ where the environments are not available from the public Internet; they are **not
      acceptable for production use**. In production, you should always use CPU (patched) images
      from the OCR
@@ -11,7 +13,7 @@ You will need an Oracle account. The following steps will direct you to accept t
      (WIT) with the `--recommendedPatches` option. For more guidance,
      see [Apply the Latest Patches and Updates](https://www.oracle.com/pls/topic/lookup?ctx=en/middleware/standalone/weblogic-server/14.1.1.0&id=LOCKD-GUID-2DA84185-46BA-4D7A-80D2-9D577A4E8DE2)
      in _Securing a Production Environment for Oracle WebLogic Server_.
-  - Ensure that Docker is running.  Find and then pull the WebLogic 12.2.1.4 installation image:
+  - Ensure that Docker is running. Find and pull the WebLogic 12.2.1.4 installation image:
      ```shell
      $ docker login container-registry.oracle.com -u ${ORACLE_SSO_EMAIL} -p ${ORACLE_SSO_PASSWORD}
      $ docker pull container-registry.oracle.com/middleware/weblogic:12.2.1.4
diff --git a/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-02.txt b/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-02.txt
index afbc1d14fe2..efc2a106bc4 100644
--- a/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-02.txt
+++ b/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-body-02.txt
@@ -3,7 +3,7 @@
 
 This sample doesn't enable application routing. If you want to enable application routing, follow [Managed nginx Ingress with the application routing add-on in AKS](https://learn.microsoft.com/azure/aks/app-routing?tabs=default%2Cdeploy-app-default).
 
-Run the following commands to create the AKS cluster instance.
+Run the following command to create the AKS cluster.
 
 ```shell
 $ az aks create \
diff --git a/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt
index 3af942c79b9..6d56823506c 100644
--- a/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt
+++ b/documentation/site/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt
@@ -61,21 +61,21 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
 
 3. Assign the AKS cluster **Contributor** role to access the storage account.
 
-    You must configure role assignment allowing access from AKS cluster to the storage account.
+    You must configure role assignment allowing access from the AKS cluster to the storage account.
 
-    Get `objectId` of the AKS cluster with the following command and save it with variable `AKS_OBJECT_ID`:
+    Get the `objectId` of the AKS cluster with the following command and save it with the variable `AKS_OBJECT_ID`:
 
     ```shell
     $ AKS_OBJECT_ID=$(az aks show --name ${AKS_CLUSTER_NAME} --resource-group ${AKS_PERS_RESOURCE_GROUP} --query "identity.principalId" -o tsv)
     ```
 
-    Get Id of the storage account with the following command:
+    Get the Id of the storage account with the following command:
 
     ```shell
     $ STORAGE_ACCOUNT_ID=$(az storage account show --name ${AKS_PERS_STORAGE_ACCOUNT_NAME} --resource-group ${AKS_PERS_RESOURCE_GROUP} --query "id" -o tsv)
     ```
 
-    Now, you are able to create a role assignment to grant the AKS cluster **Contributor** in the scope of the storage account. Then, the AKS cluster is able to access the file share.
+    Now, you are able to create a role assignment to grant the AKS cluster the **Contributor** role in the scope of the storage account. Then, the AKS cluster is able to access the file share.
 
     ```shell
     $ az role assignment create \
@@ -85,7 +85,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
       --scope "${STORAGE_ACCOUNT_ID}"
     ```
 
-    Successful output will be a JSON object with string like:
+    Successful output will be a JSON object like the following:
 
     ```json
     {
@@ -112,7 +112,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
 
 4. Configure network security.
 
-    You must configure the network security allowing access from AKS cluster to the file share.
+    You must configure network security allowing access from the AKS cluster to the file share.
 
     First, you must get the virtual network name and the subnet name of the AKS cluster.
 
@@ -149,7 +149,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
         --service-endpoints Microsoft.Storage
     ```
 
-    It takes several minutes to enable the service endpoint; successful output will be a JSON object with string like:
+    It takes several minutes to enable the service endpoint; successful output will be a JSON object like the following:
 
     ```text
     "serviceEndpoints": [
@@ -163,8 +163,8 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
     }
     ```
 
-    Now you must create a network rule to allow access from AKS cluster.
-    The following command enables access from AKS subnet to the storage account:
+    Now you must create a network rule to allow access from the AKS cluster.
+    The following command enables access from the AKS subnet to the storage account:
 
     ```shell
     $ az storage account network-rule add \
@@ -173,7 +173,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
       --subnet ${aksSubnetId}
     ```
 
-    Successful output will be a JSON object with virtual network rule like:
+    Successful output will be a JSON object with a virtual network rule like:
 
     ```text
     "virtualNetworkRules": [
@@ -188,7 +188,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha
 ##### Create SC and PVC
 
 ##### Generated configuration files
-Use the below command to generate configuration files.
+Use the following command to generate configuration files.
 
 ```shell
 cat >azure-csi-nfs-${TIMESTAMP}.yaml <}}
 
-A Model in Image image can contain multiple properties files, archive ZIP files, and YAML files but in this sample you use just one of each. For a complete description of Model in Images model file naming conventions, file loading order, and macro syntax, see [Model files]({{< relref "/managing-domains/model-in-image/model-files.md" >}}) files in the Model in Image user documentation.
+A Model in Image image can contain multiple properties files, archive ZIP files, and YAML files but in this sample you use just one of each. For a complete description of Model in Images model file naming conventions, file loading order, and macro syntax, see [Model files]({{< relref "/managing-domains/model-in-image/model-files.md" >}}) in the Model in Image user documentation.
 
 ##### Creating the image with WIT
 
@@ -241,6 +258,9 @@ $ docker tag wdt-domain-image:WLS-v1 $LOGIN_SERVER/mii-aks-auxiliary-image:1.0
 ```shell
 $ docker push $LOGIN_SERVER/mii-aks-auxiliary-image:1.0
 ```
+
+The output will show something similar to the following:
+
 ```
 The push refers to repository [contosorgresourcegroup1610068510.azurecr.io/mii-aks-auxiliary-image]
 1.0: digest: sha256:208217afe336053e4c524caeea1a415ccc9cc73b206ee58175d0acc5a3eeddd9 size: 2415
@@ -295,6 +315,9 @@ $ $BASE_DIR/sample-scripts/create-kubernetes-secrets/create-docker-credentials-s
   -p ${ORACLE_SSO_PASSWORD} \
   -u ${ORACLE_SSO_EMAIL}
 ```
+
+The output will show something similar to the following:
+
 ```
 secret/wlsregcred created
 The secret wlsregcred has been successfully created in the sample-domain1-ns namespace.
@@ -376,7 +399,7 @@ wlsregcred                                 kubernetes.io/dockerconfigjson   1
 
 Now, you create a domain YAML file. Think of the domain YAML file as the way to configure some aspects of your WebLogic domain using Kubernetes.  The operator uses the Kubernetes "custom resource" feature to define a Kubernetes resource type called `Domain`.  For more on the `Domain` Kubernetes resource, see [Domain Resource]({{< relref "/managing-domains/domain-resource" >}}). For more on custom resources see [the Kubernetes documentation](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
 
-We provide a script at `$BASE_DIR/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-mii-generate-yaml.sh` to generate domain resource description.
+We provide a script at `$BASE_DIR/sample-scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-mii-generate-yaml.sh` to generate a domain resource description.
 
 Run the following command to generate resource files.
 
@@ -453,9 +476,9 @@ If the system does not reach this state, troubleshoot and resolve the problem be
 
 ##### Create Azure load balancer
 
-Create the Azure public standard load balancer to access the WebLogic Server Administration Console and applications deployed in the cluster.
+Create an Azure public standard load balancer to access the WebLogic Server Administration Console and applications deployed to the cluster.
 
-Use the configuration file in `admin-lb.yaml` to create a load balancer service for the Administration Server. If you are choosing not to use the predefined YAML file and instead created a new one with customized values, then substitute the following content with you domain values.
+Use the file `admin-lb.yaml` to create a load balancer service for the Administration Server. If you are choosing not to use the predefined YAML file and instead created a new one with customized values, then substitute the following content with your domain values.
 
 {{%expand "Click here to view YAML content." %}}
 ```yaml
@@ -478,7 +501,7 @@ spec:
 ```
 {{% /expand %}}
 
-Use the configuration file in `cluster-lb.yaml` to create a load balancer service for the managed servers. If you are choosing not to use the predefined YAML file and instead created new one with customized values, then substitute the following content with you domain values.
+Use the file `cluster-lb.yaml` to create a load balancer service for the managed servers. If you are choosing not to use the predefined YAML file and instead created new one with customized values, then substitute the following content with your domain values.
 
 {{%expand "Click here to view YAML content." %}}
 ```yaml
@@ -502,17 +525,24 @@ spec:
 ```
 {{% /expand %}}
 
-Create the load balancer services using the following command:
+Create the load balancer services using the following commands:
 
 ```shell
 $ kubectl apply -f admin-lb.yaml
 ```
+
+Successful output will look like:
+
 ```
 service/sample-domain1-admin-server-external-lb created
 ```
+
 ```shell
 $ kubectl  apply -f cluster-lb.yaml
 ```
+
+Successful output will look like:
+
 ```
 service/sample-domain1-cluster-1-external-lb created
 ```
@@ -522,6 +552,9 @@ Get the external IP addresses of the Administration Server and cluster load bala
 ```shell
 $ kubectl get svc -n sample-domain1-ns --watch
 ```
+
+Successful output will look like:
+
 ```
 NAME                                      TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE
 sample-domain1-admin-server               ClusterIP      None                      7001/TCP         8m33s
@@ -545,7 +578,7 @@ $ kubectl describe domain domain1
 
 Make sure the status of cluster-1 is `ServersReady` and `Available`.
 
-{{%expand "Click here to view the example domain status." %}}
+{{%expand "Click here to view example domain status." %}}
 ```yaml
 Name:         sample-domain1
 Namespace:    sample-domain1-ns
@@ -689,6 +722,8 @@ $ CLUSTER_IP=$(kubectl -n sample-domain1-ns get svc sample-domain1-cluster-1-lb
 $ curl http://${CLUSTER_IP}:8001/myapp_war/index.jsp
 ```
 
+Successful output will look like:
+
 ```
 
 *****************************************************************
diff --git a/documentation/site/static/images/aks-solution.png b/documentation/site/static/images/aks-solution.png
new file mode 100644
index 00000000000..77455ab3a6e
Binary files /dev/null and b/documentation/site/static/images/aks-solution.png differ
diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.sh
index 5aebf3a7350..43832519789 100644
--- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.sh
+++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.sh
@@ -4,38 +4,10 @@
 # The version of this inputs file. Do not modify.
 export version=create-domain-on-aks-inputs-v1
 
-#
-# Parameters that must be changed from these values!
-#
-
-# Oracle Single Sign-On (SSO) account email, used to pull the WebLogic Server image.
-export dockerEmail=docker-email
-
-# Oracle SSO account password, used to pull the WebLogic Server image.
-export dockerPassword=docker-password
-
-# Name of weblogic user account.
-export weblogicUserName=weblogic
-
-# Password for WebLogic user account.
-export weblogicAccountPassword=Secret123456
-
-# Specify where to create azure resource.
-export azureLocation=eastus
-
-# Specify a prefix to name resources, only allow lowercase letters and numbers, between 1 and 7 characters.
-# Resource group is named with ${namePrefix}resourcegroup, e.g. wlsresourcegroup1592469388
-# Kubernetes cluster is named with ${namePrefix}akscluster, e.g. wlsakscluster1592469388
-# Storage account is named with ${namePrefix}storage, e.g. wlsstorage1592469388
-export namePrefix=wls
-
 #
 # Parameters that may optionally be changed.
 #
 
-# The suffix of file share secret name, the complete value is ${namePrefix}${azureFileShareSecretNameSuffix}.
-export azureFileShareSecretNameSuffix=azure-secret
-
 # Number of azure kubernetes nodes, used to create azure kubernetes cluster.
 export azureKubernetesNodeCount=2
 
@@ -48,17 +20,6 @@ export azureKubernetesNodepoolNamePrefix=pool1
 #Java Option for WebLogic Server
 export javaOptions="-Dweblogic.StdoutDebugEnabled=false -XX:InitialRAMPercentage=25.0 -XX:MaxRAMPercentage=50.0"
 
-# The suffix of the Kubernetes secret name, the complete value is ${namePrefix}${imagePullSecretNameSuffix}. The secret name is used to access the container registry to pull the WebLogic Server image
-# Used to create Kubernetes secret for container registry account.
-# Parameter "imagePullSecretName" will be overwritten with this field in kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain-inputs.yaml
-export imagePullSecretNameSuffix=regcred
-
-# Storage class name for Azure Files using Container Storage Interface driver, see https://docs.microsoft.com/en-us/azure/aks/azure-files-csi#nfs-file-shares
-export azureFileCsiNfsClassName=azurefile-csi-nfs
-
-# The suffix of azure storage file share name, the complete value is ${namePrefix}-${azureStorageShareNameSuffix}-, used to create file share, and mount file share. 
-export azureStorageShareNameSuffix=weblogic
-
 # Resource request for each server pod (Memory and CPU). This is minimum amount of compute
 # resources required for each server pod. Edit value(s) below as per pod sizing requirements.
 # These are optional 
@@ -77,10 +38,6 @@ export serverPodCpuRequest="250m"
 export serverPodMemoryLimit="1.5Gi"
 export serverPodCpuLimit="250m"
 
-# The suffix of the persistent volume claim name, the complete value is ${namePrefix}-${persistentVolumeClaimNameSuffix}-.
-# Parameter "persistentVolumeClaimName" will be overwritten with this field in kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain-inputs.yaml
-export persistentVolumeClaimNameSuffix=azurefile
-
 # WebLogic Server image.
 # Parameter "image" will be overwritten with this field in kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain-inputs.yaml
 # **NOTE**:
diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh
index 0a19b37bb63..d6e8f07c4ef 100755
--- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh
+++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh
@@ -29,6 +29,7 @@ scriptDir="$(cd "$(dirname "${script}")" && pwd)"
 #Kubernetes command line interface.
 #Default is 'kubectl' if KUBERNETES_CLI env variable is not set.
 kubernetesCli=${KUBERNETES_CLI:-kubectl}
+azureResourceUID=${TIMESTAMP}
 
 if [ -z "${azureResourceUID}" ]; then
   azureResourceUID=$(date +%s)
@@ -46,30 +47,42 @@ fail() {
 BLUE="\033[34m"
 RED="\033[31m"
 RESET="\033[0m"
+YELLOW="\033[33m"
+GREEN="\033[32m"
 
 # Function: Print colored message
 print_message() {
-    local contenxt="$1"
-    local color="$2"
+  local contenxt="$1"
+  local color="$2"
 
-    echo -e "${color} ${contenxt}${RESET}"
+  echo -e "${color} ${contenxt}${RESET}"
 }
 
 print_blue() {
-    local contenxt="$1"
-    echo -e "${BLUE} ${contenxt}${RESET}"
+  local contenxt="$1"
+  echo -e "${BLUE} ${contenxt}${RESET}"
 }
 
 print_red() {
-    local contenxt="$1"
-    echo -e "${RED} ${contenxt}${RESET}"
+  local contenxt="$1"
+  echo -e "${RED} ${contenxt}${RESET}"
+}
+
+print_yellow() {
+  local contenxt="$1"
+  echo -e "${YELLOW} ${contenxt}${RESET}"
+}
+
+print_green() {
+  local contenxt="$1"
+  echo -e "${GREEN} ${contenxt}${RESET}"
 }
 
 steps=0
-total_steps=11
+total_steps=12
 print_step() {
-    ((steps++))
-    print_blue "Progress $steps/$total_steps.......... $1"
+  ((steps++))
+  print_blue "Progress $steps/$total_steps.......... $1"
 }
 #
 # Function to validate the host environment meets the prerequisites.
@@ -89,102 +102,222 @@ envValidate() {
 
   # "Checking if Java is installed..."
   if type -p java; then
-      print_blue "Java JDK is installed. Version:"
-      java -version
+    print_blue "Java JDK is installed. Version:"
+    java -version
   else
-      print_red "[ERROR]Java JDK is not installed. Please install Java JDK."
-      exit 1
+    print_red "[ERROR]Java JDK is not installed. Please install Java JDK."
+    exit 1
   fi
 
   # Check if Docker is installed
-  if command -v docker &> /dev/null; then
-      echo "Docker is installed."
+  if command -v docker &>/dev/null; then
+    echo "Docker is installed."
   else
-      print_red "[ERROR]Docker is not installed. Please install Docker."
-      exit 1
+    print_red "[ERROR]Docker is not installed. Please install Docker."
+    exit 1
   fi
 
   # Check if Helm is installed
-  if command -v helm &> /dev/null; then
-      print_blue "Helm is installed."
+  if command -v helm &>/dev/null; then
+    print_blue "Helm is installed."
   else
-      print_red "[ERROR]Helm is not installed. Please install Helm."
-      exit 1
+    print_red "[ERROR]Helm is not installed. Please install Helm."
+    exit 1
   fi
 
   # Check if kubectl is installed
-  if command -v ${kubernetesCli} &> /dev/null; then
-      print_blue "${kubernetesCli} is installed."
+  if command -v ${kubernetesCli} &>/dev/null; then
+    print_blue "${kubernetesCli} is installed."
   else
-      print_red "[ERROR]${kubernetesCli} is not installed. Please install ${kubernetesCli}."
-      exit 1
+    print_red "[ERROR]${kubernetesCli} is not installed. Please install ${kubernetesCli}."
+    exit 1
   fi
 
   echo "Checking host environment passed."
 }
 
+#
+# Function to prompt the user for input
+# $1 - parameter name
+# $2 - parameter type
+# $3 - parameter length
+# $4 - default value
+inputParameter() {
+  local paramName="$1"
+  local parmType="$2"
+  local length="$3"
+  local defaultValue="$4"
+
+  print_yellow "Please provide a value for ${paramName}."
+  read -p "Enter ${parmType}: " input_string
+
+  if [ -z "${input_string}" ]; then
+    input_string=${defaultValue}
+  fi
+
+  if [[ "$input_string" =~ ^[A-Za-z0-9]+$ ]] && [[ ${#input_string} -le ${length} ]]; then
+    export inputValue=$input_string
+  else
+    echo "Invalid input. Please enter a valid value for ${paramName}."
+    exit 1
+  fi
+}
+
+#
+# Function to prompt the user for password input
+# $1 - parameter name
+inputPassword() {
+  local paramName="$1"
+
+  print_yellow "Please provide a value for ${paramName}."
+  read -sp "Please enter password: " password
+  echo
+  read -sp "Please confirm your password: " password_confirm
+  echo
+
+  # Check if the passwords match
+  if [ "$password" == "$password_confirm" ]; then
+    echo "Password is set successfully."
+    export inputValue=$password
+  else
+    echo "Passwords do not match. Please try again."
+    exit 1
+  fi
+}
+
+#
+# Function to prompt the user for email input
+# $1 - parameter name
+inputEmail() {
+  local paramName="$1"
+
+  print_yellow "Please provide a value for ${paramName}."
+  read -p "Enter Email: " input_string
+
+  if [ -n "${input_string}" ]; then
+    export inputValue=$input_string
+  else
+    echo "Invalid input. Please enter a valid value for ${paramName}."
+    exit 1
+  fi
+}
+
+#
+# Function to print the parameters
+#
+print_parameters() {
+  print_green "image_build_branch_name=${image_build_branch_name}"
+  print_green "image_build_base_dir=${image_build_base_dir}"
+  print_green "dockerEmail=${dockerEmail}"
+  print_green "weblogicUserName=${weblogicUserName}"
+
+  print_green "namePrefix=${namePrefix}"
+  print_green "azureLocation=${azureLocation}"
+  print_green "azureResourceGroupName=${azureResourceGroupName}"
+  print_green "aksClusterName=${aksClusterName}"
+  print_green "storageAccountName=${storageAccountName}"
+  print_green "acrName=${acrName}"
+  print_green "azureKubernetesNodepoolName=${azureKubernetesNodepoolName}"
+  print_green "azureStorageShareName=${azureStorageShareName}"
+  print_green "oracleSsoK8sSecretName=${oracleSsoK8sSecretName}"
+  print_green "domainUID=${domainUID}"
+  print_green "sampleScriptsDir=${sampleScriptsDir}"
+}
+
 parametersValidate() {
   print_step "validating parameters"
 
-  # Get the values of environment variables
-  email="$dockerEmail"
-  password="$dockerPassword"
-
-  while getopts "u:p:" option; do
-      case "${option}" in
-          u)
-              email=${OPTARG}
-              ;;
-          p)
-              password=${OPTARG}
-              ;;
-      esac
-  done
+  local stringFormatLength5="string contains both letters and numbers, between 1 and 5 characters"
+  local stringFormatLength12="string contains both letters and numbers, between 1 and 12 characters"
+  local stringFormatLength20="string contains both letters and numbers, between 1 and 20 characters"
 
-  # Check for default values and prompt for setting
-  if [ "$email" = "docker-email" ]; then
-    echo -n "Please enter a value for 'dockerEmail'(Oracle Single Sign-On (SSO) account email): "
-    read input_email
-    if [ -z "$input_email" ]; then
-      echo "No value provided for 'dockerEmail'. Please set the value and rerun the script."
-      exit 1
-    fi
-    email="$input_email"
+  if [ -z "${namePrefix}" ]; then
+    inputParameter "a prefix to name resources" "${stringFormatLength5} [default=wls]" 5 "wls"
+    export namePrefix=$inputValue
   fi
 
-  if [ "$password" = "docker-password" ]; then
-    echo -n "Please enter a value for 'dockerPassword'(Oracle Single Sign-On (SSO) account password): "
-    read -s input_password
-    echo
-    if [ -z "$input_password" ]; then
-      echo "No value provided for 'dockerPassword'. Please set the value and rerun the script."
-      exit 1
-    fi
-    password="$input_password"
+  if [ -z "${azureLocation}" ]; then
+    inputParameter "Azure location" "Azure location [default=eastus]" 12 "eastus"
+    export azureLocation=$inputValue
+  fi
+
+  if [ -z "${acrName}" ]; then
+    inputParameter "Azure Container Registry name" "${stringFormatLength20} [default=${namePrefix}acr${azureResourceUID}]" 20 "${namePrefix}acr${azureResourceUID}"
+    export acrName=$inputValue
+  fi
+
+  if [ -z "${oracleSsoK8sSecretName}" ]; then
+    inputParameter "the Kubernetes secret name associated with the Oracle SSO account." "${stringFormatLength12} [default=${namePrefix}regcred]" 12 "${namePrefix}regcred"
+    export oracleSsoK8sSecretName=$inputValue
+  fi
+
+  if [ -z "${azureResourceGroupName}" ]; then
+    inputParameter "resource group name" "${stringFormatLength20} [default=${namePrefix}rg${azureResourceUID}]" 20 "${namePrefix}rg${azureResourceUID}"
+    export azureResourceGroupName=$inputValue
+  fi
+
+  if [ -z "${aksClusterName}" ]; then
+    inputParameter "Azure Kubernetes Service name" "${stringFormatLength20} [default=${namePrefix}aks${azureResourceUID}]" 20 "${namePrefix}aks${azureResourceUID}"
+    export aksClusterName=$inputValue
   fi
 
-  # Export the updated values of environment variables
-  export dockerEmail="$email"
-  export dockerPassword="$password"
+  if [ -z "${storageAccountName}" ]; then
+    inputParameter "Azure Storage Account name" "${stringFormatLength20} [default=${namePrefix}stg${azureResourceUID}]" 20 "${namePrefix}stg${azureResourceUID}"
+    export storageAccountName=$inputValue
+  fi
+
+  if [ -z "${azureStorageShareName}" ]; then
+    inputParameter "Azure Storage File Share name" "${stringFormatLength20} [default=${namePrefix}${azureResourceUID}]" 20 "${namePrefix}${azureResourceUID}"
+    export azureStorageShareName=$inputValue
+  fi
+
+  if [ -z "${domainUID}" ]; then
+    inputParameter "WebLogic Domain UID" "${stringFormatLength12} [default=domain1]" 12 "domain1"
+    export domainUID=$inputValue
+  fi
+
+  if [ -z "${dockerEmail}" ]; then
+    inputEmail "Oracle Single Sign-On (SSO) account email"
+    export dockerEmail=$inputValue
+  fi
+
+  if [ -z "${dockerPassword}" ]; then
+    inputPassword "Oracle Single Sign-On (SSO) account password"
+    export dockerPassword=$inputValue
+  fi
+
+  if [ -z "${weblogicUserName}" ]; then
+    inputParameter "Name of weblogic user account" "${stringFormatLength12} [default=weblogic]" 12 "weblogic"
+    export weblogicUserName=$inputValue
+  fi
+
+  if [ -z "${weblogicAccountPassword}" ]; then
+    inputPassword "Password of weblogic user account"
+    export weblogicAccountPassword=$inputValue
+  fi  
 
+  ssoAccountValidate
 
+  print_parameters
+}
+
+ssoAccountValidate() {
+  print_step "Validate Oracle SSO Account. Make sure docker is running."
   # Attempt to login to Docker
   sudo chmod 666 /var/run/docker.sock
-  docker login container-registry.oracle.com -u "$dockerEmail" -p "$dockerPassword" > /dev/null 2>&1
+  docker login container-registry.oracle.com -u "$dockerEmail" -p "$dockerPassword" >/dev/null 2>&1
 
   # Check the login result
   if [ $? -eq 0 ]; then
     echo "Oracle Single Sign-On (SSO) account Username and password are correct"
     # Logout from Docker
-    docker logout > /dev/null 2>&1
+    docker logout >/dev/null 2>&1
   else
     print_red "[ERROR]Invalid Oracle Single Sign-On (SSO) account username or password."
     exit 1
   fi
-
 }
 
-
 #
 # Function to setup the environment to run the create Azure resource and domain job
 #
@@ -196,36 +329,34 @@ initialize() {
 
   source ./create-domain-on-aks-inputs.sh
   source ~/.bashrc
-  
+
   # Generate Azure resource name
 
-  export image_build_branch_name="v4.2.5"
+  export image_build_branch_name="v4.2.8"
   export image_build_base_dir="/tmp/tmp${azureResourceUID}"
 
-  export acr_account_name=${namePrefix}acr${azureResourceUID}
-  export docker_secret_name="${namePrefix}regcred"
+  export dockerEmail=${ORACLE_SSO_EMAIL}
+  export dockerPassword=${ORACLE_SSO_PASSWORD}
+  export weblogicUserName=${WEBLOGIC_USERNAME}
+  export weblogicAccountPassword=${WEBLOGIC_PASSWORD}
 
-  export azureResourceGroupName="${namePrefix}resourcegroup${azureResourceUID}"
-  export aksClusterName="${namePrefix}akscluster${azureResourceUID}"
-  export storageAccountName="${namePrefix}storage${azureResourceUID}"
+  export namePrefix=${NAME_PREFIX}
+  export azureLocation=${AKS_PERS_LOCATION}
+  export acrName=${ACR_NAME}
+  export oracleSsoK8sSecretName="${SECRET_NAME_DOCKER}"
 
-  export azureKubernetesNodepoolName="${azureKubernetesNodepoolNamePrefix}${namePrefix}"
-  export azureStorageShareName="${namePrefix}-${azureStorageShareNameSuffix}-${azureResourceUID}"
-  export domainUID="domain1"
+  export azureResourceGroupName="${AKS_PERS_RESOURCE_GROUP}"
+  export aksClusterName="${AKS_CLUSTER_NAME}"
+  export storageAccountName="${AKS_PERS_STORAGE_ACCOUNT_NAME}"
 
+  export azureKubernetesNodepoolName="${azureKubernetesNodepoolNamePrefix}${namePrefix}"
+  export azureStorageShareName="${AKS_PERS_SHARE_NAME}"
+  export domainUID="${domainUID}"
+  export sampleScriptsDir=${BASE_DIR}/sample-scripts
 
-  echo "image_build_branch_name=${image_build_branch_name}"
-  echo "aksClusterName=${aksClusterName}"
-  echo "storageAccountName=${storageAccountName}"
-
-  echo "azureResourceGroupName=${azureResourceGroupName}"
-  echo "image_build_base_dir=${image_build_base_dir}"
-  echo "acr_account_name=${acr_account_name}"
-
-  
+  print_parameters  
 }
 
-
 createResourceGroup() {
   print_step "createing resourcegroup"
 
@@ -271,24 +402,24 @@ createAndConnectToAKSCluster() {
   retry_count=0
 
   while true; do
-      # Execute create AKS command
-      $create_command
-
-      # Check exit status
-      if [ $? -eq 0 ]; then
-          echo "AKS creation successful"
-          break
+    # Execute create AKS command
+    $create_command
+
+    # Check exit status
+    if [ $? -eq 0 ]; then
+      echo "AKS creation successful"
+      break
+    else
+      retry_count=$((retry_count + 1))
+      if [ $retry_count -le $max_retries ]; then
+        echo "AKS creation failed. Retrying attempt $retry_count..."
+        # Delete previously created AKS
+        az aks delete --resource-group $azureResourceGroupName --name $aksClusterName --yes --no-wait
       else
-          retry_count=$((retry_count+1))
-          if [ $retry_count -le $max_retries ]; then
-              echo "AKS creation failed. Retrying attempt $retry_count..."
-              # Delete previously created AKS
-              az aks delete --resource-group $azureResourceGroupName --name $aksClusterName --yes --no-wait
-          else
-              echo "Maximum retry limit reached. Unable to create AKS"
-              exit 1
-          fi
+        echo "Maximum retry limit reached. Unable to create AKS"
+        exit 1
       fi
+    fi
   done
 
   # Connect to AKS cluster
@@ -310,28 +441,28 @@ createFileShare() {
 
   echo Creating Azure Storage Account ${storageAccountName}.
   az storage account create \
-  -n $storageAccountName \
-  -g $azureResourceGroupName \
-  -l $azureLocation \
-  --sku Premium_LRS \
-  --kind FileStorage \
-  --https-only false \
-  --default-action Deny
+    -n $storageAccountName \
+    -g $azureResourceGroupName \
+    -l $azureLocation \
+    --sku Premium_LRS \
+    --kind FileStorage \
+    --https-only false \
+    --default-action Deny
 
   echo Creating Azure NFS file share.
   az storage share-rm create \
-  --resource-group $azureResourceGroupName \
-  --storage-account $storageAccountName \
-  --name ${azureStorageShareName} \
-  --enabled-protocol NFS \
-  --root-squash NoRootSquash \
-  --quota 100
+    --resource-group $azureResourceGroupName \
+    --storage-account $storageAccountName \
+    --name ${azureStorageShareName} \
+    --enabled-protocol NFS \
+    --root-squash NoRootSquash \
+    --quota 100
 
   configureStorageAccountNetwork
 
   # Echo storage account name and key
   echo Storage account name: $storageAccountName
-  echo NFS file share name: ${azureStorageShareName}  
+  echo NFS file share name: ${azureStorageShareName}
 
 }
 
@@ -340,10 +471,10 @@ configureStorageAccountNetwork() {
   local storageAccountId=$(az storage account show --name ${storageAccountName} --resource-group ${azureResourceGroupName} --query "id" -o tsv)
 
   az role assignment create \
-      --assignee-object-id "${aksObjectId}" \
-      --assignee-principal-type "ServicePrincipal" \
-      --role "Contributor" \
-      --scope "${storageAccountId}"
+    --assignee-object-id "${aksObjectId}" \
+    --assignee-principal-type "ServicePrincipal" \
+    --role "Contributor" \
+    --scope "${storageAccountId}"
 
   if [ $? != 0 ]; then
     fail "Failed to grant the AKS cluster with Contibutor role to access the storage account."
@@ -357,7 +488,7 @@ configureStorageAccountNetwork() {
   local aksNetworkName=$(az graph query -q "Resources \
     | where type =~ 'Microsoft.Network/virtualNetworks' \
     | where resourceGroup  =~ '${aksMCRGName}' \
-    | project name = name" --query "data[0].name"  -o tsv)
+    | project name = name" --query "data[0].name" -o tsv)
 
   echo "aksNetworkName="${aksNetworkName}
 
@@ -402,14 +533,11 @@ createWebLogicDomain() {
   echo Creating WebLogic Server domain ${domainUID}
 
   # create credentials
-  cd ${image_build_base_dir}
-  cd weblogic-kubernetes-operator/kubernetes/samples/scripts/create-weblogic-domain-credentials
+  cd ${sampleScriptsDir}/create-weblogic-domain-credentials
   ./create-weblogic-credentials.sh -u ${weblogicUserName} -p ${weblogicAccountPassword} -d ${domainUID}
 
-  cd ${image_build_base_dir}
-  cd weblogic-kubernetes-operator/kubernetes/samples/scripts/create-kubernetes-secrets
-
-  ./create-docker-credentials-secret.sh -s ${docker_secret_name} -e ${dockerEmail} -p ${dockerPassword} -u ${dockerEmail}
+  cd ${sampleScriptsDir}/create-kubernetes-secrets
+  ./create-docker-credentials-secret.sh -s ${oracleSsoK8sSecretName} -e ${dockerEmail} -p ${dockerPassword} -u ${dockerEmail}
 
   # generate yaml
   generateYamls
@@ -426,9 +554,9 @@ createWebLogicDomain() {
 }
 
 generateYamls() {
-  
-echo "generating yamls..."
-cat >azure-csi-nfs.yaml <azure-csi-nfs.yaml <pvc.yaml <pvc.yaml <domain-resource.yaml <domain-resource.yaml <admin-lb.yaml <admin-lb.yaml <cluster-lb.yaml <cluster-lb.yaml <