diff --git a/OracleSOASuite/kubernetes/README.md b/OracleSOASuite/kubernetes/README.md index 6fa1f89cb..b197efecb 100644 --- a/OracleSOASuite/kubernetes/README.md +++ b/OracleSOASuite/kubernetes/README.md @@ -7,7 +7,7 @@ The WebLogic Kubernetes operator (the “operator”) supports deployment of Ora * `soaosb`: Deploys a domain with SOA, Oracle Enterprise Scheduler (ESS), and Oracle Service Bus *** -The current supported production release is [21.2.2](https://github.com/oracle/fmw-kubernetes/releases). +The current supported production release is [21.3.2](https://github.com/oracle/fmw-kubernetes/releases). *** In this release, Oracle SOA Suite domains are supported using the “domain on a persistent volume” diff --git a/docs-source/content/soa-domains/_index.md b/docs-source/content/soa-domains/_index.md index 96ae4ed15..aae9fd294 100644 --- a/docs-source/content/soa-domains/_index.md +++ b/docs-source/content/soa-domains/_index.md @@ -1,11 +1,11 @@ --- title: "Oracle SOA Suite" date: 2019-02-23T16:43:45-05:00 -description: "The Oracle WebLogic Kubernetes operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Follow the instructions in this guide to set up these Oracle SOA Suite domains on Kubernetes." +description: "The Oracle WebLogic Kubernetes Operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Follow the instructions in this guide to set up these Oracle SOA Suite domains on Kubernetes." weight: 3 --- -The WebLogic Kubernetes operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Currently the operator supports these domain types: +The WebLogic Kubernetes Operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Currently the operator supports these domain types: * `soa` : Deploys a SOA domain with Oracle Enterprise Scheduler (ESS) * `osb` : Deploys an Oracle Service Bus domain @@ -25,7 +25,7 @@ The operator has several key features to assist you with deploying and managing #### Current production release -The current production release for the Oracle SOA Suite domains deployment on Kubernetes is [21.2.2](https://github.com/oracle/fmw-kubernetes/releases). This release uses the WebLogic Kubernetes operator version [3.2.1](https://github.com/oracle/weblogic-kubernetes-operator/releases/tag/v3.2.1). +The current production release for the Oracle SOA Suite domains deployment on Kubernetes is [21.3.2](https://github.com/oracle/fmw-kubernetes/releases). This release uses the WebLogic Kubernetes Operator version [3.2.1](https://github.com/oracle/weblogic-kubernetes-operator/releases/tag/v3.2.1). #### Recent changes and known issues @@ -58,13 +58,14 @@ please consult this table of contents: To view documentation for an earlier release, see: +* [Version 21.2.2](https://oracle.github.io/fmw-kubernetes/21.2.2/soa-domains/) * [Version 21.1.2](https://oracle.github.io/fmw-kubernetes/21.1.2/soa-domains/) * [Version 20.4.2](https://oracle.github.io/fmw-kubernetes/20.4.2/soa-domains/) * [Version 20.3.3](https://oracle.github.io/fmw-kubernetes/20.3.3/soa-domains/) #### Additional reading -Oracle SOA Suite domains deployment on Kubernetes leverages the WebLogic Kubernetes operator framework. +Oracle SOA Suite domains deployment on Kubernetes leverages the WebLogic Kubernetes Operator framework. * To develop an understanding of the operator, including design, architecture, domain life cycle management, and configuration overrides, review the [operator documentation](https://oracle.github.io/weblogic-kubernetes-operator). * To learn more about the Oracle SOA Suite architecture and components, see [Understanding Oracle SOA Suite](https://docs.oracle.com/en/middleware/soa-suite/soa/12.2.1.4/develop/introduction-building-applications.html#GUID-AED865D0-2FFF-4243-B8C5-473F8572D6F0). * To review the known issues and common questions for Oracle SOA Suite domains deployment on Kubernetes, see the [frequently asked questions]({{< relref "/soa-domains/faq.md" >}}). diff --git a/docs-source/content/soa-domains/adminguide/configure-load-balancer/_index.md b/docs-source/content/soa-domains/adminguide/configure-load-balancer/_index.md index 03d99729b..ab038eeff 100644 --- a/docs-source/content/soa-domains/adminguide/configure-load-balancer/_index.md +++ b/docs-source/content/soa-domains/adminguide/configure-load-balancer/_index.md @@ -7,6 +7,6 @@ pre: " " description: "Configure different load balancers for Oracle SOA Suite domains." --- -The WebLogic Kubernetes operator supports ingress-based load balancers such as Traefik, NGINX (kubernetes/ingress-nginx), and Voyager. It also supports Apache web tier load balancer. +The WebLogic Kubernetes Operator supports ingress-based load balancers such as Traefik, NGINX (kubernetes/ingress-nginx), and Voyager. It also supports Apache web tier load balancer. {{% children style="h4" description="true" %}} diff --git a/docs-source/content/soa-domains/adminguide/configure-load-balancer/apache.md b/docs-source/content/soa-domains/adminguide/configure-load-balancer/apache.md index 938cf4d5e..80dea30a9 100644 --- a/docs-source/content/soa-domains/adminguide/configure-load-balancer/apache.md +++ b/docs-source/content/soa-domains/adminguide/configure-load-balancer/apache.md @@ -20,7 +20,7 @@ Follow these steps to set up the Apache web tier as a load balancer for an Oracl #### Build the Apache web tier image -Refer to the [sample](https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/12213-webtier-apache), to build the Apache web tier Docker image. +Refer to the [sample](https://github.com/oracle/docker-images/tree/main/OracleWebLogic/samples/12213-webtier-apache), to build the Apache web tier Docker image. #### Create the Apache plugin configuration file diff --git a/docs-source/content/soa-domains/adminguide/configure-load-balancer/nginx.md b/docs-source/content/soa-domains/adminguide/configure-load-balancer/nginx.md index 98432f124..2445cc780 100644 --- a/docs-source/content/soa-domains/adminguide/configure-load-balancer/nginx.md +++ b/docs-source/content/soa-domains/adminguide/configure-load-balancer/nginx.md @@ -184,7 +184,7 @@ Follow these steps to set up NGINX as a load balancer for an Oracle SOA Suite do 1. Create an ingress for the domain in the domain namespace by using the sample Helm chart. Here path-based routing is used for ingress. Sample values for default configuration are shown in the file `${WORKDIR}/charts/ingress-per-domain/values.yaml`. By default, `type` is `TRAEFIK` , `sslType` is `NONSSL`, and `domainType` is `soa`. These values can be overridden by passing values through the command line or can be edited in the sample file `values.yaml`. If needed, you can update the ingress YAML file to define more path rules (in section `spec.rules.host.http.paths`) based on the domain application URLs that need to be accessed. Update the template YAML file for the NGINX load balancer located at `${WORKDIR}/charts/ingress-per-domain/templates/nginx-ingress.yaml`. - > Note: See [here](https://github.com/oracle/fmw-kubernetes/blob/v21.2.2/OracleSOASuite/kubernetes/ingress-per-domain/README.md#configuration) for all the configuration parameters. + > Note: See [here](https://github.com/oracle/fmw-kubernetes/blob/v21.3.2/OracleSOASuite/kubernetes/ingress-per-domain/README.md#configuration) for all the configuration parameters. ```bash $ cd ${WORKDIR} diff --git a/docs-source/content/soa-domains/adminguide/configure-load-balancer/traefik.md b/docs-source/content/soa-domains/adminguide/configure-load-balancer/traefik.md index 3a64bc501..8ab0dc07c 100644 --- a/docs-source/content/soa-domains/adminguide/configure-load-balancer/traefik.md +++ b/docs-source/content/soa-domains/adminguide/configure-load-balancer/traefik.md @@ -157,7 +157,7 @@ Sample values for default configuration are shown in the file `${WORKDIR}/charts By default, `type` is `TRAEFIK`, `sslType` is `NONSSL`, and `domainType` is `soa`. These values can be overridden by passing values through the command line or can be edited in the sample file `values.yaml` based on the type of configuration (NONSSL, SSL, and E2ESSL). If needed, you can update the ingress YAML file to define more path rules (in section `spec.rules.host.http.paths`) based on the domain application URLs that need to be accessed. The template YAML file for the Traefik (ingress-based) load balancer is located at `${WORKDIR}/charts/ingress-per-domain/templates/traefik-ingress.yaml`. -> Note: See [here](https://github.com/oracle/fmw-kubernetes/blob/v21.2.2/OracleSOASuite/kubernetes/ingress-per-domain/README.md#configuration) for all the configuration parameters. +> Note: See [here](https://github.com/oracle/fmw-kubernetes/blob/v21.3.2/OracleSOASuite/kubernetes/ingress-per-domain/README.md#configuration) for all the configuration parameters. 1. Install `ingress-per-domain` using Helm for `NONSSL` configuration: diff --git a/docs-source/content/soa-domains/adminguide/configure-load-balancer/voyager.md b/docs-source/content/soa-domains/adminguide/configure-load-balancer/voyager.md index 8d2afc63b..7726b0fa4 100644 --- a/docs-source/content/soa-domains/adminguide/configure-load-balancer/voyager.md +++ b/docs-source/content/soa-domains/adminguide/configure-load-balancer/voyager.md @@ -96,7 +96,7 @@ Follow these steps to set up Voyager as a load balancer for an Oracle SOA Suite 1. Create an ingress for the domain in the domain namespace by using the sample Helm chart. Here path-based routing is used for ingress. Sample values for default configuration are shown in the file `${WORKDIR}/charts/ingress-per-domain/values.yaml`. By default, `type` is `TRAEFIK` , `sslType` is `NONSSL`, and `domainType` is `soa`. These values can be overridden by passing values through the command line or can be edited on the sample file `values.yaml`. - > Note: See [here](https://github.com/oracle/fmw-kubernetes/blob/v21.2.2/OracleSOASuite/kubernetes/ingress-per-domain/README.md#configuration) for all the configuration parameters. + > Note: See [here](https://github.com/oracle/fmw-kubernetes/blob/v21.3.2/OracleSOASuite/kubernetes/ingress-per-domain/README.md#configuration) for all the configuration parameters. If needed, you can update the ingress yaml file to define more path rules (in the `spec.rules.host.http.paths` section) based on the domain application URLs that need to be accessed. You need to update the template yaml file for the Voyager (ingress-based) load balancer located at `${WORKDIR}/charts/ingress-per-domain/templates/voyager-ingress.yaml` diff --git a/docs-source/content/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant.md b/docs-source/content/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant.md index 15fb12d7d..5634d549f 100644 --- a/docs-source/content/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant.md +++ b/docs-source/content/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant.md @@ -7,7 +7,7 @@ pre : "b. " description: "Deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite deployment." --- -Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite in WebLogic Kubernetes operator environment. +Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite in WebLogic Kubernetes Operator environment. Before deploying composite applications, we need to create a Kubernetes pod in the same cluster where the Oracle SOA Suite domain is running, so that composite applications can be deployed using the internal Kubernetes Service for the Administration Server URL. diff --git a/docs-source/content/soa-domains/adminguide/deploying-composites/supportJDEV.md b/docs-source/content/soa-domains/adminguide/deploying-composites/supportJDEV.md index 5d7adbc13..095c1a58a 100644 --- a/docs-source/content/soa-domains/adminguide/deploying-composites/supportJDEV.md +++ b/docs-source/content/soa-domains/adminguide/deploying-composites/supportJDEV.md @@ -4,10 +4,10 @@ date: 2019-02-22T15:44:42-05:00 draft: false weight: 1 pre : "a. " -description: "Deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper to Oracle SOA Suite in the WebLogic Kubernetes operator environment." +description: "Deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper to Oracle SOA Suite in the WebLogic Kubernetes Operator environment." --- -Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper (running outside the Kubernetes network) to an Oracle SOA Suite instance in the WebLogic Kubernetes operator environment. +Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper (running outside the Kubernetes network) to an Oracle SOA Suite instance in the WebLogic Kubernetes Operator environment. {{% notice note %}} Use JDeveloper for development and test environments only. For a production environment, you should deploy using Application Control and WLST methods. @@ -15,7 +15,7 @@ Use JDeveloper for development and test environments only. For a production envi ### Deploy Oracle SOA Suite and Oracle Service Bus composite applications to Oracle SOA Suite from JDeveloper -To deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper, the Administration Server must be configured to expose a T3 channel. The WebLogic Kubernetes operator provides an option to expose a T3 channel for the Administration Server using the `exposeAdminT3Channel` setting during domain creation, then the matching T3 service can be used to connect. By default, when `exposeAdminT3Channel` is set, the WebLogic Kubernetes operator environment exposes the `NodePort` for the T3 channel of the `NetworkAccessPoint` at `30012` (use `t3ChannelPort` to configure the port to a different value). +To deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper, the Administration Server must be configured to expose a T3 channel. The WebLogic Kubernetes Operator provides an option to expose a T3 channel for the Administration Server using the `exposeAdminT3Channel` setting during domain creation, then the matching T3 service can be used to connect. By default, when `exposeAdminT3Channel` is set, the WebLogic Kubernetes Operator environment exposes the `NodePort` for the T3 channel of the `NetworkAccessPoint` at `30012` (use `t3ChannelPort` to configure the port to a different value). If you miss enabling `exposeAdminT3Channel` during domain creation, follow [Expose a T3/T3S Channel for the Administration Server]({{< relref "/soa-domains/adminguide/enablingt3#expose-t3t3s-for-administration-server" >}}) to expose a T3 channel manually. @@ -32,7 +32,7 @@ If you miss enabling `exposeAdminT3Channel` during domain creation, follow [Expo $ kubectl get service soainfra-adminserver-external -n soana-o jsonpath='{.spec.ports[0].nodePort}' ``` -1. Oracle SOA Suite in the WebLogic Kubernetes operator environment is deployed in a *Reference Configuration domain*. If a SOA project is developed in Classic mode JDeveloper displays a Mismatch notification in the Deploy Composite Wizard. By default, JDeveloper is in Classic mode. To develop SOA projects in Reference Configuration mode, you must manually enable this feature in JDeveloper: +1. Oracle SOA Suite in the WebLogic Kubernetes Operator environment is deployed in a *Reference Configuration domain*. If a SOA project is developed in Classic mode JDeveloper displays a Mismatch notification in the Deploy Composite Wizard. By default, JDeveloper is in Classic mode. To develop SOA projects in Reference Configuration mode, you must manually enable this feature in JDeveloper: a. From the File menu, select **Tools**, then **Preferences**. b. Select **Reference Configuration Settings**. c. Select **Enable Reference Configuration settings in adapters**. @@ -40,7 +40,7 @@ If you miss enabling `exposeAdminT3Channel` during domain creation, follow [Expo ![Enable Reference Configuration](/fmw-kubernetes/images/soa-domains/JDEV_Reference_Config_Settings.png) -1. JDeveloper needs to access the Servers during deployment. In the WebLogic Kubernetes operator environment, Administration and Managed Servers are pods and cannot be accessed directly by JDeveloper. As a workaround, you must configure the reachability of the Managed Servers: +1. JDeveloper needs to access the Servers during deployment. In the WebLogic Kubernetes Operator environment, Administration and Managed Servers are pods and cannot be accessed directly by JDeveloper. As a workaround, you must configure the reachability of the Managed Servers: {{% notice note %}} The Managed Server T3 port is not exposed by default and opening this will have a security risk as the authentication method here is based on a userid/password. It is not recommended to do this on production instances. {{% /notice %}} diff --git a/docs-source/content/soa-domains/adminguide/enablingT3.md b/docs-source/content/soa-domains/adminguide/enablingT3.md index e832c63c7..3fe46e9ad 100644 --- a/docs-source/content/soa-domains/adminguide/enablingT3.md +++ b/docs-source/content/soa-domains/adminguide/enablingT3.md @@ -13,7 +13,7 @@ Oracle strongly recommends that you do not expose non-HTTPS traffic (T3/T3s/LDAP You can create T3/T3S channels and the corresponding Kubernetes service to expose the T3/T3S protocol for the Administration Server and Managed Servers in an Oracle SOA Suite domain. -The WebLogic Kubernetes operator provides an option to expose a T3 channel for the Administration Server using the `exposeAdminT3Channel` setting during domain creation, then the matching T3 service can be used to connect. By default, when `exposeAdminT3Channel` is set, the WebLogic Kubernetes operator environment exposes the `NodePort` for the T3 channel of the `NetworkAccessPoint` at `30012` (use `t3ChannelPort` to configure the port to a different value). +The WebLogic Kubernetes Operator provides an option to expose a T3 channel for the Administration Server using the `exposeAdminT3Channel` setting during domain creation, then the matching T3 service can be used to connect. By default, when `exposeAdminT3Channel` is set, the WebLogic Kubernetes Operator environment exposes the `NodePort` for the T3 channel of the `NetworkAccessPoint` at `30012` (use `t3ChannelPort` to configure the port to a different value). If you miss enabling `exposeAdminT3Channel` during domain creation, follow these steps to create a T3 channel for Administration Server manually. diff --git a/docs-source/content/soa-domains/adminguide/monitoring-soa-domains.md b/docs-source/content/soa-domains/adminguide/monitoring-soa-domains.md index c3958df22..d36406ad2 100644 --- a/docs-source/content/soa-domains/adminguide/monitoring-soa-domains.md +++ b/docs-source/content/soa-domains/adminguide/monitoring-soa-domains.md @@ -59,18 +59,18 @@ Refer to the compatibility matrix of [Kube Prometheus](https://github.com/coreos * `32102` is the external port for Alertmanager #### Set up monitoring -Follow these [steps](https://github.com/oracle/fmw-kubernetes/blob/v21.2.2/OracleSOASuite/kubernetes/monitoring-service/README.md) to set up monitoring for an Oracle SOA Suite instance. For more details on WebLogic Monitoring Exporter, see [here](https://github.com/oracle/weblogic-monitoring-exporter). +Follow these [steps](https://github.com/oracle/fmw-kubernetes/blob/v21.3.2/OracleSOASuite/kubernetes/monitoring-service/README.md) to set up monitoring for an Oracle SOA Suite instance. For more details on WebLogic Monitoring Exporter, see [here](https://github.com/oracle/weblogic-monitoring-exporter). ### Publish WebLogic Server logs into Elasticsearch You can publish the WebLogic Server logs to Elasticsearch using the `WebLogic Logging exporter` and interact with them in Kibana. See [Publish logs to Elasticsearch](https://github.com/oracle/weblogic-logging-exporter). -WebLogic Server logs can also be published to Elasticsearch using `Fluentd`. See [Fluentd configuration steps](https://oracle.github.io/weblogic-kubernetes-operator/samples/simple/elastic-stack/weblogic-domain/). +WebLogic Server logs can also be published to Elasticsearch using `Fluentd`. See [Fluentd configuration steps](https://oracle.github.io/weblogic-kubernetes-operator/samples/elastic-stack/weblogic-domain/). ### Publish SOA server diagnostics logs into Elasticsearch -This section shows you how to publish diagnostics logs to Elasticsearch and view them in Kibana. For publishing operator logs, see this [sample](https://oracle.github.io/weblogic-kubernetes-operator/samples/simple/elastic-stack/operator/). +This section shows you how to publish diagnostics logs to Elasticsearch and view them in Kibana. For publishing operator logs, see this [sample](https://oracle.github.io/weblogic-kubernetes-operator/samples/elastic-stack/operator/). #### Prerequisites diff --git a/docs-source/content/soa-domains/appendix/quickstart-deployment-on-prem.md b/docs-source/content/soa-domains/appendix/quickstart-deployment-on-prem.md index 7ce1c6b3c..57a3c8cb1 100644 --- a/docs-source/content/soa-domains/appendix/quickstart-deployment-on-prem.md +++ b/docs-source/content/soa-domains/appendix/quickstart-deployment-on-prem.md @@ -6,7 +6,7 @@ pre: " " Description: "Describes how to quickly get an Oracle SOA Suite domain instance running (using the defaults, nothing special) for development and test purposes." --- -Use this Quick Start to create an Oracle SOA Suite domain deployment in a Kubernetes cluster (on-premise environments) with the WebLogic Kubernetes operator. Note that this walkthrough is for demonstration purposes only, not for use in production. +Use this Quick Start to create an Oracle SOA Suite domain deployment in a Kubernetes cluster (on-premise environments) with the WebLogic Kubernetes Operator. Note that this walkthrough is for demonstration purposes only, not for use in production. These instructions assume that you are already familiar with Kubernetes. If you need more detailed instructions, refer to the [Install Guide]({{< relref "/soa-domains/installguide/_index.md" >}}). @@ -31,7 +31,7 @@ Use the steps in this topic to create a single-instance on-premise Kubernetes cl * [Step 1 - Prepare a virtual machine for the Kubernetes cluster](#1-prepare-a-virtual-machine-for-the-kubernetes-cluster) * [Step 2 - Set up a single instance Kubernetes cluster](#2-set-up-a-single-instance-kubernetes-cluster) * [Step 3 - Get scripts and images](#3-get-scripts-and-images) -* [Step 4 - Install the WebLogic Kubernetes operator](#4-install-the-weblogic-kubernetes-operator) +* [Step 4 - Install the WebLogic Kubernetes Operator](#4-install-the-weblogic-kubernetes-operator) * [Step 5 - Install the Traefik (ingress-based) load balancer](#5-install-the-traefik-ingress-based-load-balancer) * [Step 6 - Create and configure an Oracle SOA Suite domain](#6-create-and-configure-an-oracle-soa-suite-domain) @@ -432,7 +432,7 @@ Any time you see `YOUR_USERID` in a command, you should replace it with your act Congratulations! Your Kubernetes cluster environment is ready to deploy your Oracle SOA Suite domain. -For additional references on Kubernetes cluster setup, check the [cheat sheet](https://oracle.github.io/weblogic-kubernetes-operator/userguide/overview/k8s-setup/). +For additional references on Kubernetes cluster setup, check the [cheat sheet](https://oracle.github.io/weblogic-kubernetes-operator/userguide/kubernetes/k8s-setup/). ### 3. Get scripts and images @@ -473,9 +473,9 @@ Follow [these steps]({{< relref "/soa-domains/installguide/prepare-your-environm ``` > Note: This image does not contain any Oracle SOA Suite product patches and can only be used for test and development purposes. -### 4. Install the WebLogic Kubernetes operator +### 4. Install the WebLogic Kubernetes Operator -#### 4.1 Prepare for the WebLogic Kubernetes operator. +#### 4.1 Prepare for the WebLogic Kubernetes Operator. 1. Create a namespace `opns` for the operator: ```shell $ kubectl create namespace opns @@ -486,7 +486,7 @@ Follow [these steps]({{< relref "/soa-domains/installguide/prepare-your-environm $ kubectl create serviceaccount -n opns op-sa ``` -#### 4.2 Install the WebLogic Kubernetes operator +#### 4.2 Install the WebLogic Kubernetes Operator Use Helm to install and start the operator from the directory you just cloned: @@ -499,7 +499,7 @@ Use Helm to install and start the operator from the directory you just cloned: --set "domainNamespaces={}" \ --wait ``` -#### 4.3 Verify the WebLogic Kubernetes operator +#### 4.3 Verify the WebLogic Kubernetes Operator 1. Verify that the operator’s pod is running by listing the pods in the operator’s namespace. You should see one for the operator: ```shell @@ -515,7 +515,7 @@ The WebLogic Kubernetes Operator v3.2.1 has been installed. Continue with the lo ### 5. Install the Traefik (ingress-based) load balancer -The WebLogic Kubernetes operator supports three load balancers: Traefik, Voyager, and Apache. Samples are provided in the documentation. +The WebLogic Kubernetes Operator supports three load balancers: Traefik, Voyager, and Apache. Samples are provided in the documentation. This Quick Start demonstrates how to install the Traefik ingress controller to provide load balancing for an Oracle SOA Suite domain. @@ -688,7 +688,7 @@ Now the environment is ready to start the Oracle SOA Suite domain creation. #### 6.2 Create an Oracle SOA Suite domain -1. The sample scripts for Oracle SOA Suite domain deployment are available at `/ 1. Add the downloaded installation binaries to the WebLogic Image Tool cache: ``` bash - $ imagetool cache addInstaller --type jdk --version 8u291 --path /jdk-8u291-linux-x64.tar.gz - + $ imagetool cache addInstaller --type jdk --version 8u301 --path /jdk-8u301-linux-x64.tar.gz + $ imagetool cache addInstaller --type fmw --version 12.2.1.4.0 --path /fmw_12.2.1.4.0_infrastructure.jar - + $ imagetool cache addInstaller --type soa --version 12.2.1.4.0 --path /fmw_12.2.1.4.0_soa.jar - + $ imagetool cache addInstaller --type osb --version 12.2.1.4.0 --path /fmw_12.2.1.4.0_osb.jar - + $ imagetool cache addInstaller --type b2b --version 12.2.1.4.0 --path /fmw_12.2.1.4.0_b2bhealthcare.jar ``` 1. Add the downloaded OPatch patch to the WebLogic Image Tool cache: ``` bash - $ imagetool cache addEntry --key 28186730_13.9.4.2.5 --value /p28186730_139425_Generic.zip + $ imagetool cache addEntry --key 28186730_13.9.4.2.6 --value /p28186730_139426_Generic.zip ``` 1. Append the `--opatchBugNumber` flag and the OPatch patch key to the `create` command in the `buildArgs` file: ``` bash - --opatchBugNumber 28186730_13.9.4.2.5 + --opatchBugNumber 28186730_13.9.4.2.6 ``` 1. Add the downloaded product patches to the WebLogic Image Tool cache: ``` bash + $ imagetool cache addEntry --key 28186730_13.9.4.2.6 --value /p28186730_139426_Generic.zip + $ imagetool cache addEntry --key 30741105_12.2.1.4.0 --value /p30741105_122140_Generic.zip - + $ imagetool cache addEntry --key 31287540_12.2.1.4.0 --value /p31287540_122140_Generic.zip - - $ imagetool cache addEntry --key 31544353_12.2.1.4.0 --value /p31544353_122140_Linux-x86-64.zip - - $ imagetool cache addEntry --key 31713053_12.2.1.4.0 --value /p31713053_122140_Linux-x86-64.zip - + + $ imagetool cache addEntry --key 31544353_12.2.1.4.0 --value /p31544353_122140_Linux-x86-64-23673193.zip + + $ imagetool cache addEntry --key 31713053_12.2.1.4.0 --value /p31713053_122140_Linux-x86-64-23753213.zip + $ imagetool cache addEntry --key 31857456_12.2.1.4.0 --value /p31857456_122140_Generic.zip - + $ imagetool cache addEntry --key 31918617_12.2.1.4.0 --value /p31918617_122140_Generic.zip - + $ imagetool cache addEntry --key 32121987_12.2.1.4.0 --value /p32121987_122140_Generic.zip - - $ imagetool cache addEntry --key 32581859_12.2.1.4.0 --value /p32581859_122140_Generic.zip - - $ imagetool cache addEntry --key 32652899_12.2.1.4.0 --value /p32652899_122140_Generic.zip - - $ imagetool cache addEntry --key 32656931_12.2.1.4.0 --value /p32656931_122140_Generic.zip - - $ imagetool cache addEntry --key 32684757_12.2.1.4.0 --value /p32684757_122140_Generic.zip - - $ imagetool cache addEntry --key 32698246_12.2.1.4.0 --value /p32698246_122140_Generic.zip - - $ imagetool cache addEntry --key 32772437_12.2.1.4.0 --value /p32772437_122140_Generic.zip - + $ imagetool cache addEntry --key 32784652_12.2.1.4.0 --value /p32784652_122140_Generic.zip - + + $ imagetool cache addEntry --key 32880070_12.2.1.4.0 --value /p32880070_122140_Generic.zip + + $ imagetool cache addEntry --key 32905339_12.2.1.4.0 --value /p32905339_122140_Generic.zip + + $ imagetool cache addEntry --key 32957445_12.2.1.4.0 --value /p32957445_122140_Generic.zip + + $ imagetool cache addEntry --key 32973297_12.2.1.4.0 --value /p32973297_122140_Generic.zip + + $ imagetool cache addEntry --key 33059296_12.2.1.4.0 --value /p33059296_122140_Generic.zip + + $ imagetool cache addEntry --key 33084721_12.2.1.4.0 --value /p33084721_122140_Generic.zip + + $ imagetool cache addEntry --key 33093748_12.2.1.4.0 --value /p33093748_122140_Generic.zip ``` @@ -252,7 +257,7 @@ The following files in the code repository location `/ Sample `--patches` list for the product patches added in to the cache: ``` - --patches 30741105_12.2.1.4.0,31287540_12.2.1.4.0,31544353_12.2.1.4.0,31713053_12.2.1.4.0,31857456_12.2.1.4.0,31918617_12.2.1.4.0,32121987_12.2.1.4.0,32581859_12.2.1.4.0,32652899_12.2.1.4.0,32656931_12.2.1.4.0,32684757_12.2.1.4.0,32698246_12.2.1.4.0,32772437_12.2.1.4.0,32784652_12.2.1.4.0 + --patches 30741105_12.2.1.4.0,31287540_12.2.1.4.0,31544353_12.2.1.4.0,31713053_12.2.1.4.0,31857456_12.2.1.4.0,31918617_12.2.1.4.0,32121987_12.2.1.4.0,32784652_12.2.1.4.0,32880070_12.2.1.4.0,32905339_12.2.1.4.0,32957445_12.2.1.4.0,32973297_12.2.1.4.0,33059296_12.2.1.4.0,33084721_12.2.1.4.0,33093748_12.2.1.4.0 ``` Example `buildArgs` file after appending the OPatch patch and product patches: @@ -268,8 +273,8 @@ The following files in the code repository location `/ --additionalBuildCommands /docker-images/OracleSOASuite/imagetool/12.2.1.4.0/additionalBuildCmds.txt --additionalBuildFiles /docker-images/OracleSOASuite/dockerfiles/12.2.1.4/container-scripts --installerResponseFile /docker-images/OracleFMWInfrastructure/dockerfiles/12.2.1.4/install.file,/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/install/soasuite.response,/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/install/osb.response,/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/install/b2b.response - --patches 30741105_12.2.1.4.0,31287540_12.2.1.4.0,31544353_12.2.1.4.0,31713053_12.2.1.4.0,31857456_12.2.1.4.0,31918617_12.2.1.4.0,32121987_12.2.1.4.0,32581859_12.2.1.4.0,32652899_12.2.1.4.0,32656931_12.2.1.4.0,32684757_12.2.1.4.0,32698246_12.2.1.4.0,32772437_12.2.1.4.0,32784652_12.2.1.4.0 - --opatchBugNumber 28186730_13.9.4.2.5 + --patches 30741105_12.2.1.4.0,31287540_12.2.1.4.0,31544353_12.2.1.4.0,31713053_12.2.1.4.0,31857456_12.2.1.4.0,31918617_12.2.1.4.0,32121987_12.2.1.4.0,32784652_12.2.1.4.0,32880070_12.2.1.4.0,32905339_12.2.1.4.0,32957445_12.2.1.4.0,32973297_12.2.1.4.0,33059296_12.2.1.4.0,33084721_12.2.1.4.0,33093748_12.2.1.4.0 + --opatchBugNumber 28186730_13.9.4.2.6 ``` >Note: In the `buildArgs` file: > * `--jdkVersion` value must match the `--version` value used in the `imagetool cache addInstaller` command for `--type jdk`. @@ -294,15 +299,14 @@ The following files in the code repository location `/ {{%expand "Click here to see the sample Dockerfile generated with the `imagetool` command." %}} ########## BEGIN DOCKERFILE ########## - # # Copyright (c) 2019, 2021, Oracle and/or its affiliates. - # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # - # + FROM ghcr.io/oracle/oraclelinux:7-slim as os_update - LABEL com.oracle.weblogic.imagetool.buildid="7e6447e3-5b2c-44e9-a4f6-5a99233fec87" + LABEL com.oracle.weblogic.imagetool.buildid="b4554a25-22dd-4793-b121-9989bd4be40a" USER root + # Use package manager to make sure that unzip, tar, and other required packages are installed # # Copyright (c) 2021, Oracle and/or its affiliates. # @@ -315,6 +319,7 @@ The following files in the code repository location `/ && rm -rf /tmp/imagetool + # Create the Oracle user that will be the owner of the installed software # # Copyright (c) 2021, Oracle and/or its affiliates. # @@ -327,30 +332,41 @@ The following files in the code repository location `/ && chown oracle:root /u01 \ && chmod 775 /u01 - # Install Java + # If Java is not already in the base image, install it + # Copyright (c) 2021, Oracle and/or its affiliates. + # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + # + # Installing Java + FROM os_update as jdk_build - LABEL com.oracle.weblogic.imagetool.buildid="7e6447e3-5b2c-44e9-a4f6-5a99233fec87" + LABEL com.oracle.weblogic.imagetool.buildid="b4554a25-22dd-4793-b121-9989bd4be40a" ENV JAVA_HOME=/u01/jdk - COPY --chown=oracle:root jdk-8u291-linux-x64.tar.gz /tmp/imagetool/ + COPY --chown=oracle:root jdk-8u301-linux-x64.tar.gz /tmp/imagetool/ USER oracle - RUN tar xzf /tmp/imagetool/jdk-8u291-linux-x64.tar.gz -C /u01 \ + RUN tar xzf /tmp/imagetool/jdk-8u301-linux-x64.tar.gz -C /u01 \ && $(test -d /u01/jdk* && mv /u01/jdk* /u01/jdk || mv /u01/graal* /u01/jdk) \ && rm -rf /tmp/imagetool \ && rm -f /u01/jdk/javafx-src.zip /u01/jdk/src.zip - # Install Middleware + + # If an Oracle Home is not already in the base image, install the middleware components + # Copyright (c) 2021, Oracle and/or its affiliates. + # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + # + # Installing Middleware + FROM os_update as wls_build - LABEL com.oracle.weblogic.imagetool.buildid="7e6447e3-5b2c-44e9-a4f6-5a99233fec87" + LABEL com.oracle.weblogic.imagetool.buildid="b4554a25-22dd-4793-b121-9989bd4be40a" ENV JAVA_HOME=/u01/jdk \ - ORACLE_HOME=/u01/oracle \ - OPATCH_NO_FUSER=true + ORACLE_HOME=/u01/oracle \ + OPATCH_NO_FUSER=true RUN mkdir -p /u01/oracle \ && mkdir -p /u01/oracle/oraInventory \ @@ -369,23 +385,25 @@ The following files in the code repository location `/ RUN echo "INSTALLING MIDDLEWARE" \ - && echo "INSTALLING fmw" \ - && \ + && echo "INSTALLING fmw" \ + && \ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_infrastructure.jar -silent ORACLE_HOME=/u01/oracle \ -responseFile /tmp/imagetool/install.file -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \ - && echo "INSTALLING soa" \ - && \ + && echo "INSTALLING soa" \ + && \ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_soa.jar -silent ORACLE_HOME=/u01/oracle \ -responseFile /tmp/imagetool/soasuite.response -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \ - && echo "INSTALLING osb" \ - && \ + && echo "INSTALLING osb" \ + && \ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_osb.jar -silent ORACLE_HOME=/u01/oracle \ -responseFile /tmp/imagetool/osb.response -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \ - && echo "INSTALLING b2b" \ - && \ + && echo "INSTALLING b2b" \ + && \ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_b2bhealthcare.jar -silent ORACLE_HOME=/u01/oracle \ -responseFile /tmp/imagetool/b2b.response -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \ - && chmod -R g+r /u01/oracle + && test $? -eq 0 \ + && chmod -R g+r /u01/oracle \ + || (grep -vh "NOTIFICATION" /tmp/OraInstall*/install*.log && exit 1) # # Copyright (c) 2021, Oracle and/or its affiliates. @@ -393,9 +411,9 @@ The following files in the code repository location `/ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Update OPatch and apply WebLogic patches - COPY --chown=oracle:root p28186730_139425_Generic-23901536.zip /tmp/imagetool/opatch/ + COPY --chown=oracle:root p28186730_139426_Generic-24269359.zip /tmp/imagetool/opatch/ RUN cd /tmp/imagetool/opatch \ - && /u01/jdk/bin/jar -xf /tmp/imagetool/opatch/p28186730_139425_Generic-23901536.zip \ + && /u01/jdk/bin/jar -xf /tmp/imagetool/opatch/p28186730_139426_Generic-24269359.zip \ && /u01/jdk/bin/java -jar /tmp/imagetool/opatch/6880880/opatch_generic.jar -silent -ignoreSysPrereqs -force -novalidation oracle_home=/u01/oracle \ && rm -rf /tmp/imagetool @@ -409,17 +427,19 @@ The following files in the code repository location `/ + FROM os_update as final_build ENV ORACLE_HOME=/u01/oracle \ JAVA_HOME=/u01/jdk \ PATH=${PATH}:/u01/jdk/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle - LABEL com.oracle.weblogic.imagetool.buildid="7e6447e3-5b2c-44e9-a4f6-5a99233fec87" + LABEL com.oracle.weblogic.imagetool.buildid="b4554a25-22dd-4793-b121-9989bd4be40a" COPY --from=jdk_build --chown=oracle:root /u01/jdk /u01/jdk/ - COPY --from=wls_build --chown=oracle:root /u01/oracle /u01/oracle/ + COPY --from=wls_build --chown=oracle:root /u01/oracle /u01/oracle/ + USER oracle @@ -444,14 +464,17 @@ The following files in the code repository location `/ USER oracle - RUN cd $ORACLE_HOME/soa/soa/thirdparty/edifecs && \ - tar -zxvf XEngine_8_4_1_23.tar.gz + RUN if [ -f "${ORACLE_HOME}/soa/soa/thirdparty/edifecs/XEngine_8_4_1_23.tar.gz" ]; then \ + cd $ORACLE_HOME/soa/soa/thirdparty/edifecs && \ + tar -zxvf XEngine_8_4_1_23.tar.gz; \ + else \ + echo -e "\nXEngine_8_4_1_23.tar.gz not present in ${ORACLE_HOME}/soa/soa/thirdparty/edifecs directory. Skipping untar."; \ + fi HEALTHCHECK --start-period=5m --interval=1m CMD curl -k -s --fail `$HEALTH_SCRIPT_FILE` || exit 1 WORKDIR ${ORACLE_HOME} CMD ["/u01/oracle/container-scripts/createDomainAndStart.sh"] ########## END DOCKERFILE ########## - {{% /expand %}} 1. Check the created image using the `docker images` command: @@ -658,7 +681,7 @@ After [setting up the WebLogic Image Tool]({{< relref "/soa-domains/create-or-up ### Create an Oracle SOA Suite Docker image using Dockerfile -For test and development purposes, you can create an Oracle SOA Suite image using the Dockerfile. Consult the [README](https://github.com/oracle/docker-images/blob/master/OracleSOASuite/dockerfiles/README.md) file for important prerequisite steps, +For test and development purposes, you can create an Oracle SOA Suite image using the Dockerfile. Consult the [README](https://github.com/oracle/docker-images/blob/main/OracleSOASuite/dockerfiles/README.md) file for important prerequisite steps, such as building or pulling the Server JRE Docker image, Oracle FMW Infrastructure Docker image, and downloading the Oracle SOA Suite installer and bundle patch binaries. A prebuilt Oracle Fusion Middleware Infrastructure image, `container-registry.oracle.com/middleware/fmw-infrastructure:12.2.1.4`, is available at `container-registry.oracle.com`. We recommend that you pull and rename this image to build the Oracle SOA Suite image. diff --git a/docs-source/content/soa-domains/faq.md b/docs-source/content/soa-domains/faq.md index d3397091b..aabb5c2fd 100644 --- a/docs-source/content/soa-domains/faq.md +++ b/docs-source/content/soa-domains/faq.md @@ -10,7 +10,7 @@ description: "This section describes known issues for Oracle SOA Suite domains d #### Overriding tuning parameters is not supported using configuration overrides -The WebLogic Kubernetes operator enables you to override some of the domain configuration using configuration overrides (also called situational configuration). +The WebLogic Kubernetes Operator enables you to override some of the domain configuration using configuration overrides (also called situational configuration). See [supported overrides](https://oracle.github.io/weblogic-kubernetes-operator/userguide/managing-domains/configoverrides/#typical-overrides). Overriding the tuning parameters such as **MaxMessageSize** and **PAYLOAD**, for Oracle SOA Suite domains is not supported using the configuration overrides feature. However, you can override them using the following steps: 1. Specify the new value using the environment variable `K8S_REFCONF_OVERRIDES` in `serverPod.env` section in `domain.yaml` configuration file (example path: `/weblogic-domains/soainfra/domain.yaml`) based on the servers to which the changes are to be applied. @@ -148,4 +148,4 @@ $ helm upgrade soa-nginx-ingress \ #### WebLogic Kubernetes Operator FAQs -See the general [frequently asked questions for using the WebLogic Kubernetes operator](https://oracle.github.io/weblogic-kubernetes-operator/faq/). +See the general [frequently asked questions for using the WebLogic Kubernetes Operator](https://oracle.github.io/weblogic-kubernetes-operator/faq/). diff --git a/docs-source/content/soa-domains/installguide/_index.md b/docs-source/content/soa-domains/installguide/_index.md index 813304d36..c999bbad6 100644 --- a/docs-source/content/soa-domains/installguide/_index.md +++ b/docs-source/content/soa-domains/installguide/_index.md @@ -6,6 +6,6 @@ pre = "2. " +++ -Install the WebLogic Kubernetes operator and prepare and deploy Oracle SOA Suite domains. +Install the WebLogic Kubernetes Operator and prepare and deploy Oracle SOA Suite domains. {{% children style="h4" description="true" %}} diff --git a/docs-source/content/soa-domains/installguide/prepare-your-environment/_index.md b/docs-source/content/soa-domains/installguide/prepare-your-environment/_index.md index 23d11f18e..9b15532f7 100644 --- a/docs-source/content/soa-domains/installguide/prepare-your-environment/_index.md +++ b/docs-source/content/soa-domains/installguide/prepare-your-environment/_index.md @@ -13,7 +13,7 @@ To prepare your Oracle SOA Suite in Kubernetes environment, complete the followi 1. [Get dependent images](#get-dependent-images) 1. [Set up the code repository to deploy Oracle SOA Suite domains](#set-up-the-code-repository-to-deploy-oracle-soa-suite-domains) 1. [Obtain the Oracle SOA Suite Docker image](#obtain-the-oracle-soa-suite-docker-image) -1. [Install the WebLogic Kubernetes operator](#install-the-weblogic-kubernetes-operator) +1. [Install the WebLogic Kubernetes Operator](#install-the-weblogic-kubernetes-operator) 1. [Prepare the environment for Oracle SOA Suite domains](#prepare-the-environment-for-oracle-soa-suite-domains) a. [Create a namespace for an Oracle SOA Suite domain](#create-a-namespace-for-an-oracle-soa-suite-domain) @@ -32,7 +32,7 @@ To prepare your Oracle SOA Suite in Kubernetes environment, complete the followi ### Set up your Kubernetes cluster -If you need help setting up a Kubernetes environment, check the [cheat sheet](https://oracle.github.io/weblogic-kubernetes-operator/userguide/overview/k8s-setup/). +Refer the official Kubernetes set up [documentation](https://kubernetes.io/docs/setup/#production-environment) to set up a production grade Kubernetes cluster. ### Install Helm @@ -62,40 +62,40 @@ Obtain dependent images and add them to your local registry. ### Set up the code repository to deploy Oracle SOA Suite domains -Oracle SOA Suite domain deployment on Kubernetes leverages the WebLogic Kubernetes operator infrastructure. To deploy an Oracle SOA Suite domain, you must set up the deployment scripts. +Oracle SOA Suite domain deployment on Kubernetes leverages the WebLogic Kubernetes Operator infrastructure. To deploy an Oracle SOA Suite domain, you must set up the deployment scripts. 1. Create a working directory to set up the source code: ```bash - $ mkdir $HOME/soa_21.2.2 - $ cd $HOME/soa_21.2.2 + $ mkdir $HOME/soa_21.3.2 + $ cd $HOME/soa_21.3.2 ``` 1. Download the WebLogic Kubernetes Operator source code and Oracle SOA Suite Kubernetes deployment scripts from the SOA [repository](https://github.com/oracle/fmw-kubernetes.git). Required artifacts are available at `OracleSOASuite/kubernetes`. ``` bash - $ git clone https://github.com/oracle/fmw-kubernetes.git --branch release/21.2.2 - $ export WORKDIR=$HOME/soa_21.2.2/OracleSOASuite/kubernetes + $ git clone https://github.com/oracle/fmw-kubernetes.git --branch release/21.3.2 + $ export WORKDIR=$HOME/soa_21.3.2/OracleSOASuite/kubernetes ``` ### Obtain the Oracle SOA Suite Docker image The Oracle SOA Suite image with latest bundle patch and required interim patches can be obtained from My Oracle Support (MOS). This is the only image supported for production deployments. Follow the below steps to download the Oracle SOA Suite image from My Oracle Support. -1. Download patch [32794257](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=32794257) from My Oracle Support (MOS). +1. Download patch [33125465](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=33125465) from My Oracle Support (MOS). 1. Unzip the downloaded patch zip file. 1. Load the image archive using the `docker load` command. For example: ```bash - $ docker load < soasuite-12.2.1.4.0-8-ol7-210512.1700.tar - Loaded image: oracle/soasuite:12.2.1.4.0-8-ol7-210512.1700 + $ docker load < soasuite-12.2.1.4.0-8-ol7-210726.1017.tar + Loaded image: oracle/soasuite:12.2.1.4.0-8-ol7-210726.1017 $ ``` -1. Run the `docker inspect` command to verify that the downloaded image is the latest released image. The value of label `com.oracle.weblogic.imagetool.buildid` must match to `32a1cc91-961d-4ce9-9d57-9f2eaff7bbea`. +1. Run the `docker inspect` command to verify that the downloaded image is the latest released image. The value of label `com.oracle.weblogic.imagetool.buildid` must match to `dae045ba-378d-4cdb-b010-85003db61cde`. For example: ```bash - $ docker inspect --format='{{ index .Config.Labels "com.oracle.weblogic.imagetool.buildid" }}' oracle/soasuite:12.2.1.4.0-8-ol7-210512.1700 - 32a1cc91-961d-4ce9-9d57-9f2eaff7bbea + $ docker inspect --format='{{ index .Config.Labels "com.oracle.weblogic.imagetool.buildid" }}' oracle/soasuite:12.2.1.4.0-8-ol7-210726.1017 + dae045ba-378d-4cdb-b010-85003db61cde $ ``` @@ -105,12 +105,12 @@ If you want to build and use an Oracle SOA Suite Docker image with any additiona > Note: The default Oracle SOA Suite image name used for Oracle SOA Suite domains deployment is `soasuite:12.2.1.4`. The image obtained must be tagged as `soasuite:12.2.1.4` using the `docker tag` command. If you want to use a different name for the image, make sure to update the new image tag name in the `create-domain-inputs.yaml` file and also in other instances where the `soasuite:12.2.1.4` image name is used. -### Install the WebLogic Kubernetes operator +### Install the WebLogic Kubernetes Operator -The WebLogic Kubernetes Operator supports the deployment of Oracle SOA Suite domains in the Kubernetes environment. Follow the steps in [this document](https://github.com/oracle/weblogic-kubernetes-operator/blob/v3.2.1/documentation/3.2/content/quickstart/install.md) to install the operator. +The WebLogic Kubernetes Operator supports the deployment of Oracle SOA Suite domains in the Kubernetes environment. Follow the steps in [this document](https://github.com/oracle/weblogic-kubernetes-operator/blob/v3.2.1/documentation/3.2/content/quickstart/install.md#install-the-operator) to install the operator. > Note: Optionally, you can execute these [steps](https://oracle.github.io/weblogic-kubernetes-operator/samples/simple/elastic-stack/operator/) to send the contents of the operator’s logs to Elasticsearch. -In the following example commands to install the WebLogic Kubernetes operator, `opns` is the namespace and `op-sa` is the service account created for the operator: +In the following example commands to install the WebLogic Kubernetes Operator, `opns` is the namespace and `op-sa` is the service account created for the operator: ``` $ kubectl create namespace opns $ kubectl create serviceaccount -n opns op-sa @@ -132,9 +132,9 @@ For details, see [Prepare to run a domain](https://oracle.github.io/weblogic-kub #### Create a persistent storage for an Oracle SOA Suite domain - In the Kubernetes namespace you created, create the PV and PVC for the domain by running the [create-pv-pvc.sh](https://oracle.github.io/weblogic-kubernetes-operator/samples/simple/storage/) script. Follow the instructions for using the script to create a dedicated PV and PVC for the Oracle SOA Suite domain. + In the Kubernetes namespace you created, create the PV and PVC for the domain by running the [create-pv-pvc.sh](https://oracle.github.io/weblogic-kubernetes-operator/samples/storage/) script. Follow the instructions for using the script to create a dedicated PV and PVC for the Oracle SOA Suite domain. - * Review the configuration parameters for PV creation [here](https://oracle.github.io/weblogic-kubernetes-operator/samples/simple/storage/#configuration-parameters). Based on your requirements, update the values in the `create-pv-pvc-inputs.yaml` file located at `${WORKDIR}/create-weblogic-domain-pv-pvc/`. Sample configuration parameter values for an Oracle SOA Suite domain are: + * Review the configuration parameters for PV creation [here](https://oracle.github.io/weblogic-kubernetes-operator/samples/storage/#configuration-parameters). Based on your requirements, update the values in the `create-pv-pvc-inputs.yaml` file located at `${WORKDIR}/create-weblogic-domain-pv-pvc/`. Sample configuration parameter values for an Oracle SOA Suite domain are: * `baseName`: domain * `domainUID`: soainfra * `namespace`: soans diff --git a/docs-source/content/soa-domains/installguide/prerequisites/_index.md b/docs-source/content/soa-domains/installguide/prerequisites/_index.md index 7127a3bd8..6a1a17a5b 100644 --- a/docs-source/content/soa-domains/installguide/prerequisites/_index.md +++ b/docs-source/content/soa-domains/installguide/prerequisites/_index.md @@ -3,25 +3,25 @@ title: "Requirements and limitations" date: 2019-04-18T07:32:31-05:00 weight: 1 pre : " " -description: "Understand the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes operator, including the SOA cluster sizing recommendations." +description: "Understand the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes Operator, including the SOA cluster sizing recommendations." --- -This section provides information about the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes operator. +This section provides information about the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes Operator. ### System requirements for Oracle SOA Suite domains -For the current production release 21.2.2: +For the current production release 21.3.2: * Operating systems supported: * Oracle Linux 7 (UL6+) * Red Hat Enterprise Linux 7 (UL3+ only with standalone Kubernetes) * Oracle Linux Cloud Native Environment (OLCNE) version 1.1.2 * Kubernetes 1.16.15+, 1.17.13+, 1.18.10+, and 1.19.7+ (check with `kubectl version`). -* Docker 18.09.1ce, 19.03.1 (check with `docker version`) or CRI-O 1.14.7 (check with `crictl version | grep RuntimeVersion`). +* Docker 18.09.1ce, 19.03.1 (check with `docker version`) or CRI-O 1.17.0 (check with `crictl version | grep RuntimeVersion`). * Flannel networking v0.9.1-amd64 or later (check with `docker images | grep flannel`), Calico networking v3.16.1 or later. * Helm 3.3.4+ (check with `helm version --client --short`). * WebLogic Kubernetes Operator 3.2.1 (see [operator releases](https://github.com/oracle/weblogic-kubernetes-operator/releases/tag/v3.2.1) page). -* Oracle SOA Suite 12.2.1.4 Docker image downloaded from My Oracle Support (MOS patch [32794257](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=32794257)). This image contains the latest bundle patch and one-off patches for Oracle SOA Suite. +* Oracle SOA Suite 12.2.1.4 Docker image downloaded from My Oracle Support (MOS patch [33125465](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=33125465)). This image contains the latest bundle patch and one-off patches for Oracle SOA Suite. * You must have the `cluster-admin` role to install the operator. The operator does not need the `cluster-admin` role at runtime. * We do not currently support running SOA in non-Linux containers. * Additionally, see the Oracle SOA Suite [documentation](https://docs.oracle.com/en/middleware/fusion-middleware/12.2.1.4/insoa/preparing-install-and-configure-product.html#GUID-E2D4D481-BE80-4600-8078-FD9C03A30210) for other requirements such as database version. diff --git a/docs-source/content/soa-domains/patch_and_upgrade/_index.md b/docs-source/content/soa-domains/patch_and_upgrade/_index.md index 5b81ddc28..d60c1868d 100644 --- a/docs-source/content/soa-domains/patch_and_upgrade/_index.md +++ b/docs-source/content/soa-domains/patch_and_upgrade/_index.md @@ -5,6 +5,6 @@ weight = 4 pre = "4. " +++ -Patch an existing Oracle SOA Suite image or upgrade the infrastructure, such as upgrading the underlying Kubernetes cluster to a new release and upgrading the WebLogic Kubernetes operator release. +Patch an existing Oracle SOA Suite image or upgrade the infrastructure, such as upgrading the underlying Kubernetes cluster to a new release and upgrading the WebLogic Kubernetes Operator release. {{% children style="h4" description="true" %}} diff --git a/docs-source/content/soa-domains/patch_and_upgrade/patch-an-image/index.md b/docs-source/content/soa-domains/patch_and_upgrade/patch-an-image/index.md index c68a05582..e43eb9738 100644 --- a/docs-source/content/soa-domains/patch_and_upgrade/patch-an-image/index.md +++ b/docs-source/content/soa-domains/patch_and_upgrade/patch-an-image/index.md @@ -22,7 +22,7 @@ To update an Oracle SOA Suite domain with a patched image, first make sure the p Once the patched image is available, you can follow these steps to update the Oracle SOA Suite domain with a patched image: * [Stop all servers](#stop-all-servers) -* [Update user permissions of the domain PV storage](update-user-permissions-of-the-domain-pv-storage) +* [Update user permissions of the domain PV storage](#update-user-permissions-of-the-domain-pv-storage) * [Address post-installation requirements](#address-post-installation-requirements) * [Apply the patched image](#apply-the-patched-image) @@ -43,7 +43,7 @@ Before applying the patch, stop all servers in the domain: #### Update user permissions of the domain PV storage -The Oracle SOA Suite image for release 21.2.2 has an oracle user with UID 1000, with the default group set to `root`. Before applying the patched image, update the user permissions of the domain persistent volume (PV) to set the group to `root`: +The Oracle SOA Suite image for release 21.3.2 has an oracle user with UID 1000, with the default group set to `root`. Before applying the patched image, update the user permissions of the domain persistent volume (PV) to set the group to `root`: ``` $ sudo chown -R 1000:0 /scratch/k8s_dir/SOA diff --git a/docs-source/content/soa-domains/patch_and_upgrade/upgrade-operator-release.md b/docs-source/content/soa-domains/patch_and_upgrade/upgrade-operator-release.md index 3c3f5bfe7..26b9f92dc 100644 --- a/docs-source/content/soa-domains/patch_and_upgrade/upgrade-operator-release.md +++ b/docs-source/content/soa-domains/patch_and_upgrade/upgrade-operator-release.md @@ -4,7 +4,7 @@ date: 2019-02-22T15:44:42-05:00 draft: false weight: 2 pre: "b. " -description: "Upgrade the WebLogic Kubernetes operator release to a newer version." +description: "Upgrade the WebLogic Kubernetes Operator release to a newer version." --- These instructions apply to upgrading operators within the 3.x release family @@ -24,7 +24,7 @@ $ helm upgrade \ charts/weblogic-operator ``` -> Note: When the WebLogic Kubernetes operator is upgraded from release version 3.1.1 to 3.2.1 or later, it is expected that the Administration Server pod in the domain gets restarted. +> Note: When the WebLogic Kubernetes Operator is upgraded from release version 3.1.1 to 3.2.1 or later, it is expected that the Administration Server pod in the domain gets restarted. #### Post upgrade steps diff --git a/docs-source/content/soa-domains/release-notes.md b/docs-source/content/soa-domains/release-notes.md index 4b97c1c2d..dacb9fab4 100644 --- a/docs-source/content/soa-domains/release-notes.md +++ b/docs-source/content/soa-domains/release-notes.md @@ -12,10 +12,11 @@ Review the latest changes and known issues for Oracle SOA Suite on Kubernetes. | Date | Version | Change | | --- | --- | --- | +|August 6, 2021 | 21.3.2 | Supports Oracle SOA Suite 12.2.1.4 domains deployment using July 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch [33125465](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=33125465)). | May 31, 2021 | 21.2.2 | Supports Oracle SOA Suite 12.2.1.4 domains deployment using April 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch [32794257](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=32794257)). | February 28, 2021 | 21.1.2 | Supports Oracle SOA Suite 12.2.1.4 domains deployment using January 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch [32398542](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=32398542)). | November 30, 2020 | 20.4.2 | Supports Oracle SOA Suite 12.2.1.4 domains deployment using October 2020 PSU and known bug fixes. Added HEALTHCHECK support for Oracle SOA Suite docker image. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch [32215749](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=32215749)). -| October 3, 2020 | 20.3.3 | Certified Oracle WebLogic Kubernetes operator version 3.0.1. Kubernetes 1.14.8+, 1.15.7+, 1.16.0+, 1.17.0+, and 1.18.0+ support. Flannel is the only supported CNI in this release. SSL enabling for the Administration Server and Managed Servers is supported. Only Oracle SOA Suite 12.2.1.4 is supported. +| October 3, 2020 | 20.3.3 | Certified Oracle WebLogic Kubernetes Operator version 3.0.1. Kubernetes 1.14.8+, 1.15.7+, 1.16.0+, 1.17.0+, and 1.18.0+ support. Flannel is the only supported CNI in this release. SSL enabling for the Administration Server and Managed Servers is supported. Only Oracle SOA Suite 12.2.1.4 is supported. ### Known issues diff --git a/docs-source/content/wcsites-domains/adminguide/configure-load-balancer/nginx.md b/docs-source/content/wcsites-domains/adminguide/configure-load-balancer/nginx.md index 13240407b..bf436bd9d 100644 --- a/docs-source/content/wcsites-domains/adminguide/configure-load-balancer/nginx.md +++ b/docs-source/content/wcsites-domains/adminguide/configure-load-balancer/nginx.md @@ -21,7 +21,6 @@ Add following Helm repos ```bash $ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx -$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/ $ helm repo update ``` @@ -198,4 +197,4 @@ http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/sites/version.jsp -``` \ No newline at end of file +``` diff --git a/docs-source/content/wcsites-domains/appendix/quickstart-deployment-on-prem.md b/docs-source/content/wcsites-domains/appendix/quickstart-deployment-on-prem.md index 8b8593b04..5331b435c 100644 --- a/docs-source/content/wcsites-domains/appendix/quickstart-deployment-on-prem.md +++ b/docs-source/content/wcsites-domains/appendix/quickstart-deployment-on-prem.md @@ -52,7 +52,7 @@ Any time you see `YOUR_USERID` in a command, you should replace it with your act $ export docker_dir=/u01/docker $ export kubelet_dir=/u01/kubelet $ mkdir -p $docker_dir $kubelet_dir - $ ln -s kubelet_dir /var/lib/kubelet + $ ln -s $kubelet_dir /var/lib/kubelet ``` 1. Verify that IPv4 forwarding is enabled on your host. @@ -452,13 +452,43 @@ Follow [these steps]({{< relref "/wcsites-domains/installguide/prepare-your-envi ``` $ docker pull container-registry.oracle.com/middleware/weblogic-kubernetes-operator:3.0.1 + $ docker tag container-registry.oracle.com/middleware/weblogic-kubernetes-operator:3.0.1 oracle/weblogic-kubernetes-operator:3.0.1 ``` 1. Build Oracle WebCenter Sites 12.2.1.4 Image by following steps 4A, 4C, 4D and 5 from this [document](https://github.com/oracle/docker-images/tree/master/OracleWebCenterSites/dockerfiles/12.2.1.4) 1. Copy all the above built and pulled images to all the nodes in your cluster or add to a Docker registry that your cluster can access. +#### 3.3 Set Up the Code Repository to Deploy Oracle WebCenter Sites Domain +Oracle WebCenter Sites domain deployment on Kubernetes leverages the Oracle WebLogic Kubernetes Operator infrastructure. For deploying the Oracle WebCenter Sites domain, you need to set up the deployment scripts as below: + +1. Create a working directory to set up the source code. + ```bash + $ mkdir ${WORKDIR} + $ cd ${WORKDIR} + ``` + +1. Download the supported version of Oracle WebLogic Kubernetes Operator source code archieve file (`.zip`/`.tar.gz`) from the operator [relases page](https://github.com/oracle/weblogic-kubernetes-operator/releases). Currently supported operator version can be downloaded from [3.0.1](https://github.com/oracle/weblogic-kubernetes-operator/archive/v3.0.1.zip). + +1. Extract the source code archive file (`.zip`/`.tar.gz`) in to the work directory. + +1. Download the WebCenter Sites kubernetes deployment scripts from this [repository](https://github.com/oracle/fmw-kubernetes.git) and copy them in to WebLogic operator samples location. + + ```bash + $ git clone https://github.com/oracle/fmw-kubernetes.git + $ cp -rf ${WORKDIR}/fmw-kubernetes/OracleWebCenterSites/kubernetes/create-wcsites-domain ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ + $ cp -rf ${WORKDIR}/fmw-kubernetes/OracleWebCenterSites/kubernetes/imagetool-scripts ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ + ``` + +You can now use the deployment scripts from `/weblogic-kubernetes-operator-3.0.1` to set up the WebCenter Sites domain as further described in this document. + +This will be your home directory for runnning all the required scripts. + +```bash +$ cd ${WORKDIR}/weblogic-kubernetes-operator-3.0.1 +``` + ### 4. Install the WebLogic Kubernetes Operator #### 4.1 Prepare for the WebLogic Kubernetes Operator. diff --git a/docs-source/content/wcsites-domains/create-or-update-image/_index.md b/docs-source/content/wcsites-domains/create-or-update-image/_index.md index 5d70223ec..a61b12135 100644 --- a/docs-source/content/wcsites-domains/create-or-update-image/_index.md +++ b/docs-source/content/wcsites-domains/create-or-update-image/_index.md @@ -109,7 +109,7 @@ Creating an Oracle WebCenter Sites Docker image using the WebLogic Image Tool re ```bash $ mkdir -p imagetool-setup/docker-images/OracleWebCenterSites/imagetool/12.2.1.4 $ cd imagetool-setup/docker-images/OracleWebCenterSites/imagetool/12.2.1.4 - $ cp -rf ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/imagetool-scripts/* . + $ cp -rf ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/imagetool-scripts/* . ``` #### Create an image @@ -157,7 +157,7 @@ Following is the list of installation binaries and patches required for 21.1.1 r ##### Update required build files -The following files available in the code repository location `${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/imagetool-scripts` are used for creating the image. +The following files available in the code repository location `${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/imagetool-scripts` are used for creating the image. * `additionalBuildCmds.txt` * `buildArgs` diff --git a/docs-source/content/wcsites-domains/installguide/create-wcsites-domains/_index.md b/docs-source/content/wcsites-domains/installguide/create-wcsites-domains/_index.md index 9df9c65aa..7e345d133 100644 --- a/docs-source/content/wcsites-domains/installguide/create-wcsites-domains/_index.md +++ b/docs-source/content/wcsites-domains/installguide/create-wcsites-domains/_index.md @@ -66,7 +66,7 @@ The following parameters can be provided in the inputs file: | `domainUID` | Unique ID that will be used to identify this particular domain. Used as the name of the generated WebLogic domain as well as the name of the Kubernetes domain resource. This ID must be unique across all domains in a Kubernetes cluster. This ID cannot contain any character that is not valid in a Kubernetes service name. | `wcsitesinfra` | | `exposeAdminNodePort` | Boolean indicating if the Administration Server is exposed outside of the Kubernetes cluster. | `false` | | `exposeAdminT3Channel` | Boolean indicating if the T3 administrative channel is exposed outside the Kubernetes cluster. | `false` | -| `image` | WebCenter Sites Docker image. The Operator requires WebCenter Sites release 12.2.1.4.0. Refer to [WebCenter Sites Docker image](https://github.com/oracle/docker-images/tree/master/OracleWebCenterSites/dockerfiles/12.2.1.4) for details on how to obtain or create the image. | `oracle/wcsites:12.2.1.4-21.1.1` | +| `image` | WebCenter Sites Docker image. The Operator requires WebCenter Sites release 12.2.1.4.0. Refer to [WebCenter Sites Docker image](https://oracle.github.io/fmw-kubernetes/wcsites-domains/installguide/prepare-your-environment/#build-oracle-webcenter-sites-image) for details on how to obtain or create the image. | `oracle/wcsites:12.2.1.4-21.1.1` | | `imagePullPolicy` | WebLogic Docker image pull policy. Legal values are `IfNotPresent`, `Always`, or `Never` | `IfNotPresent` | | `imagePullSecretName` | Name of the Kubernetes secret to access the Docker Store to pull the WebLogic Server Docker image. The presence of the secret will be validated when this parameter is specified. | | | `includeServerOutInPodLog` | Boolean indicating whether to include the server.out to the pod's stdout. | `true` | @@ -615,4 +615,4 @@ wcsitesinfra-wcsites-server1-np NodePort 10.105.167.205 8001 #### Customization -A customer specific customizations (extend.sites.webapp-lib.war) has to be placed in sites-home directory inside your domain mount path. \ No newline at end of file +A customer specific customizations (extend.sites.webapp-lib.war) has to be placed in `sites-home` directory inside your domain mount path (/scratch/K8SVolume/WCSites/sites-home). diff --git a/docs-source/content/wcsites-domains/installguide/prepare-your-environment/_index.md b/docs-source/content/wcsites-domains/installguide/prepare-your-environment/_index.md index d7a55e11d..e21b41d84 100644 --- a/docs-source/content/wcsites-domains/installguide/prepare-your-environment/_index.md +++ b/docs-source/content/wcsites-domains/installguide/prepare-your-environment/_index.md @@ -24,7 +24,7 @@ This document describes the steps to set up the environment that includes settin #### Set Up your Kubernetes Cluster -If you need help in setting up a Kubernetes environment, check our [cheat sheet](https://oracle.github.io/weblogic-kubernetes-operator/userguide/overview/k8s-setup). +If you need help in setting up a Kubernetes environment, check our [cheat sheet](https://oracle.github.io/weblogic-kubernetes-operator/userguide/kubernetes/k8s-setup). After creating Kubernetes clusters, you can optionally: @@ -35,6 +35,26 @@ After creating Kubernetes clusters, you can optionally: Build Oracle WebCenter Sites 12.2.1.4 Image by following steps from this [document](https://oracle.github.io/fmw-kubernetes/wcsites-domains/create-or-update-image/#create-an-image). +Alternatively, the Oracle WebCenter Sites Image with latest bundle patch can be obtained from My Oracle Support (MOS). + +1. Download patch [32847300](https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=32847300) from My Oracle Support (MOS). + +1. Unzip the downloaded zip file. + + For example: + ```bash + $ unzip  p32847300_122140_Linux-x86-64.zip + ``` + +1. Load the image archive using the `docker load` command. + + For example: + ```bash + $ docker load < wcsites-20210422.tar.gz + ``` + +> Note: The default Oracle WebCenter Sites image name used for Oracle WebCenter Sites domains deployment is `oracle/wcsites:12.2.1.4-21.1.1`. The image obtained must be tagged as `oracle/wcsites:12.2.1.4-21.1.1` using the `docker tag` command. If you want to use a different name for the image, make sure to update the new image tag name in the `create-domain-inputs.yaml` file and also in other instances where the `oracle/wcsites:12.2.1.4-21.1.1` image name is used. + #### Pull Other Dependent Images Dependent images include WebLogic Kubernetes Operator, and Traefik. Pull these images and add them to your local registry: @@ -89,7 +109,8 @@ Oracle WebCenter Sites domain deployment on Kubernetes leverages the Oracle WebL ```bash $ git clone https://github.com/oracle/fmw-kubernetes.git - $ cp -rf /fmw-kubernetes/OracleWebCenterSites/kubernetes/3.0.1/create-wcsites-domain /weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ + $ cp -rf /fmw-kubernetes/OracleWebCenterSites/kubernetes/create-wcsites-domain /weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ + $ cp -rf /fmw-kubernetes/OracleWebCenterSites/kubernetes/imagetool-scripts /weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ ``` You can now use the deployment scripts from `/weblogic-kubernetes-operator-3.0.1` to set up the WebCenter Sites domain as further described in this document. @@ -145,7 +166,7 @@ $ cd /weblogic-kubernetes-operator-3.0.1 > Helm install weblogic-operator ```bash - $ helm install weblogic-kubernetes-operator kubernetes/charts/weblogic-operator --namespace operator-ns --set serviceAccount=operator-sa --set "domainNamespaces={}" --wait + $ helm install weblogic-kubernetes-operator kubernetes/charts/weblogic-operator --namespace operator-ns --set image=oracle/weblogic-kubernetes-operator:3.0.1 --set serviceAccount=operator-sa --set "domainNamespaces={}" --wait NAME: weblogic-kubernetes-operator @@ -277,7 +298,7 @@ Note: Host name or IP address of the NFS Server and NFS Share path which is used ```bash $ sh kubernetes/samples/scripts/create-rcu-credentials/create-rcu-credentials.sh \ - -u WCS1 -p Welcome1 -a sys -q Oradoc_db1 -n wcsites-ns \ + -u WCS1 -p Welcome##1 -a sys -q Welcome##1 -n wcsites-ns \ -d wcsitesinfra -s wcsitesinfra-rcu-credentials secret/wcsitesinfra-rcu-credentials created @@ -287,8 +308,8 @@ Note: Host name or IP address of the NFS Server and NFS Share path which is used Where: * WCS1 is the schema user - * Welcome1 is the schema password - * Oradoc_db1 is the database SYS users password + * Welcome##1 is the schema password + * Welcome##1 is the database SYS users password * wcsitesinfra is the domain name * wcsites-ns is the domain namespace * wcsitesinfra-rcu-credentials is the secret name @@ -378,4 +399,4 @@ Oracle WebCenter Sites domains require a database with the necessary schemas ins For production deployments, you must set up and use the standalone (non-container) based database running outside of Kubernetes. -Before creating a domain, you will need to set up the necessary schemas in your database. \ No newline at end of file +Before creating a domain, you need to set up the necessary schemas in your database. diff --git a/docs/21.3.2/404.html b/docs/21.3.2/404.html new file mode 100644 index 000000000..096e847fe --- /dev/null +++ b/docs/21.3.2/404.html @@ -0,0 +1,57 @@ + + + + + + + + + 404 Page not found + + + + + + + + + + + + + + + + +
+
+
+
+

Error

+

+

+

Woops. Looks like this page doesn't exist ¯\_(ツ)_/¯.

+

+

Go to homepage

+

Page not found!

+
+
+ +
+ + + diff --git a/docs/21.3.2/categories/index.html b/docs/21.3.2/categories/index.html new file mode 100644 index 000000000..961e54f6d --- /dev/null +++ b/docs/21.3.2/categories/index.html @@ -0,0 +1,2676 @@ + + + + + + + + + + + + Categories :: Oracle Fusion Middleware on Kubernetes + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ + + + +
+
+ +
+
+ + +
+
+ +
+ +
+ +
+ +

+ + Categories +

+ + + + + + + + + +
    + +
+ + +
+ +
+ + +
+ + +
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/docs/21.3.2/categories/index.xml b/docs/21.3.2/categories/index.xml new file mode 100644 index 000000000..01ad9a8e0 --- /dev/null +++ b/docs/21.3.2/categories/index.xml @@ -0,0 +1,14 @@ + + + + Categories on Oracle Fusion Middleware on Kubernetes + /fmw-kubernetes/21.3.2/categories/ + Recent content in Categories on Oracle Fusion Middleware on Kubernetes + Hugo -- gohugo.io + en-us + + + + + + \ No newline at end of file diff --git a/docs/21.3.2/css/atom-one-dark-reasonable.css b/docs/21.3.2/css/atom-one-dark-reasonable.css new file mode 100644 index 000000000..fd41c996a --- /dev/null +++ b/docs/21.3.2/css/atom-one-dark-reasonable.css @@ -0,0 +1,77 @@ +/* + +Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage + +Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + line-height: 1.3em; + color: #abb2bf; + background: #282c34; + border-radius: 5px; +} +.hljs-keyword, .hljs-operator { + color: #F92672; +} +.hljs-pattern-match { + color: #F92672; +} +.hljs-pattern-match .hljs-constructor { + color: #61aeee; +} +.hljs-function { + color: #61aeee; +} +.hljs-function .hljs-params { + color: #A6E22E; +} +.hljs-function .hljs-params .hljs-typing { + color: #FD971F; +} +.hljs-module-access .hljs-module { + color: #7e57c2; +} +.hljs-constructor { + color: #e2b93d; +} +.hljs-constructor .hljs-string { + color: #9CCC65; +} +.hljs-comment, .hljs-quote { + color: #b18eb1; + font-style: italic; +} +.hljs-doctag, .hljs-formula { + color: #c678dd; +} +.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { + color: #e06c75; +} +.hljs-literal { + color: #56b6c2; +} +.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { + color: #98c379; +} +.hljs-built_in, .hljs-class .hljs-title { + color: #e6c07b; +} +.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number { + color: #d19a66; +} +.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title { + color: #61aeee; +} +.hljs-emphasis { + font-style: italic; +} +.hljs-strong { + font-weight: bold; +} +.hljs-link { + text-decoration: underline; +} diff --git a/docs/21.3.2/css/auto-complete.css b/docs/21.3.2/css/auto-complete.css new file mode 100644 index 000000000..ac6979ad3 --- /dev/null +++ b/docs/21.3.2/css/auto-complete.css @@ -0,0 +1,47 @@ +.autocomplete-suggestions { + text-align: left; + cursor: default; + border: 1px solid #ccc; + border-top: 0; + background: #fff; + box-shadow: -1px 1px 3px rgba(0,0,0,.1); + + /* core styles should not be changed */ + position: absolute; + display: none; + z-index: 9999; + max-height: 254px; + overflow: hidden; + overflow-y: auto; + box-sizing: border-box; + +} +.autocomplete-suggestion { + position: relative; + cursor: pointer; + padding: 7px; + line-height: 23px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #333; +} + +.autocomplete-suggestion b { + font-weight: normal; + color: #1f8dd6; +} + +.autocomplete-suggestion.selected { + background: #333; + color: #fff; +} + +.autocomplete-suggestion:hover { + background: #444; + color: #fff; +} + +.autocomplete-suggestion > .context { + font-size: 12px; +} diff --git a/docs/21.3.2/css/featherlight.min.css b/docs/21.3.2/css/featherlight.min.css new file mode 100644 index 000000000..1b00c7861 --- /dev/null +++ b/docs/21.3.2/css/featherlight.min.css @@ -0,0 +1,8 @@ +/** + * Featherlight - ultra slim jQuery lightbox + * Version 1.7.13 - http://noelboss.github.io/featherlight/ + * + * Copyright (c) 2015, Noël Raoul Bossart (http://www.noelboss.com) + * MIT Licensed. +**/ +html.with-featherlight{overflow:hidden}.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight link.featherlight-inner,.featherlight script.featherlight-inner,.featherlight style.featherlight-inner{display:none}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000;border:0;padding:0}.featherlight .featherlight-close-icon::-moz-focus-inner{border:0;padding:0}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0;-webkit-overflow-scrolling:touch}.featherlight iframe{border:0}.featherlight *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:0;margin-right:0;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}@media print{html.with-featherlight>*>:not(.featherlight){display:none}} \ No newline at end of file diff --git a/docs/21.3.2/css/fontawesome-all.min.css b/docs/21.3.2/css/fontawesome-all.min.css new file mode 100644 index 000000000..de5647372 --- /dev/null +++ b/docs/21.3.2/css/fontawesome-all.min.css @@ -0,0 +1 @@ +.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/docs/21.3.2/css/hugo-theme.css b/docs/21.3.2/css/hugo-theme.css new file mode 100644 index 000000000..741cab196 --- /dev/null +++ b/docs/21.3.2/css/hugo-theme.css @@ -0,0 +1,254 @@ +/* Insert here special css for hugo theme, on top of any other imported css */ + + +/* Table of contents */ + +.progress ul { + list-style: none; + margin: 0; + padding: 0 5px; +} + +#TableOfContents { + font-size: 13px !important; + max-height: 85vh; + overflow: auto; + padding: 15px !important; +} + + +#TableOfContents > ul > li > ul > li > ul li { + margin-right: 8px; +} + +#TableOfContents > ul > li > a { + font-weight: bold; padding: 0 18px; margin: 0 2px; +} + +#TableOfContents > ul > li > ul > li > a { + font-weight: bold; +} + +#TableOfContents > ul > li > ul > li > ul > li > ul > li > ul > li { + display: none; +} + +body { + font-size: 16px !important; + color: #323232 !important; +} + +#body a.highlight, #body a.highlight:hover, #body a.highlight:focus { + text-decoration: none; + outline: none; + outline: 0; +} +#body a.highlight { + line-height: 1.1; + display: inline-block; +} +#body a.highlight:after { + display: block; + content: ""; + height: 1px; + width: 0%; + background-color: #0082a7; /*#CE3B2F*/ + -webkit-transition: width 0.5s ease; + -moz-transition: width 0.5s ease; + -ms-transition: width 0.5s ease; + transition: width 0.5s ease; +} +#body a.highlight:hover:after, #body a.highlight:focus:after { + width: 100%; +} +.progress { + position:absolute; + background-color: rgba(246, 246, 246, 0.97); + width: auto; + border: thin solid #ECECEC; + display:none; + z-index:200; +} + +#toc-menu { + border-right: thin solid #DAD8D8 !important; + padding-right: 1rem !important; + margin-right: 0.5rem !important; +} + +#sidebar-toggle-span { + border-right: thin solid #DAD8D8 !important; + padding-right: 0.5rem !important; + margin-right: 1rem !important; +} + +.btn { + display: inline-block !important; + padding: 6px 12px !important; + margin-bottom: 0 !important; + font-size: 14px !important; + font-weight: normal !important; + line-height: 1.42857143 !important; + text-align: center !important; + white-space: nowrap !important; + vertical-align: middle !important; + -ms-touch-action: manipulation !important; + touch-action: manipulation !important; + cursor: pointer !important; + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; + background-image: none !important; + border: 1px solid transparent !important; + border-radius: 4px !important; + -webkit-transition: all 0.15s !important; + -moz-transition: all 0.15s !important; + transition: all 0.15s !important; +} +.btn:focus { + /*outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px;*/ + outline: none !important; +} +.btn:hover, +.btn:focus { + color: #2b2b2b !important; + text-decoration: none !important; +} + +.btn-default { + color: #333 !important; + background-color: #fff !important; + border-color: #ccc !important; +} +.btn-default:hover, +.btn-default:focus, +.btn-default:active { + color: #fff !important; + background-color: #9e9e9e !important; + border-color: #9e9e9e !important; +} +.btn-default:active { + background-image: none !important; +} + +/* anchors */ +.anchor { + color: #00bdf3; + font-size: 0.5em; + cursor:pointer; + visibility:hidden; + margin-left: 0.5em; + position: absolute; + margin-top:0.1em; +} + +h2:hover .anchor, h3:hover .anchor, h4:hover .anchor, h5:hover .anchor, h6:hover .anchor { + visibility:visible; +} + +/* Redfines headers style */ + +h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; +} + +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { + font-weight: inherit; +} + +h2 { + font-size: 2.5rem; + line-height: 110% !important; + margin: 2.5rem 0 1.5rem 0; +} + +h3 { + font-size: 2rem; + line-height: 110% !important; + margin: 2rem 0 1rem 0; +} + +h4 { + font-size: 1.5rem; + line-height: 110% !important; + margin: 1.5rem 0 0.75rem 0; +} + +h5 { + font-size: 1rem; + line-height: 110% !important; + margin: 1rem 0 0.2rem 0; +} + +h6 { + font-size: 0.5rem; + line-height: 110% !important; + margin: 0.5rem 0 0.2rem 0; +} + +p { + margin: 1rem 0; +} + +figcaption h4 { + font-weight: 300 !important; + opacity: .85; + font-size: 1em; + text-align: center; + margin-top: -1.5em; +} + +.select-style { + border: 0; + width: 150px; + border-radius: 0px; + overflow: hidden; + display: inline-flex; +} + +.select-style svg { + fill: #ccc; + width: 14px; + height: 14px; + pointer-events: none; + margin: auto; +} + +.select-style svg:hover { + fill: #e6e6e6; +} + +.select-style select { + padding: 0; + width: 130%; + border: none; + box-shadow: none; + background: transparent; + background-image: none; + -webkit-appearance: none; + margin: auto; + margin-left: 0px; + margin-right: -20px; +} + +.select-style select:focus { + outline: none; +} + +.select-style :hover { + cursor: pointer; +} + +@media only all and (max-width: 47.938em) { + #breadcrumbs .links, #top-github-link-text { + display: none; + } +} + +.is-sticky #top-bar { + box-shadow: -1px 2px 5px 1px rgba(0, 0, 0, 0.1); +} \ No newline at end of file diff --git a/docs/21.3.2/css/hybrid.css b/docs/21.3.2/css/hybrid.css new file mode 100644 index 000000000..29735a189 --- /dev/null +++ b/docs/21.3.2/css/hybrid.css @@ -0,0 +1,102 @@ +/* + +vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) + +*/ + +/*background color*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #1d1f21; +} + +/*selection color*/ +.hljs::selection, +.hljs span::selection { + background: #373b41; +} + +.hljs::-moz-selection, +.hljs span::-moz-selection { + background: #373b41; +} + +/*foreground color*/ +.hljs { + color: #c5c8c6; +} + +/*color: fg_yellow*/ +.hljs-title, +.hljs-name { + color: #f0c674; +} + +/*color: fg_comment*/ +.hljs-comment, +.hljs-meta, +.hljs-meta .hljs-keyword { + color: #707880; +} + +/*color: fg_red*/ +.hljs-number, +.hljs-symbol, +.hljs-literal, +.hljs-deletion, +.hljs-link { + color: #cc6666 +} + +/*color: fg_green*/ +.hljs-string, +.hljs-doctag, +.hljs-addition, +.hljs-regexp, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #b5bd68; +} + +/*color: fg_purple*/ +.hljs-attribute, +.hljs-code, +.hljs-selector-id { + color: #b294bb; +} + +/*color: fg_blue*/ +.hljs-keyword, +.hljs-selector-tag, +.hljs-bullet, +.hljs-tag { + color: #81a2be; +} + +/*color: fg_aqua*/ +.hljs-subst, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #8abeb7; +} + +/*color: fg_orange*/ +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-quote, +.hljs-section, +.hljs-selector-class { + color: #de935f; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/docs/21.3.2/css/nucleus.css b/docs/21.3.2/css/nucleus.css new file mode 100644 index 000000000..1897fc5d6 --- /dev/null +++ b/docs/21.3.2/css/nucleus.css @@ -0,0 +1,615 @@ +*, *::before, *::after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + +@-webkit-viewport { + width: device-width; } +@-moz-viewport { + width: device-width; } +@-ms-viewport { + width: device-width; } +@-o-viewport { + width: device-width; } +@viewport { + width: device-width; } +html { + font-size: 100%; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; } + +body { + margin: 0; } + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; } + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; } + +audio:not([controls]) { + display: none; + height: 0; } + +[hidden], +template { + display: none; } + +a { + background: transparent; + text-decoration: none; } + +a:active, +a:hover { + outline: 0; } + +abbr[title] { + border-bottom: 1px dotted; } + +b, +strong { + font-weight: bold; } + +dfn { + font-style: italic; } + +mark { + background: #FFFF27; + color: #333; } + +sub, +sup { + font-size: 0.8rem; + line-height: 0; + position: relative; + vertical-align: baseline; } + +sup { + top: -0.5em; } + +sub { + bottom: -0.25em; } + +img { + border: 0; + max-width: 100%; } + +svg:not(:root) { + overflow: hidden; } + +figure { + margin: 1em 40px; } + +hr { + height: 0; } + +pre { + overflow: auto; } + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; } + +button { + overflow: visible; } + +button, +select { + text-transform: none; } + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; } + +button[disabled], +html input[disabled] { + cursor: default; } + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; } + +input { + line-height: normal; } + +input[type="checkbox"], +input[type="radio"] { + padding: 0; } + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; } + +input[type="search"] { + -webkit-appearance: textfield; } + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +legend { + border: 0; + padding: 0; } + +textarea { + overflow: auto; } + +optgroup { + font-weight: bold; } + +table { + border-collapse: collapse; + border-spacing: 0; + table-layout: fixed; + width: 100%; } + +tr, td, th { + vertical-align: middle; } + +th, td { + padding: 0.425rem 0; } + +th { + text-align: left; } + +.container { + width: 75em; + margin: 0 auto; + padding: 0; } + @media only all and (min-width: 60em) and (max-width: 74.938em) { + .container { + width: 60em; } } + @media only all and (min-width: 48em) and (max-width: 59.938em) { + .container { + width: 48em; } } + @media only all and (min-width: 30.063em) and (max-width: 47.938em) { + .container { + width: 30em; } } + @media only all and (max-width: 30em) { + .container { + width: 100%; } } + +.grid { + display: -webkit-box; + display: -moz-box; + display: box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row; + -moz-flex-flow: row; + flex-flow: row; + list-style: none; + margin: 0; + padding: 0; } + @media only all and (max-width: 47.938em) { + .grid { + -webkit-flex-flow: row wrap; + -moz-flex-flow: row wrap; + flex-flow: row wrap; } } + +.block { + -webkit-box-flex: 1; + -moz-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -moz-flex: 1; + -ms-flex: 1; + flex: 1; + min-width: 0; + min-height: 0; } + @media only all and (max-width: 47.938em) { + .block { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 100%; + -moz-flex: 0 100%; + -ms-flex: 0 100%; + flex: 0 100%; } } + +.content { + margin: 0.625rem; + padding: 0.938rem; } + +@media only all and (max-width: 47.938em) { + body [class*="size-"] { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 100%; + -moz-flex: 0 100%; + -ms-flex: 0 100%; + flex: 0 100%; } } + +.size-1-2 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 50%; + -moz-flex: 0 50%; + -ms-flex: 0 50%; + flex: 0 50%; } + +.size-1-3 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 33.33333%; + -moz-flex: 0 33.33333%; + -ms-flex: 0 33.33333%; + flex: 0 33.33333%; } + +.size-1-4 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 25%; + -moz-flex: 0 25%; + -ms-flex: 0 25%; + flex: 0 25%; } + +.size-1-5 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 20%; + -moz-flex: 0 20%; + -ms-flex: 0 20%; + flex: 0 20%; } + +.size-1-6 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 16.66667%; + -moz-flex: 0 16.66667%; + -ms-flex: 0 16.66667%; + flex: 0 16.66667%; } + +.size-1-7 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 14.28571%; + -moz-flex: 0 14.28571%; + -ms-flex: 0 14.28571%; + flex: 0 14.28571%; } + +.size-1-8 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 12.5%; + -moz-flex: 0 12.5%; + -ms-flex: 0 12.5%; + flex: 0 12.5%; } + +.size-1-9 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 11.11111%; + -moz-flex: 0 11.11111%; + -ms-flex: 0 11.11111%; + flex: 0 11.11111%; } + +.size-1-10 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 10%; + -moz-flex: 0 10%; + -ms-flex: 0 10%; + flex: 0 10%; } + +.size-1-11 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 9.09091%; + -moz-flex: 0 9.09091%; + -ms-flex: 0 9.09091%; + flex: 0 9.09091%; } + +.size-1-12 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 8.33333%; + -moz-flex: 0 8.33333%; + -ms-flex: 0 8.33333%; + flex: 0 8.33333%; } + +@media only all and (min-width: 48em) and (max-width: 59.938em) { + .size-tablet-1-2 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 50%; + -moz-flex: 0 50%; + -ms-flex: 0 50%; + flex: 0 50%; } + + .size-tablet-1-3 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 33.33333%; + -moz-flex: 0 33.33333%; + -ms-flex: 0 33.33333%; + flex: 0 33.33333%; } + + .size-tablet-1-4 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 25%; + -moz-flex: 0 25%; + -ms-flex: 0 25%; + flex: 0 25%; } + + .size-tablet-1-5 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 20%; + -moz-flex: 0 20%; + -ms-flex: 0 20%; + flex: 0 20%; } + + .size-tablet-1-6 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 16.66667%; + -moz-flex: 0 16.66667%; + -ms-flex: 0 16.66667%; + flex: 0 16.66667%; } + + .size-tablet-1-7 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 14.28571%; + -moz-flex: 0 14.28571%; + -ms-flex: 0 14.28571%; + flex: 0 14.28571%; } + + .size-tablet-1-8 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 12.5%; + -moz-flex: 0 12.5%; + -ms-flex: 0 12.5%; + flex: 0 12.5%; } + + .size-tablet-1-9 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 11.11111%; + -moz-flex: 0 11.11111%; + -ms-flex: 0 11.11111%; + flex: 0 11.11111%; } + + .size-tablet-1-10 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 10%; + -moz-flex: 0 10%; + -ms-flex: 0 10%; + flex: 0 10%; } + + .size-tablet-1-11 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 9.09091%; + -moz-flex: 0 9.09091%; + -ms-flex: 0 9.09091%; + flex: 0 9.09091%; } + + .size-tablet-1-12 { + -webkit-box-flex: 0; + -moz-box-flex: 0; + box-flex: 0; + -webkit-flex: 0 8.33333%; + -moz-flex: 0 8.33333%; + -ms-flex: 0 8.33333%; + flex: 0 8.33333%; } } +@media only all and (max-width: 47.938em) { + @supports not (flex-wrap: wrap) { + .grid { + display: block; + -webkit-box-lines: inherit; + -moz-box-lines: inherit; + box-lines: inherit; + -webkit-flex-wrap: inherit; + -moz-flex-wrap: inherit; + -ms-flex-wrap: inherit; + flex-wrap: inherit; } + + .block { + display: block; + -webkit-box-flex: inherit; + -moz-box-flex: inherit; + box-flex: inherit; + -webkit-flex: inherit; + -moz-flex: inherit; + -ms-flex: inherit; + flex: inherit; } } } +.first-block { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; } + +.last-block { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + +.fixed-blocks { + -webkit-flex-flow: row wrap; + -moz-flex-flow: row wrap; + flex-flow: row wrap; } + .fixed-blocks .block { + -webkit-box-flex: inherit; + -moz-box-flex: inherit; + box-flex: inherit; + -webkit-flex: inherit; + -moz-flex: inherit; + -ms-flex: inherit; + flex: inherit; + width: 25%; } + @media only all and (min-width: 60em) and (max-width: 74.938em) { + .fixed-blocks .block { + width: 33.33333%; } } + @media only all and (min-width: 48em) and (max-width: 59.938em) { + .fixed-blocks .block { + width: 50%; } } + @media only all and (max-width: 47.938em) { + .fixed-blocks .block { + width: 100%; } } + +body { + font-size: 1.05rem; + line-height: 1.7; } + +h1, h2, h3, h4, h5, h6 { + margin: 0.85rem 0 1.7rem 0; + text-rendering: optimizeLegibility; } + +h1 { + font-size: 3.25rem; } + +h2 { + font-size: 2.55rem; } + +h3 { + font-size: 2.15rem; } + +h4 { + font-size: 1.8rem; } + +h5 { + font-size: 1.4rem; } + +h6 { + font-size: 0.9rem; } + +p { + margin: 1.7rem 0; } + +ul, ol { + margin-top: 1.7rem; + margin-bottom: 1.7rem; } + ul ul, ul ol, ol ul, ol ol { + margin-top: 0; + margin-bottom: 0; } + +blockquote { + margin: 1.7rem 0; + padding-left: 0.85rem; } + +cite { + display: block; + font-size: 0.925rem; } + cite:before { + content: "\2014 \0020"; } + +pre { + margin: 1.7rem 0; + padding: 0.938rem; } + +code { + vertical-align: bottom; } + +small { + font-size: 0.925rem; } + +hr { + border-left: none; + border-right: none; + border-top: none; + margin: 1.7rem 0; } + +fieldset { + border: 0; + padding: 0.938rem; + margin: 0 0 1.7rem 0; } + +input, +label, +select { + display: block; } + +label { + margin-bottom: 0.425rem; } + label.required:after { + content: "*"; } + label abbr { + display: none; } + +textarea, input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], select[multiple=multiple] { + -webkit-transition: border-color; + -moz-transition: border-color; + transition: border-color; + border-radius: 0.1875rem; + margin-bottom: 0.85rem; + padding: 0.425rem 0.425rem; + width: 100%; } + textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { + outline: none; } + +textarea { + resize: vertical; } + +input[type="checkbox"], input[type="radio"] { + display: inline; + margin-right: 0.425rem; } + +input[type="file"] { + width: 100%; } + +select { + width: auto; + max-width: 100%; + margin-bottom: 1.7rem; } + +button, +input[type="submit"] { + cursor: pointer; + user-select: none; + vertical-align: middle; + white-space: nowrap; + border: inherit; } diff --git a/docs/21.3.2/css/perfect-scrollbar.min.css b/docs/21.3.2/css/perfect-scrollbar.min.css new file mode 100644 index 000000000..ebd2cb43b --- /dev/null +++ b/docs/21.3.2/css/perfect-scrollbar.min.css @@ -0,0 +1,2 @@ +/* perfect-scrollbar v0.6.13 */ +.ps-container{-ms-touch-action:auto;touch-action:auto;overflow:hidden !important;-ms-overflow-style:none}@supports (-ms-overflow-style: none){.ps-container{overflow:auto !important}}@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){.ps-container{overflow:auto !important}}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block;background-color:transparent}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999;height:11px}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999;width:11px}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;opacity:0;-webkit-transition:background-color .2s linear, opacity .2s linear;-o-transition:background-color .2s linear, opacity .2s linear;-moz-transition:background-color .2s linear, opacity .2s linear;transition:background-color .2s linear, opacity .2s linear;bottom:0px;height:15px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;-o-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;-moz-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;bottom:2px;height:6px}.ps-container>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x,.ps-container>.ps-scrollbar-x-rail:active>.ps-scrollbar-x{height:11px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;opacity:0;-webkit-transition:background-color .2s linear, opacity .2s linear;-o-transition:background-color .2s linear, opacity .2s linear;-moz-transition:background-color .2s linear, opacity .2s linear;transition:background-color .2s linear, opacity .2s linear;right:0;width:15px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;-o-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;-moz-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;right:2px;width:6px}.ps-container>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y,.ps-container>.ps-scrollbar-y-rail:active>.ps-scrollbar-y{width:11px}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999;height:11px}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999;width:11px}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999} diff --git a/docs/21.3.2/css/tags.css b/docs/21.3.2/css/tags.css new file mode 100644 index 000000000..495d2f9f7 --- /dev/null +++ b/docs/21.3.2/css/tags.css @@ -0,0 +1,49 @@ +/* Tags */ + +#head-tags{ + margin-left:1em; + margin-top:1em; +} + +#body .tags a.tag-link { + display: inline-block; + line-height: 2em; + font-size: 0.8em; + position: relative; + margin: 0 16px 8px 0; + padding: 0 10px 0 12px; + background: #8451a1; + + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2); + box-shadow: 0 1px 2px rgba(0,0,0,0.2); + color: #fff; +} + +#body .tags a.tag-link:before { + content: ""; + position: absolute; + top:0; + left: -1em; + width: 0; + height: 0; + border-color: transparent #8451a1 transparent transparent; + border-style: solid; + border-width: 1em 1em 1em 0; +} + +#body .tags a.tag-link:after { + content: ""; + position: absolute; + top: 10px; + left: 1px; + width: 5px; + height: 5px; + -webkit-border-radius: 50%; + border-radius: 100%; + background: #fff; +} diff --git a/docs/21.3.2/css/theme-blue.css b/docs/21.3.2/css/theme-blue.css new file mode 100644 index 000000000..9771ae5e3 --- /dev/null +++ b/docs/21.3.2/css/theme-blue.css @@ -0,0 +1,111 @@ + +:root{ + + --MAIN-TEXT-color:#323232; /* Color of text by default */ + --MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5 */ + --MAIN-LINK-color:#1C90F3; /* Color of links */ + --MAIN-LINK-HOVER-color:#167ad0; /* Color of hovered links */ + --MAIN-ANCHOR-color: #1C90F3; /* color of anchors on titles */ + + --MENU-HEADER-BG-color:#1C90F3; /* Background color of menu header */ + --MENU-HEADER-BORDER-color:#33a1ff; /*Color of menu header border */ + + --MENU-SEARCH-BG-color:#167ad0; /* Search field background color (by default borders + icons) */ + --MENU-SEARCH-BOX-color: #33a1ff; /* Override search field border color */ + --MENU-SEARCH-BOX-ICONS-color: #a1d2fd; /* Override search field icons color */ + + --MENU-SECTIONS-ACTIVE-BG-color:#20272b; /* Background color of the active section and its childs */ + --MENU-SECTIONS-BG-color:#252c31; /* Background color of other sections */ + --MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */ + --MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */ + --MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */ + --MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */ + + --MENU-VISITED-color: #33a1ff; /* Color of 'page visited' icons in menu */ + --MENU-SECTION-HR-color: #20272b; /* Color of
separator in menu */ + +} + +body { + color: var(--MAIN-TEXT-color) !important; +} + +textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { + border-color: none; + box-shadow: none; +} + +h2, h3, h4, h5 { + color: var(--MAIN-TITLES-TEXT-color) !important; +} + +a { + color: var(--MAIN-LINK-color); +} + +.anchor { + color: var(--MAIN-ANCHOR-color); +} + +a:hover { + color: var(--MAIN-LINK-HOVER-color); +} + +#sidebar ul li.visited > a .read-icon { + color: var(--MENU-VISITED-color); +} + +#body a.highlight:after { + display: block; + content: ""; + height: 1px; + width: 0%; + -webkit-transition: width 0.5s ease; + -moz-transition: width 0.5s ease; + -ms-transition: width 0.5s ease; + transition: width 0.5s ease; + background-color: var(--MAIN-LINK-HOVER-color); +} +#sidebar { + background-color: var(--MENU-SECTIONS-BG-color); +} +#sidebar #header-wrapper { + background: var(--MENU-HEADER-BG-color); + color: var(--MENU-SEARCH-BOX-color); + border-color: var(--MENU-HEADER-BORDER-color); +} +#sidebar .searchbox { + border-color: var(--MENU-SEARCH-BOX-color); + background: var(--MENU-SEARCH-BG-color); +} +#sidebar ul.topics > li.parent, #sidebar ul.topics > li.active { + background: var(--MENU-SECTIONS-ACTIVE-BG-color); +} +#sidebar .searchbox * { + color: var(--MENU-SEARCH-BOX-ICONS-color); +} + +#sidebar a { + color: var(--MENU-SECTIONS-LINK-color); +} + +#sidebar a:hover { + color: var(--MENU-SECTIONS-LINK-HOVER-color); +} + +#sidebar ul li.active > a { + background: var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color); + color: var(--MENU-SECTION-ACTIVE-CATEGORY-color) !important; +} + +#sidebar hr { + border-color: var(--MENU-SECTION-HR-color); +} + +#body .tags a.tag-link { + background-color: var(--MENU-HEADER-BG-color); +} + +#body .tags a.tag-link:before { + border-right-color: var(--MENU-HEADER-BG-color); +} \ No newline at end of file diff --git a/docs/21.3.2/css/theme-green.css b/docs/21.3.2/css/theme-green.css new file mode 100644 index 000000000..3b0b1f721 --- /dev/null +++ b/docs/21.3.2/css/theme-green.css @@ -0,0 +1,111 @@ + +:root{ + + --MAIN-TEXT-color:#323232; /* Color of text by default */ + --MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5 */ + --MAIN-LINK-color:#599a3e; /* Color of links */ + --MAIN-LINK-HOVER-color:#3f6d2c; /* Color of hovered links */ + --MAIN-ANCHOR-color: #599a3e; /* color of anchors on titles */ + + --MENU-HEADER-BG-color:#74b559; /* Background color of menu header */ + --MENU-HEADER-BORDER-color:#9cd484; /*Color of menu header border */ + + --MENU-SEARCH-BG-color:#599a3e; /* Search field background color (by default borders + icons) */ + --MENU-SEARCH-BOX-color: #84c767; /* Override search field border color */ + --MENU-SEARCH-BOX-ICONS-color: #c7f7c4; /* Override search field icons color */ + + --MENU-SECTIONS-ACTIVE-BG-color:#1b211c; /* Background color of the active section and its childs */ + --MENU-SECTIONS-BG-color:#222723; /* Background color of other sections */ + --MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */ + --MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */ + --MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */ + --MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */ + + --MENU-VISITED-color: #599a3e; /* Color of 'page visited' icons in menu */ + --MENU-SECTION-HR-color: #18211c; /* Color of
separator in menu */ + +} + +body { + color: var(--MAIN-TEXT-color) !important; +} + +textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { + border-color: none; + box-shadow: none; +} + +h2, h3, h4, h5 { + color: var(--MAIN-TITLES-TEXT-color) !important; +} + +a { + color: var(--MAIN-LINK-color); +} + +.anchor { + color: var(--MAIN-ANCHOR-color); +} + +a:hover { + color: var(--MAIN-LINK-HOVER-color); +} + +#sidebar ul li.visited > a .read-icon { + color: var(--MENU-VISITED-color); +} + +#body a.highlight:after { + display: block; + content: ""; + height: 1px; + width: 0%; + -webkit-transition: width 0.5s ease; + -moz-transition: width 0.5s ease; + -ms-transition: width 0.5s ease; + transition: width 0.5s ease; + background-color: var(--MAIN-LINK-HOVER-color); +} +#sidebar { + background-color: var(--MENU-SECTIONS-BG-color); +} +#sidebar #header-wrapper { + background: var(--MENU-HEADER-BG-color); + color: var(--MENU-SEARCH-BOX-color); + border-color: var(--MENU-HEADER-BORDER-color); +} +#sidebar .searchbox { + border-color: var(--MENU-SEARCH-BOX-color); + background: var(--MENU-SEARCH-BG-color); +} +#sidebar ul.topics > li.parent, #sidebar ul.topics > li.active { + background: var(--MENU-SECTIONS-ACTIVE-BG-color); +} +#sidebar .searchbox * { + color: var(--MENU-SEARCH-BOX-ICONS-color); +} + +#sidebar a { + color: var(--MENU-SECTIONS-LINK-color); +} + +#sidebar a:hover { + color: var(--MENU-SECTIONS-LINK-HOVER-color); +} + +#sidebar ul li.active > a { + background: var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color); + color: var(--MENU-SECTION-ACTIVE-CATEGORY-color) !important; +} + +#sidebar hr { + border-color: var(--MENU-SECTION-HR-color); +} + +#body .tags a.tag-link { + background-color: var(--MENU-HEADER-BG-color); +} + +#body .tags a.tag-link:before { + border-right-color: var(--MENU-HEADER-BG-color); +} \ No newline at end of file diff --git a/docs/21.3.2/css/theme-red.css b/docs/21.3.2/css/theme-red.css new file mode 100644 index 000000000..36c9278e5 --- /dev/null +++ b/docs/21.3.2/css/theme-red.css @@ -0,0 +1,111 @@ + +:root{ + + --MAIN-TEXT-color:#323232; /* Color of text by default */ + --MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5 */ + --MAIN-LINK-color:#f31c1c; /* Color of links */ + --MAIN-LINK-HOVER-color:#d01616; /* Color of hovered links */ + --MAIN-ANCHOR-color: #f31c1c; /* color of anchors on titles */ + + --MENU-HEADER-BG-color:#dc1010; /* Background color of menu header */ + --MENU-HEADER-BORDER-color:#e23131; /*Color of menu header border */ + + --MENU-SEARCH-BG-color:#b90000; /* Search field background color (by default borders + icons) */ + --MENU-SEARCH-BOX-color: #ef2020; /* Override search field border color */ + --MENU-SEARCH-BOX-ICONS-color: #fda1a1; /* Override search field icons color */ + + --MENU-SECTIONS-ACTIVE-BG-color:#2b2020; /* Background color of the active section and its childs */ + --MENU-SECTIONS-BG-color:#312525; /* Background color of other sections */ + --MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */ + --MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */ + --MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */ + --MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */ + + --MENU-VISITED-color: #ff3333; /* Color of 'page visited' icons in menu */ + --MENU-SECTION-HR-color: #2b2020; /* Color of
separator in menu */ + +} + +body { + color: var(--MAIN-TEXT-color) !important; +} + +textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { + border-color: none; + box-shadow: none; +} + +h2, h3, h4, h5 { + color: var(--MAIN-TITLES-TEXT-color) !important; +} + +a { + color: var(--MAIN-LINK-color); +} + +.anchor { + color: var(--MAIN-ANCHOR-color); +} + +a:hover { + color: var(--MAIN-LINK-HOVER-color); +} + +#sidebar ul li.visited > a .read-icon { + color: var(--MENU-VISITED-color); +} + +#body a.highlight:after { + display: block; + content: ""; + height: 1px; + width: 0%; + -webkit-transition: width 0.5s ease; + -moz-transition: width 0.5s ease; + -ms-transition: width 0.5s ease; + transition: width 0.5s ease; + background-color: var(--MAIN-LINK-HOVER-color); +} +#sidebar { + background-color: var(--MENU-SECTIONS-BG-color); +} +#sidebar #header-wrapper { + background: var(--MENU-HEADER-BG-color); + color: var(--MENU-SEARCH-BOX-color); + border-color: var(--MENU-HEADER-BORDER-color); +} +#sidebar .searchbox { + border-color: var(--MENU-SEARCH-BOX-color); + background: var(--MENU-SEARCH-BG-color); +} +#sidebar ul.topics > li.parent, #sidebar ul.topics > li.active { + background: var(--MENU-SECTIONS-ACTIVE-BG-color); +} +#sidebar .searchbox * { + color: var(--MENU-SEARCH-BOX-ICONS-color); +} + +#sidebar a { + color: var(--MENU-SECTIONS-LINK-color); +} + +#sidebar a:hover { + color: var(--MENU-SECTIONS-LINK-HOVER-color); +} + +#sidebar ul li.active > a { + background: var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color); + color: var(--MENU-SECTION-ACTIVE-CATEGORY-color) !important; +} + +#sidebar hr { + border-color: var(--MENU-SECTION-HR-color); +} + +#body .tags a.tag-link { + background-color: var(--MENU-HEADER-BG-color); +} + +#body .tags a.tag-link:before { + border-right-color: var(--MENU-HEADER-BG-color); +} \ No newline at end of file diff --git a/docs/21.3.2/css/theme.css b/docs/21.3.2/css/theme.css new file mode 100644 index 000000000..39d26c282 --- /dev/null +++ b/docs/21.3.2/css/theme.css @@ -0,0 +1,1132 @@ +@charset "UTF-8"; + +/* Tags */ +@import "tags.css"; + +#top-github-link, #body #breadcrumbs { + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +.button, .button-secondary { + display: inline-block; + padding: 7px 12px; +} +.button:active, .button-secondary:active { + margin: 2px 0 -2px 0; +} +@font-face { + font-family: 'Novacento Sans Wide'; + src: url("../fonts/Novecentosanswide-UltraLight-webfont.eot"); + src: url("../fonts/Novecentosanswide-UltraLight-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/Novecentosanswide-UltraLight-webfont.woff2") format("woff2"), url("../fonts/Novecentosanswide-UltraLight-webfont.woff") format("woff"), url("../fonts/Novecentosanswide-UltraLight-webfont.ttf") format("truetype"), url("../fonts/Novecentosanswide-UltraLight-webfont.svg#novecento_sans_wideultralight") format("svg"); + font-style: normal; + font-weight: 200; +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 300; + src: url("../fonts/Work_Sans_300.eot?#iefix") format("embedded-opentype"), url("../fonts/Work_Sans_300.woff") format("woff"), url("../fonts/Work_Sans_300.woff2") format("woff2"), url("../fonts/Work_Sans_300.svg#WorkSans") format("svg"), url("../fonts/Work_Sans_300.ttf") format("truetype"); +} +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 500; + src: url("../fonts/Work_Sans_500.eot?#iefix") format("embedded-opentype"), url("../fonts/Work_Sans_500.woff") format("woff"), url("../fonts/Work_Sans_500.woff2") format("woff2"), url("../fonts/Work_Sans_500.svg#WorkSans") format("svg"), url("../fonts/Work_Sans_500.ttf") format("truetype"); +} +body { + background: #fff; + color: #777; +} +body #chapter h1 { + font-size: 3.5rem; +} +@media only all and (min-width: 48em) and (max-width: 59.938em) { + body #chapter h1 { + font-size: 3rem; + } +} +@media only all and (max-width: 47.938em) { + body #chapter h1 { + font-size: 2rem; + } +} +a { + color: #00bdf3; +} +a:hover { + color: #0082a7; +} +pre { + position: relative; + color: #ffffff; +} +.bg { + background: #fff; + border: 1px solid #eaeaea; +} +b, strong, label, th { + font-weight: 600; +} +.default-animation, #header #logo-svg, #header #logo-svg path, #sidebar, #sidebar ul, #body, #body .padding, #body .nav { + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + transition: all 0.5s ease; +} +#grav-logo { + max-width: 60%; +} +#grav-logo path { + fill: #fff !important; +} +#sidebar { + font-weight: 300 !important; +} +fieldset { + border: 1px solid #ddd; +} +textarea, input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], select[multiple=multiple] { + background-color: white; + border: 1px solid #ddd; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.06); +} +textarea:hover, input[type="email"]:hover, input[type="number"]:hover, input[type="password"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="text"]:hover, input[type="url"]:hover, input[type="color"]:hover, input[type="date"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="month"]:hover, input[type="time"]:hover, input[type="week"]:hover, select[multiple=multiple]:hover { + border-color: #c4c4c4; +} +textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { + border-color: #00bdf3; + box-shadow: inset 0 1px 3px rgba(0,0,0,.06),0 0 5px rgba(0,169,218,.7) +} +#header-wrapper { + background: #8451a1; + color: #fff; + text-align: center; + border-bottom: 4px solid #9c6fb6; + padding: 1rem; +} +#header a { + display: inline-block; +} +#header #logo-svg { + width: 8rem; + height: 2rem; +} +#header #logo-svg path { + fill: #fff; +} +.searchbox { + margin-top: 1rem; + position: relative; + border: 1px solid #915eae; + background: #764890; + border-radius: 4px; +} +.searchbox label { + color: rgba(255, 255, 255, 0.8); + position: absolute; + left: 10px; + top: 3px; +} +.searchbox span { + color: rgba(255, 255, 255, 0.6); + position: absolute; + right: 10px; + top: 3px; + cursor: pointer; +} +.searchbox span:hover { + color: rgba(255, 255, 255, 0.9); +} +.searchbox input { + display: inline-block; + color: #fff; + width: 100%; + height: 30px; + background: transparent; + border: 0; + padding: 0 25px 0 30px; + margin: 0; + font-weight: 300; +} +.searchbox input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.6); +} +.searchbox input::-moz-placeholder { + color: rgba(255, 255, 255, 0.6); +} +.searchbox input:-moz-placeholder { + color: rgba(255, 255, 255, 0.6); +} +.searchbox input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.6); +} +#sidebar-toggle-span { + display: none; +} +@media only all and (max-width: 47.938em) { + #sidebar-toggle-span { + display: inline; + } +} +#sidebar { + background-color: #322A38; + position: fixed; + top: 0; + width: 300px; + bottom: 0; + left: 0; + font-weight: 400; + font-size: 15px; +} +#sidebar a { + color: #ccc; +} +#sidebar a:hover { + color: #e6e6e6; +} +#sidebar a.subtitle { + color: rgba(204, 204, 204, 0.6); +} +#sidebar hr { + border-bottom: 1px solid #2a232f; +} +#sidebar a.padding { + padding: 0 1rem; +} +#sidebar h5 { + margin: 2rem 0 0; + position: relative; + line-height: 2; +} +#sidebar h5 a { + display: block; + margin-left: 0; + margin-right: 0; + padding-left: 1rem; + padding-right: 1rem; +} +#sidebar h5 i { + color: rgba(204, 204, 204, 0.6); + position: absolute; + right: 0.6rem; + top: 0.7rem; + font-size: 80%; +} +#sidebar h5.parent a { + background: #201b24; + color: #d9d9d9 !important; +} +#sidebar h5.active a { + background: #fff; + color: #777 !important; +} +#sidebar h5.active i { + color: #777 !important; +} +#sidebar h5 + ul.topics { + display: none; + margin-top: 0; +} +#sidebar h5.parent + ul.topics, #sidebar h5.active + ul.topics { + display: block; +} +#sidebar ul { + list-style: none; + padding: 0; + margin: 0; +} +#sidebar ul.searched a { + color: #999999; +} +#sidebar ul.searched .search-match a { + color: #e6e6e6; +} +#sidebar ul.searched .search-match a:hover { + color: white; +} +#sidebar ul.topics { + margin: 0 1rem; +} +#sidebar ul.topics.searched ul { + display: block; +} +#sidebar ul.topics ul { + display: none; + padding-bottom: 1rem; +} +#sidebar ul.topics ul ul { + padding-bottom: 0; +} +#sidebar ul.topics li.parent ul, #sidebar ul.topics > li.active ul { + display: block; +} +#sidebar ul.topics > li > a { + line-height: 2rem; + font-size: 1.1rem; +} +#sidebar ul.topics > li > a b { + opacity: 0.5; + font-weight: normal; +} +#sidebar ul.topics > li > a .fa { + margin-top: 9px; +} +#sidebar ul.topics > li.parent, #sidebar ul.topics > li.active { + background: #251f29; + margin-left: -1rem; + margin-right: -1rem; + padding-left: 1rem; + padding-right: 1rem; +} +#sidebar ul li.active > a { + background: #fff; + color: #777 !important; + margin-left: -1rem; + margin-right: -1rem; + padding-left: 1rem; + padding-right: 1rem; +} +#sidebar ul li { + padding: 0; +} +#sidebar ul li.visited + span { + margin-right: 16px; +} +#sidebar ul li a { + display: block; + padding: 2px 0; +} +#sidebar ul li a span { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + display: block; +} +#sidebar ul li > a { + padding: 4px 0; +} +#sidebar ul li.visited > a .read-icon { + color: #9c6fb6; + display: inline; +} +#sidebar ul li li { + padding-left: 1rem; + text-indent: 0.2rem; +} +#main { + background: #f7f7f7; + margin: 0 0 1.563rem 0; +} +#body { + position: relative; + margin-left: 300px; + min-height: 100%; +} +#body img, #body .video-container { + margin: 3rem auto; + display: block; + text-align: center; +} +#body img.border, #body .video-container.border { + border: 2px solid #e6e6e6 !important; + padding: 2px; +} +#body img.shadow, #body .video-container.shadow { + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); +} +#body img.inline { + display: inline !important; + margin: 0 !important; + vertical-align: bottom; +} +#body .bordered { + border: 1px solid #ccc; +} +#body .padding { + padding: 3rem 6rem; +} +@media only all and (max-width: 59.938em) { + #body .padding { + position: static; + padding: 15px 3rem; + } +} +@media only all and (max-width: 47.938em) { + #body .padding { + padding: 5px 1rem; + } +} +#body h1 + hr { + margin-top: -1.7rem; + margin-bottom: 3rem; +} +@media only all and (max-width: 59.938em) { + #body #navigation { + position: static; + margin-right: 0 !important; + width: 100%; + display: table; + } +} +#body .nav { + position: fixed; + top: 0; + bottom: 0; + width: 4rem; + font-size: 50px; + height: 100%; + cursor: pointer; + display: table; + text-align: center; +} +#body .nav > i { + display: table-cell; + vertical-align: middle; + text-align: center; +} +@media only all and (max-width: 59.938em) { + #body .nav { + display: table-cell; + position: static; + top: auto; + width: 50%; + text-align: center; + height: 100px; + line-height: 100px; + padding-top: 0; + } + #body .nav > i { + display: inline-block; + } +} +#body .nav:hover { + background: #F6F6F6; +} +#body .nav.nav-pref { + left: 0; +} +#body .nav.nav-next { + right: 0; +} +#body-inner { + margin-bottom: 5rem; +} +#chapter { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + padding: 2rem 0; +} +#chapter #body-inner { + padding-bottom: 3rem; + max-width: 80%; +} +#chapter h3 { + font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + font-weight: 300; + text-align: center; +} +#chapter h1 { + font-size: 5rem; + border-bottom: 4px solid #F0F2F4; +} +#chapter p { + text-align: center; + font-size: 1.2rem; +} +#footer { + padding: 3rem 1rem; + color: #b3b3b3; + font-size: 13px; +} +#footer p { + margin: 0; +} +body { + font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + font-weight: 300; + line-height: 1.6; + font-size: 18px !important; +} +h2, h3, h4, h5, h6 { + font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + text-rendering: optimizeLegibility; + color: #5e5e5e; + font-weight: 400; + letter-spacing: -1px; +} +h1 { + font-family: "Novacento Sans Wide", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + text-align: center; + text-transform: uppercase; + color: #222; + font-weight: 200; +} +blockquote { + border-left: 10px solid #F0F2F4; +} +blockquote p { + font-size: 1.1rem; + color: #999; +} +blockquote cite { + display: block; + text-align: right; + color: #666; + font-size: 1.2rem; +} +div.notices { + margin: 2rem 0; + position: relative; +} +div.notices p { + padding: 15px; + display: block; + font-size: 1rem; + margin-top: 0rem; + margin-bottom: 0rem; + color: #666; +} +div.notices p:first-child:before { + position: absolute; + top: 2px; + color: #fff; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f06a"; + left: 10px; +} +div.notices p:first-child:after { + position: absolute; + top: 2px; + color: #fff; + left: 2rem; +} +div.notices.info p { + border-top: 30px solid #F0B37E; + background: #FFF2DB; +} +div.notices.info p:first-child:after { + content: 'Info'; +} +div.notices.warning p { + border-top: 30px solid rgba(217, 83, 79, 0.8); + background: #FAE2E2; +} +div.notices.warning p:first-child:after { + content: 'Warning'; +} +div.notices.note p { + border-top: 30px solid #6AB0DE; + background: #E7F2FA; +} +div.notices.note p:first-child:after { + content: 'Note'; +} +div.notices.tip p { + border-top: 30px solid rgba(92, 184, 92, 0.8); + background: #E6F9E6; +} +div.notices.tip p:first-child:after { + content: 'Tip'; +} + +/* attachments shortcode */ + +section.attachments { + margin: 2rem 0; + position: relative; +} + +section.attachments label { + font-weight: 400; + padding-left: 0.5em; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; +} + +section.attachments .attachments-files { + padding: 15px; + display: block; + font-size: 1rem; + margin-top: 0rem; + margin-bottom: 0rem; + color: #666; +} + +section.attachments.orange label { + color: #fff; + background: #F0B37E; +} + +section.attachments.orange .attachments-files { + background: #FFF2DB; +} + +section.attachments.green label { + color: #fff; + background: rgba(92, 184, 92, 0.8); +} + +section.attachments.green .attachments-files { + background: #E6F9E6; +} + +section.attachments.blue label { + color: #fff; + background: #6AB0DE; +} + +section.attachments.blue .attachments-files { + background: #E7F2FA; +} + +section.attachments.grey label { + color: #fff; + background: #505d65; +} + +section.attachments.grey .attachments-files { + background: #f4f4f4; +} + +/* Children shortcode */ + +/* Children shortcode */ +.children p { + font-size: small; + margin-top: 0px; + padding-top: 0px; + margin-bottom: 0px; + padding-bottom: 0px; +} +.children-li p { + font-size: small; + font-style: italic; + +} +.children-h2 p, .children-h3 p { + font-size: small; + margin-top: 0px; + padding-top: 0px; + margin-bottom: 0px; + padding-bottom: 0px; +} +.children h3,.children h2 { + margin-bottom: 0px; + margin-top: 5px; +} + +code, kbd, pre, samp { + font-family: "Consolas", menlo, monospace; + font-size: 92%; +} +code { + border-radius: 2px; + white-space: nowrap; + color: #5e5e5e; + background: #FFF7DD; + border: 1px solid #fbf0cb; + padding: 0px 2px; +} +/* code + .copy-to-clipboard { + margin-left: -1px; + border-left: 0 !important; + font-size: inherit !important; + vertical-align: middle; + height: 21px; + top: 0; +} */ +pre { + padding: 1rem; + margin: 2rem 0; + background: #282c34; + border: 0; + border-radius: 2px; + line-height: 1.15; +} +pre code { + color: whitesmoke; + background: inherit; + white-space: inherit; + border: 0; + padding: 0; + margin: 0; + font-size: 15px; +} +hr { + border-bottom: 4px solid #F0F2F4; +} +.page-title { + margin-top: -25px; + padding: 25px; + float: left; + clear: both; + background: #9c6fb6; + color: #fff; +} +#body a.anchor-link { + color: #ccc; +} +#body a.anchor-link:hover { + color: #9c6fb6; +} +#body-inner .tabs-wrapper.ui-theme-badges { + background: #1d1f21; +} +#body-inner .tabs-wrapper.ui-theme-badges .tabs-nav li { + font-size: 0.9rem; + text-transform: uppercase; +} +#body-inner .tabs-wrapper.ui-theme-badges .tabs-nav li a { + background: #35393c; +} +#body-inner .tabs-wrapper.ui-theme-badges .tabs-nav li.current a { + background: #4d5257; +} +#body-inner pre { + white-space: pre-wrap; +} +.tabs-wrapper pre { + margin: 1rem 0; + border: 0; + padding: 0; + background: inherit; +} +table { + border: 1px solid #eaeaea; + table-layout: auto; +} +th { + background: #f7f7f7; + padding: 0.5rem; +} +td { + padding: 0.5rem; + border: 1px solid #eaeaea; +} +.button { + background: #9c6fb6; + color: #fff; + box-shadow: 0 3px 0 #00a5d4; +} +.button:hover { + background: #00a5d4; + box-shadow: 0 3px 0 #008db6; + color: #fff; +} +.button:active { + box-shadow: 0 1px 0 #008db6; +} +.button-secondary { + background: #F8B450; + color: #fff; + box-shadow: 0 3px 0 #f7a733; +} +.button-secondary:hover { + background: #f7a733; + box-shadow: 0 3px 0 #f69b15; + color: #fff; +} +.button-secondary:active { + box-shadow: 0 1px 0 #f69b15; +} +.bullets { + margin: 1.7rem 0; + margin-left: -0.85rem; + margin-right: -0.85rem; + overflow: auto; +} +.bullet { + float: left; + padding: 0 0.85rem; +} +.two-column-bullet { + width: 50%; +} +@media only all and (max-width: 47.938em) { + .two-column-bullet { + width: 100%; + } +} +.three-column-bullet { + width: 33.33333%; +} +@media only all and (max-width: 47.938em) { + .three-column-bullet { + width: 100%; + } +} +.four-column-bullet { + width: 25%; +} +@media only all and (max-width: 47.938em) { + .four-column-bullet { + width: 100%; + } +} +.bullet-icon { + float: left; + background: #9c6fb6; + padding: 0.875rem; + width: 3.5rem; + height: 3.5rem; + border-radius: 50%; + color: #fff; + font-size: 1.75rem; + text-align: center; +} +.bullet-icon-1 { + background: #9c6fb6; +} +.bullet-icon-2 { + background: #00f3d8; +} +.bullet-icon-3 { + background: #e6f300; +} +.bullet-content { + margin-left: 4.55rem; +} +.tooltipped { + position: relative; +} +.tooltipped:after { + position: absolute; + z-index: 1000000; + display: none; + padding: 5px 8px; + font: normal normal 11px/1.5 "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + color: #fff; + text-align: center; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-wrap: break-word; + white-space: pre; + pointer-events: none; + content: attr(aria-label); + background: rgba(0, 0, 0, 0.8); + border-radius: 3px; + -webkit-font-smoothing: subpixel-antialiased; +} +.tooltipped:before { + position: absolute; + z-index: 1000001; + display: none; + width: 0; + height: 0; + color: rgba(0, 0, 0, 0.8); + pointer-events: none; + content: ""; + border: 5px solid transparent; +} +.tooltipped:hover:before, .tooltipped:hover:after, .tooltipped:active:before, .tooltipped:active:after, .tooltipped:focus:before, .tooltipped:focus:after { + display: inline-block; + text-decoration: none; +} +.tooltipped-s:after, .tooltipped-se:after, .tooltipped-sw:after { + top: 100%; + right: 50%; + margin-top: 5px; +} +.tooltipped-s:before, .tooltipped-se:before, .tooltipped-sw:before { + top: auto; + right: 50%; + bottom: -5px; + margin-right: -5px; + border-bottom-color: rgba(0, 0, 0, 0.8); +} +.tooltipped-se:after { + right: auto; + left: 50%; + margin-left: -15px; +} +.tooltipped-sw:after { + margin-right: -15px; +} +.tooltipped-n:after, .tooltipped-ne:after, .tooltipped-nw:after { + right: 50%; + bottom: 100%; + margin-bottom: 5px; +} +.tooltipped-n:before, .tooltipped-ne:before, .tooltipped-nw:before { + top: -5px; + right: 50%; + bottom: auto; + margin-right: -5px; + border-top-color: rgba(0, 0, 0, 0.8); +} +.tooltipped-ne:after { + right: auto; + left: 50%; + margin-left: -15px; +} +.tooltipped-nw:after { + margin-right: -15px; +} +.tooltipped-s:after, .tooltipped-n:after { + transform: translateX(50%); +} +.tooltipped-w:after { + right: 100%; + bottom: 50%; + margin-right: 5px; + transform: translateY(50%); +} +.tooltipped-w:before { + top: 50%; + bottom: 50%; + left: -5px; + margin-top: -5px; + border-left-color: rgba(0, 0, 0, 0.8); +} +.tooltipped-e:after { + bottom: 50%; + left: 100%; + margin-left: 5px; + transform: translateY(50%); +} +.tooltipped-e:before { + top: 50%; + right: -5px; + bottom: 50%; + margin-top: -5px; + border-right-color: rgba(0, 0, 0, 0.8); +} +.highlightable { + padding: 1rem 0 1rem; + overflow: auto; + position: relative; +} +.hljs::selection, .hljs span::selection { + background: #b7b7b7; +} +.lightbox-active #body { + overflow: visible; +} +.lightbox-active #body .padding { + overflow: visible; +} +#github-contrib i { + vertical-align: middle; +} +.featherlight img { + margin: 0 !important; +} +.lifecycle #body-inner ul { + list-style: none; + margin: 0; + padding: 2rem 0 0; + position: relative; +} +.lifecycle #body-inner ol { + margin: 1rem 0 1rem 0; + padding: 2rem; + position: relative; +} +.lifecycle #body-inner ol li { + margin-left: 1rem; +} +.lifecycle #body-inner ol strong, .lifecycle #body-inner ol label, .lifecycle #body-inner ol th { + text-decoration: underline; +} +.lifecycle #body-inner ol ol { + margin-left: -1rem; +} +.lifecycle #body-inner h3[class*='level'] { + font-size: 20px; + position: absolute; + margin: 0; + padding: 4px 10px; + right: 0; + z-index: 1000; + color: #fff; + background: #1ABC9C; +} +.lifecycle #body-inner ol h3 { + margin-top: 1rem !important; + right: 2rem !important; +} +.lifecycle #body-inner .level-1 + ol { + background: #f6fefc; + border: 4px solid #1ABC9C; + color: #16A085; +} +.lifecycle #body-inner .level-1 + ol h3 { + background: #2ECC71; +} +.lifecycle #body-inner .level-2 + ol { + background: #f7fdf9; + border: 4px solid #2ECC71; + color: #27AE60; +} +.lifecycle #body-inner .level-2 + ol h3 { + background: #3498DB; +} +.lifecycle #body-inner .level-3 + ol { + background: #f3f9fd; + border: 4px solid #3498DB; + color: #2980B9; +} +.lifecycle #body-inner .level-3 + ol h3 { + background: #34495E; +} +.lifecycle #body-inner .level-4 + ol { + background: #e4eaf0; + border: 4px solid #34495E; + color: #2C3E50; +} +.lifecycle #body-inner .level-4 + ol h3 { + background: #34495E; +} +#top-bar { + background: #F6F6F6; + border-radius: 2px; + padding: 0 1rem; + height: 0; + min-height: 3rem; +} +#top-github-link { + position: relative; + z-index: 1; + float: right; + display: block; +} +#body #breadcrumbs { + height: auto; + margin-bottom: 0; + padding-left: 0; + line-height: 1.4; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + width: 70%; + display: inline-block; + float: left; +} +#body #breadcrumbs span { + padding: 0 0.1rem; +} +@media only all and (max-width: 59.938em) { + #sidebar { + width: 230px; + } + #body { + margin-left: 230px; + } +} +@media only all and (max-width: 47.938em) { + #sidebar { + width: 230px; + left: -230px; + } + #body { + margin-left: 0; + width: 100%; + } + .sidebar-hidden { + overflow: hidden; + } + .sidebar-hidden #sidebar { + left: 0; + } + .sidebar-hidden #body { + margin-left: 230px; + overflow: hidden; + } + .sidebar-hidden #overlay { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 10; + background: rgba(255, 255, 255, 0.5); + cursor: pointer; + } +} +/* .copy-to-clipboard { + background-image: url(../images/clippy.svg); + background-position: 50% 50%; + background-size: 16px 16px; + background-repeat: no-repeat; + width: 27px; + height: 1.45rem; + top: -1px; + display: inline-block; + vertical-align: middle; + position: relative; + color: #5e5e5e; + background-color: #FFF7DD; + margin-left: -.2rem; + cursor: pointer; + border-radius: 0 2px 2px 0; + margin-bottom: 1px; +} +.copy-to-clipboard:hover { + background-color: #E8E2CD; +} +pre .copy-to-clipboard { + position: absolute; + right: 4px; + top: 4px; + background-color: #949bab; + color: #ccc; + border-radius: 2px; +} +pre .copy-to-clipboard:hover { + background-color: #656c72; + color: #fff; +} */ +.parent-element { + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + transform-style: preserve-3d; +} + +#sidebar ul.topics > li > a .read-icon { + margin-top: 9px; +} + +#sidebar ul { + list-style: none; + padding: 0; + margin: 0; +} + +#sidebar #shortcuts li { + padding: 2px 0; + list-style: none; +} + +#sidebar ul li .read-icon { + display: none; + float: right; + font-size: 13px; + min-width: 16px; + margin: 4px 0 0 0; + text-align: right; +} +#sidebar ul li.visited > a .read-icon { + color: #00bdf3; + display: inline; +} + +#sidebar #shortcuts h3 { + font-family: "Novacento Sans Wide", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + color: white ; + margin-top:1rem; + padding-left: 1rem; +} + +#searchResults { + text-align: left; +} diff --git a/docs/21.3.2/fonts/Inconsolata.eot b/docs/21.3.2/fonts/Inconsolata.eot new file mode 100644 index 000000000..0a705d653 Binary files /dev/null and b/docs/21.3.2/fonts/Inconsolata.eot differ diff --git a/docs/21.3.2/fonts/Inconsolata.svg b/docs/21.3.2/fonts/Inconsolata.svg new file mode 100644 index 000000000..b7f97c875 --- /dev/null +++ b/docs/21.3.2/fonts/Inconsolata.svg @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/21.3.2/fonts/Inconsolata.ttf b/docs/21.3.2/fonts/Inconsolata.ttf new file mode 100644 index 000000000..4b8a36d24 Binary files /dev/null and b/docs/21.3.2/fonts/Inconsolata.ttf differ diff --git a/docs/21.3.2/fonts/Inconsolata.woff b/docs/21.3.2/fonts/Inconsolata.woff new file mode 100644 index 000000000..6f39625e5 Binary files /dev/null and b/docs/21.3.2/fonts/Inconsolata.woff differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.eot b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.eot new file mode 100644 index 000000000..9984682fc Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.eot differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.svg b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.svg new file mode 100644 index 000000000..c412ea8c1 --- /dev/null +++ b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.svg @@ -0,0 +1,1019 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.ttf b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.ttf new file mode 100644 index 000000000..8cfb62dd5 Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.ttf differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.woff b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.woff new file mode 100644 index 000000000..d5c429079 Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.woff differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.woff2 b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.woff2 new file mode 100644 index 000000000..eefb4a318 Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-Normal-webfont.woff2 differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.eot b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.eot new file mode 100644 index 000000000..2a26561f9 Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.eot differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.svg b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.svg new file mode 100644 index 000000000..e642ab076 --- /dev/null +++ b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.svg @@ -0,0 +1,918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.ttf b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.ttf new file mode 100644 index 000000000..9ce9c7f99 Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.ttf differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.woff b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.woff new file mode 100644 index 000000000..381650c98 Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.woff differ diff --git a/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.woff2 b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.woff2 new file mode 100644 index 000000000..7e659549b Binary files /dev/null and b/docs/21.3.2/fonts/Novecentosanswide-UltraLight-webfont.woff2 differ diff --git a/docs/21.3.2/fonts/Work_Sans_200.eot b/docs/21.3.2/fonts/Work_Sans_200.eot new file mode 100644 index 000000000..4052e4f94 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_200.eot differ diff --git a/docs/21.3.2/fonts/Work_Sans_200.svg b/docs/21.3.2/fonts/Work_Sans_200.svg new file mode 100644 index 000000000..58ab4ba22 --- /dev/null +++ b/docs/21.3.2/fonts/Work_Sans_200.svg @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/21.3.2/fonts/Work_Sans_200.ttf b/docs/21.3.2/fonts/Work_Sans_200.ttf new file mode 100644 index 000000000..68019e1cc Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_200.ttf differ diff --git a/docs/21.3.2/fonts/Work_Sans_200.woff b/docs/21.3.2/fonts/Work_Sans_200.woff new file mode 100644 index 000000000..a1bd9e469 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_200.woff differ diff --git a/docs/21.3.2/fonts/Work_Sans_200.woff2 b/docs/21.3.2/fonts/Work_Sans_200.woff2 new file mode 100644 index 000000000..20c68a75c Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_200.woff2 differ diff --git a/docs/21.3.2/fonts/Work_Sans_300.eot b/docs/21.3.2/fonts/Work_Sans_300.eot new file mode 100644 index 000000000..ace799382 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_300.eot differ diff --git a/docs/21.3.2/fonts/Work_Sans_300.svg b/docs/21.3.2/fonts/Work_Sans_300.svg new file mode 100644 index 000000000..f29d0c8a1 --- /dev/null +++ b/docs/21.3.2/fonts/Work_Sans_300.svg @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/21.3.2/fonts/Work_Sans_300.ttf b/docs/21.3.2/fonts/Work_Sans_300.ttf new file mode 100644 index 000000000..35387c235 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_300.ttf differ diff --git a/docs/21.3.2/fonts/Work_Sans_300.woff b/docs/21.3.2/fonts/Work_Sans_300.woff new file mode 100644 index 000000000..8d789eae9 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_300.woff differ diff --git a/docs/21.3.2/fonts/Work_Sans_300.woff2 b/docs/21.3.2/fonts/Work_Sans_300.woff2 new file mode 100644 index 000000000..f6e216d64 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_300.woff2 differ diff --git a/docs/21.3.2/fonts/Work_Sans_500.eot b/docs/21.3.2/fonts/Work_Sans_500.eot new file mode 100644 index 000000000..9df692942 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_500.eot differ diff --git a/docs/21.3.2/fonts/Work_Sans_500.svg b/docs/21.3.2/fonts/Work_Sans_500.svg new file mode 100644 index 000000000..4b030b790 --- /dev/null +++ b/docs/21.3.2/fonts/Work_Sans_500.svg @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/21.3.2/fonts/Work_Sans_500.ttf b/docs/21.3.2/fonts/Work_Sans_500.ttf new file mode 100644 index 000000000..5b8cc5342 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_500.ttf differ diff --git a/docs/21.3.2/fonts/Work_Sans_500.woff b/docs/21.3.2/fonts/Work_Sans_500.woff new file mode 100644 index 000000000..df058514f Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_500.woff differ diff --git a/docs/21.3.2/fonts/Work_Sans_500.woff2 b/docs/21.3.2/fonts/Work_Sans_500.woff2 new file mode 100644 index 000000000..b06c54df0 Binary files /dev/null and b/docs/21.3.2/fonts/Work_Sans_500.woff2 differ diff --git a/docs/21.3.2/images/.gitkeep b/docs/21.3.2/images/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docs/21.3.2/images/clippy.svg b/docs/21.3.2/images/clippy.svg new file mode 100644 index 000000000..1c8abc2fd --- /dev/null +++ b/docs/21.3.2/images/clippy.svg @@ -0,0 +1 @@ + diff --git a/docs/21.3.2/images/favicon.png b/docs/21.3.2/images/favicon.png new file mode 100644 index 000000000..df06e35d6 Binary files /dev/null and b/docs/21.3.2/images/favicon.png differ diff --git a/docs/21.3.2/images/fmw_12c_12_2_1_4_0-logo.png b/docs/21.3.2/images/fmw_12c_12_2_1_4_0-logo.png new file mode 100644 index 000000000..6a2d34fff Binary files /dev/null and b/docs/21.3.2/images/fmw_12c_12_2_1_4_0-logo.png differ diff --git a/docs/21.3.2/images/gopher-404.jpg b/docs/21.3.2/images/gopher-404.jpg new file mode 100644 index 000000000..2a5054389 Binary files /dev/null and b/docs/21.3.2/images/gopher-404.jpg differ diff --git a/docs/21.3.2/images/logo.png b/docs/21.3.2/images/logo.png new file mode 100644 index 000000000..6bfe10627 Binary files /dev/null and b/docs/21.3.2/images/logo.png differ diff --git a/docs/21.3.2/images/soa-domains/CreateApplicationServerConnection.jpg b/docs/21.3.2/images/soa-domains/CreateApplicationServerConnection.jpg new file mode 100644 index 000000000..e69f13ac0 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/CreateApplicationServerConnection.jpg differ diff --git a/docs/21.3.2/images/soa-domains/CreateApplicationServerConnectionTestConnection.jpg b/docs/21.3.2/images/soa-domains/CreateApplicationServerConnectionTestConnection.jpg new file mode 100644 index 000000000..84796fec9 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/CreateApplicationServerConnectionTestConnection.jpg differ diff --git a/docs/21.3.2/images/soa-domains/ExposeSOAMST3.png b/docs/21.3.2/images/soa-domains/ExposeSOAMST3.png new file mode 100644 index 000000000..119d72c67 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/ExposeSOAMST3.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Deploy_Success_Status.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deploy_Success_Status.png new file mode 100644 index 000000000..26adedcf5 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deploy_Success_Status.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Deploying_Progress.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deploying_Progress.png new file mode 100644 index 000000000..c834a7852 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deploying_Progress.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Start.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Start.png new file mode 100644 index 000000000..e15c9d7a4 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Start.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Summary.jpg b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Summary.jpg new file mode 100644 index 000000000..303ab5151 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Summary.jpg differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Summary.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Summary.png new file mode 100644 index 000000000..303ab5151 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Deployment_Summary.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Select_Application_Server.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_Select_Application_Server.png new file mode 100644 index 000000000..1ea311e9c Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Select_Application_Server.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_Select_Deployment_Action.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_Select_Deployment_Action.png new file mode 100644 index 000000000..ae3fecbf8 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_Select_Deployment_Action.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_OSB_servicebus_launch_test_console.png b/docs/21.3.2/images/soa-domains/JDEV_OSB_servicebus_launch_test_console.png new file mode 100644 index 000000000..a01fe9f55 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_OSB_servicebus_launch_test_console.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_Reference_Config_Settings.png b/docs/21.3.2/images/soa-domains/JDEV_Reference_Config_Settings.png new file mode 100644 index 000000000..549fa9390 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_Reference_Config_Settings.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploy_Configuration.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploy_Configuration.png new file mode 100644 index 000000000..8d4320237 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploy_Configuration.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploy_Success_Status.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploy_Success_Status.png new file mode 100644 index 000000000..84a132f0b Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploy_Success_Status.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploying_Progress.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploying_Progress.png new file mode 100644 index 000000000..ef49c887c Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deploying_Progress.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Deployment_Start.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deployment_Start.png new file mode 100644 index 000000000..45cb532c7 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deployment_Start.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Deployment_Summary.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deployment_Summary.png new file mode 100644 index 000000000..02ac26fdc Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Deployment_Summary.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Select_Application_Server.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Select_Application_Server.png new file mode 100644 index 000000000..f751e0c56 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Select_Application_Server.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Select_Deployment_Action.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Select_Deployment_Action.png new file mode 100644 index 000000000..a4eaf58fb Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Select_Deployment_Action.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Server_Lookup.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Server_Lookup.png new file mode 100644 index 000000000..fae2f2378 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Server_Lookup.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_Target_soa_servers.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_Target_soa_servers.png new file mode 100644 index 000000000..5b8cd53f6 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_Target_soa_servers.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_soainfra_server1.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_soainfra_server1.png new file mode 100644 index 000000000..9f225df7c Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_soainfra_server1.png differ diff --git a/docs/21.3.2/images/soa-domains/JDEV_SOA_soainfra_server2.png b/docs/21.3.2/images/soa-domains/JDEV_SOA_soainfra_server2.png new file mode 100644 index 000000000..4e5e1f768 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/JDEV_SOA_soainfra_server2.png differ diff --git a/docs/21.3.2/images/soa-domains/SOA_Composites_Deploy_using_Jdev.png b/docs/21.3.2/images/soa-domains/SOA_Composites_Deploy_using_Jdev.png new file mode 100644 index 000000000..baaf4f82b Binary files /dev/null and b/docs/21.3.2/images/soa-domains/SOA_Composites_Deploy_using_Jdev.png differ diff --git a/docs/21.3.2/images/soa-domains/custIdentity-custTrust-keystores.png b/docs/21.3.2/images/soa-domains/custIdentity-custTrust-keystores.png new file mode 100644 index 000000000..290492743 Binary files /dev/null and b/docs/21.3.2/images/soa-domains/custIdentity-custTrust-keystores.png differ diff --git a/docs/21.3.2/images/soasuite-logo.png b/docs/21.3.2/images/soasuite-logo.png new file mode 100644 index 000000000..347663f5b Binary files /dev/null and b/docs/21.3.2/images/soasuite-logo.png differ diff --git a/docs/21.3.2/index.html b/docs/21.3.2/index.html new file mode 100644 index 000000000..b8c0f2357 --- /dev/null +++ b/docs/21.3.2/index.html @@ -0,0 +1,2696 @@ + + + + + + + + + + + + Oracle Fusion Middleware on Kubernetes :: Oracle Fusion Middleware on Kubernetes + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+ +
+ + + + + + + navigation + + + +

Oracle Fusion Middleware on Kubernetes

+

Oracle supports the deployment of the following Oracle Fusion Middleware products on Kubernetes. Click on the appropriate document link below to get started on setting up the product.

+ + + + + + + +
    + + + + + + + + + + + + + + + + + + + +

    +Oracle SOA Suite +

    + + + + + +

    The Oracle WebLogic Kubernetes Operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Follow the instructions in this guide to set up these Oracle SOA Suite domains on Kubernetes.

    + + + + + + + + + + + + +

    +Oracle WebCenter Sites +

    + + + + + +

    The WebLogic Kubernetes Operator supports deployment of Oracle WebCenter Sites. Follow the instructions in this guide to set up Oracle WebCenter Sites domains on Kubernetes.

    + + + + + + + + +
+ + + + + + + +
+ + +
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/docs/21.3.2/index.json b/docs/21.3.2/index.json new file mode 100644 index 000000000..3dca2c2cc --- /dev/null +++ b/docs/21.3.2/index.json @@ -0,0 +1,456 @@ +[ +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/patch-an-image/patch-wcsites-product-image/", + "title": "Patch a Oracle WebCenter Sites product Docker image", + "tags": [], + "description": "Upgrade the underlying Oracle WebCenter Sites product image in a running Oracle WebCenter Sites Kubernetes environment.", + "content": "These instructions describe how to upgrade a new release of Oracle WebCenter Sites product Docker image in a running Oracle WebCenter Sites Kubernetes environment. A rolling upgrade approach is used to upgrade managed server pods of the domain.\nIt is expecting a Zero down time as a rolling upgrade approach is used.\n Prerequisites Make sure Oracle WebCenter Sites domain is created and all the admin and managed pods are up and running. Make sure the database used for the Oracle WebCenter Sites domain deployment is up and running during the upgrade process. Prepare the upgrade-domain-inputs.yaml Modify the kubernetes/samples/scripts/domain-home-on-pv/upgrade/upgrade-domain-inputs.yaml. Below are given default values.\n# Name of the Admin Server adminServerName: adminserver # Unique ID identifying a domain. # This ID must not contain an underscope (\u0026#34;_\u0026#34;), and must be lowercase and unique across all domains in a Kubernetes cluster. domainUID: wcsitesinfra # Number of managed servers to generate for the domain configuredManagedServerCount: 3 #Number of managed servers running at the time of upgrade managedServerRunning: 3 # Base string used to generate managed server names managedServerNameBase: wcsites-server # Oracle WebCenter Sites Docker image. # Refer to build Oracle WebCenter Sites Docker image https://github.com/oracle/docker-images/tree/master/OracleWebCenterSites # for details on how to obtain or create the image. # tag image to a new tag for example: oracle/wcsites:12.2.1.4-21.1.1-20210122 image: oracle/wcsites:12.2.1.4-21.1.1-20210122 # Image pull policy # Legal values are \u0026#34;IfNotPresent\u0026#34;, \u0026#34;Always\u0026#34;, or \u0026#34;Never\u0026#34; imagePullPolicy: IfNotPresent # Name of the domain namespace namespace: wcsites-ns Run the upgrade script Run the upgrade script with the modified upgrade-domain-inputs.yaml file and wait for the script to be finished.\n$ sh kubernetes/samples/scripts/domain-home-on-pv/upgrade/upgrade.sh -i upgrade-domain-inputs.yaml Monitor the pods rolling out incrementaly.\n$ kubectl get pods -n wcsites-ns -w Configure WebCenter Sites patch Configure WebCenter Sites patch by hitting url http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/sites/sitespatchsetup\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/oke/", + "title": "Preparing an OKE environment", + "tags": [], + "description": "Running WebLogic Kubernetes Operator managed WebCenter Sites domains on OKE", + "content": "Overview Create Public SSH Key to access all the Bastion/Worker nodes Create SSH key using ssh-keygen on linux terminal. Generating public/private rsa key pair. Your identification has been saved in \u0026lt;path\u0026gt;/id_rsa. Your public key has been saved in \u0026lt;path\u0026gt;/id_rsa.pub. The key fingerprint is: SHA256:xCi1gf1QFafbRwOM3WjUTgqEInwi6UklbuxbBeMzA6M demokey The key\u0026#39;s randomart image is: +---[RSA 2048]----+ | +++oo..++*++ | | ++==+==. oo=.+ | |Eo+o*+++o .o +o | | oo * .. o.... | | . . S . . . | | o . | | . | | | | | +----[SHA256]-----+ This will generate id_rsa and id_rsa.pub in You will be using id_rsa.pub while creating the instance and id_rsa which is a private key, will be used during login to the instance later. Create a compartment for OKE Within your tenancy, there must be a compartment to contain the necessary network resources (VCN, subnets, internet gateway, route table, security lists).\n Go to OCI console, and use the top-left Menu to select the Identity \u0026gt; Compartments option. Click the Create Compartment button. Enter the compartment name(WCSCDev) and description(OKE compartment), the click the Create Compartment button. Create Virtual Cloud Network From OCI console, use navigation menu. Under Solutions, Platform and Edge, go to Networking and click Virtual Cloud Networks (VCN) Choose a WCSCDev Compartment and then click Create Virtual Cloud Network Choose a WCSCDev Compartment and then click Networking QuickStart ? VCN with Internet Connectivity ? Start Workflow Add Name (ex. WCNVCN) Click Next ? Review and Create. Create Container Clusters (OKE) From OCI console, use navigation menu. Under Solutions, Platform and Edge, go to Developer Services and click Container Clusters (OKE) Choose a WCSCDev Compartment and then click Create Cluster *In the Cluster Creation dialog, change the placeholder value in the Name field and enter WCSOKECluster instead. Initially, the Cluster is in \u0026ldquo;Creating\u0026rdquo; state and no buttons are accessible. Once its state is \u0026ldquo;Active\u0026rdquo;, then all the button gets are enabled. Create Bastion Node Setup a bastion node for accessing internal resources.\nSetup OCI CLI to download kubeconfig and access OKE Cluster Login to Bastion Node Install OCI CLI $ bash -c \u0026#34;$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)\u0026#34; Respond to the Installation Script Prompts. To download the kubeconfig later after setup, we need to setup the oci config file. Follow the below command and enter the details when prompted. $ oci setup config This command provides a walkthrough of creating a valid CLI config file. The following links explain where to find the information required by this script: User OCID and Tenancy OCID: https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other Region: https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm General config documentation: https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm Enter a location for your config [/home/opc/.oci/config]: Enter a user OCID: ocid1.user.xxxxx5n3a Enter a tenancy OCID: ocid1.tenancy.xxxxxxmffq Enter a region (e.g. ap-mumbai-1, ap-seoul-1, ap-sydney-1, ap-tokyo-1, ca-toronto-1, eu-frankfurt-1, eu-zurich-1, sa-saopaulo-1, uk-london-1, us-ashburn-1, us-gov-ashburn-1, us-gov-chicago-1, us-gov-phoenix-1, us-langley-1, us-luke-1, us-phoenix-1): us-phoenix-1 Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y Enter a directory for your keys to be created [/home/opc/.oci]: Enter a name for your key [oci_api_key]: Public key written to: /home/opc/.oci/oci_api_key_public.pem Enter a passphrase for your private key (empty for no passphrase): Private key written to: /home/opc/.oci/oci_api_key.pem Fingerprint: 30:b9:a6:80:6e:b7:bb:7d:f9:79:6b:84:48:30:03:16 Config written to /home/opc/.oci/config If you haven\u0026#39;t already uploaded your public key through the console, follow the instructions on the page linked below in the section \u0026#39;How to upload the public key\u0026#39;: https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2 Now you need to upload the created public key in $HOME/.oci (oci_api_key_public.pem) to OCI console. Login to Console and navigate to User Settings, which is in the drop down under your OCI username in the top nav On User Details page, select \u0026ldquo;Api Keys\u0026rdquo; in the left nav and then Click the \u0026ldquo;Add Public Key\u0026rdquo; button and then copy the content of \u0026ldquo;oci_api_key_public.pem\u0026rdquo;. Click \u0026ldquo;Add\u0026rdquo;. Now you can use the oci cli to access the OCI resources. Setup Access Kubeconfig (OKE Cluster) Install docker Login to Bastion Node Login to instance and install the latest docker-engine and start docker service #install docker-engine sudo yum -y install docker-engine #Enable and start docker service sudo systemctl enable docker sudo systemctl start docker #Add opc to docker group sudo /sbin/usermod -a -G docker opc Logout and log back into the host - to ensure user is added to group correctly Check your Docker Version. $ docker version Client: Docker Engine - Community Version: 19.03.1-ol API version: 1.40 Go version: go1.12.5 Git commit: ead9442 Built: Wed Sep 11 06:40:28 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.1-ol API version: 1.40 (minimum version 1.12) Go version: go1.12.5 Git commit: ead9442 Built: Wed Sep 11 06:38:43 2019 OS/Arch: linux/amd64 Experimental: false Default Registry: docker.io containerd: Version: v1.2.0-rc.0-108-gc444666 GitCommit: c4446665cb9c30056f4998ed953e6d4ff22c7c39 runc: Version: spec: 1.0.1-dev GitCommit: docker-init: Version: 0.18.0 GitCommit: fec3683 If your instances are on corporate network then Configuring Proxy Requirements (run as root) ### Create the drop-in file /etc/systemd/system/docker.service.d/http-proxy.conf that contains proxy details: cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment=\u0026#34;HTTP_PROXY=http://\u0026lt;your-company-domain\u0026gt;:80\u0026#34; Environment=\u0026#34;HTTPS_PROXY=http://\u0026lt;your-company-domain\u0026gt;:80\u0026#34; Environment=\u0026#34;NO_PROXY=localhost,127.0.0.0/8,.\u0026lt;no-proxy-domain\u0026gt;,/var/run/docker.sock\u0026#34; EOF Restart docker daemon to load latest changes $ sudo systemctl daemon-reload $ sudo systemctl restart docker Verify if the proxy is configured with docker $ docker info|grep -i proxy Install Kubernetes Packages Login to Bastion Node Add the external kubernetes repository (run as root) cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* EOF Set SELinux in permissive mode (effectively disabling it) export PATH=/sbin:$PATH setenforce 0 sudo sed -i \u0026#39;s/^SELINUX=enforcing$/SELINUX=permissive/\u0026#39; /etc/selinux/config Export proxy (if your instances are on corporate network) and install latest kubeadm, kubelet and kubectl VERSION=1.18.4-0 sudo yum install -y kubelet-$VERSION kubeadm-$VERSION kubectl-$VERSION --disableexcludes=kubernetes ### enable kubelet service so that it auto-restart on reboot sudo systemctl enable --now kubelet Ensure net.bridge.bridge-nf-call-iptables is set to 1 in your sysctl to avoid traffic routing issues ( run as root user) cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system Update the kubelet with \u0026ndash;fail-swap-on flag to false and restart kubelet (starting in 1.8, kubelet fails to start with swap enabled) ### run as a root user ### Update --fail-swap-on=false into /etc/sysconfig/kubelet sed -i \u0026#39;s/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS=\u0026#34;--fail-swap-on=false\u0026#34;/\u0026#39; /etc/sysconfig/kubelet cat /etc/sysconfig/kubelet ### Reload and restart kubelet systemctl daemon-reload systemctl restart kubelet Setup bastion Node to Access Kubeconfig From OCI console, use navigation menu. Under Solutions, Platform and Edge, go to Developer Services and click Container Clusters (OKE), click on \u0026lsquo;WCSOKECluster\u0026rsquo; Now click on \u0026ldquo;Access Cluster\u0026rdquo; then click on \u0026ldquo;Local Access\u0026rdquo;, gives details on how to download the kubeconfig to access the cluster. $ oci -v $ mkdir -p $HOME/.kube $ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.phx.xxxxxx --file $HOME/.kube/config --region us-phoenix-1 --token-version 2.0.0 $ export KUBECONFIG=$HOME/.kube/config Once the kubeconfig is setup, you can access the Cluster with kubectl commands from any host or laptop. $ kubectl get nodes NAME STATUS ROLES AGE VERSION 10.0.10.2 Ready node 111m v1.18.4 10.0.10.3 Ready node 111m v1.18.4 10.0.10.4 Ready node 111m v1.18.4 Create Filesystem and security list for FSS Setup Filesystem\nCreation of OCIR Setup the OCIR for managing Docker images.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/installguide/prerequisites/", + "title": "Requirements and limitations", + "tags": [], + "description": "Understand the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes Operator, including the SOA cluster sizing recommendations.", + "content": "This section provides information about the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes Operator.\nSystem requirements for Oracle SOA Suite domains For the current production release 21.3.2:\n Operating systems supported: Oracle Linux 7 (UL6+) Red Hat Enterprise Linux 7 (UL3+ only with standalone Kubernetes) Oracle Linux Cloud Native Environment (OLCNE) version 1.1.2 Kubernetes 1.16.15+, 1.17.13+, 1.18.10+, and 1.19.7+ (check with kubectl version). Docker 18.09.1ce, 19.03.1 (check with docker version) or CRI-O 1.17.0 (check with crictl version | grep RuntimeVersion). Flannel networking v0.9.1-amd64 or later (check with docker images | grep flannel), Calico networking v3.16.1 or later. Helm 3.3.4+ (check with helm version --client --short). WebLogic Kubernetes Operator 3.2.1 (see operator releases page). Oracle SOA Suite 12.2.1.4 Docker image downloaded from My Oracle Support (MOS patch 33125465). This image contains the latest bundle patch and one-off patches for Oracle SOA Suite. You must have the cluster-admin role to install the operator. The operator does not need the cluster-admin role at runtime. We do not currently support running SOA in non-Linux containers. Additionally, see the Oracle SOA Suite documentation for other requirements such as database version. See here for resourse sizing information for Oracle SOA Suite domains setup on Kubernetes cluster.\nLimitations Compared to running a WebLogic Server domain in Kubernetes using the operator, the following limitations currently exist for Oracle SOA Suite domains:\n In this release, Oracle SOA Suite domains are supported using the domain on a persistent volume model only, where the domain home is located in a persistent volume (PV). The \u0026ldquo;domain in image\u0026rdquo; and \u0026ldquo;model in image\u0026rdquo; models are not supported. Also, \u0026ldquo;WebLogic Deploy Tooling (WDT)\u0026rdquo; based deployments are currently not supported. Only configured clusters are supported. Dynamic clusters are not supported for Oracle SOA Suite domains. Note that you can still use all of the scaling features, but you need to define the maximum size of your cluster at domain creation time. Mixed clusters (configured servers targeted to a dynamic cluster) are not supported. The WebLogic Logging Exporter currently supports WebLogic Server logs only. Other logs will not be sent to Elasticsearch. Note, however, that you can use a sidecar with a log handling tool like Logstash or Fluentd to get logs. The WebLogic Monitoring Exporter currently supports WebLogic MBean trees only. Support for JRF and Oracle SOA Suite MBeans is not available. Also, a metrics dashboard specific to Oracle SOA Suite is not available. Instead, use the WebLogic Server dashboard to monitor the Oracle SOA Suite server metrics in Grafana. Some features such as multicast, multitenancy, production redeployment, and Node Manager (although it is used internally for the liveness probe and to start WebLogic Server instances) are not supported in this release. Features such as Java Messaging Service whole server migration, consensus leasing, and maximum availability architecture (Oracle SOA Suite EDG setup) are not supported in this release. Enabling or disabling the memory resiliency for Oracle Service Bus using the Enterprise Manager Console is not supported in this release. Zero downtime upgrade (ZDT) of the domain is not supported. For up-to-date information about the features of WebLogic Server that are supported in Kubernetes environments, see My Oracle Support Doc ID 2349228.1.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/installguide/prerequisites/", + "title": "Requirements and limitations", + "tags": [], + "description": "Understand the system requirements and limitations for deploying and running Oracle WebCenter Sites domains with the WebLogic Kubernetes Operator, including the WebCenter Sites domain cluster sizing recommendations.", + "content": "Contents Introduction System Requirements Limitations WebCenter Sites Cluster Sizing Recommendations Introduction This document describes the special considerations for deploying and running a WebCenter Sites domain with the WebLogic Kubernetes Operator. Other than those considerations listed here, WebCenter Sites domains work in the same way as Fusion Middleware Infrastructure domains and WebLogic Server domains.\nIn this release, WebCenter Sites domains are supported using the domain on a persistent volume model only where a WebCenter Sites domain is located in a persistent volume (PV).\nSystem Requirements Oracle Linux 7 (UL6+) and Red Hat Enterprise Linux 7 (UL3+ only with standalone Kubernetes) are supported. Kubernetes 1.14.8+, 1.15.7+, 1.16.0+, 1.17.0+, and 1.18.0+ (check with kubectl version). Docker 18.09.1ce+, 19.03.1+ (check with docker version) or CRI-O 1.14.7 (check with crictl version | grep RuntimeVersion). Flannel networking v0.9.1-amd64 or later (check with Docker images | grep flannel). Helm 3.1.3+ (check with helm version --client --short). Oracle WebLogic Kubernetes Operator 3.0.1 (see operator releases page). Oracle WebCenterSites 12.2.1.4 Docker image (built either using imagetool or the buildDockerImage script). You must have the cluster-admin role to install the operator. The operator does not need the cluster-admin role at runtime. We do not currently support running WebCenterSites in non-Linux containers. These proxy setup are used for pulling the required binaries and source code from the respective repositories: export NO_PROXY=\u0026quot;localhost,127.0.0.0/8,$(hostname -i),.your-company.com,/var/run/docker.sock\u0026rdquo; export no_proxy=\u0026quot;localhost,127.0.0.0/8,$(hostname -i),.your-company.com,/var/run/docker.sock\u0026rdquo; export http_proxy=http://www-proxy-your-company.com:80 export https_proxy=http://www-proxy-your-company.com:80 export HTTP_PROXY=http://www-proxy-your-company.com:80 export HTTPS_PROXY=http://www-proxy-your-company.com:80 NOTE: Add your host IP by using hostname -i and also nslookup IP addresses to the no_proxy, NO_PROXY list above.\n Limitations Compared to running a WebLogic Server domain in Kubernetes using the Operator, the following limitations currently exist for WebCenter Sites domain:\n Domain in image model is not supported in this version of the Operator. Only configured clusters are supported. Dynamic clusters are not supported for WebCenter Sites domains. Note that you can still use all of the scaling features. You just need to define the maximum size of your cluster at domain creation time. We do not currently support running WebCenter Sites in non-Linux containers. Deploying and running a WebCenter Sites domain is supported only in Operator versions 3.0.1 and later. The WebLogic Logging Exporter currently supports WebLogic Server logs only. Other logs will not be sent to Elasticsearch. Note, however, that you can use a sidecar with a log handling tool like Logstash or Fluentd to get logs. The WebLogic Monitoring Exporter currently supports the WebLogic MBean trees only. Support for JRF MBeans has not been added yet. WebCenter Sites Cluster Sizing Recommendations WebCenter Sites Normal Usage Moderate Usage High Usage Admin Server No of CPU(s) : 1, Memory : 4GB No of CPU(s) : 1, Memory : 4GB No of CPU(s) : 1, Memory : 4GB Managed Server No of Servers : 2, No of CPU(s) : 2, Memory : 16GB No of Servers : 2, No of CPU(s) : 4, Memory : 16GB No of Servers : 3, No of CPU(s) : 6, Memory : 16-32GB PV Storage Minimum 250GB Minimum 250GB Minimum 500GB " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/", + "title": "Oracle Fusion Middleware on Kubernetes", + "tags": [], + "description": "This document lists all the Oracle Fusion Middleware products deployment supported on Kubernetes.", + "content": "Oracle Fusion Middleware on Kubernetes Oracle supports the deployment of the following Oracle Fusion Middleware products on Kubernetes. Click on the appropriate document link below to get started on setting up the product.\n Oracle SOA Suite The Oracle WebLogic Kubernetes Operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Follow the instructions in this guide to set up these Oracle SOA Suite domains on Kubernetes.\n Oracle WebCenter Sites The WebLogic Kubernetes Operator supports deployment of Oracle WebCenter Sites. Follow the instructions in this guide to set up Oracle WebCenter Sites domains on Kubernetes.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/release-notes/", + "title": "Release Notes", + "tags": [], + "description": "", + "content": "Review the latest changes and known issues for Oracle SOA Suite on Kubernetes.\nRecent changes Date Version Change August 6, 2021 21.3.2 Supports Oracle SOA Suite 12.2.1.4 domains deployment using July 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch 33125465). May 31, 2021 21.2.2 Supports Oracle SOA Suite 12.2.1.4 domains deployment using April 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch 32794257). February 28, 2021 21.1.2 Supports Oracle SOA Suite 12.2.1.4 domains deployment using January 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch 32398542). November 30, 2020 20.4.2 Supports Oracle SOA Suite 12.2.1.4 domains deployment using October 2020 PSU and known bug fixes. Added HEALTHCHECK support for Oracle SOA Suite docker image. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch 32215749). October 3, 2020 20.3.3 Certified Oracle WebLogic Kubernetes Operator version 3.0.1. Kubernetes 1.14.8+, 1.15.7+, 1.16.0+, 1.17.0+, and 1.18.0+ support. Flannel is the only supported CNI in this release. SSL enabling for the Administration Server and Managed Servers is supported. Only Oracle SOA Suite 12.2.1.4 is supported. Known issues Overriding tuning parameters is not supported using configuration overrides Deployments in WebLogic administration console display unexpected error Enterprise Manager console may display ADF_FACES-30200 error Configure the external URL access for Oracle SOA Suite composite applications Configure the external access for the Oracle Enterprise Scheduler WebServices WSDL URLs Missing gif images in Oracle Service Bus console pipeline configuration page " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/release-notes/", + "title": "Release Notes", + "tags": [], + "description": "", + "content": "Review the latest changes and known issues for Oracle WebCenter Sites on Kubernetes.\nRecent changes Date Version Introduces backward incompatibilities Change Jan 15, 2021 21.1.1 no Certified Oracle WebLogic Kubernetes Operator version 3.0.1. Kubernetes 1.14.8+, 1.15.7+, 1.1.6.0+, 1.17.0+, and 1.18.0+ support. Flannel is the only supported CNI in this release. Only Webcenter Sites 12.2.1.4 is supported. Known issues Issue Description Publishing via LoadBalancer Endpoint Currenly publishing is only supported via NodePort as described in section For Publishing Setting in WebCenter Sites on page. " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/supportjdev/", + "title": "Deploy using JDeveloper", + "tags": [], + "description": "Deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper to Oracle SOA Suite in the WebLogic Kubernetes Operator environment.", + "content": "Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper (running outside the Kubernetes network) to an Oracle SOA Suite instance in the WebLogic Kubernetes Operator environment.\nUse JDeveloper for development and test environments only. For a production environment, you should deploy using Application Control and WLST methods.\n Deploy Oracle SOA Suite and Oracle Service Bus composite applications to Oracle SOA Suite from JDeveloper To deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper, the Administration Server must be configured to expose a T3 channel. The WebLogic Kubernetes Operator provides an option to expose a T3 channel for the Administration Server using the exposeAdminT3Channel setting during domain creation, then the matching T3 service can be used to connect. By default, when exposeAdminT3Channel is set, the WebLogic Kubernetes Operator environment exposes the NodePort for the T3 channel of the NetworkAccessPoint at 30012 (use t3ChannelPort to configure the port to a different value).\nIf you miss enabling exposeAdminT3Channel during domain creation, follow Expose a T3/T3S Channel for the Administration Server to expose a T3 channel manually.\nPrerequisites Get the Kubernetes cluster master address and verify the T3 port that will be used for creating application server connections. Use the following command to get the T3 port:\n$ kubectl get service \u0026lt;domainUID\u0026gt;-\u0026lt;AdministrationServerName\u0026gt;-external -n \u0026lt;namespace\u0026gt;-o jsonpath='{.spec.ports[0].nodePort}' For example:\n$ kubectl get service soainfra-adminserver-external -n soana-o jsonpath='{.spec.ports[0].nodePort}' Oracle SOA Suite in the WebLogic Kubernetes Operator environment is deployed in a Reference Configuration domain. If a SOA project is developed in Classic mode JDeveloper displays a Mismatch notification in the Deploy Composite Wizard. By default, JDeveloper is in Classic mode. To develop SOA projects in Reference Configuration mode, you must manually enable this feature in JDeveloper: a. From the File menu, select Tools, then Preferences. b. Select Reference Configuration Settings. c. Select Enable Reference Configuration settings in adapters.\n JDeveloper needs to access the Servers during deployment. In the WebLogic Kubernetes Operator environment, Administration and Managed Servers are pods and cannot be accessed directly by JDeveloper. As a workaround, you must configure the reachability of the Managed Servers:\nThe Managed Server T3 port is not exposed by default and opening this will have a security risk as the authentication method here is based on a userid/password. It is not recommended to do this on production instances.\n Decide on an external IP address to be used to configure access to the Managed Servers. Master or worker node IP address can be used to configure Managed Server reachability. In these steps, the Kubernetes cluster master IP is used for demonstration.\n Get the pod names of the Administration Server and Managed Servers (that is, \u0026lt;domainUID\u0026gt;-\u0026lt;server name\u0026gt;), which will be used to map in /etc/hosts.\n Update /etc/hosts (or in Windows, C:\\Windows\\System32\\Drivers\\etc\\hosts) on the host where JDeveloper is running with the entries below, where\n\u0026lt;Master IP\u0026gt; \u0026lt;Administration Server pod name\u0026gt; \u0026lt;Master IP\u0026gt; \u0026lt;Managed Server1 pod name\u0026gt; \u0026lt;Master IP\u0026gt; \u0026lt;Managed Server2 pod name\u0026gt; Sample /etc/hosts entries looks as follows, where X.X.X.X is the master node IP address:\nX.X.X.X soainfra-adminserver X.X.X.X soainfra-soa-server1 X.X.X.X soainfra-soa-server2 Get the Kubernetes service name of the Oracle SOA Suite cluster to access externally with the master IP (or external IP):\n$ kubectl get service \u0026lt;domainUID\u0026gt;-cluster-\u0026lt;soa-cluster\u0026gt; -n \u0026lt;namespace\u0026gt; For example:\n$ kubectl get service soainfra-cluster-soa-cluster -n soans Create a Kubernetes service to expose the Oracle SOA Suite cluster service (\u0026lt;domainUID\u0026gt;-cluster-\u0026lt;soa-cluster\u0026gt;) externally with same port as the Managed Server:\n$ kubectl expose service \u0026lt;domainUID\u0026gt;-cluster-\u0026lt;soa-cluster\u0026gt; --name \u0026lt;domainUID\u0026gt;-\u0026lt;soa-cluster\u0026gt;-ext --external-ip=\u0026lt;Master IP\u0026gt; -n \u0026lt;namespace\u0026gt; For example:\n$ kubectl expose service soainfra-cluster-soa-cluster --name soainfra-cluster-soa-cluster-ext --external-ip=X.X.X.X -n soans In a production environment, exposing the SOA cluster service with an external IP address is not recommended, as it can cause message drops on the SOA Managed Servers.\n Create an application server connection in JDeveloper Create a new application server connection (for example wls-k8s-op-connection) in JDeveloper: In the configuration page, provide the WebLogic Hostname as the Kubernetes Master Address.\n Update the Port as the T3 port (default is 30012) obtained in Prerequisites.\n Enter the WebLogic Domain value (domainUID).\n Test the connection to verify it is successful. Deploy SOA composite applications using JDeveloper In JDeveloper, right-click the SOA project you want to deploy and select Deploy to display the deployment wizard. In the Deployment Action page, select Deploy to Application Server and click Next. In the Deployment Configuration page, select the appropriate options and click Next. In the Select server page, select the application server connection (wls-k8s-op-connection) that was created earlier and click Next. If the Prerequisites were configured correctly, the lookup discovers the Managed Servers for deploying the composite. Using the application server connection, the Managed Servers (Oracle SOA Suite cluster) are listed on the SOA Servers page. Select the Oracle SOA Suite cluster and click Next. On the Summary page, click Finish to start deploying the composites to the Oracle SOA Suite cluster. Verify logs on JDeveloper to confirm successful deployment. Enter the soa-infra URLs in a browser to confirm the composites are deployed on both servers of the Oracle SOA Suite cluster. Deploy Oracle Service Bus composite applications using JDeveloper In JDeveloper, right-click the Oracle Service Bus project you want to deploy and select Deploy to display the deployment wizard. In the Deployment Action page, select Deploy to Application Server and click Next. In the Select Server page, select the application server connection (wls-k8s-op-connection) that was created earlier and click Next. On the Summary page, click Finish to start deploying the composites to the Oracle Service Bus cluster. In JDeveloper, verify logs to confirm successful deployment. In the Oracle Service Bus Console, click Launch Test Console to verify that the Oracle Service Bus composite application is deployed successfully. " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/appendix/soa-cluster-sizing-info/", + "title": "Domain resource sizing", + "tags": [], + "description": "Describes the resourse sizing information for Oracle SOA Suite domains setup on Kubernetes cluster.", + "content": "Oracle SOA cluster sizing recommendations Oracle SOA Normal Usage Moderate Usage High Usage Administration Server No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB Number of Managed Servers 2 2 4 Configurations per Managed Server No of CPU core(s) : 2, Memory : 16GB No of CPU core(s) : 4, Memory : 16GB No of CPU core(s) : 6, Memory : 16-32GB PV Storage Minimum 250GB Minimum 250GB Minimum 500GB " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/appendix/wcsites-cluster-sizing-info/", + "title": "Domain resource sizing", + "tags": [], + "description": "Describes the resourse sizing information for Oracle WebCenter Sites domains setup on Kubernetes cluster.", + "content": "Oracle WebCenter Sites cluster sizing recommendations Oracle WebCenter Sites Normal Usage Moderate Usage High Usage Administration Server No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB Managed Server No of Servers : 2, No of CPU core(s) : 2, Memory : 16GB No of Servers : 2, No of CPU core(s) : 4, Memory : 16GB No of Servers : 3, No of CPU core(s) : 6, Memory : 16-32GB PV Storage Minimum 250GB Minimum 250GB Minimum 500GB " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/patch-an-image/", + "title": "Patch an image", + "tags": [], + "description": "Create a patched Oracle SOA Suite image using the WebLogic Image Tool.", + "content": "Oracle releases Oracle SOA Suite images regularly with the latest bundle and recommended interim patches in My Oracle Support (MOS). However, if you need to create images with new bundle and interim patches, you can build these images using the WebLogic Image Tool.\nIf you have access to the Oracle SOA Suite patches, you can patch an existing Oracle SOA Suite image with a bundle patch and interim patches. Oracle recommends that you use the WebLogic Image Tool to patch the Oracle SOA Suite image.\n Recommendations:\n Use the WebLogic Image Tool create feature for patching the Oracle SOA Suite Docker image with a bundle patch and multiple interim patches. This is the recommended approach because it optimizes the size of the image. Use the WebLogic Image Tool update feature for patching the Oracle SOA Suite Docker image with a single interim patch. Note that the patched image size may increase considerably due to additional image layers introduced by the patch application tool. Apply the patched Oracle SOA Suite image To update an Oracle SOA Suite domain with a patched image, first make sure the patched image is pulled or created and available on the nodes in your Kubernetes cluster. Once the patched image is available, you can follow these steps to update the Oracle SOA Suite domain with a patched image:\n Stop all servers Update user permissions of the domain PV storage Address post-installation requirements Apply the patched image Stop all servers Note: The following steps are applicable only for non-Zero Downtime Patching. For Zero Downtime Patching, go to Address post-installation requirements.\n Before applying the patch, stop all servers in the domain:\n In the domain.yaml configuration file, update the spec.serverStartPolicy field value to NEVER.\n Shut down the domain (stop all servers) by applying the updated domain.yaml file:\n$ kubectl apply -f domain.yaml Update user permissions of the domain PV storage The Oracle SOA Suite image for release 21.3.2 has an oracle user with UID 1000, with the default group set to root. Before applying the patched image, update the user permissions of the domain persistent volume (PV) to set the group to root:\n$ sudo chown -R 1000:0 /scratch/k8s_dir/SOA Address post-installation requirements If the patches in the patched Oracle SOA Suite image have any post-installation steps, follow these steps:\n Create a Kubernetes pod with domain home access Perform post-installation steps Create a Kubernetes pod with domain home access Get domain home persistence volume claim details for the Oracle SOA Suite domain.\nFor example, to list the persistent volume claim details in the namespace soans:\n$ kubectl get pvc -n soans Sample output showing the persistent volume claim is soainfra-domain-pvc:\nNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE soainfra-domain-pvc Bound soainfra-domain-pv 10Gi RWX soainfra-domain-storage-class xxd Create a YAML soapostinstall.yaml using the domain home persistence volume claim.\nFor example, using soainfra-domain-pvc per the sample output:\n Note: Replace soasuite:12.2.1.4-30761841 with the patched image in the following sample YAML:\n apiVersion: v1 kind: Pod metadata: labels: run: soapostinstall name: soapostinstall namespace: soans spec: containers: - image: soasuite:12.2.1.4-30761841 name: soapostinstall command: [\u0026quot;/bin/bash\u0026quot;, \u0026quot;-c\u0026quot;, \u0026quot;sleep infinity\u0026quot;] imagePullPolicy: IfNotPresent volumeMounts: - name: soainfra-domain-storage-volume mountPath: /u01/oracle/user_projects volumes: - name: soainfra-domain-storage-volume persistentVolumeClaim: claimName: soainfra-domain-pvc Apply the YAML to create the Kubernetes pod:\n$ kubectl apply -f soapostinstall.yaml Perform post-installation steps If you need to perform any post-installation steps on the domain home:\n Start a bash shell in the soapostinstall pod:\n$ kubectl exec -it -n soans soapostinstall -- bash This opens a bash shell in the running soapostinstall pod:\n[oracle@soapostinstall oracle]$ Use the bash shell of the soapostinstall pod and perform the required steps on the domain home.\n After successful completion of the post-installation steps, you can delete the soapostinstall pod:\n$ kubectl delete -f soapostinstall.yaml Apply the patched image After completing the required SOA schema upgrade and post-installation steps, start up the domain:\n In the domain.yaml configuration file, update the image field value with the patched image:\nFor example:\n image: soasuite:12.2.1.4-30761841 In case of non-Zero Downtime Patching, update the spec.serverStartPolicy field value to IF_NEEDED in domain.yaml.\n Apply the updated domain.yaml configuration file to start up the domain.\n$ kubectl apply -f domain.yaml Note: In case of non-Zero Downtime Patching, the complete domain startup happens, as the servers in the domain were stopped earlier. For Zero Downtime Patching, the servers in the domain are rolling restarted.\n Verify the domain is updated with the patched image:\n$ kubectl describe domain \u0026lt;domainUID\u0026gt; -n \u0026lt;domain-namespace\u0026gt;|grep \u0026quot;Image:\u0026quot; Sample output:\n$ kubectl describe domain soainfra -n soans |grep \u0026quot;Image:\u0026quot; Image: soasuite:12.2.1.4-30761841 $ " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/", + "title": "Set up a load balancer", + "tags": [], + "description": "Configure different load balancers for Oracle SOA Suite domains.", + "content": "The WebLogic Kubernetes Operator supports ingress-based load balancers such as Traefik, NGINX (kubernetes/ingress-nginx), and Voyager. It also supports Apache web tier load balancer.\n Traefik Configure the ingress-based Traefik load balancer for Oracle SOA Suite domains.\n NGINX Configure the ingress-based NGINX load balancer for Oracle SOA Suite domains.\n Voyager Configure the ingress-based Voyager load balancer for Oracle SOA Suite domains.\n Apache web tier Configure the Apache web tier load balancer for Oracle SOA Suite domains.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/", + "title": "Set up a load balancer", + "tags": [], + "description": "Configure different load balancers for Oracle WebCenter Sites domains", + "content": "The Oracle WebLogic Server Kubernetes operator supports ingress-based load balancers such as Traefik, NGINX (kubernetes/ingress-nginx) and Voyager.\n Traefik Configure the ingress-based Traefik load balancer for Oracle WebCenter Sites domains.\n NGINX Configure the ingress-based NGINX load balancer for Oracle WebCenter Sites domains.\n Voyager Configure the ingress-based Voyager load balancer for Oracle WebCenter Sites domains.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/traefik/", + "title": "Traefik", + "tags": [], + "description": "Configure the ingress-based Traefik load balancer for Oracle SOA Suite domains.", + "content": "This section provides information about how to install and configure the ingress-based Traefik load balancer (version 2.2.1 or later for production deployments) to load balance Oracle SOA Suite domain clusters. You can configure Traefik for non-SSL, SSL termination, and end-to-end SSL access of the application URL.\nFollow these steps to set up Traefik as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster:\n Install the Traefik (ingress-based) load balancer Create an Ingress for the domain Verify domain application URL access Uninstall the Traefik ingress Uninstall Traefik Install the Traefik (ingress-based) load balancer Use Helm to install the Traefik (ingress-based) load balancer. Use the values.yaml file in the sample but set kubernetes.namespaces specifically.\n$ cd ${WORKDIR} $ kubectl create namespace traefik $ helm repo add traefik https://containous.github.io/traefik-helm-chart Sample output:\n\u0026#34;traefik\u0026#34; has been added to your repositories Install Traefik:\n$ helm install traefik traefik/traefik \\ --namespace traefik \\ --values charts/traefik/values.yaml \\ --set \u0026#34;kubernetes.namespaces={traefik}\u0026#34; \\ --set \u0026#34;service.type=NodePort\u0026#34; --wait Click here to see the sample output. LAST DEPLOYED: Sun Sep 13 21:32:00 2020 NAMESPACE: traefik STATUS: deployed REVISION: 1 TEST SUITE: None A sample values.yaml for deployment of Traefik 2.2.x:\nimage: name: traefik tag: 2.2.8 pullPolicy: IfNotPresent ingressRoute: dashboard: enabled: true # Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class) annotations: {} # Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels) labels: {} providers: kubernetesCRD: enabled: true kubernetesIngress: enabled: true # IP used for Kubernetes Ingress endpoints ports: traefik: port: 9000 expose: true # The exposed port for this service exposedPort: 9000 # The port protocol (TCP/UDP) protocol: TCP web: port: 8000 # hostPort: 8000 expose: true exposedPort: 30305 nodePort: 30305 # The port protocol (TCP/UDP) protocol: TCP # Use nodeport if set. This is useful if you have configured Traefik in a # LoadBalancer # nodePort: 32080 # Port Redirections # Added in 2.2, you can make permanent redirects via entrypoints. # https://docs.traefik.io/routing/entrypoints/#redirection # redirectTo: websecure websecure: port: 8443 # # hostPort: 8443 expose: true exposedPort: 30443 # The port protocol (TCP/UDP) protocol: TCP nodePort: 30443 Verify the Traefik status and find the port number of the SSL and non-SSL services:\n$ kubectl get all -n traefik Click here to see the sample output. NAME READY STATUS RESTARTS AGE pod/traefik-5fc4947cf9-fbl9r 1/1 Running 5 7d17h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/traefik NodePort 10.100.195.70 \u0026lt;none\u0026gt; 9000:31288/TCP,30305:30305/TCP,30443:30443/TCP 7d17h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/traefik 1/1 1 1 7d17h NAME DESIRED CURRENT READY AGE replicaset.apps/traefik-5fc4947cf9 1 1 1 7d17h Access the Traefik dashboard through the URL http://$(hostname -f):31288, with the HTTP host traefik.example.com:\n$ curl -H \u0026#34;host: $(hostname -f)\u0026#34; http://$(hostname -f):31288/dashboard/ Note: Make sure that you specify a fully qualified node name for $(hostname -f)\n Configure Traefik to manage ingresses created in this namespace, where traefik is the Traefik namespace and soans is the namespace of the domain:\n $ helm upgrade traefik traefik/traefik --namespace traefik --reuse-values \\ --set \u0026#34;kubernetes.namespaces={traefik,soans}\u0026#34; Click here to see the sample output. Release \u0026#34;traefik\u0026#34; has been upgraded. Happy Helming! NAME: traefik LAST DEPLOYED: Sun Sep 13 21:32:12 2020 NAMESPACE: traefik STATUS: deployed REVISION: 2 TEST SUITE: None Create an ingress for the domain Create an ingress for the domain in the domain namespace by using the sample Helm chart. Here path-based routing is used for ingress. Sample values for default configuration are shown in the file ${WORKDIR}/charts/ingress-per-domain/values.yaml. By default, type is TRAEFIK, sslType is NONSSL, and domainType is soa. These values can be overridden by passing values through the command line or can be edited in the sample file values.yaml based on the type of configuration (NONSSL, SSL, and E2ESSL).\nIf needed, you can update the ingress YAML file to define more path rules (in section spec.rules.host.http.paths) based on the domain application URLs that need to be accessed. The template YAML file for the Traefik (ingress-based) load balancer is located at ${WORKDIR}/charts/ingress-per-domain/templates/traefik-ingress.yaml.\n Note: See here for all the configuration parameters.\n Install ingress-per-domain using Helm for NONSSL configuration:\n$ cd ${WORKDIR} $ helm install soa-traefik-ingress \\ charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set \u0026#34;traefik.hostname=$(hostname -f)\u0026#34; Sample output:\nNAME: soa-traefik-ingress LAST DEPLOYED: Mon Jul 20 11:44:13 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None For secured access (SSL termination and E2ESSL) to the Oracle SOA Suite application, create a certificate, and generate a Kubernetes secret:\n$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls1.key -out /tmp/tls1.crt -subj \u0026#34;/CN=*\u0026#34; $ kubectl -n soans create secret tls soainfra-tls-cert --key /tmp/tls1.key --cert /tmp/tls1.crt Create the Traefik TLSStore custom resource.\nIn case of SSL termination, Traefik should be configured to use the user-defined SSL certificate. If the user-defined SSL certificate is not configured, Traefik will create a default SSL certificate. To configure a user-defined SSL certificate for Traefik, use the TLSStore custom resource. The Kubernetes secret created with the SSL certificate should be referenced in the TLSStore object. Run the following command to create the TLSStore:\n$ cat \u0026lt;\u0026lt;EOF | kubectl apply -f - apiVersion: traefik.containo.us/v1alpha1 kind: TLSStore metadata: name: default namespace: soans spec: defaultCertificate: secretName: soainfra-tls-cert EOF Install ingress-per-domain using Helm for SSL configuration.\nThe Kubernetes secret name should be updated in the template file.\nThe template file also contains the following annotations:\ntraefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.tls: \u0026#34;true\u0026#34; traefik.ingress.kubernetes.io/router.middlewares: soans-wls-proxy-ssl@kubernetescrd The entry point for SSL termination access and the Middleware name should be updated in the annotation. The Middleware name should be in the form \u0026lt;namespace\u0026gt;-\u0026lt;middleware name\u0026gt;@kubernetescrd.\n$ cd ${WORKDIR} $ helm install soa-traefik-ingress \\ charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set \u0026#34;traefik.hostname=$(hostname -f)\u0026#34; \\ --set sslType=SSL Sample output:\nNAME: soa-traefik-ingress LAST DEPLOYED: Mon Jul 20 11:44:13 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None Install ingress-per-domain using Helm for E2ESSL configuration.\n$ cd ${WORKDIR} $ helm install soa-traefik-ingress \\ charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set sslType=E2ESSL Sample output:\nNAME: soa-traefik-ingress LAST DEPLOYED: Fri Apr 9 09:47:27 2021 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None For NONSSL access to the Oracle SOA Suite application, get the details of the services by the ingress:\n$ kubectl describe ingress soainfra-traefik -n soans Click here to see all services supported by the above deployed ingress. Name: soainfra-traefik Namespace: soans Address: Default backend: default-http-backend:80 (\u0026lt;error: endpoints \u0026#34;default-http-backend\u0026#34; not found\u0026gt;) Rules: Host Path Backends ---- ---- -------- www.example.com /console soainfra-adminserver:7001 (10.244.0.45:7001) /em soainfra-adminserver:7001 (10.244.0.45:7001) /weblogic/ready soainfra-adminserver:7001 (10.244.0.45:7001) soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /soa-infra soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /soa/composer soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /integration/worklistapp soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) Annotations: kubernetes.io/ingress.class: traefik Events: \u0026lt;none\u0026gt; For SSL access to the Oracle SOA Suite application, get the details of the services by the above deployed ingress:\n$ kubectl describe ingress soainfra-traefik -n soans Click here to see all services supported by the above deployed ingress. ``` Name: soainfra-traefik Namespace: soans Address: Default backend: default-http-backend:80 (\u0026lt;error: endpoints \u0026quot;default-http-backend\u0026quot; not found\u0026gt;) TLS: soainfra-tls-cert terminates www.example.com Rules: Host Path Backends ---- ---- -------- www.example.com /console soainfra-adminserver:7001 () /em soainfra-adminserver:7001 () /weblogic/ready soainfra-adminserver:7001 () soainfra-cluster-soa-cluster:8001 () /soa-infra soainfra-cluster-soa-cluster:8001 () /soa/composer soainfra-cluster-soa-cluster:8001 () /integration/worklistapp soainfra-cluster-soa-cluster:8001 () Annotations: kubernetes.io/ingress.class: traefik meta.helm.sh/release-name: soa-traefik-ingress meta.helm.sh/release-namespace: soans traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.middlewares: soans-wls-proxy-ssl@kubernetescrd traefik.ingress.kubernetes.io/router.tls: true Events: \u0026lt;none\u0026gt; ``` For E2ESSL access to the Oracle SOA Suite application, get the details of the services by the above deployed ingress:\n$ kubectl describe IngressRouteTCP soainfra-traefik -n soans\t Click here to see all services supported by the above deployed ingress. ``` Name: soa-cluster-routetcp Namespace: soans Labels: app.kubernetes.io/managed-by=Helm Annotations: meta.helm.sh/release-name: soa-traefik-ingress meta.helm.sh/release-namespace: soans API Version: traefik.containo.us/v1alpha1 Kind: IngressRouteTCP Metadata: Creation Timestamp: 2021-04-09T09:47:27Z Generation: 1 Managed Fields: API Version: traefik.containo.us/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:meta.helm.sh/release-name: f:meta.helm.sh/release-namespace: f:labels: .: f:app.kubernetes.io/managed-by: f:spec: .: f:entryPoints: f:routes: f:tls: .: f:passthrough: Manager: Go-http-client Operation: Update Time: 2021-04-09T09:47:27Z Resource Version: 548305 Self Link: /apis/traefik.containo.us/v1alpha1/namespaces/soans/ingressroutetcps/soa-cluster-routetcp UID: 933e524c-b773-474b-a87f-560d69f08d4b Spec: Entry Points: websecure Routes: Match: HostSNI(`HostName`) Services: Termination Delay: 400 Name: soainfra-adminserver Port: 7002 Weight: 3 Tls: Passthrough: true Events: \u0026lt;none\u0026gt; ``` To confirm that the load balancer noticed the new ingress and is successfully routing to the domain server pods, you can send a request to the URL for the \u0026ldquo;WebLogic ReadyApp framework\u0026rdquo;, which should return an HTTP 200 status code, as follows:\n$ curl -v http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_PORT}/weblogic/ready * Trying 149.87.129.203... \u0026gt; GET http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_PORT}/weblogic/ready HTTP/1.1 \u0026gt; User-Agent: curl/7.29.0 \u0026gt; Accept: */* \u0026gt; Proxy-Connection: Keep-Alive \u0026gt; host: $(hostname -f) \u0026gt; \u0026lt; HTTP/1.1 200 OK \u0026lt; Date: Sat, 14 Mar 2020 08:35:03 GMT \u0026lt; Vary: Accept-Encoding \u0026lt; Content-Length: 0 \u0026lt; Proxy-Connection: Keep-Alive \u0026lt; * Connection #0 to host localhost left intact Verify domain application URL access For NONSSL configuration After setting up the Traefik (ingress-based) load balancer, verify that the domain application URLs are accessible through the non-SSL load balancer port 30305 for HTTP access. The sample URLs for Oracle SOA Suite domain of type soa are:\nhttp://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/weblogic/ready http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/console http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/em http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa-infra http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa/composer http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/integration/worklistapp For SSL configuration After setting up the Traefik (ingress-based) load balancer, verify that the domain applications are accessible through the SSL load balancer port 30443 for HTTPS access. The sample URLs for Oracle SOA Suite domain of type soa are:\nhttps://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/weblogic/ready https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/console https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/em https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/soa-infra https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/soa/composer https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER-SSLPORT}/integration/worklistapp For E2ESSL configuration After setting up the Traefik (ingress-based) load balancer, verify that the domain applications are accessible through the SSL load balancer port 30443 for HTTPS access.\n To access the application URLs from the browser, update /etc/hosts on the browser host (in Windows, C:\\Windows\\System32\\Drivers\\etc\\hosts) with the entries below\nX.X.X.X admin.org X.X.X.X soa.org X.X.X.X osb.org Note: The value of X.X.X.X is the host ipaddress on which this ingress is deployed.\n Note: If you are behind any corporate proxy, make sure to update the browser proxy settings appropriately to access the host names updated /etc/hosts file.\n The sample URLs for Oracle SOA Suite domain of type soa are:\nhttps://admin.org:${LOADBALANCER-SSLPORT}/weblogic/ready https://admin.org:${LOADBALANCER-SSLPORT}/console https://admin.org:${LOADBALANCER-SSLPORT}/em https://soa.org:${LOADBALANCER-SSLPORT}/soa-infra https://soa.org:${LOADBALANCER-SSLPORT}/soa/composer https://soa.org:${LOADBALANCER-SSLPORT}/integration/worklistapp Uninstall the Traefik ingress Uninstall and delete the ingress deployment:\n$ helm delete soa-traefik-ingress -n soans Uninstall Traefik $ helm delete traefik -n traefik " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/traefik/", + "title": "Traefik", + "tags": [], + "description": "Configure the ingress-based Traefik load balancer for Oracle WebCenter Sites domains.", + "content": "This section provides information about how to install and configure the ingress-based Traefik load balancer (version 2.2.1 or later for production deployments) to load balance Oracle WebCenter Sites domain clusters. You can configure Traefik for access of the application URL.\nFollow these steps to set up Traefik as a load balancer for an Oracle WebCenter Sites domain in a Kubernetes cluster:\nSetting Up Loadbalancer Traefik for the WebCenter Sites Domain on K8S Follow these steps to set up Traefik as a loadbalancer for the Oracle WebCenter Sites domain:\n Install the Traefik Load Balancer Configure Traefik to Manage Ingresses Create an Ingress for the Domain Verify that You can Access the Domain URL Install the Traefik Load Balancer Use helm to install the Traefik load balancer. For detailed information, see this document. Use the values.yaml file in the sample but set kubernetes.namespaces specifically.\n Add the repo\n $ cd ${WORKDIR}/weblogic-kubernetes-operator $ kubectl create namespace traefik $ helm repo add traefik https://containous.github.io/traefik-helm-chart Update the repo\n $ helm repo update Helm Install for Traefik\n $ helm install traefik-operator stable/traefik --namespace traefik --values kubernetes/samples/charts/traefik/values.yaml --set \u0026#34;dashboard.domain=$(hostname -f),kubernetes.namespaces={traefik}\u0026#34; NAME:traefik-operator LAST DEPLOYED: Fri Jun 19 00:17:57 2020 NAMESPACE: traefik STATUS: deployed REVISION: 1 TEST SUITE: None Access the Traefik dashboard through the URL http://$(hostname -f):30305, with the HTTP host traefik.example.com. NOTE: Make sure you specify full qualified node name for $(hostname -f).\n$ curl -H \u0026#39;host: $(hostname -f)\u0026#39; http://$(hostname -f):30305/ \u0026lt;a href=\u0026#34;/dashboard/\u0026#34;\u0026gt;Found\u0026lt;/a\u0026gt;. $ Configure Traefik to Manage Ingresses Configure Traefik to manage Ingresses created in this namespace: Note: Here traefik is the Traefik namespace, wcsites-ns is the namespace of the domain.\n Helm upgrade for traefik\n $ helm upgrade --reuse-values --set \u0026#34;kubernetes.namespaces={traefik,wcsites-ns}\u0026#34; --wait traefik-operator stable/traefik --namespace traefik NAME:traefik-operator LAST DEPLOYED: Fri Jun 19 00:18:50 2020 NAMESPACE: traefik STATUS: deployed REVISION: 2 TEST SUITE: None Create an Ingress for the Domain Create an Ingress for the domain (ingress-per-domain-wcsites), in the domain namespace by using the sample Helm chart. Here we are using the path-based routing for ingress. For detailed instructions about ingress, see this page).\nFor now, you can update the kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml with appropriate values. Sample values are shown below:\n$ cat kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml # Copyright 2020, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Default values for ingress-per-domain. # This is a YAML-formatted file. # Declare variables to be passed into your templates. apiVersion: networking.k8s.io/v1beta1 # Load balancer type. Supported values are: TRAEFIK, VOYAGER type: TRAEFIK #type: VOYAGER #type: NGINX # WLS domain as backend to the load balancer wlsDomain: domainUID: wcsitesinfra adminServerName: adminserver adminServerPort: 7001 wcsitesClusterName: wcsites_cluster wcsitesManagedServerPort: 8001 # Voyager specific values voyager: # web port webPort: 30305 # stats port statsPort: 30317 # Ngnix specific values ngnix: #connect timeout connectTimeout: 1800s #read timeout readTimeout: 1800s #send timeout sendTimeout: 1800s Update the kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/templates/traefik-ingress.yaml with the url routes to be load balanced.\nBelow are the defined ingress rules:\nNOTE: This is not an exhaustive list of rules. You can enhance it based on the application urls that need to be accessed externally. These rules hold good for domain type WCSITES.\n$ vi kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/templates/traefik-ingress.yaml # Copyright 2020, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. {{- if eq .Values.type \u0026#34;TRAEFIK\u0026#34; }} --- apiVersion: {{ .Values.apiVersion }} kind: Ingress metadata: name: {{ .Values.wlsDomain.domainUID }}-traefik namespace: {{ .Release.Namespace }} labels: weblogic.resourceVersion: domain-v2 annotations: kubernetes.io/ingress.class: traefik rules: spec: - host: \u0026#39;{{ .Values.traefik.hostname }}\u0026#39; http: paths: - path: /console backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /em backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /wls-exporter backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /weblogic backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /sbconsole backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /sites backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} - path: /cas backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} - path: /wls-exporter backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} # - path: /wls-cat # backend: # serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; # servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} # - path: # backend: # serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; # servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} {{- end }} Install \u0026ldquo;ingress-per-domain\u0026rdquo; using helm.\n Helm Install ingress-per-domain\n $ helm install wcsitesinfra-ingress kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain \\ --namespace wcsites-ns \\ --values kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml \\ --set \u0026#34;traefik.hostname=$(hostname -f)\u0026#34; NAME: wcsitesinfra-ingress LAST DEPLOYED: Fri Jun 19 00:18:50 2020 NAMESPACE: wcsites-ns STATUS: deployed REVISION: 1 TEST SUITE: None To confirm that the load balancer noticed the new Ingress and is successfully routing to the domain\u0026rsquo;s server pods, you can send a request to the URL for the \u0026ldquo;WebLogic ReadyApp framework\u0026rdquo; which should return a HTTP 200 status code, as shown in the example below:\n -bash-4.2$ curl -v http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready * Trying 149.87.129.203... \u0026gt; GET http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready HTTP/1.1 \u0026gt; User-Agent: curl/7.29.0 \u0026gt; Accept: */* \u0026gt; Proxy-Connection: Keep-Alive \u0026gt; host: $(hostname -f) \u0026gt; \u0026lt; HTTP/1.1 200 OK \u0026lt; Date: Sat, 14 Mar 2020 08:35:03 GMT \u0026lt; Vary: Accept-Encoding \u0026lt; Content-Length: 0 \u0026lt; Proxy-Connection: Keep-Alive \u0026lt; * Connection #0 to host localhost left intact Verify that You can Access the Domain URL After setting up the Traefik loadbalancer, verify that the domain applications are accessible through the loadbalancer port 30305. Through load balancer (Traefik port 30305), the following URLs are available for setting up domains of WebCenter Sites domain types:\nhttp://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/sites/version.jsp " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/installguide/", + "title": "Install Guide", + "tags": [], + "description": "", + "content": "Install the WebLogic Kubernetes Operator and prepare and deploy Oracle SOA Suite domains.\n Requirements and limitations Understand the system requirements and limitations for deploying and running Oracle SOA Suite domains with the WebLogic Kubernetes Operator, including the SOA cluster sizing recommendations.\n Prepare your environment Prepare for creating Oracle SOA Suite domains, including required secrets creation, persistent volume and volume claim creation, database creation, and database schema creation.\n Create Oracle SOA Suite domains Create an Oracle SOA Suite domain home on an existing PV or PVC, and create the domain resource YAML file for deploying the generated Oracle SOA Suite domain.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/installguide/", + "title": "Install Guide", + "tags": [], + "description": "", + "content": "Install the WebLogic Kubernetes Operator and prepare and deploy Oracle Webcenter Sites domains.\n Requirements and limitations Understand the system requirements and limitations for deploying and running Oracle WebCenter Sites domains with the WebLogic Kubernetes Operator, including the WebCenter Sites domain cluster sizing recommendations.\n Prepare your environment Prepare for creating Oracle WebCenter Sites domains, including required secrets creation, persistent volume and volume claim creation, database creation, and database schema creation.\n Create Oracle WebCenter Sites domains Create an Oracle WebCenter Sites domain home on an existing PV or PVC, and create the domain resource YAML file for deploying the generated Oracle WebCenter Sites domain.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/appendix/quickstart-deployment-on-prem/", + "title": "Quick start deployment on-premise", + "tags": [], + "description": "Describes how to quickly get an Oracle SOA Suite domain instance running (using the defaults, nothing special) for development and test purposes.", + "content": "Use this Quick Start to create an Oracle SOA Suite domain deployment in a Kubernetes cluster (on-premise environments) with the WebLogic Kubernetes Operator. Note that this walkthrough is for demonstration purposes only, not for use in production. These instructions assume that you are already familiar with Kubernetes. If you need more detailed instructions, refer to the Install Guide.\nHardware requirements The Linux kernel supported for deploying and running Oracle SOA Suite domains with the operator is Oracle Linux 7 (UL6+) and Red Hat Enterprise Linux 7 (UL3+ only with standalone Kubernetes). Refer to the prerequisites for more details.\nFor this exercise, the minimum hardware requirements to create a single-node Kubernetes cluster and then deploy the soaosb (SOA, Oracle Service Bus, and Enterprise Scheduler (ESS)) domain type with one Managed Server for SOA and one for the Oracle Service Bus cluster, along with Oracle Database running as a container are:\n Hardware Size RAM 32GB Disk Space 250GB+ CPU core(s) 6 See here for resource sizing information for Oracle SOA Suite domains set up on a Kubernetes cluster.\nSet up Oracle SOA Suite in an on-premise environment Use the steps in this topic to create a single-instance on-premise Kubernetes cluster and then create an Oracle SOA Suite soaosb domain type, which deploys a domain with SOA, Oracle Service Bus, and Oracle Enterprise Scheduler (ESS).\n Step 1 - Prepare a virtual machine for the Kubernetes cluster Step 2 - Set up a single instance Kubernetes cluster Step 3 - Get scripts and images Step 4 - Install the WebLogic Kubernetes Operator Step 5 - Install the Traefik (ingress-based) load balancer Step 6 - Create and configure an Oracle SOA Suite domain 1. Prepare a virtual machine for the Kubernetes cluster For illustration purposes, these instructions are for Oracle Linux 7u6+. If you are using a different flavor of Linux, you will need to adjust the steps accordingly.\nThese steps must be run with the root user, unless specified otherwise. Any time you see YOUR_USERID in a command, you should replace it with your actual userid.\n 1.1 Prerequisites Choose the directories where your Docker and Kubernetes files will be stored. The Docker directory should be on a disk with a lot of free space (more than 100GB) because it will be used for the Docker file system, which contains all of your images and containers. The Kubernetes directory is used for the /var/lib/kubelet file system and persistent volume storage.\n$ export docker_dir=/u01/docker $ export kubelet_dir=/u01/kubelet $ mkdir -p $docker_dir $kubelet_dir $ ln -s $kubelet_dir /var/lib/kubelet Verify that IPv4 forwarding is enabled on your host.\nNote: Replace eth0 with the ethernet interface name of your compute resource if it is different.\n$ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s \u0026#39;net.ipv4.conf.docker0.forwarding\u0026#39; $ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s \u0026#39;net.ipv4.conf.eth0.forwarding\u0026#39; $ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s \u0026#39;net.ipv4.conf.lo.forwarding\u0026#39; $ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s \u0026#39;net.ipv4.ip_nonlocal_bind\u0026#39; For example: Verify that all are set to 1:\n$ net.ipv4.conf.docker0.forwarding = 1 $ net.ipv4.conf.eth0.forwarding = 1 $ net.ipv4.conf.lo.forwarding = 1 $ net.ipv4.ip_nonlocal_bind = 1 Solution: Set all values to 1 immediately:\n$ /sbin/sysctl net.ipv4.conf.docker0.forwarding=1 $ /sbin/sysctl net.ipv4.conf.eth0.forwarding=1 $ /sbin/sysctl net.ipv4.conf.lo.forwarding=1 $ /sbin/sysctl net.ipv4.ip_nonlocal_bind=1 To preserve the settings permanently: Update the above values to 1 in files in /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.\n Verify the iptables rule for forwarding.\nKubernetes uses iptables to handle many networking and port forwarding rules. A standard Docker installation may create a firewall rule that prevents forwarding.\nVerify if the iptables rule to accept forwarding traffic is set:\n$ /sbin/iptables -L -n | awk \u0026#39;/Chain FORWARD / {print $4}\u0026#39; | tr -d \u0026#34;)\u0026#34; If the output is \u0026ldquo;DROP\u0026rdquo;, then run the following command:\n$ /sbin/iptables -P FORWARD ACCEPT Verify if the iptables rule is properly set to \u0026ldquo;ACCEPT\u0026rdquo;:\n$ /sbin/iptables -L -n | awk \u0026#39;/Chain FORWARD / {print $4}\u0026#39; | tr -d \u0026#34;)\u0026#34; Disable and stop firewalld:\n$ systemctl disable firewalld $ systemctl stop firewalld 1.2 Install and configure Docker Note: If you have already installed Docker with version 18.03+ and configured the Docker daemon root to sufficient disk space along with proxy settings, continue to Install and configure Kubernetes.\n Make sure that you have the right operating system version:\n$ uname -a $ more /etc/oracle-release Example output:\nLinux xxxxxxx 4.1.12-124.27.1.el7uek.x86_64 #2 SMP Mon May 13 08:56:17 PDT 2019 x86_64 x86_64 x86_64 GNU/Linux Oracle Linux Server release 7.6 Install the latest docker-engine and start the Docker service:\n$ docker_version=\u0026#34;19.03.1.ol\u0026#34; $ yum-config-manager --enable ol7_addons $ yum install docker-engine-$docker_version $ systemctl enable docker $ systemctl start docker Add your user ID to the Docker group to allow you to run Docker commands without root access:\n$ /sbin/usermod -a -G docker \u0026lt;YOUR_USERID\u0026gt; Check that your Docker version is at least 18.03:\n$ docker version Example output:\nClient: Docker Engine - Community Version: 19.03.1-ol API version: 1.40 Go version: go1.12.5 Git commit: ead9442 Built: Wed Sep 11 06:40:28 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.1-ol API version: 1.40 (minimum version 1.12) Go version: go1.12.5 Git commit: ead9442 Built: Wed Sep 11 06:38:43 2019 OS/Arch: linux/amd64 Experimental: false Default Registry: docker.io containerd: Version: v1.2.0-rc.0-108-gc444666 GitCommit: c4446665cb9c30056f4998ed953e6d4ff22c7c39 runc: Version: 1.0.0-rc5+dev GitCommit: 4bb1fe4ace1a32d3676bb98f5d3b6a4e32bf6c58 docker-init: Version: 0.18.0 GitCommit: fec3683 Update the Docker engine configuration:\n$ mkdir -p /etc/docker $ cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/docker/daemon.json { \u0026#34;group\u0026#34;: \u0026#34;docker\u0026#34;, \u0026#34;data-root\u0026#34;: \u0026#34;/u01/docker\u0026#34; } EOF Configure proxy settings if you are behind an HTTP proxy:\n### Create the drop-in file /etc/systemd/system/docker.service.d/http-proxy.conf that contains proxy details: $ cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment=\u0026#34;HTTP_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT\u0026#34; Environment=\u0026#34;HTTPS_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT\u0026#34; Environment=\u0026#34;NO_PROXY=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock\u0026#34; EOF Note: On some hosts /etc/systemd/system/docker.service.d may not be available. Create this directory if it is not available.\n Restart the Docker daemon to load the latest changes:\n$ systemctl daemon-reload $ systemctl restart docker Verify that the proxy is configured with Docker:\n$ docker info|grep -i proxy Example output:\nHTTP Proxy: http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT HTTPS Proxy: http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT No Proxy: localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock Verify Docker installation:\n$ docker run hello-world Example output:\nHello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the \u0026#34;hello-world\u0026#34; image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ 1.3 Install and configure Kubernetes Add the external Kubernetes repository:\n$ cat \u0026lt;\u0026lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF Set SELinux in permissive mode (effectively disabling it):\n$ export PATH=/sbin:$PATH $ setenforce 0 $ sed -i \u0026#39;s/^SELINUX=enforcing$/SELINUX=permissive/\u0026#39; /etc/selinux/config Export proxy and install kubeadm, kubelet, and kubectl:\n### Get the nslookup IP address of the master node to use with apiserver-advertise-address during setting up Kubernetes master ### as the host may have different internal ip (hostname -i) and nslookup $HOSTNAME $ ip_addr=`nslookup $(hostname -f) | grep -m2 Address | tail -n1| awk -F: \u0026#39;{print $2}\u0026#39;| tr -d \u0026#34; \u0026#34;` $ echo $ip_addr ### Set the proxies $ export NO_PROXY=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr $ export no_proxy=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr $ export http_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT $ export https_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT $ export HTTPS_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT $ export HTTP_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT ### install kubernetes 1.18.4-1 $ VERSION=1.18.4-1 $ yum install -y kubelet-$VERSION kubeadm-$VERSION kubectl-$VERSION --disableexcludes=kubernetes ### enable kubelet service so that it auto-restart on reboot $ systemctl enable --now kubelet Ensure net.bridge.bridge-nf-call-iptables is set to 1 in your sysctl to avoid traffic routing issues:\n$ cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sysctl --system Disable swap check:\n$ sed -i \u0026#39;s/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS=\u0026#34;--fail-swap-on=false\u0026#34;/\u0026#39; /etc/sysconfig/kubelet $ cat /etc/sysconfig/kubelet ### Reload and restart kubelet $ systemctl daemon-reload $ systemctl restart kubelet 1.4 Set up Helm Install Helm v3.3.4+.\na. Download Helm from https://github.com/helm/helm/releases.\nFor example, to download Helm v3.5.4:\n$ wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz b. Unpack tar.gz:\n$ tar -zxvf helm-v3.5.4-linux-amd64.tar.gz c. Find the Helm binary in the unpacked directory, and move it to its desired destination:\n$ mv linux-amd64/helm /usr/bin/helm Run helm version to verify its installation:\n$ helm version version.BuildInfo{Version:\u0026#34;v3.5.4\u0026#34;, GitCommit:\u0026#34;1b5edb69df3d3a08df77c9902dc17af864ff05d1\u0026#34;, GitTreeState:\u0026#34;clean\u0026#34;, GoVersion:\u0026#34;go1.15.11\u0026#34;} 2. Set up a single instance Kubernetes cluster Notes:\n These steps must be run with the root user, unless specified otherwise! If you choose to use a different CIDR block (that is, other than 10.244.0.0/16 for the --pod-network-cidr= in the kubeadm init command), then also update NO_PROXY and no_proxy with the appropriate value. Also make sure to update kube-flannel.yaml with the new value before deploying. Replace the following with appropriate values: ADD-YOUR-INTERNAL-NO-PROXY-LIST REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT 2.1 Set up the master node Create a shell script that sets up the necessary environment variables. You can append this to the user’s .bashrc so that it will run at login. You must also configure your proxy settings here if you are behind an HTTP proxy:\n## grab my IP address to pass into kubeadm init, and to add to no_proxy vars ip_addr=`nslookup $(hostname -f) | grep -m2 Address | tail -n1| awk -F: \u0026#39;{print $2}\u0026#39;| tr -d \u0026#34; \u0026#34;` export pod_network_cidr=\u0026#34;10.244.0.0/16\u0026#34; export service_cidr=\u0026#34;10.96.0.0/12\u0026#34; export PATH=$PATH:/sbin:/usr/sbin ### Set the proxies export NO_PROXY=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr,$pod_network_cidr,$service_cidr export no_proxy=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr,$pod_network_cidr,$service_cidr export http_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT export https_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT export HTTPS_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT export HTTP_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT Source the script to set up your environment variables:\n$ . ~/.bashrc To implement command completion, add the following to the script:\n$ [ -f /usr/share/bash-completion/bash_completion ] \u0026amp;\u0026amp; . /usr/share/bash-completion/bash_completion $ source \u0026lt;(kubectl completion bash) Run kubeadm init to create the master node:\n$ kubeadm init \\ --pod-network-cidr=$pod_network_cidr \\ --apiserver-advertise-address=$ip_addr \\ --ignore-preflight-errors=Swap \u0026gt; /tmp/kubeadm-init.out 2\u0026gt;\u0026amp;1 Log in to the terminal with YOUR_USERID:YOUR_GROUP. Then set up the ~/.bashrc similar to steps 1 to 3 with YOUR_USERID:YOUR_GROUP.\n Note that from now on we will be using YOUR_USERID:YOUR_GROUP to execute any kubectl commands and not root.\n Set up YOUR_USERID:YOUR_GROUP to access the Kubernetes cluster:\n$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config Verify that YOUR_USERID:YOUR_GROUP is set up to access the Kubernetes cluster using the kubectl command:\n$ kubectl get nodes Note: At this step, the node is not in ready state as we have not yet installed the pod network add-on. After the next step, the node will show status as Ready.\n Install a pod network add-on (flannel) so that your pods can communicate with each other.\n Note: If you are using a different CIDR block than 10.244.0.0/16, then download and update kube-flannel.yml with the correct CIDR address before deploying into the cluster:\n $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.12.0/Documentation/kube-flannel.yml Verify that the master node is in Ready status:\n$ kubectl get nodes Sample output:\nNAME STATUS ROLES AGE VERSION mymasternode Ready master 8m26s v1.18.4 or:\n$ kubectl get pods -n kube-system Sample output:\nNAME READY STATUS RESTARTS AGE pod/coredns-86c58d9df4-58p9f 1/1 Running 0 3m59s pod/coredns-86c58d9df4-mzrr5 1/1 Running 0 3m59s pod/etcd-mymasternode 1/1 Running 0 3m4s pod/kube-apiserver-node 1/1 Running 0 3m21s pod/kube-controller-manager-mymasternode 1/1 Running 0 3m25s pod/kube-flannel-ds-amd64-6npx4 1/1 Running 0 49s pod/kube-proxy-4vsgm 1/1 Running 0 3m59s pod/kube-scheduler-mymasternode 1/1 Running 0 2m58s To schedule pods on the master node, taint the node:\n$ kubectl taint nodes --all node-role.kubernetes.io/master- Congratulations! Your Kubernetes cluster environment is ready to deploy your Oracle SOA Suite domain.\nFor additional references on Kubernetes cluster setup, check the cheat sheet.\n3. Get scripts and images 3.1 Set up the code repository to deploy Oracle SOA Suite domains Follow these steps to set up the source code repository required to deploy Oracle SOA Suite domains.\n3.2 Get required Docker images and add them to your local registry Pull the operator image:\n$ docker pull ghcr.io/oracle/weblogic-kubernetes-operator:3.2.1 $ docker tag ghcr.io/oracle/weblogic-kubernetes-operator:3.2.1 oracle/weblogic-kubernetes-operator:3.2.1 Obtain the Oracle Database image and Oracle SOA Suite Docker image from the Oracle Container Registry:\na. For first time users, to pull an image from the Oracle Container Registry, navigate to https://container-registry.oracle.com and log in using the Oracle Single Sign-On (SSO) authentication service. If you do not already have SSO credentials, you can create an Oracle Account using: https://profile.oracle.com/myprofile/account/create-account.jspx.\nUse the web interface to accept the Oracle Standard Terms and Restrictions for the Oracle software images that you intend to deploy. Your acceptance of these terms are stored in a database that links the software images to your Oracle Single Sign-On login credentials.\nTo obtain the image, log in to the Oracle Container Registry:\n$ docker login container-registry.oracle.com b. Find and then pull the Oracle Database image for 12.2.0.1:\n$ docker pull container-registry.oracle.com/database/enterprise:12.2.0.1-slim c. Find and then pull the prebuilt Oracle SOA Suite image 12.2.1.4 install image:\n$ docker pull container-registry.oracle.com/middleware/soasuite:12.2.1.4 Note: This image does not contain any Oracle SOA Suite product patches and can only be used for test and development purposes.\n 4. Install the WebLogic Kubernetes Operator 4.1 Prepare for the WebLogic Kubernetes Operator. Create a namespace opns for the operator:\n$ kubectl create namespace opns Create a service account op-sa for the operator in the operator’s namespace:\n$ kubectl create serviceaccount -n opns op-sa 4.2 Install the WebLogic Kubernetes Operator Use Helm to install and start the operator from the directory you just cloned:\n$ cd ${WORKDIR} $ helm install weblogic-kubernetes-operator charts/weblogic-operator \\ --namespace opns \\ --set image=oracle/weblogic-kubernetes-operator:3.2.1 \\ --set serviceAccount=op-sa \\ --set \u0026#34;domainNamespaces={}\u0026#34; \\ --wait 4.3 Verify the WebLogic Kubernetes Operator Verify that the operator’s pod is running by listing the pods in the operator’s namespace. You should see one for the operator:\n$ kubectl get pods -n opns Verify that the operator is up and running by viewing the operator pod\u0026rsquo;s logs:\n$ kubectl logs -n opns -c weblogic-operator deployments/weblogic-operator The WebLogic Kubernetes Operator v3.2.1 has been installed. Continue with the load balancer and Oracle SOA Suite domain setup.\n5. Install the Traefik (ingress-based) load balancer The WebLogic Kubernetes Operator supports three load balancers: Traefik, Voyager, and Apache. Samples are provided in the documentation.\nThis Quick Start demonstrates how to install the Traefik ingress controller to provide load balancing for an Oracle SOA Suite domain.\n Create a namespace for Traefik:\n$ kubectl create namespace traefik Set up Helm for 3rd party services:\n$ helm repo add traefik https://containous.github.io/traefik-helm-chart Install the Traefik operator in the traefik namespace with the provided sample values:\n$ cd ${WORKDIR} $ helm install traefik traefik/traefik \\ --namespace traefik \\ --values charts/traefik/values.yaml \\ --set \u0026#34;kubernetes.namespaces={traefik}\u0026#34; \\ --set \u0026#34;service.type=NodePort\u0026#34; \\ --wait 6. Create and configure an Oracle SOA Suite domain 6.1 Prepare for an Oracle SOA Suite domain Create a namespace that can host Oracle SOA Suite domains:\n$ kubectl create namespace soans Use Helm to configure the operator to manage Oracle SOA Suite domains in this namespace:\n$ cd ${WORKDIR} $ helm upgrade weblogic-kubernetes-operator charts/weblogic-operator \\ --reuse-values \\ --namespace opns \\ --set \u0026#34;domainNamespaces={soans}\u0026#34; \\ --wait Create Kubernetes secrets.\na. Create a Kubernetes secret for the domain in the same Kubernetes namespace as the domain. In this example, the username is weblogic, the password is Welcome1, and the namespace is soans:\n$ cd ${WORKDIR}/create-weblogic-domain-credentials $ ./create-weblogic-credentials.sh \\ -u weblogic \\ -p Welcome1 \\ -n soans \\ -d soainfra \\ -s soainfra-domain-credentials b. Create a Kubernetes secret for the RCU in the same Kubernetes namespace as the domain:\n Schema user : SOA1 Schema password : Oradoc_db1 DB sys user password : Oradoc_db1 Domain name : soainfra Domain Namespace : soans Secret name : soainfra-rcu-credentials $ cd ${WORKDIR}/create-rcu-credentials $ ./create-rcu-credentials.sh \\ -u SOA1 \\ -p Oradoc_db1 \\ -a sys \\ -q Oradoc_db1 \\ -d soainfra \\ -n soans \\ -s soainfra-rcu-credentials Create the Kubernetes persistence volume and persistence volume claim.\na. Create the Oracle SOA Suite domain home directory. Determine if a user already exists on your host system with uid:gid of 1000:0:\n$ sudo getent passwd 1000 If this command returns a username (which is the first field), you can skip the following useradd command. If not, create the oracle user with useradd:\n$ sudo useradd -u 1000 -g 0 oracle Create the directory that will be used for the Oracle SOA Suite domain home:\n$ sudo mkdir /scratch/k8s_dir $ sudo chown -R 1000:0 /scratch/k8s_dir b. The create-pv-pvc-inputs.yaml has the following values by default:\n baseName: domain domainUID: soainfra namespace: soans weblogicDomainStoragePath: /scratch/k8s_dir Review and update if any changes required.\n$ cd ${WORKDIR}/create-weblogic-domain-pv-pvc $ vim create-pv-pvc-inputs.yaml c. Run the create-pv-pvc.sh script to create the PV and PVC configuration files:\n$ cd ${WORKDIR}/create-weblogic-domain-pv-pvc $ ./create-pv-pvc.sh -i create-pv-pvc-inputs.yaml -o output d. Create the PV and PVC using the configuration files created in the previous step:\n$ kubectl create -f output/pv-pvcs/soainfra-domain-pv.yaml $ kubectl create -f output/pv-pvcs/soainfra-domain-pvc.yaml Install and configure the database for the Oracle SOA Suite domain.\nThis step is required only when a standalone database is not already set up and you want to use the database in a container.\nThe Oracle Database Docker images are supported only for non-production use. For more details, see My Oracle Support note: Oracle Support for Database Running on Docker (Doc ID 2216342.1). For production, it is suggested to use a standalone database. This example provides steps to create the database in a container.\n a. Create a database in a container:\n$ cd ${WORKDIR}/create-oracle-db-service $ ./start-db-service.sh -i container-registry.oracle.com/database/enterprise:12.2.0.1-slim -p none Once the database is successfully created, you can use the database connection string oracle-db.default.svc.cluster.local:1521/devpdb.k8s as an rcuDatabaseURL parameter in the create-domain-inputs.yaml file.\nb. Create Oracle SOA Suite schemas for the domain type (for example, soaosb).\nTo install the Oracle SOA Suite schemas, run the create-rcu-schema.sh script with the following inputs:\n -s \u0026lt;RCU PREFIX\u0026gt; -t \u0026lt;SOA domain type\u0026gt; -d \u0026lt;Oracle Database URL\u0026gt; -i \u0026lt;SOASuite image\u0026gt; -n \u0026lt;Namespace\u0026gt; -q \u0026lt;SYSDBA Database password\u0026gt; -r \u0026lt;Schema password\u0026gt; -c \u0026lt;Comma-separated variables\u0026gt; For example:\n$ cd ${WORKDIR}/create-rcu-schema $ ./create-rcu-schema.sh \\ -s SOA1 \\ -t soaosb \\ -d oracle-db.default.svc.cluster.local:1521/devpdb.k8s \\ -i container-registry.oracle.com/middleware/soasuite:12.2.1.4 \\ -n default \\ -q Oradoc_db1 \\ -r Oradoc_db1 \\ -c SOA_PROFILE_TYPE=SMALL,HEALTHCARE_INTEGRATION=NO Now the environment is ready to start the Oracle SOA Suite domain creation.\n6.2 Create an Oracle SOA Suite domain The sample scripts for Oracle SOA Suite domain deployment are available at OracleSOASuite/create-soa-domain. You must edit create-domain-inputs.yaml (or a copy of it) to provide the details for your domain.\nUpdate create-domain-inputs.yaml with the following values for domain creation:\n domainType: soaosb initialManagedServerReplicas: 1 $ cd ${WORKDIR}/create-soa-domain/domain-home-on-pv/ $ cp create-domain-inputs.yaml create-domain-inputs.yaml.orig $ sed -i -e \u0026#34;s:domainType\\: soa:domainType\\: soaosb:g\u0026#34; create-domain-inputs.yaml $ sed -i -e \u0026#34;s:initialManagedServerReplicas\\: 2:initialManagedServerReplicas\\: 1:g\u0026#34; create-domain-inputs.yaml $ sed -i -e \u0026#34;s:image\\: soasuite\\:12.2.1.4:image\\: container-registry.oracle.com/middleware/soasuite\\:12.2.1.4:g\u0026#34; create-domain-inputs.yaml Run the create-domain.sh script to create a domain:\n$ cd ${WORKDIR}/create-soa-domain/domain-home-on-pv/ $ ./create-domain.sh -i create-domain-inputs.yaml -o output Create a Kubernetes domain object:\nOnce the create-domain.sh is successful, it generates output/weblogic-domains/soainfra/domain.yaml, which you can use to create the Kubernetes resource domain to start the domain and servers:\n$ cd ${WORKDIR}/create-soa-domain/domain-home-on-pv $ kubectl create -f output/weblogic-domains/soainfra/domain.yaml Verify that the Kubernetes domain object named soainfra is created:\n$ kubectl get domain -n soans NAME AGE soainfra 3m18s Once you create the domain, the introspect pod is created. This inspects the domain home and then starts the soainfra-adminserver pod. Once the soainfra-adminserver pod starts successfully, the Managed Server pods are started in parallel. Watch the soans namespace for the status of domain creation:\n$ kubectl get pods -n soans -w Verify that the Oracle SOA Suite domain server pods and services are created and in Ready state:\n$ kubectl get all -n soans 6.3 Configure Traefik to access Oracle SOA Suite domain services Configure Traefik to manage ingresses created in the Oracle SOA Suite domain namespace (soans):\n$ helm upgrade traefik traefik/traefik \\ --reuse-values \\ --namespace traefik \\ --set \u0026#34;kubernetes.namespaces={traefik,soans}\u0026#34; \\ --wait Create an ingress for the domain in the domain namespace by using the sample Helm chart:\n$ cd ${WORKDIR} $ helm install soa-traefik-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set \u0026#34;traefik.hostname=$(hostname -f)\u0026#34; \\ --set domainType=soaosb Verify the created ingress per domain details:\n$ kubectl describe ingress soainfra-traefik -n soans 6.4 Verify that you can access the Oracle SOA Suite domain URL Get the LOADBALANCER_HOSTNAME for your environment:\nexport LOADBALANCER_HOSTNAME=$(hostname -f) Verify the following URLs are available for Oracle SOA Suite domains of domain type soaosb:\nCredentials:\nusername: weblogic password: Welcome1\nhttp://${LOADBALANCER_HOSTNAME}:30305/console http://${LOADBALANCER_HOSTNAME}:30305/em http://${LOADBALANCER_HOSTNAME}:30305/servicebus http://${LOADBALANCER_HOSTNAME}:30305/soa-infra http://${LOADBALANCER_HOSTNAME}:30305/soa/composer http://${LOADBALANCER_HOSTNAME}:30305/integration/worklistapp http://${LOADBALANCER_HOSTNAME}:30305/ess http://${LOADBALANCER_HOSTNAME}:30305/EssHealthCheck " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/appendix/quickstart-deployment-on-prem/", + "title": "Quick start deployment on-premise", + "tags": [], + "description": "Describes how to quickly get an Oracle WebCenter Sites domain instance running (using the defaults, nothing special) for development and test purposes.", + "content": "Use this Quick Start to create an Oracle WebCenter Sites domain deployment in a Kubernetes cluster (on-premise environments) with the Oracle WebLogic Server Kubernetes operator. Note that this walkthrough is for demonstration purposes only, not for use in production. These instructions assume that you are already familiar with Kubernetes. If you need more detailed instructions, refer to the Install Guide.\nHardware requirements Supported Linux kernel for deploying and running Oracle WebCenter Sites domains with the operator is Oracle Linux 7 UL6+ and Red Hat Enterprise Linux 7 (UL3+). Refer to the prerequisites for more details.\nFor this exercise the minimum hardware requirement to create a single node Kubernetes cluster and then deploy wcsitesinfra domain type with one managed server for Oracle WebCenter Sites and Oracle Database running as a container\n Hardware Size RAM 32GB Disk Space 250GB+ CPU core(s) 6 See here for resourse sizing information for Oracle WebCenter Sites domains setup on Kubernetes cluster.\nSet up Oracle WebCenter Sites in an on-premise environment Perform the steps in this topic to create a single instance on-premise Kubernetes cluster and then create an Oracle WebCenter Sites wcsitesinfra domain type.\n Step 1 - Prepare a virtual machine for the Kubernetes cluster Step 2 - Set up a single instance Kubernetes cluster Step 3 - Get scripts and images Step 4 - Install the WebLogic Kubernetes Operator Step 5 - Install the Traefik (ingress-based) load balancer Step 6 - Create and configure an Oracle WebCenter Sites Domain 1. Prepare a virtual machine for the Kubernetes cluster For illustration purposes, these instructions are for Oracle Linux 7u6+. If you are using a different flavor of Linux, you will need to adjust the steps accordingly.\nThese steps must be run with the root user, unless specified otherwise. Any time you see YOUR_USERID in a command, you should replace it with your actual userid.\n 1.1 Prerequisites Choose the directories where your Docker and Kubernetes files will be stored. The Docker directory should be on a disk with a lot of free space (more than 100GB) because it will be used for the Docker file system, which contains all of your images and containers. The Kubernetes directory is used for the /var/lib/kubelet file system and persistent volume storage.\n$ export docker_dir=/u01/docker $ export kubelet_dir=/u01/kubelet $ mkdir -p $docker_dir $kubelet_dir $ ln -s $kubelet_dir /var/lib/kubelet Verify that IPv4 forwarding is enabled on your host.\nNote: Replace eth0 with the ethernet interface name of your compute resource if it is different.\n$ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s 'net.ipv4.conf.docker0.forwarding' $ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s 'net.ipv4.conf.eth0.forwarding' $ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s 'net.ipv4.conf.lo.forwarding' $ /sbin/sysctl -a 2\u0026gt;\u0026amp;1|grep -s 'net.ipv4.ip_nonlocal_bind' For example: Verify that all are set to 1\n$ net.ipv4.conf.docker0.forwarding = 1 $ net.ipv4.conf.eth0.forwarding = 1 $ net.ipv4.conf.lo.forwarding = 1 $ net.ipv4.ip_nonlocal_bind = 1 Solution: Set all values to 1 immediately with the following commands:\n$ /sbin/sysctl net.ipv4.conf.docker0.forwarding=1 $ /sbin/sysctl net.ipv4.conf.eth0.forwarding=1 $ /sbin/sysctl net.ipv4.conf.lo.forwarding=1 $ /sbin/sysctl net.ipv4.ip_nonlocal_bind=1 To preserve the settings post-reboot: Update the above values to 1 in files in /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/\n Verify the iptables rule for forwarding.\nKubernetes uses iptables to handle many networking and port forwarding rules. A standard Docker installation may create a firewall rule that prevents forwarding.\nVerify if the iptables rule to accept forwarding traffic is set:\n$ /sbin/iptables -L -n | awk '/Chain FORWARD / {print $4}' | tr -d \u0026quot;)\u0026quot; If the output is \u0026ldquo;DROP\u0026rdquo;, then run the following command:\n$ /sbin/iptables -P FORWARD ACCEPT Verify if the iptables rule is set properly to \u0026ldquo;ACCEPT\u0026rdquo;:\n$ /sbin/iptables -L -n | awk '/Chain FORWARD / {print $4}' | tr -d \u0026quot;)\u0026quot; Disable and stop firewalld:\n$ systemctl disable firewalld $ systemctl stop firewalld 1.2 Install and configure Docker Note : If you have already installed Docker with version 18.03+ and configured Docker daemon root to sufficient disk space along with proxy settings, continue to Install and configure Kubernetes\n Make sure that you have the right operating system version:\n$ uname -a $ more /etc/oracle-release For example:\nLinux xxxxxxx 4.1.12-124.27.1.el7uek.x86_64 #2 SMP Mon May 13 08:56:17 PDT 2019 x86_64 x86_64 x86_64 GNU/Linux Oracle Linux Server release 7.6 Install the latest docker-engine and start the Docker service:\n$ yum-config-manager --enable ol7_addons $ yum install docker-engine $ systemctl enable docker $ systemctl start docker Add your userid to the Docker group. This will allow you to run the Docker commands without root access:\n$ /sbin/usermod -a -G docker \u0026lt;YOUR_USERID\u0026gt; Check your Docker version. It must be at least 18.03.\n$ docker version For example:\nClient: Docker Engine - Community Version: 19.03.1-ol API version: 1.40 Go version: go1.12.5 Git commit: ead9442 Built: Wed Sep 11 06:40:28 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.1-ol API version: 1.40 (minimum version 1.12) Go version: go1.12.5 Git commit: ead9442 Built: Wed Sep 11 06:38:43 2019 OS/Arch: linux/amd64 Experimental: false Default Registry: docker.io containerd: Version: v1.2.0-rc.0-108-gc444666 GitCommit: c4446665cb9c30056f4998ed953e6d4ff22c7c39 runc: Version: 1.0.0-rc5+dev GitCommit: 4bb1fe4ace1a32d3676bb98f5d3b6a4e32bf6c58 docker-init: Version: 0.18.0 GitCommit: fec3683 Update the Docker engine configuration:\n$ mkdir -p /etc/docker $ cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/docker/daemon.json { \u0026quot;group\u0026quot;: \u0026quot;docker\u0026quot;, \u0026quot;data-root\u0026quot;: \u0026quot;/u01/docker\u0026quot; } EOF Configure proxy settings if you are behind an HTTP proxy. On some hosts /etc/systemd/system/docker.service.d may not be available. Create this directory if it is not available.\n ### Create the drop-in file /etc/systemd/system/docker.service.d/http-proxy.conf that contains proxy details: $ cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment=\u0026quot;HTTP_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT\u0026quot; Environment=\u0026quot;HTTPS_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT\u0026quot; Environment=\u0026quot;NO_PROXY=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock\u0026quot; EOF Restart the Docker daemon to load the latest changes:\n$ systemctl daemon-reload $ systemctl restart docker Verify that the proxy is configured with Docker:\n$ docker info|grep -i proxy For example:\nHTTP Proxy: http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT HTTPS Proxy: http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT No Proxy: localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock Verify Docker installation:\n$ docker run hello-world For example:\nHello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the \u0026quot;hello-world\u0026quot; image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ 1.3 Install and configure Kubernetes Add the external Kubernetes repository:\n$ cat \u0026lt;\u0026lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF Set SELinux in permissive mode (effectively disabling it):\n$ export PATH=/sbin:$PATH $ setenforce 0 $ sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config Export proxy and install kubeadm, kubelet, and kubectl:\n### Get the nslookup IP address of the master node to use with apiserver-advertise-address during setting up Kubernetes master ### as the host may have different internal ip (hostname -i) and nslookup $HOSTNAME $ ip_addr=`nslookup $(hostname -f) | grep -m2 Address | tail -n1| awk -F: '{print $2}'| tr -d \u0026quot; \u0026quot;` $ echo $ip_addr ### Set the proxies $ export NO_PROXY=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr $ export no_proxy=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr $ export http_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT $ export https_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT $ export HTTPS_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT $ export HTTP_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT ### install kubernetes 1.18.4-1 $ VERSION=1.18.4-1 $ yum install -y kubelet-$VERSION kubeadm-$VERSION kubectl-$VERSION --disableexcludes=kubernetes ### enable kubelet service so that it auto-restart on reboot $ systemctl enable --now kubelet Ensure net.bridge.bridge-nf-call-iptables is set to 1 in your sysctl to avoid traffic routing issues:\n$ cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sysctl --system Disable swap check:\n$ sed -i 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS=\u0026quot;--fail-swap-on=false\u0026quot;/' /etc/sysconfig/kubelet $ cat /etc/sysconfig/kubelet ### Reload and restart kubelet $ systemctl daemon-reload $ systemctl restart kubelet 1.4 Set up Helm Install Helm v3.x.\na. Download Helm from https://github.com/helm/helm/releases. Example to download Helm v3.2.4:\n$ wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz b. Unpack tar.gz:\n$ tar -zxvf helm-v3.2.4-linux-amd64.tar.gz c. Find the Helm binary in the unpacked directory, and move it to its desired destination:\n$ mv linux-amd64/helm /usr/bin/helm Run helm version to verify its installation:\n$ helm version version.BuildInfo{Version:\u0026quot;v3.2.4\u0026quot;, GitCommit:\u0026quot;0ad800ef43d3b826f31a5ad8dfbb4fe05d143688\u0026quot;, GitTreeState:\u0026quot;clean\u0026quot;, GoVersion:\u0026quot;go1.13.12\u0026quot;} 2. Set up a single instance Kubernetes cluster Notes:\n These steps must be run with the root user, unless specified otherwise! If you choose to use a different cidr block (that is, other than 10.244.0.0/16 for the --pod-network-cidr= in the kubeadm init command), then also update NO_PROXY and no_proxy with the appropriate value. Also make sure to update kube-flannel.yaml with the new value before deploying. Replace the following with appropriate values: ADD-YOUR-INTERNAL-NO-PROXY-LIST REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT 2.1 Set up the master node Create a shell script that sets up the necessary environment variables. You can append this to the user’s .bashrc so that it will run at login. You must also configure your proxy settings here if you are behind an HTTP proxy:\n## grab my IP address to pass into kubeadm init, and to add to no_proxy vars ip_addr=`nslookup $(hostname -f) | grep -m2 Address | tail -n1| awk -F: '{print $2}'| tr -d \u0026quot; \u0026quot;` export pod_network_cidr=\u0026quot;10.244.0.0/16\u0026quot; export service_cidr=\u0026quot;10.96.0.0/12\u0026quot; export PATH=$PATH:/sbin:/usr/sbin ### Set the proxies export NO_PROXY=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr,$pod_network_cidr,$service_cidr export no_proxy=localhost,127.0.0.0/8,ADD-YOUR-INTERNAL-NO-PROXY-LIST,/var/run/docker.sock,$ip_addr,$pod_network_cidr,$service_cidr export http_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT export https_proxy=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT export HTTPS_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT export HTTP_PROXY=http://REPLACE-WITH-YOUR-COMPANY-PROXY-HOST:PORT Source the script to set up your environment variables:\n$ . ~/.bashrc To implement command completion, add the following to the script:\n$ [ -f /usr/share/bash-completion/bash_completion ] \u0026amp;\u0026amp; . /usr/share/bash-completion/bash_completion $ source \u0026lt;(kubectl completion bash) Run kubeadm init to create the master node:\n$ kubeadm init \\ --pod-network-cidr=$pod_network_cidr \\ --apiserver-advertise-address=$ip_addr \\ --ignore-preflight-errors=Swap \u0026gt; /tmp/kubeadm-init.out 2\u0026gt;\u0026amp;1 Log in to the terminal with YOUR_USERID:YOUR_GROUP. Then set up the ~/.bashrc similar to steps 1 to 3 with YOUR_USERID:YOUR_GROUP.\n Note that from now on we will be using YOUR_USERID:YOUR_GROUP to execute any kubectl commands and not root.\n Set up YOUR_USERID:YOUR_GROUP to access the Kubernetes cluster:\n$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config Verify that YOUR_USERID:YOUR_GROUP is set up to access the Kubernetes cluster using the kubectl command:\n$ kubectl get nodes Note: At this step, the node is not in ready state as we have not yet installed the pod network add-on. After the next step, the node will show status as Ready.\n Install a pod network add-on (flannel) so that your pods can communicate with each other.\n Note: If you are using a different cidr block than 10.244.0.0/16, then download and update kube-flannel.yml with the correct cidr address before deploying into the cluster:\n $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.12.0/Documentation/kube-flannel.yml Verify that the master node is in Ready status:\n$ kubectl get nodes For example:\nNAME STATUS ROLES AGE VERSION mymasternode Ready master 8m26s v1.18.4 or:\n$ kubectl get pods -n kube-system For example:\nNAME READY STATUS RESTARTS AGE pod/coredns-86c58d9df4-58p9f 1/1 Running 0 3m59s pod/coredns-86c58d9df4-mzrr5 1/1 Running 0 3m59s pod/etcd-mymasternode 1/1 Running 0 3m4s pod/kube-apiserver-node 1/1 Running 0 3m21s pod/kube-controller-manager-mymasternode 1/1 Running 0 3m25s pod/kube-flannel-ds-amd64-6npx4 1/1 Running 0 49s pod/kube-proxy-4vsgm 1/1 Running 0 3m59s pod/kube-scheduler-mymasternode 1/1 Running 0 2m58s To schedule pods on the master node, taint the node:\n$ kubectl taint nodes --all node-role.kubernetes.io/master- Congratulations! Your Kubernetes cluster environment is ready to deploy your Oracle WebCenter Sites domain.\nFor additional references on Kubernetes cluster setup, check the cheat sheet.\n3. Get scripts and images 3.1 Set up the code repository to deploy Oracle WebCenter Sites domains Follow these steps to set up the source code repository required to deploy Oracle WebCenter Sites domains.\n3.2 Get required Docker images and add them to your local registry Obtain the Oracle WebLogic Operator image from the Oracle Container Registry:\na. For first time users, to pull an image from the Oracle Container Registry, navigate to https://container-registry.oracle.com and log in using the Oracle Single Sign-On (SSO) authentication service. If you do not already have SSO credentials, click the Sign In link at the top of the page to create them.\nUse the web interface to accept the Oracle Standard Terms and Restrictions for the Oracle software images that you intend to deploy. Your acceptance of these terms are stored in a database that links the software images to your Oracle Single Sign-On login credentials.\nTo obtain the image, log in to the Oracle Container Registry:\n$ docker login container-registry.oracle.com b. Pull the operator image:\n$ docker pull container-registry.oracle.com/middleware/weblogic-kubernetes-operator:3.0.1 $ docker tag container-registry.oracle.com/middleware/weblogic-kubernetes-operator:3.0.1 oracle/weblogic-kubernetes-operator:3.0.1 Build Oracle WebCenter Sites 12.2.1.4 Image by following steps 4A, 4C, 4D and 5 from this document\n Copy all the above built and pulled images to all the nodes in your cluster or add to a Docker registry that your cluster can access.\n 3.3 Set Up the Code Repository to Deploy Oracle WebCenter Sites Domain Oracle WebCenter Sites domain deployment on Kubernetes leverages the Oracle WebLogic Kubernetes Operator infrastructure. For deploying the Oracle WebCenter Sites domain, you need to set up the deployment scripts as below:\n Create a working directory to set up the source code.\n$ mkdir ${WORKDIR} $ cd ${WORKDIR} Download the supported version of Oracle WebLogic Kubernetes Operator source code archieve file (.zip/.tar.gz) from the operator relases page. Currently supported operator version can be downloaded from 3.0.1.\n Extract the source code archive file (.zip/.tar.gz) in to the work directory.\n Download the WebCenter Sites kubernetes deployment scripts from this repository and copy them in to WebLogic operator samples location.\n$ git clone https://github.com/oracle/fmw-kubernetes.git $ cp -rf ${WORKDIR}/fmw-kubernetes/OracleWebCenterSites/kubernetes/create-wcsites-domain ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ $ cp -rf ${WORKDIR}/fmw-kubernetes/OracleWebCenterSites/kubernetes/imagetool-scripts ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ You can now use the deployment scripts from \u0026lt;work directory\u0026gt;/weblogic-kubernetes-operator-3.0.1 to set up the WebCenter Sites domain as further described in this document.\nThis will be your home directory for runnning all the required scripts.\n$ cd ${WORKDIR}/weblogic-kubernetes-operator-3.0.1 4. Install the WebLogic Kubernetes Operator 4.1 Prepare for the WebLogic Kubernetes Operator. Create a namespace operator-ns for the operator WORKDIR for the Oracle WebCenter Sites operator code:\n$ kubectl create namespace operator-ns Create a service account operator-sa for the operator in the operator’s namespace:\n$ kubectl create serviceaccount -n operator-ns operator-sa 4.2 Install the WebLogic Kubernetes Operator Use Helm to install and start the operator from the directory you just cloned:\n $ cd ${WORKDIR}/weblogic-kubernetes-operator $ helm install weblogic-kubernetes-operator kubernetes/charts/weblogic-operator \\ --namespace operator-ns \\ --set image=oracle/weblogic-kubernetes-operator:3.0.1 \\ --set serviceAccount=operator-sa \\ --set \u0026quot;domainNamespaces={}\u0026quot; \\ --wait 4.3 Verify the WebLogic Kubernetes Operator Verify that the operator’s pod is running by listing the pods in the operator’s namespace. You should see one for the operator:\n$ kubectl get pods -n operator-ns Verify that the operator is up and running by viewing the operator pod\u0026rsquo;s logs:\n$ kubectl logs -n operator-ns -c weblogic-operator deployments/weblogic-operator The WebLogic Kubernetes Operator v3.0.1 has been installed. Continue with the load balancer and Oracle WebCenter Sites domain setup.\n5. Install the Traefik (ingress-based) load balancer The Oracle WebLogic Server Kubernetes operator supports three load balancers: Traefik, Voyager, and Apache. Samples are provided in the documentation.\nThis Quick Start demonstrates how to install the Traefik ingress controller to provide load balancing for an Oracle WebCenter Sites domain.\n Create a namespace for Traefik:\n$ kubectl create namespace traefik Set up Helm for 3rd party services:\n$ helm repo add traefik https://containous.github.io/traefik-helm-chart Install the Traefik operator in the traefik namespace with the provided sample values:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator $ helm install traefik traefik/traefik \\ --namespace traefik \\ --values kubernetes/samples/scripts/charts/traefik/values.yaml \\ --set \u0026quot;kubernetes.namespaces={traefik}\u0026quot; \\ --set \u0026quot;service.type=NodePort\u0026quot; \\ --wait 6. Create and configure an Oracle WebCenter Sites domain 6.1 Prepare for an Oracle WebCenter Sites domain Create a namespace that can host Oracle WebCenter Sites domains:\n$ kubectl create namespace wcsites-ns Use Helm to configure the operator to manage Oracle WebCenter Sites domains in this namespace:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator $ helm upgrade weblogic-kubernetes-operator kubernetes/charts/weblogic-operator \\ --reuse-values \\ --namespace operator-ns \\ --set \u0026quot;domainNamespaces={wcsites-ns}\u0026quot; \\ --wait Create Kubernetes secrets.\na. Create a Kubernetes secret for the domain in the same Kubernetes namespace as the domain. In this example, the username is weblogic, the password in Welcome1, and the namespace is wcsites-ns:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-weblogic-domain-credentials $ ./create-weblogic-credentials.sh \\ -u weblogic \\ -p Welcome1 \\ -n wcsites-ns \\ -d wcsitesinfra \\ -s wcsitesinfra-domain-credentials b. Create a Kubernetes secret for the RCU in the same Kubernetes namespace as the domain:\n Schema user : WCS1 Schema password : Oradoc_db1 DB sys user password : Oradoc_db1 Domain name : wcsitesinfra Domain Namespace : wcsites-ns Secret name : wcsitesinfra-rcu-credentials $ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-rcu-credentials $ ./create-rcu-credentials.sh \\ -u WCS1 \\ -p Oradoc_db1 \\ -a sys \\ -q Oradoc_db1 \\ -d wcsitesinfra \\ -n wcsites-ns \\ -s wcsitesinfra-rcu-credentials Create the Kubernetes persistence volume and persistence volume claim.\na. Create the Oracle WebCenter Sites domain home directory. Determine if a user already exists on your host system with uid:gid of 1000:\n$ sudo getent passwd 1000 If this command returns a username (which is the first field), you can skip the following useradd command. If not, create the oracle user with useradd:\n$ sudo useradd -u 1000 -g 1000 oracle Create the directory that will be used for the Oracle WebCenter Sites domain home:\n$ sudo mkdir /scratch/K8SVolume $ sudo chown -R 1000:1000 /scratch/K8SVolume b. Update create-pv-pvc-inputs.yaml with the following values:\n baseName: domain domainUID: wcsitesinfra namespace: wcsites-ns weblogicDomainStoragePath: /scratch/K8SVolume $ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-weblogic-domain-pv-pvc $ cp create-pv-pvc-inputs.yaml create-pv-pvc-inputs.yaml.orig $ sed -i -e \u0026quot;s:baseName\\: weblogic-sample:baseName\\: domain:g\u0026quot; create-pv-pvc-inputs.yaml $ sed -i -e \u0026quot;s:domainUID\\::domainUID\\: wcsitesinfra:g\u0026quot; create-pv-pvc-inputs.yaml $ sed -i -e \u0026quot;s:namespace\\: default:namespace\\: wcsites-ns:g\u0026quot; create-pv-pvc-inputs.yaml $ sed -i -e \u0026quot;s:#weblogicDomainStoragePath\\: /scratch/K8SVolume:weblogicDomainStoragePath\\: /scratch/K8SVolume:g\u0026quot; create-pv-pvc-inputs.yaml c. Run the create-pv-pvc.sh script to create the PV and PVC configuration files:\n$ ./create-pv-pvc.sh -i create-pv-pvc-inputs.yaml -o output d. Create the PV and PVC using the configuration files created in the previous step:\n$ kubectl create -f output/pv-pvcs/wcsitesinfra-domain-pv.yaml $ kubectl create -f output/pv-pvcs/wcsitesinfra-domain-pvc.yaml Install and configure the database for the Oracle WebCenter Sites domain.\nThis step is required only when a standalone database is not already set up and you want to use the database in a container.\nThe Oracle Database Docker images are supported only for non-production use. For more details, see My Oracle Support note: Oracle Support for Database Running on Docker (Doc ID 2216342.1). For production, it is suggested to use a standalone database. This example provides steps to create the database in a container.\n Now the environment is ready to start the Oracle WebCenter Sites domain creation.\n6.2 Create an Oracle WebCenter Sites domain The sample scripts for Oracle WebCenter Sites domain deployment are available at \u0026lt;weblogic-kubernetes-operator-project\u0026gt;/kubernetes/samples/scripts/create-wcsites-domain. You must edit create-domain-inputs.yaml (or a copy of it) to provide the details for your domain.\n Run the create-domain.sh script to create a domain:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-wcsites-domain/domain-home-on-pv/ $ ./create-domain.sh -i create-domain-inputs.yaml -o output Create a Kubernetes domain object:\nOnce the create-domain.sh is successful, it generates the output/weblogic-domains/wcsitesinfra/domain.yaml that you can use to create the Kubernetes resource domain, which starts the domain and servers:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-wcsites-domain/domain-home-on-pv $ kubectl create -f output/weblogic-domains/wcsitesinfra/domain.yaml Verify that the Kubernetes domain object named wcsitesinfra is created:\n$ kubectl get domain -n wcsites-ns NAME AGE wcsitesinfra 3m18s Once you create the domain, introspect pod is created. This inspects the domain home and then starts the wcsitesinfra-adminserver pod. Once the wcsitesinfra-adminserver pod starts successfully, then the Managed Server pods are started in parallel. Watch the wcsites-ns namespace for the status of domain creation:\n$ kubectl get pods -n wcsites-ns -w Verify that the Oracle WebCenter Sites domain server pods and services are created and in Ready state:\n$ kubectl get all -n wcsites-ns 6.3 Configure Traefik to access in Oracle WebCenter Sites domain services Configure Traefik to manage ingresses created in the Oracle WebCenter Sites domain namespace (wcsites-ns):\n$ helm upgrade traefik traefik/traefik \\ --reuse-values \\ --namespace traefik \\ --set \u0026quot;kubernetes.namespaces={traefik,wcsites-ns}\u0026quot; \\ --wait Create an ingress for the domain in the domain namespace by using the sample Helm chart:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator $ helm install wcsitesinfra-ingress kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain \\ --namespace wcsites-ns \\ --values kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml \\ --set \u0026quot;traefik.hostname=$(hostname -f)\u0026quot; \\ Verify the created ingress per domain details:\n$ kubectl describe ingress wcsitesinfra-ingress -n wcsites-ns 6.4 Verify that you can access the Oracle WebCenter Sites domain URL Get the LOADBALANCER_HOSTNAME for your environment:\nexport LOADBALANCER_HOSTNAME=$(hostname -f) The following URLs are available for Oracle WebCenter Sites domains of domain type wcsitesinfra:\nCredentials: username: weblogic password: Welcome1\nhttp://${LOADBALANCER_HOSTNAME}:30305/console http://${LOADBALANCER_HOSTNAME}:30305/em http://${LOADBALANCER_HOSTNAME}:30305/sites " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/bastion/", + "title": "Preparing the Bastion host", + "tags": [], + "description": "Running WebLogic Kubernetes Operator managed Oracle WebCenter Sites domains on OKE", + "content": "STEP 1 : Create Public Security List Create Public Security List (bastion_public_sec_list) in same VCN as that of OKE Cluster for Bastion Node\n Ingress Rules as: (where 10.0.22.0/24 is the CIDR planned to be used for bastion subnet) Egress as: STEP 2 : Create Private Security List Create Private Security List (bastion_private_sec_list) in same VCN as that of OKE Cluster which will be added into Worker Node subnet.\n Ingress Rules as: (where 10.0.22.0/24 is the CIDR planned to be used for bastion subnet) Egress Rules as: STEP 3 : Create Route Table Create Route Table (oke-bastion-routetables) with below details which will be used for bastion subnet STEP 4 : Create Bastion Subnet Create Bastion Subnet with CIDR Block : 10.0.22.0/24 , RouteTable: oke-bastion-routetables (created in step 3) , Security List: bastion_public_sec_list ( created in Step 1) and DHCP Options : Default available STEP 5 : Add Private Security to Worker Subnet for bastion access Add the private security list (bastion_private_sec_list), created at Step 2 to Worker Subnet, so that bastion node can ssh to Worker Nodes STEP 6 : Create Bastion Node Create Bastion Node with Subnet as \u0026ldquo;bastion-subnet\u0026rdquo;, created at Step 4, Add the private security list (bastion_private_sec_list), created at Step 2 to Worker Subnet, so that bastion node can ssh to Worker Nodes\n Update Name for the instance, Chose the Operating System Image, Availability Domain and Instance Type Select the Compartment, VCN and Subnet Compartment where Cluster is created. Select the regional bastion-subnet created at Step4. Make sure to click on \u0026ldquo;Assign a public IP address\u0026rdquo;. Once the bastion is created as shown below STEP 7 : Access Worker Node from bastion host a. Login to bastion host\nscp -i id_rsa id_rsa opc@\u0026lt;bastion-host-address\u0026gt;:/home/opc ssh -i id_rsa opc@\u0026lt;bastion-host-address\u0026gt; b. Place a copy of id_rsa in bastion node to access worker node\nssh -i id_rsa opc@10.0.1.5 More details refer: https://docs.cloud.oracle.com/en-us/iaas/Content/Resources/Assets/whitepapers/bastion-hosts.pdf\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/installguide/prepare-your-environment/", + "title": "Prepare your environment", + "tags": [], + "description": "Prepare for creating Oracle SOA Suite domains, including required secrets creation, persistent volume and volume claim creation, database creation, and database schema creation.", + "content": "To prepare your Oracle SOA Suite in Kubernetes environment, complete the following steps:\n Set up your Kubernetes cluster\n Install Helm\n Get dependent images\n Set up the code repository to deploy Oracle SOA Suite domains\n Obtain the Oracle SOA Suite Docker image\n Install the WebLogic Kubernetes Operator\n Prepare the environment for Oracle SOA Suite domains\na. Create a namespace for an Oracle SOA Suite domain\nb. Create a persistent storage for an Oracle SOA Suite domain\nc. Create a Kubernetes secret with domain credentials\nd. Create a Kubernetes secret with the RCU credentials\ne. Configure access to your database\nf. Run the Repository Creation Utility to set up your database schemas\n Create an Oracle SOA Suite domain\n Set up your Kubernetes cluster Refer the official Kubernetes set up documentation to set up a production grade Kubernetes cluster.\nInstall Helm The operator uses Helm to create and deploy the necessary resources and then run the operator in a Kubernetes cluster. For Helm installation and usage information, see here.\nGet dependent images Obtain dependent images and add them to your local registry.\n For first time users, to pull an image from the Oracle Container Registry, navigate to https://container-registry.oracle.com and log in using the Oracle Single Sign-On (SSO) authentication service. If you do not already have an SSO account, you can create an Oracle Account here.\nUse the web interface to accept the Oracle Standard Terms and Restrictions for the Oracle software images that you intend to deploy. Your acceptance of these terms are stored in a database that links the software images to your Oracle Single Sign-On login credentials.\nLog in to the Oracle Container Registry (container-registry.oracle.com) from your Docker client:\n$ docker login container-registry.oracle.com Pull the operator image:\n$ docker pull ghcr.io/oracle/weblogic-kubernetes-operator:3.2.1 $ docker tag ghcr.io/oracle/weblogic-kubernetes-operator:3.2.1 oracle/weblogic-kubernetes-operator:3.2.1 Set up the code repository to deploy Oracle SOA Suite domains Oracle SOA Suite domain deployment on Kubernetes leverages the WebLogic Kubernetes Operator infrastructure. To deploy an Oracle SOA Suite domain, you must set up the deployment scripts.\n Create a working directory to set up the source code:\n$ mkdir $HOME/soa_21.3.2 $ cd $HOME/soa_21.3.2 Download the WebLogic Kubernetes Operator source code and Oracle SOA Suite Kubernetes deployment scripts from the SOA repository. Required artifacts are available at OracleSOASuite/kubernetes.\n$ git clone https://github.com/oracle/fmw-kubernetes.git --branch release/21.3.2 $ export WORKDIR=$HOME/soa_21.3.2/OracleSOASuite/kubernetes Obtain the Oracle SOA Suite Docker image The Oracle SOA Suite image with latest bundle patch and required interim patches can be obtained from My Oracle Support (MOS). This is the only image supported for production deployments. Follow the below steps to download the Oracle SOA Suite image from My Oracle Support.\n Download patch 33125465 from My Oracle Support (MOS).\n Unzip the downloaded patch zip file.\n Load the image archive using the docker load command.\nFor example:\n$ docker load \u0026lt; soasuite-12.2.1.4.0-8-ol7-210726.1017.tar Loaded image: oracle/soasuite:12.2.1.4.0-8-ol7-210726.1017 $ Run the docker inspect command to verify that the downloaded image is the latest released image. The value of label com.oracle.weblogic.imagetool.buildid must match to dae045ba-378d-4cdb-b010-85003db61cde.\nFor example:\n$ docker inspect --format=\u0026#39;{{ index .Config.Labels \u0026#34;com.oracle.weblogic.imagetool.buildid\u0026#34; }}\u0026#39; oracle/soasuite:12.2.1.4.0-8-ol7-210726.1017 dae045ba-378d-4cdb-b010-85003db61cde $ If you want to build and use an Oracle SOA Suite Docker image with any additional bundle patch or interim patches that are not part of the image obtained from My Oracle Support, then follow these steps to create the image.\n Note: The default Oracle SOA Suite image name used for Oracle SOA Suite domains deployment is soasuite:12.2.1.4. The image obtained must be tagged as soasuite:12.2.1.4 using the docker tag command. If you want to use a different name for the image, make sure to update the new image tag name in the create-domain-inputs.yaml file and also in other instances where the soasuite:12.2.1.4 image name is used.\n Install the WebLogic Kubernetes Operator The WebLogic Kubernetes Operator supports the deployment of Oracle SOA Suite domains in the Kubernetes environment. Follow the steps in this document to install the operator.\n Note: Optionally, you can execute these steps to send the contents of the operator’s logs to Elasticsearch.\n In the following example commands to install the WebLogic Kubernetes Operator, opns is the namespace and op-sa is the service account created for the operator:\n$ kubectl create namespace opns $ kubectl create serviceaccount -n opns op-sa $ cd ${WORKDIR} $ helm install weblogic-kubernetes-operator charts/weblogic-operator --namespace opns --set image=oracle/weblogic-kubernetes-operator:3.2.1 --set serviceAccount=op-sa --set \u0026quot;domainNamespaces={}\u0026quot; --set \u0026quot;javaLoggingLevel=FINE\u0026quot; --wait Prepare the environment for Oracle SOA Suite domains Create a namespace for an Oracle SOA Suite domain Create a Kubernetes namespace (for example, soans) for the domain unless you intend to use the default namespace. Use the new namespace in the remaining steps in this section. For details, see Prepare to run a domain.\n$ kubectl create namespace soans $ helm upgrade --reuse-values --namespace opns --set \u0026quot;domainNamespaces={soans}\u0026quot; --wait weblogic-kubernetes-operator charts/weblogic-operator Create a persistent storage for an Oracle SOA Suite domain In the Kubernetes namespace you created, create the PV and PVC for the domain by running the create-pv-pvc.sh script. Follow the instructions for using the script to create a dedicated PV and PVC for the Oracle SOA Suite domain.\n Review the configuration parameters for PV creation here. Based on your requirements, update the values in the create-pv-pvc-inputs.yaml file located at ${WORKDIR}/create-weblogic-domain-pv-pvc/. Sample configuration parameter values for an Oracle SOA Suite domain are:\n baseName: domain domainUID: soainfra namespace: soans weblogicDomainStorageType: HOST_PATH weblogicDomainStoragePath: /scratch/k8s_dir/SOA Ensure that the path for the weblogicDomainStoragePath property exists and have the ownership for 1000:0. If not, you need to create it as follows:\n$ sudo mkdir /scratch/k8s_dir/SOA $ sudo chown -R 1000:0 /scratch/k8s_dir/SOA Run the create-pv-pvc.sh script:\n$ cd ${WORKDIR}/create-weblogic-domain-pv-pvc $ ./create-pv-pvc.sh -i create-pv-pvc-inputs.yaml -o output_soainfra The create-pv-pvc.sh script will create a subdirectory pv-pvcs under the given /path/to/output-directory directory and creates two YAML configuration files for PV and PVC. Apply these two YAML files to create the PV and PVC Kubernetes resources using the kubectl create -f command:\n$ kubectl create -f output_soainfra/pv-pvcs/soainfra-domain-pv.yaml $ kubectl create -f output_soainfra/pv-pvcs/soainfra-domain-pvc.yaml Create a Kubernetes secret with domain credentials Create the Kubernetes secrets username and password of the administrative account in the same Kubernetes namespace as the domain:\n $ cd ${WORKDIR}/create-weblogic-domain-credentials $ ./create-weblogic-credentials.sh -u weblogic -p Welcome1 -n soans -d soainfra -s soainfra-domain-credentials For more details, see this document.\nYou can check the secret with the kubectl get secret command.\nFor example:\n Click here to see the sample secret description. $ kubectl get secret soainfra-domain-credentials -o yaml -n soans apiVersion: v1 data: password: T3JhZG9jX2RiMQ== sys_password: T3JhZG9jX2RiMQ== sys_username: c3lz username: U09BMQ== kind: Secret metadata: creationTimestamp: \u0026quot;2020-06-25T14:08:16Z\u0026quot; labels: weblogic.domainName: soainfra weblogic.domainUID: soainfra managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:password: {} f:sys_password: {} f:sys_username: {} f:username: {} f:metadata: f:labels: .: {} f:weblogic.domainName: {} f:weblogic.domainUID: {} f:type: {} manager: kubectl operation: Update time: \u0026quot;2020-06-25T14:08:16Z\u0026quot; name: soainfra-rcu-credentials namespace: soans resourceVersion: \u0026quot;265386\u0026quot; selfLink: /api/v1/namespaces/soans/secrets/soainfra-rcu-credentials uid: 2d93941c-656b-43a4-8af2-78ca8be0f293 type: Opaque Create a Kubernetes secret with the RCU credentials You also need to create a Kubernetes secret containing the credentials for the database schemas. When you create your domain, it will obtain the RCU credentials from this secret.\nUse the provided sample script to create the secret:\n$ cd ${WORKDIR}/create-rcu-credentials $ ./create-rcu-credentials.sh \\ -u SOA1 \\ -p Oradoc_db1 \\ -a sys \\ -q Oradoc_db1 \\ -d soainfra \\ -n soans \\ -s soainfra-rcu-credentials The parameter values are:\n -u username for schema owner (regular user), required. -p password for schema owner (regular user), required. -a username for SYSDBA user, required. -q password for SYSDBA user, required. -d domainUID. Example: soainfra -n namespace. Example: soans -s secretName. Example: soainfra-rcu-credentials You can confirm the secret was created as expected with the kubectl get secret command.\nFor example:\n Click here to see the sample secret description. $ kubectl get secret soainfra-rcu-credentials -o yaml -n soans apiVersion: v1 data: password: T3JhZG9jX2RiMQ== sys_password: T3JhZG9jX2RiMQ== sys_username: c3lz username: U09BMQ== kind: Secret metadata: creationTimestamp: \u0026#34;2020-06-25T14:08:16Z\u0026#34; labels: weblogic.domainName: soainfra weblogic.domainUID: soainfra managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:password: {} f:sys_password: {} f:sys_username: {} f:username: {} f:metadata: f:labels: .: {} f:weblogic.domainName: {} f:weblogic.domainUID: {} f:type: {} manager: kubectl operation: Update time: \u0026#34;2020-06-25T14:08:16Z\u0026#34; name: soainfra-rcu-credentials namespace: soans resourceVersion: \u0026#34;265386\u0026#34; selfLink: /api/v1/namespaces/soans/secrets/soainfra-rcu-credentials uid: 2d93941c-656b-43a4-8af2-78ca8be0f293 type: Opaque Configure access to your database Oracle SOA Suite domains require a database with the necessary schemas installed in them. The Repository Creation Utility (RCU) allows you to create those schemas. You must set up the database before you create your domain. There are no additional requirements added by running Oracle SOA Suite in Kubernetes; the same existing requirements apply.\nFor production deployments, you must set up and use the standalone (non-container) based database running outside of Kubernetes.\nBefore creating a domain, you will need to set up the necessary schemas in your database.\nRun the Repository Creation Utility to set up your database schemas Create schemas To create the database schemas for Oracle SOA Suite, run the create-rcu-schema.sh script.\nFor example:\n$ cd ${WORKDIR}/create-rcu-schema $ ./create-rcu-schema.sh -h usage: /create-rcu-schema.sh -s \u0026lt;schemaPrefix\u0026gt; -t \u0026lt;schemaType\u0026gt; -d \u0026lt;dburl\u0026gt; -i \u0026lt;image\u0026gt; -u \u0026lt;imagePullPolicy\u0026gt; -p \u0026lt;docker-store\u0026gt; -n \u0026lt;namespace\u0026gt; -q \u0026lt;sysPassword\u0026gt; -r \u0026lt;schemaPassword\u0026gt; -o \u0026lt;rcuOutputDir\u0026gt; -c \u0026lt;customVariables\u0026gt; [-h] -s RCU Schema Prefix (required) -t RCU Schema Type (optional) (supported values: osb,soa,soaosb) -d RCU Oracle Database URL (optional) (default: oracle-db.default.svc.cluster.local:1521/devpdb.k8s) -p FMW Infrastructure ImagePullSecret (optional) (default: none) -i FMW Infrastructure Image (optional) (default: soasuite:12.2.1.4) -u FMW Infrastructure ImagePullPolicy (optional) (default: IfNotPresent) -n Namespace for RCU pod (optional) (default: default) -q password for database SYSDBA user. (optional) (default: Oradoc_db1) -r password for all schema owner (regular user). (optional) (default: Oradoc_db1) -o Output directory for the generated YAML file. (optional) (default: rcuoutput) -c Comma-separated custom variables in the format variablename=value. (optional). (default: none) -h Help $ ./create-rcu-schema.sh \\ -s SOA1 \\ -t soaosb \\ -d oracle-db.default.svc.cluster.local:1521/devpdb.k8s \\ -i soasuite:12.2.1.4 \\ -n default \\ -q Oradoc_db1 \\ -r Oradoc_db1 \\ -c SOA_PROFILE_TYPE=SMALL,HEALTHCARE_INTEGRATION=NO For Oracle SOA Suite domains, the create-rcu-schema.sh script supports:\n domain types: soa, osb, and soaosb. You must specify one of these using the -t flag. For Oracle SOA Suite you must specify the Oracle SOA schema profile type using the -c flag. For example, -c SOA_PROFILE_TYPE=SMALL. Supported values for SOA_PROFILE_TYPE are SMALL, MED, and LARGE. Note: To use the LARGE schema profile type, make sure that the partitioning feature is enabled in the Oracle Database.\n Make sure that you maintain the association between the database schemas and the matching domain just like you did in a non-Kubernetes environment. There is no specific functionality provided to help with this.\nDrop schemas If you want to drop a schema, you can use the drop-rcu-schema.sh script.\nFor example:\n$ cd ${WORKDIR}/create-rcu-schema $ ./drop-rcu-schema.sh -h usage: ./drop-rcu-schema.sh -s \u0026lt;schemaPrefix\u0026gt; -d \u0026lt;dburl\u0026gt; -n \u0026lt;namespace\u0026gt; -q \u0026lt;sysPassword\u0026gt; -r \u0026lt;schemaPassword\u0026gt; -c \u0026lt;customVariables\u0026gt; [-h] -s RCU Schema Prefix (required) -t RCU Schema Type (optional) (supported values: osb,soa,soaosb) -d Oracle Database URL (optional) (default: oracle-db.default.svc.cluster.local:1521/devpdb.k8s) -n Namespace where RCU pod is deployed (optional) (default: default) -q password for database SYSDBA user. (optional) (default: Oradoc_db1) -r password for all schema owner (regular user). (optional) (default: Oradoc_db1) -c Comma-separated custom variables in the format variablename=value. (optional). (default: none) -h Help $ ./drop-rcu-schema.sh \\ -s SOA1 \\ -t soaosb \\ -d oracle-db.default.svc.cluster.local:1521/devpdb.k8s \\ -n default \\ -q Oradoc_db1 \\ -r Oradoc_db1 \\ -c SOA_PROFILE_TYPE=SMALL,HEALTHCARE_INTEGRATION=NO For Oracle SOA Suite domains, the drop-rcu-schema.sh script supports:\n Domain types: soa, osb, and soaosb. You must specify one of these using the -t flag. For Oracle SOA Suite, you must specify the Oracle SOA schema profile type using the -c flag. For example, -c SOA_PROFILE_TYPE=SMALL. Supported values for SOA_PROFILE_TYPE are SMALL, MED, and LARGE. Create an Oracle SOA Suite domain Now that you have your Docker images and you have created your RCU schemas, you are ready to create your domain. To continue, follow the instructions in Create Oracle SOA Suite domains.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/installguide/prepare-your-environment/", + "title": "Prepare your environment", + "tags": [], + "description": "Prepare for creating Oracle WebCenter Sites domains, including required secrets creation, persistent volume and volume claim creation, database creation, and database schema creation.", + "content": "Contents This document describes the steps to set up the environment that includes setting up of a Kubernetes cluster and setting up the WebLogic Operator including the database.\n Introduction Set Up your Kubernetes Cluster Build Oracle WebCenter Sites Image Pull Other Dependent Images Set Up the Code Repository to Deploy Oracle WebCenter Sites Domain Grant Roles and Clear Stale Resources Install the WebLogic Kubernetes Operator Configure NFS Server Prepare the Environment for the WebCenter Sites Domain Configure access to your database Introduction Set Up your Kubernetes Cluster If you need help in setting up a Kubernetes environment, check our cheat sheet.\nAfter creating Kubernetes clusters, you can optionally:\n Create load balancers to direct traffic to backend domains. Configure Kibana and Elasticsearch for your operator logs. Build Oracle WebCenter Sites Image Build Oracle WebCenter Sites 12.2.1.4 Image by following steps from this document.\nAlternatively, the Oracle WebCenter Sites Image with latest bundle patch can be obtained from My Oracle Support (MOS).\n Download patch 32847300 from My Oracle Support (MOS).\n Unzip the downloaded zip file.\nFor example:\n$ unzip p32847300_122140_Linux-x86-64.zip Load the image archive using the docker load command.\nFor example:\n$ docker load \u0026lt; wcsites-20210422.tar.gz Note: The default Oracle WebCenter Sites image name used for Oracle WebCenter Sites domains deployment is oracle/wcsites:12.2.1.4-21.1.1. The image obtained must be tagged as oracle/wcsites:12.2.1.4-21.1.1 using the docker tag command. If you want to use a different name for the image, make sure to update the new image tag name in the create-domain-inputs.yaml file and also in other instances where the oracle/wcsites:12.2.1.4-21.1.1 image name is used.\n Pull Other Dependent Images Dependent images include WebLogic Kubernetes Operator, and Traefik. Pull these images and add them to your local registry:\n Pull these Docker images and re-tag them as shown: To pull an image from the Oracle Container Registry, 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.\nUse the web interface to accept the Oracle Standard Terms and Restrictions for the Oracle software images that you intend to deploy. Your acceptance of these terms are stored in a database that links the software images to your Oracle Single Sign-On login credentials.\nThen, pull these Docker images and re-tag them:\ndocker login https://container-registry.oracle.com (enter your Oracle email Id and password) This step is required once at every node to get access to the Oracle Container Registry. WebLogic Kubernetes Operator image:\n$ docker pull container-registry.oracle.com/middleware/weblogic-kubernetes-operator:3.0.1 $ docker tag container-registry.oracle.com/middleware/weblogic-kubernetes-operator:3.0.1 oracle/weblogic-kubernetes-operator:3.0.1 Copy all the above built and pulled images to all the nodes in your cluster or add to a Docker registry that your cluster can access. NOTE: If you\u0026rsquo;re not running Kubernetes on your development machine, you\u0026rsquo;ll need to make the Docker image available to a registry visible to your Kubernetes cluster. Upload your image to a machine running Docker and Kubernetes as follows:\n# on your build machine $ docker save Image_Name:Tag \u0026gt; Image_Name-Tag.tar $ scp Image_Name-Tag.tar YOUR_USER@YOUR_SERVER:/some/path/Image_Name-Tag.tar # on the Kubernetes server $ docker load \u0026lt; /some/path/Image_Name-Tag.tar Set Up the Code Repository to Deploy Oracle WebCenter Sites Domain Oracle WebCenter Sites domain deployment on Kubernetes leverages the Oracle WebLogic Kubernetes Operator infrastructure. For deploying the Oracle WebCenter Sites domain, you need to set up the deployment scripts as below:\n Create a working directory to setup the source code.\n$ mkdir \u0026lt;work directory\u0026gt; $ cd \u0026lt;work directory\u0026gt; Download the supported version of Oracle WebLogic Kubernetes Operator source code archieve file (.zip/.tar.gz) from the operator relases page. Currently the supported operator version can be downloaded from 3.0.1.\n Extract the source code archive file (.zip/.tar.gz) in to the work directory.\n Download the WebCenter Sites kubernetes deployment scripts from this repository and copy them in to WebLogic operator samples location.\n$ git clone https://github.com/oracle/fmw-kubernetes.git $ cp -rf \u0026lt;work directory\u0026gt;/fmw-kubernetes/OracleWebCenterSites/kubernetes/create-wcsites-domain \u0026lt;work directory\u0026gt;/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ $ cp -rf \u0026lt;work directory\u0026gt;/fmw-kubernetes/OracleWebCenterSites/kubernetes/imagetool-scripts \u0026lt;work directory\u0026gt;/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/ You can now use the deployment scripts from \u0026lt;work directory\u0026gt;/weblogic-kubernetes-operator-3.0.1 to set up the WebCenter Sites domain as further described in this document.\nThis will be your home directory for runnning all the required scripts.\n$ cd \u0026lt;work directory\u0026gt;/weblogic-kubernetes-operator-3.0.1 Clear Stale Resources To confirm if there is already a WebLogic custom resource definition, execute the following command:\n$ kubectl get crd NAME CREATED AT domains.weblogic.oracle 2020-03-14T12:10:21Z If you find any WebLogic custom resource definition, then delete it by executing the following command:\n$ kubectl delete crd domains.weblogic.oracle customresourcedefinition.apiextensions.k8s.io \u0026#34;domains.weblogic.oracle\u0026#34; deleted Install the WebLogic Kubernetes Operator Create a namespace for the WebLogic Kubernetes Operator:\n$ kubectl create namespace operator-ns namespace/operator-ns created NOTE: For this exercise we are creating a namespace called \u0026ldquo;operator-ns\u0026rdquo; (can be any name).\nYou can also use:\n domainUID/domainname as wcsitesinfra Domain namespace as wcsites-ns Operator namespace as operator-ns traefik namespace as traefik Create a service account for the WebLogic Kubernetes Operator in the Operator\u0026rsquo;s namespace:\n$ kubectl create serviceaccount -n operator-ns operator-sa serviceaccount/operator-sa created To be able to set up the log-stash and Elasticsearch after creating the domain, set the value of the field elkIntegrationEnabled to true in the file kubernetes/charts/weblogic-operator/values.yaml.\n Use helm to install and start the WebLogic Kubernetes Operator from the downloaded repository:\n Helm install weblogic-operator\n $ helm install weblogic-kubernetes-operator kubernetes/charts/weblogic-operator --namespace operator-ns --set image=oracle/weblogic-kubernetes-operator:3.0.1 --set serviceAccount=operator-sa --set \u0026#34;domainNamespaces={}\u0026#34; --wait NAME: weblogic-kubernetes-operator LAST DEPLOYED: Tue May 19 04:04:32 2020 NAMESPACE: opns STATUS: deployed REVISION: 1 TEST SUITE: None ``\n To verify that the Operator\u0026rsquo;s pod is running, list the pods in the Operator\u0026rsquo;s namespace. You should see one for the WebLogic Kubernetes Operator:\n$ kubectl get pods -n operator-ns NAME READY STATUS RESTARTS AGE weblogic-operator-67df5fddc5-tlc4b 2/2 Running 0 3m15s Then, check by viewing the Operator pod\u0026rsquo;s log as shown in the following sample log snippet:\n$ kubectl logs -n operator-ns -c weblogic-operator deployments/weblogic-operator Launching Oracle WebLogic Server Kubernetes Operator... Importing keystore /operator/internal-identity/temp/weblogic-operator.jks to /operator/internal-identity/temp/weblogic-operator.p12... Entry for alias weblogic-operator-alias successfully imported. Import command completed: 1 entries successfully imported, 0 entries failed or cancelled Warning: The -srcstorepass option is specified multiple times. All except the last one will be ignored. MAC verified OK % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4249 0 2394 100 1855 6884 5334 --:--:-- --:--:-- --:--:-- 6899 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5558 0 3028 100 2530 22704 18970 --:--:-- --:--:-- --:--:-- 22766 OpenJDK 64-Bit Server VM warning: Option MaxRAMFraction was deprecated in version 10.0 and will likely be removed in a future release. VM settings: Max. Heap Size (Estimated): 14.08G Using VM: OpenJDK 64-Bit Server VM {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:53.438+0000\u0026#34;,\u0026#34;thread\u0026#34;:1,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.TuningParametersImpl\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;update\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168593438,\u0026#34;message\u0026#34;:\u0026#34;Reloading tuning parameters from Operator\u0026#39;s config map\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:53.944+0000\u0026#34;,\u0026#34;thread\u0026#34;:1,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.Main\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;main\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168593944,\u0026#34;message\u0026#34;:\u0026#34;Oracle WebLogic Server Kubernetes Operator, version: 3.0.1, implementation: master.4d4fe0a, build time: 2019-11-15T21:19:56-0500\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:53.972+0000\u0026#34;,\u0026#34;thread\u0026#34;:11,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.Main\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;begin\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168593972,\u0026#34;message\u0026#34;:\u0026#34;Operator namespace is: operator-ns\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:54.009+0000\u0026#34;,\u0026#34;thread\u0026#34;:11,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.Main\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;begin\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168594009,\u0026#34;message\u0026#34;:\u0026#34;Operator target namespaces are: operator-ns\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:54.013+0000\u0026#34;,\u0026#34;thread\u0026#34;:11,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.Main\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;begin\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168594013,\u0026#34;message\u0026#34;:\u0026#34;Operator service account is: operator-sa\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:54.031+0000\u0026#34;,\u0026#34;thread\u0026#34;:11,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.helpers.HealthCheckHelper\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;performK8sVersionCheck\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168594031,\u0026#34;message\u0026#34;:\u0026#34;Verifying Kubernetes minimum version\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:54.286+0000\u0026#34;,\u0026#34;thread\u0026#34;:11,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.helpers.ClientPool\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;getApiClient\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168594286,\u0026#34;message\u0026#34;:\u0026#34;The Kuberenetes Master URL is set to https://10.96.0.1:443\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:54.673+0000\u0026#34;,\u0026#34;thread\u0026#34;:11,\u0026#34;fiber\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.helpers.HealthCheckHelper\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;createAndValidateKubernetesVersion\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168594673,\u0026#34;message\u0026#34;:\u0026#34;Kubernetes version is: v1.13.7\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:55.259+0000\u0026#34;,\u0026#34;thread\u0026#34;:12,\u0026#34;fiber\u0026#34;:\u0026#34;engine-operator-thread-2-fiber-1\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.helpers.CrdHelper$CrdContext$CreateResponseStep\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;onSuccess\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168595259,\u0026#34;message\u0026#34;:\u0026#34;Create Custom Resource Definition: oracle.kubernetes.operator.calls.CallResponse@470b40c\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:55.356+0000\u0026#34;,\u0026#34;thread\u0026#34;:16,\u0026#34;fiber\u0026#34;:\u0026#34;fiber-1-child-2\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.helpers.HealthCheckHelper\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;performSecurityChecks\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168595356,\u0026#34;message\u0026#34;:\u0026#34;Verifying that operator service account can access required operations on required resources in namespace operator-ns\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:55.598+0000\u0026#34;,\u0026#34;thread\u0026#34;:18,\u0026#34;fiber\u0026#34;:\u0026#34;fiber-1-child-2\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.helpers.ConfigMapHelper$ScriptConfigMapContext$CreateResponseStep\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;onSuccess\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168595598,\u0026#34;message\u0026#34;:\u0026#34;Creating domain config map, operator-ns, for namespace: {1}.\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:55.937+0000\u0026#34;,\u0026#34;thread\u0026#34;:21,\u0026#34;fiber\u0026#34;:\u0026#34;fiber-1\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;WARNING\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.utils.Certificates\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;getCertificate\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168595937,\u0026#34;message\u0026#34;:\u0026#34;Can\u0026#39;t read certificate at /operator/external-identity/externalOperatorCert\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\\njava.nio.file.NoSuchFileException: /operator/external-identity/externalOperatorCert\\n\\tat java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)\\n\\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)\\n\\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)\\n\\tat java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:215)\\n\\tat java.base/java.nio.file.Files.newByteChannel(Files.java:370)\\n\\tat java.base/java.nio.file.Files.newByteChannel(Files.java:421)\\n\\tat java.base/java.nio.file.Files.readAllBytes(Files.java:3205)\\n\\tat oracle.kubernetes.operator.utils.Certificates.getCertificate(Certificates.java:48)\\n\\tat oracle.kubernetes.operator.utils.Certificates.getOperatorExternalCertificateData(Certificates.java:39)\\n\\tat oracle.kubernetes.operator.rest.RestConfigImpl.getOperatorExternalCertificateData(RestConfigImpl.java:52)\\n\\tat oracle.kubernetes.operator.rest.RestServer.isExternalSslConfigured(RestServer.java:383)\\n\\tat oracle.kubernetes.operator.rest.RestServer.start(RestServer.java:199)\\n\\tat oracle.kubernetes.operator.Main.startRestServer(Main.java:353)\\n\\tat oracle.kubernetes.operator.Main.completeBegin(Main.java:198)\\n\\tat oracle.kubernetes.operator.Main$NullCompletionCallback.onCompletion(Main.java:701)\\n\\tat oracle.kubernetes.operator.work.Fiber.completionCheck(Fiber.java:475)\\n\\tat oracle.kubernetes.operator.work.Fiber.run(Fiber.java:448)\\n\\tat oracle.kubernetes.operator.work.ThreadLocalContainerResolver.lambda$wrapExecutor$0(ThreadLocalContainerResolver.java:87)\\n\\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\\n\\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\\n\\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)\\n\\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\\n\\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\\n\\tat java.base/java.lang.Thread.run(Thread.java:834)\\n\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:55.967+0000\u0026#34;,\u0026#34;thread\u0026#34;:21,\u0026#34;fiber\u0026#34;:\u0026#34;fiber-1\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.rest.RestServer\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;start\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168595967,\u0026#34;message\u0026#34;:\u0026#34;Did not start the external ssl REST server because external ssl has not been configured.\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} {\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:57.910+0000\u0026#34;,\u0026#34;thread\u0026#34;:21,\u0026#34;fiber\u0026#34;:\u0026#34;fiber-1\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.rest.RestServer\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;start\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168597910,\u0026#34;message\u0026#34;:\u0026#34;Started the internal ssl REST server on https://0.0.0.0:8082/operator\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;}\t{\u0026#34;timestamp\u0026#34;:\u0026#34;03-14-2020T06:49:57.913+0000\u0026#34;,\u0026#34;thread\u0026#34;:21,\u0026#34;fiber\u0026#34;:\u0026#34;fiber-1\u0026#34;,\u0026#34;domainUID\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;level\u0026#34;:\u0026#34;INFO\u0026#34;,\u0026#34;class\u0026#34;:\u0026#34;oracle.kubernetes.operator.Main\u0026#34;,\u0026#34;method\u0026#34;:\u0026#34;markReadyAndStartLivenessThread\u0026#34;,\u0026#34;timeInMillis\u0026#34;:1584168597913,\u0026#34;message\u0026#34;:\u0026#34;Starting Operator Liveness Thread\u0026#34;,\u0026#34;exception\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;code\u0026#34;:\u0026#34;\u0026#34;,\u0026#34;headers\u0026#34;:{},\u0026#34;body\u0026#34;:\u0026#34;\u0026#34;} Configure NFS (Network File System) Server To configure NFS server, install the nfs-utils package preferably on Master node:\n$ sudo yum install nfs-utils To start the nfs-server service, and configure the service to start following a system reboot:\n$ sudo systemctl start nfs-server $ sudo systemctl enable nfs-server Create the directory you want to export as the NFS share, for example /scratch/K8SVolume:\n$ sudo mkdir -p /scratch/K8SVolume $ sudo chown -R 1000:1000 /scratch/K8SVolume host name or IP address of the NFS Server\nNote: Host name or IP address of the NFS Server and NFS Share path which is used when you create PV/PVC in further sections.\nPrepare the Environment for the WebCenter Sites Domain Unless you would like to use the default namespace, create a Kubernetes namespace that can host one or more domains:\n$ kubectl create namespace wcsites-ns namespace/wcsites-ns created To manage domains in this namespace, configure the Operator using helm:\n Helm upgrade weblogic-operator\n helm upgrade --reuse-values --set \u0026#34;domainNamespaces={wcsites-ns}\u0026#34; \\ --wait weblogic-kubernetes-operator kubernetes/charts/weblogic-operator --namespace operator-ns NAME: weblogic-kubernetes-operator LAST DEPLOYED: Tue May 19 04:06:23 2020 NAMESPACE: opns STATUS: deployed REVISION: 2 TEST SUITE: None ``\n Create Kubernetes secrets:\na. Using the create-weblogic-credentials script, create a Kubernetes secret that contains the user name and password for the domain in the same Kubernetes namespace as the domain:\nOutput:\n$ sh kubernetes/samples/scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh \\ -u weblogic -p Welcome1 -n wcsites-ns \\ -d wcsitesinfra -s wcsitesinfra-domain-credentials secret/wcsitesinfra-domain-credentials created secret/wcsitesinfra-domain-credentials labeled The secret wcsitesinfra-domain-credentials has been successfully created in the wcsites-ns namespace. Where:\n* weblogic is the weblogic username * Welcome1 is the weblogic password * wcsitesinfra is the domain name * wcsites-ns is the domain namespace * wcsitesinfra-domain-credentials is the secret name Note: You can inspect the credentials as follows:\n$ kubectl get secret wcsitesinfra-domain-credentials -o yaml -n wcsites-ns b. Create a Kubernetes secret for the Repository Configuration Utility (user name and password) using the create-rcu-credentials.sh script in the same Kubernetes namespace as the domain:\nOutput:\n$ sh kubernetes/samples/scripts/create-rcu-credentials/create-rcu-credentials.sh \\ -u WCS1 -p Welcome##1 -a sys -q Welcome##1 -n wcsites-ns \\ -d wcsitesinfra -s wcsitesinfra-rcu-credentials secret/wcsitesinfra-rcu-credentials created secret/wcsitesinfra-rcu-credentials labeled The secret wcsitesinfra-rcu-credentials has been successfully created in the wcsites-ns namespace. Where:\n* WCS1 is the schema user * Welcome##1 is the schema password * Welcome##1 is the database SYS users password * wcsitesinfra is the domain name * wcsites-ns is the domain namespace * wcsitesinfra-rcu-credentials is the secret name Note: You can inspect the credentials as follows:\n$ kubectl get secret wcsitesinfra-rcu-credentials -o yaml -n wcsites-ns Create a Kubernetes PV and PVC (Persistent Volume and Persistent Volume Claim):\na. Update the kubernetes/samples/scripts/create-wcsites-domain/utils/create-wcsites-pv-pvc-inputs.yaml.\nReplace the token %NFS_SERVER% with the host name/IP of NFS Server created in Configure NFS Server section.\nIn the NFS Server, create a folder and grant permissions as given below:\n$ sudo rm -rf /scratch/K8SVolume/WCSites \u0026amp;\u0026amp; sudo mkdir -p /scratch/K8SVolume/WCSites \u0026amp;\u0026amp; sudo chown 1000:1000 /scratch/K8SVolume/WCSites Update the weblogicDomainStoragePath paramter with /scratch/K8SVolume/WCSites.\nb. Execute the create-pv-pvc.sh script to create the PV and PVC configuration files:\n$ sh kubernetes/samples/scripts/create-weblogic-domain-pv-pvc/create-pv-pvc.sh \\ -i kubernetes/samples/scripts/create-wcsites-domain/utils/create-wcsites-pv-pvc-inputs.yaml \\ -o kubernetes/samples/scripts/create-wcsites-domain/output Input parameters being used export version=\u0026#34;create-weblogic-sample-domain-pv-pvc-inputs-v1\u0026#34; export baseName=\u0026#34;domain\u0026#34; export domainUID=\u0026#34;wcsitesinfra\u0026#34; export namespace=\u0026#34;wcsites-ns\u0026#34; export weblogicDomainStorageType=\u0026#34;HOST_PATH\u0026#34; export weblogicDomainStoragePath=\u0026#34;/scratch/K8SVolume/WCSites\u0026#34; export weblogicDomainStorageReclaimPolicy=\u0026#34;Retain\u0026#34; export weblogicDomainStorageSize=\u0026#34;10Gi\u0026#34; Generating kubernetes/samples/scripts/create-wcsites-domain/output/pv-pvcs/wcsitesinfra-domain-pv.yaml Generating kubernetes/samples/scripts/create-wcsites-domain/output/pv-pvcs/wcsitesinfra-domain-pvc.yaml The following files were generated: kubernetes/samples/scripts/create-wcsites-domain/output/pv-pvcs/wcsitesinfra-domain-pv.yaml kubernetes/samples/scripts/create-wcsites-domain/output/pv-pvcs/wcsitesinfra-domain-pvc.yaml Completed c. To create the PV and PVC, use kubectl create with output configuration files:\nOutput:\n$ kubectl create -f kubernetes/samples/scripts/create-wcsites-domain/output/pv-pvcs/wcsitesinfra-domain-pv.yaml \\ -f kubernetes/samples/scripts/create-wcsites-domain/output/pv-pvcs/wcsitesinfra-domain-pvc.yaml persistentvolume/wcsitesinfra-domain-pv created persistentvolumeclaim/wcsitesinfra-domain-pvc created Note: You can verify the PV and PV\u0026rsquo;s details as follows:\n$ kubectl describe pv wcsitesinfra-domain-pv -n wcsites-ns $ kubectl describe pvc wcsitesinfra-domain-pvc -n wcsites-ns Label the nodes in the Kubernetes cluster for the targeted scheduling of the servers on particular nodes as needed:\nkubectl label node \u0026lt;node-name\u0026gt; name=abc Note: Here \u0026lt;node-name\u0026gt; is the node as displayed in the NAME field of kubectl get nodes command. abc is the label that we are defining. Label is a key, value pair and can be anything meaningful. The same should be used for nodeSelector.\nFor scheduling we can select these nodes based on the labels.\n Configure access to your database Oracle WebCenter Sites domains require a database with the necessary schemas installed in them. The Repository Creation Utility (RCU) allows you to create those schemas. You must set up the database before you create your domain. There are no additional requirements added by running Oracle WebCenter Sites in Kubernetes; the same existing requirements apply.\nFor production deployments, you must set up and use the standalone (non-container) based database running outside of Kubernetes.\nBefore creating a domain, you need to set up the necessary schemas in your database.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant/", + "title": "Deploy using Maven and Ant", + "tags": [], + "description": "Deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite deployment.", + "content": "Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite in WebLogic Kubernetes Operator environment.\nBefore deploying composite applications, we need to create a Kubernetes pod in the same cluster where the Oracle SOA Suite domain is running, so that composite applications can be deployed using the internal Kubernetes Service for the Administration Server URL.\nPlace the SOA/Oracle Service Bus composite project at a share location (for example at /share/soa-deploy) mounted at /composites inside container. Make sure to provide oracle user ( uid: 1000 and gid: 0) permission to directory /share/soa-deploy, so that it is accessible and writable inside the container.\n$ sudo chown -R 1000:0 /share/soa-deploy Follow the steps in this section to create a container and then use it to deploy Oracle SOA Suite and Oracle Service Bus composite applications using Maven or Ant.\nCreate a composite deployment container Before creating a Kubernetes pod, make sure that the Oracle SOA Suite Docker image is available on a node, or you can create an image pull secret so that the pod can pull the Docker image on the host where it gets created.\n Create an image pull secret to pull image soasuite:12.2.1.4 by the Kubernetes pod:\n$ kubectl create secret docker-registry image-secret -n soans --docker-server=your-registry.com --docker-username=xxxxxx --docker-password=xxxxxxx --docker-email=my@company.com Create a PersistentVolume and PersistentVolumeClaim (soadeploy-pv.yaml and soadeploy-pvc.yaml) with sample composites for build and deploy placed at /share/soa-deploy.\na) Create a PersistentVolume with the sample provided (soadeploy-pv.yaml), which uses NFS (you can use hostPath or any other supported PV type):\napiVersion: v1 kind: PersistentVolume metadata: name: soadeploy-pv spec: storageClassName: soadeploy-storage-class capacity: storage: 10Gi accessModes: - ReadWriteMany # Valid values are Retain, Delete or Recycle persistentVolumeReclaimPolicy: Retain # hostPath: nfs: server: X.X.X.X path: \u0026quot;/share/soa-deploy\u0026quot; b) Apply the YAML:\n$ kubectl apply -f soadeploy-pv.yaml c) Create a PersistentVolumeClaim (soadeploy-pvc.yaml):\nkind: PersistentVolumeClaim apiVersion: v1 metadata: name: soadeploy-pvc namespace: soans spec: storageClassName: soadeploy-storage-class accessModes: - ReadWriteMany resources: requests: storage: 10Gi d) Apply the YAML:\n$ kubectl apply -f soadeploy-pvc.yaml Create a composite deploy pod using soadeploy.yaml to mount the composites inside pod at /composites:\napiVersion: v1 kind: Pod metadata: labels: run: soadeploy name: soadeploy namespace: soans spec: imagePullSecrets: - name: image-secret containers: - image: soasuite:12.2.1.4 name: soadeploy env: - name: M2_HOME value: /u01/oracle/oracle_common/modules/org.apache.maven_3.2.5 command: [\u0026quot;/bin/bash\u0026quot;, \u0026quot;-c\u0026quot;, \u0026quot;echo 'export PATH=$PATH:$M2_HOME/bin' \u0026gt;\u0026gt; $HOME/.bashrc; sleep infinity\u0026quot;] imagePullPolicy: IfNotPresent volumeMounts: - name: mycomposite mountPath: /composites volumes: - name: mycomposite persistentVolumeClaim: claimName: soadeploy-pvc Create the pod:\n$ kubectl apply -f soadeploy.yaml Once the Kubernetes pod is deployed, exec into the pod to perform Maven/Ant based build and deploy:\n$ kubectl exec -it -n soans soadeploy -- bash Maven based build and deploy Note: Make sure to execute these commands inside the soadeploy pod.\n Set up proxy details for Maven to pull dependencies from the internet.\nIf your environment is not running behind a proxy, then skip this step. Otherwise, replace REPLACE-WITH-PROXY-HOST, REPLACE-WITH-PROXY-PORT and the value for nonProxyHosts attribute per your environment and create the settings.xml:\n$ mkdir $HOME/.m2 $ cat \u0026lt;\u0026lt;EOF \u0026gt; $HOME/.m2/settings.xml \u0026lt;settings\u0026gt; \u0026lt;proxies\u0026gt; \u0026lt;proxy\u0026gt; \u0026lt;active\u0026gt;true\u0026lt;/active\u0026gt; \u0026lt;protocol\u0026gt;http\u0026lt;/protocol\u0026gt; \u0026lt;host\u0026gt;REPLACE-WITH-PROXY-HOST\u0026lt;/host\u0026gt; \u0026lt;port\u0026gt;REPLACE-WITH-PROXY-PORT\u0026lt;/port\u0026gt; \u0026lt;nonProxyHosts\u0026gt;soainfra-cluster-soa-cluster|soainfra-adminserver\u0026lt;/nonProxyHosts\u0026gt; \u0026lt;/proxy\u0026gt; \u0026lt;/proxies\u0026gt; \u0026lt;/settings\u0026gt; EOF For Oracle SOA Suite composite applications Set up the environment for Maven:\n#Perform Maven Sync $ cd /u01/oracle/oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1/ $ mvn install:install-file \\ -DpomFile=oracle-maven-sync-12.2.1.pom \\ -Dfile=oracle-maven-sync-12.2.1.jar #install Maven plugin $ mvn help:describe \\ -Dplugin=com.oracle.maven:oracle-maven-sync \\ -Ddetail #push libraries into internal repository $ mvn com.oracle.maven:oracle-maven-sync:push \\ -DoracleHome=/u01/oracle \\ -DtestingOnly=false $ mvn archetype:crawl \\ -Dcatalog=$HOME/.m2/archetype-catalog.xml \\ -DarchetypeArtifactId=oracle-soa-application \\ -DarchetypeVersion=12.2.1-4-0 Build the SOA Archive (SAR) for your sample deployment available at /composites/mavenproject/my-soa-app:\n$ cd /composites/mavenproject/my-soa-app $ mvn package The SAR will be generated at /composites/mavenproject/my-soa-app/my-project/target/sca_my-project.jar.\n Deploy into the Oracle SOA Suite instance. For example, if the instance URL is http://soainfra-cluster-soa-cluster:8001 with credentials username: weblogic and password: Welcome1, enter the following commands:\n$ cd /composites/mavenproject/my-soa-app $ mvn pre-integration-test \\ -DoracleServerUrl=http://soainfra-cluster-soa-cluster:8001 \\ -DsarLocation=/composites/mavenproject/my-soa-app/my-project/target/sca_my-project.jar \\ -Doverwrite=true \\ -DforceDefault=true \\ -Dcomposite.partition=default \\ -Duser=weblogic -Dpassword=Welcome1 For Oracle Service Bus composite applications Set up the environment for Maven:\n#Perform Maven Sync $ cd /u01/oracle/oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1/ $ mvn install:install-file \\ -DpomFile=oracle-maven-sync-12.2.1.pom \\ -Dfile=oracle-maven-sync-12.2.1.jar #push libraries into internal repository $ mvn com.oracle.maven:oracle-maven-sync:push \\ -DoracleHome=$ORACLE_HOME $ mvn archetype:crawl \\ -Dcatalog=$HOME/.m2/archetype-catalog.xml #Verify the mvn setup $ mvn help:describe \\ -DgroupId=com.oracle.servicebus.plugin \\ -DartifactId=oracle-servicebus-plugin \\ -Dversion=12.2.1-4-0 Build the Oracle Service Bus Archive (sbconfig.sbar)\nBuild sbconfig.sbar for your sample deployment, available at /composites/mavenproject/HelloWorldSB:\n$ cd /composites/mavenproject/HelloWorldSB $ mvn com.oracle.servicebus.plugin:oracle-servicebus-plugin:package The Oracle Service Bus Archive (SBAR) will be generated at /composites/mavenproject/HelloWorldSB/.data/maven/sbconfig.sbar.\n Deploy the generated sbconfig.sbar into the Oracle Service Bus instance. For example, if the Administration URL is http://soainfra-adminserver:7001 with credentials username: weblogic and password: Welcome1, enter the following commands: :\n$ cd /composites/mavenproject/HelloWorldSB $ mvn pre-integration-test \\ -DoracleServerUrl=t3://soainfra-adminserver:7001 \\ -DoracleUsername=weblogic -DoraclePassword=Welcome1 Ant based build and deploy Note: Make sure to execute these commands inside the soadeploy pod.\n For Oracle SOA Suite composite applications Build an Oracle SOA Suite composite application using Ant. For example, if the composite application to be deployed is available at /composites/antproject/Project, enter the following commands:\n$ cd /u01/oracle/soa/bin $ ant -f ant-sca-package.xml \\ -DcompositeDir=/composites/antproject/Project \\ -DcompositeName=Project \\ -Drevision=0.1 The SOA Archive is generated at /composites/antproject/Project/deploy/sca_Project_rev0.1.jar, which will be used for deploying.\n Deploy into the Oracle SOA Suite instance using Ant:\n$ cd /u01/oracle/soa/bin $ ant -f ant-sca-deploy.xml \\ -DserverURL=http://soainfra-cluster-soa-cluster:8001 \\ -DsarLocation=/composites/antproject/Project/deploy/sca_Project_rev0.1.jar \\ -Doverwrite=true \\ -Duser=weblogic -Dpassword=Welcome1 For Oracle Service Bus composite applications See Developing Services Using Oracle Service Bus to deploy Oracle Service Bus composite applications using Ant.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/enable-additional-url-access/", + "title": "Enable additional URL access", + "tags": [], + "description": "Extend an existing ingress to enable additional application URL access for Oracle SOA Suite domains.", + "content": "This section provides information about how to extend an existing ingress (Non-SSL and SSL termination) to enable additional application URL access for Oracle SOA Suite domains.\nThe ingress per domain created in the steps in Set up a load balancer exposes the application paths defined in template YAML files present at ${WORKDIR}/charts/ingress-per-domain/templates/.\nTo extend an existing ingress with additional application URL access:\n Update the template YAML file at ${WORKDIR}/charts/ingress-per-domain/templates/ to define additional path rules.\nFor example, to extend an existing NGINX-based ingress with additional paths /path1 and /path2 of an Oracle SOA Suite cluster, update nginx-ingress.yaml with additional paths:\n# Copyright (c) 2020, 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. {{- if eq .Values.type \u0026quot;NGINX\u0026quot; }} --- apiVersion: extensions/v1beta1 kind: Ingress . . spec: rules: - host: '{{ .Values.nginx.hostname }}' http: paths: # Add new paths -- start - path: /path1 backend: serviceName: '{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.soaClusterName | lower | replace \u0026quot;_\u0026quot; \u0026quot;-\u0026quot; }}' servicePort: {{ .Values.wlsDomain.soaManagedServerPort }} - path: /path2 backend: serviceName: '{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.soaClusterName | lower | replace \u0026quot;_\u0026quot; \u0026quot;-\u0026quot; }}' servicePort: {{ .Values.wlsDomain.soaManagedServerPort }} # Add new paths -- end - path: /console backend: serviceName: '{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026quot;_\u0026quot; \u0026quot;-\u0026quot; }}' servicePort: {{ .Values.wlsDomain.adminServerPort }} . . {{- end }} Get the Helm release name for the ingress installed in your domain namespace:\n$ helm ls -n \u0026lt;domain_namespace\u0026gt; For example, in the soans namespace:\n$ helm ls -n soans Sample output, showing the Helm release name for a NGINX-based ingress as soa-nginx-ingress:\nNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION soa-nginx-ingress soans 1 2021-02-17 13:42:03.252742314 +0000 UTC deployed ingress-per-domain-0.1.0 1.0 $ To extend the existing ingress per domain with additional paths defined in the template YAML, use the helm upgrade command:\n$ cd ${WORKDIR} $ helm upgrade \u0026lt;helm_release_for_ingress\u0026gt; \\ charts/ingress-per-domain \\ --namespace \u0026lt;domain_namespace\u0026gt; \\ --reuse-values Note: helm_release_for_ingress is the ingress name used in the corresponding helm install command for the ingress installation.\n Sample command for a NGINX-based ingress soa-nginx-ingress in the soans namespace:\n$ cd ${WORKDIR} $ helm upgrade soa-nginx-ingress \\ charts/ingress-per-domain \\ --namespace soans \\ --reuse-values This will upgrade the existing ingress to pick up the additional paths updated in the template YAML.\n Verify that additional paths are updated into the existing ingress.\na. Get the existing ingress deployed in the domain namespace:\n$ kubectl get ingress -n \u0026lt;domain_namespace\u0026gt; For example, in the soans namespace:\n$ kubectl get ingress -n soans Sample output, showing the existing ingress as soainfra-nginx:\nNAME CLASS HOSTS ADDRESS PORTS AGE soainfra-nginx \u0026lt;none\u0026gt; domain1.org 10.109.211.160 80, 443 xxd b. Describe the ingress object and verify that new paths are available and pointing to desired backends.\nSample command and output, showing path and backend details for /path1 and /path2:\n$ kubectl describe ingress soainfra-nginx -n soans|grep path /path1 soainfra-cluster-soa-cluster:8001 (172.17.0.19:8001,172.17.0.20:8001) /path2 soainfra-cluster-soa-cluster:8001 (172.17.0.19:8001,172.17.0.20:8001) " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/nginx/", + "title": "NGINX", + "tags": [], + "description": "Configure the ingress-based NGINX load balancer for Oracle SOA Suite domains.", + "content": "This section provides information about how to install and configure the ingress-based NGINX load balancer to load balance Oracle SOA Suite domain clusters. You can configure NGINX for non-SSL, SSL termination, and end-to-end SSL access of the application URL.\nFollow these steps to set up NGINX as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster:\nSee the official installation document for prerequisites.\n Install the NGINX load balancer for non-SSL and SSL termination configuration Generate secret for SSL access Install NGINX load balancer for end-to-end SSL configuration Configure NGINX to manage ingresses Verify domain application URL access Uninstall NGINX ingress Uninstall NGINX To get repository information, enter the following Helm commands:\n$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx $ helm repo update Install the NGINX load balancer for non-SSL and SSL termination configuration Deploy the ingress-nginx controller by using Helm on the domain namespace:\n$ helm install nginx-ingress -n soans \\ --set controller.service.type=NodePort \\ --set controller.admissionWebhooks.enabled=false \\ ingress-nginx/ingress-nginx Click here to see the sample output. NAME: nginx-ingress LAST DEPLOYED: Tue Sep 15 08:40:47 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. Get the application URL by running these commands: export HTTP_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath=\u0026quot;{.spec.ports[0].nodePort}\u0026quot; nginx-ingress-ingress-nginx-controller) export HTTPS_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath=\u0026quot;{.spec.ports[1].nodePort}\u0026quot; nginx-ingress-ingress-nginx-controller) export NODE_IP=$(kubectl --namespace soans get nodes -o jsonpath=\u0026quot;{.items[0].status.addresses[1].address}\u0026quot;) echo \u0026quot;Visit http://$NODE_IP:$HTTP_NODE_PORT to access your application via HTTP.\u0026quot; echo \u0026quot;Visit https://$NODE_IP:$HTTPS_NODE_PORT to access your application via HTTPS.\u0026quot; An example ingress that makes use of the controller: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx name: example namespace: foo spec: rules: - host: www.example.com http: paths: - backend: serviceName: exampleService servicePort: 80 path: / # This section is only required if TLS is to be enabled for the ingress tls: - hosts: - www.example.com secretName: example-tls If TLS is enabled for the ingress, a secret containing the certificate and key must also be provided: apiVersion: v1 kind: Secret metadata: name: example-tls namespace: foo data: tls.crt: \u0026lt;base64 encoded cert\u0026gt; tls.key: \u0026lt;base64 encoded key\u0026gt; type: kubernetes.io/tls Generate secret for SSL access For secured access (SSL and E2ESSL) to the Oracle SOA Suite application, create a certificate and generate secrets:\n$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls1.key -out /tmp/tls1.crt -subj \u0026#34;/CN=domain1.org\u0026#34; $ kubectl -n soans create secret tls domain1-tls-cert --key /tmp/tls1.key --cert /tmp/tls1.crt Note: The value of CN is the host on which this ingress is to be deployed.\n Install NGINX load balancer for end-to-end SSL configuration Deploy the ingress-nginx controller by using Helm on the domain namespace:\n$ helm install nginx-ingress -n soans \\ --set controller.extraArgs.default-ssl-certificate=soans/domain1-tls-cert \\ --set controller.service.type=NodePort \\ --set controller.admissionWebhooks.enabled=false \\ --set controller.extraArgs.enable-ssl-passthrough=true \\ ingress-nginx/ingress-nginx Click here to see the sample output. NAME: nginx-ingress LAST DEPLOYED: Tue Sep 15 08:40:47 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. Get the application URL by running these commands: export HTTP_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath=\u0026#34;{.spec.ports[0].nodePort}\u0026#34; nginx-ingress-ingress-nginx-controller) export HTTPS_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath=\u0026#34;{.spec.ports[1].nodePort}\u0026#34; nginx-ingress-ingress-nginx-controller) export NODE_IP=$(kubectl --namespace soans get nodes -o jsonpath=\u0026#34;{.items[0].status.addresses[1].address}\u0026#34;) echo \u0026#34;Visit http://$NODE_IP:$HTTP_NODE_PORTto access your application via HTTP.\u0026#34; echo \u0026#34;Visit https://$NODE_IP:$HTTPS_NODE_PORTto access your application via HTTPS.\u0026#34; An example Ingress that makes use of the controller: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx name: example namespace: foo spec: rules: - host: www.example.com http: paths: - backend: serviceName: exampleService servicePort: 80 path: / # This section is only required if TLS is to be enabled for the Ingress tls: - hosts: - www.example.com secretName: example-tls If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided: apiVersion: v1 kind: Secret metadata: name: example-tls namespace: foo data: tls.crt: \u0026lt;base64 encoded cert\u0026gt; tls.key: \u0026lt;base64 encoded key\u0026gt; type: kubernetes.io/tls Check the status of the deployed ingress controller:\n$ kubectl --namespace soans get services | grep ingress-nginx-controller Sample output:\nnginx-ingress-ingress-nginx-controller NodePort 10.106.186.235 \u0026lt;none\u0026gt; 80:32125/TCP,443:31376/TCP 19m Configure NGINX to manage ingresses Create an ingress for the domain in the domain namespace by using the sample Helm chart. Here path-based routing is used for ingress. Sample values for default configuration are shown in the file ${WORKDIR}/charts/ingress-per-domain/values.yaml. By default, type is TRAEFIK , sslType is NONSSL, and domainType is soa. These values can be overridden by passing values through the command line or can be edited in the sample file values.yaml.\nIf needed, you can update the ingress YAML file to define more path rules (in section spec.rules.host.http.paths) based on the domain application URLs that need to be accessed. Update the template YAML file for the NGINX load balancer located at ${WORKDIR}/charts/ingress-per-domain/templates/nginx-ingress.yaml.\n Note: See here for all the configuration parameters.\n $ cd ${WORKDIR} $ helm install soa-nginx-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set \u0026#34;nginx.hostname=$(hostname -f)\u0026#34; \\ --set type=NGINX Sample output:\nNAME: soa-nginx-ingress LAST DEPLOYED: Fri Jul 24 09:34:03 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None Install ingress-per-domain using Helm for SSL termination configuration:\n$ cd ${WORKDIR} $ helm install soa-nginx-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set \u0026#34;nginx.hostname=$(hostname -f)\u0026#34; \\ --set type=NGINX --set sslType=SSL Sample output:\nNAME: soa-nginx-ingress LAST DEPLOYED: Fri Jul 24 09:34:03 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None Install ingress-per-domain using Helm for E2ESSL configuration.\n$ cd ${WORKDIR} $ helm install soa-nginx-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set type=NGINX --set sslType=E2ESSL Sample output:\nNAME: soa-nginx-ingress LAST DEPLOYED: Fri Jul 24 09:34:03 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None For NONSSL access to the Oracle SOA Suite application, get the details of the services by the ingress:\n$ kubectl describe ingress soainfra-nginx -n soans Click here to see the sample output of the services supported by the above deployed ingress. Name: soainfra-nginx Namespace: soans Address: 100.111.150.225 Default backend: default-http-backend:80 (\u0026lt;error: endpoints \u0026quot;default-http-backend\u0026quot; not found\u0026gt;) Rules: Host Path Backends ---- ---- -------- domain1.org /console soainfra-adminserver:7001 (10.244.0.45:7001) /em soainfra-adminserver:7001 (10.244.0.45:7001) /weblogic/ready soainfra-adminserver:7001 (10.244.0.45:7001) / soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /soa-infra soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /soa/composer soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /integration/worklistapp soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) Annotations: \u0026lt;none\u0026gt; Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 2m32s nginx-ingress-controller Ingress soans/soainfra-nginx Normal UPDATE 94s nginx-ingress-controller Ingress soans/soainfra-nginx For SSL access to the Oracle SOA Suite application, get the details of the services by the above deployed ingress:\n$ kubectl describe ingress soainfra-nginx -n soans Click here to see the sample output of the services supported by the above deployed ingress. Name: soainfra-nginx Namespace: soans Address: 100.111.150.225 Default backend: default-http-backend:80 (\u0026lt;error: endpoints \u0026quot;default-http-backend\u0026quot; not found\u0026gt;) TLS: domain1-tls-cert terminates domain1.org Rules: Host Path Backends ---- ---- -------- domain1.org /console soainfra-adminserver:7001 (10.244.0.45:7001) /em soainfra-adminserver:7001 (10.244.0.45:7001) /weblogic/ready soainfra-adminserver:7001 (10.244.0.45:7001) / soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /soa-infra soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /soa/composer soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) /integration/worklistapp soainfra-cluster-soa-cluster:8001 (10.244.0.46:8001,10.244.0.47:8001) Annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/configuration-snippet: more_set_input_headers \u0026quot;X-Forwarded-Proto: https\u0026quot;; more_set_input_headers \u0026quot;WL-Proxy-SSL: true\u0026quot;; nginx.ingress.kubernetes.io/ingress.allow-http: false Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 3m47s nginx-ingress-controller Ingress soans/soainfra-nginx Normal UPDATE 3m25s nginx-ingress-controller Ingress soans/soainfra-nginx For E2ESSL access to the Oracle SOA Suite application, get the details of the services by the above deployed ingress:\n$ kubectl describe ingress soainfra-nginx-e2essl -n soans Click here to see the sample output of the services supported by the above deployed ingress. Name: soainfra-nginx-e2essl-admin Namespace: soans Address: Default backend: default-http-backend:80 (\u0026lt;error: endpoints \u0026quot;default-http-backend\u0026quot; not found\u0026gt;) TLS: domain1-tls-cert terminates admin.org Rules: Host Path Backends ---- ---- -------- admin.org soainfra-adminserver-nginx-ssl:7002 (10.244.0.247:7002) Annotations: kubernetes.io/ingress.class: nginx meta.helm.sh/release-name: soa-nginx-ingress meta.helm.sh/release-namespace: soans nginx.ingress.kubernetes.io/ssl-passthrough: true Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 4s nginx-ingress-controller Scheduled for sync Name: soainfra-nginx-e2essl-soa Namespace: soans Address: Default backend: default-http-backend:80 (\u0026lt;error: endpoints \u0026quot;default-http-backend\u0026quot; not found\u0026gt;) TLS: domain1-tls-cert terminates soa.org Rules: Host Path Backends ---- ---- -------- soa.org / soainfra-cluster-soa-cluster:8002 (10.244.0.249:8002) Annotations: kubernetes.io/ingress.class: nginx meta.helm.sh/release-name: soa-nginx-ingress meta.helm.sh/release-namespace: soans nginx.ingress.kubernetes.io/ssl-passthrough: true Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 4s nginx-ingress-controller Scheduled for sync Verify domain application URL access NONSSL configuration Verify that the Oracle SOA Suite domain application URLs are accessible through the LOADBALANCER-Non-SSLPORT 32125:\nhttp://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa-infra http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa/composer http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/integration/worklistapp SSL configuration Verify that the Oracle SOA Suite domain application URLs are accessible through the LOADBALANCER-SSLPORT 30233:\nhttps://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/weblogic/ready https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/console https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/em https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/soa-infra https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/soa/composer https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/integration/worklistapp E2ESSL configuration Before accessing the SOA Suite domain application URLs, update the system host config file with the IP address of the host on which the ingress is deployed.\n To access the application URLs from the browser, update /etc/hosts on the browser host (in Windows, C:\\Windows\\System32\\Drivers\\etc\\hosts) with the entries below\nX.X.X.X admin.org X.X.X.X soa.org X.X.X.X osb.org Note: The value of X.X.X.X is the host IP address on which this ingress is deployed.\n Note: If you are behind any corporate proxy, make sure to update the browser proxy settings appropriately to access the host names updated /etc/hosts file.\n Verify that the Oracle SOA Suite domain application URLs are accessible through LOADBALANCER-E2ESSLPORT 30233:\nhttps://admin.org:${LOADBALANCER-SSLPORT}/weblogic/ready https://admin.org:${LOADBALANCER-SSLPORT}/console https://admin.org:${LOADBALANCER-SSLPORT}/em https://soa.org:${LOADBALANCER-SSLPORT}/soa-infra https://soa.org:${LOADBALANCER-SSLPORT}/soa/composer https://soa.org:${LOADBALANCER-SSLPORT}/integration/worklistapp Note: This is the default host name. If you have updated the host name in value.yaml, then use the updated values.\n Uninstall NGINX ingress Uninstall and delete the ingress-nginx deployment:\n$ helm delete soa-nginx-ingress -n soans Uninstall NGINX $ helm delete nginx-ingress -n soans " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/nginx/", + "title": "NGINX", + "tags": [], + "description": "Configure the ingress-based NGINX load balancer for Oracle WebCenter Sites domains.", + "content": "This section provides information about how to install and configure the ingress-based NGINX load balancer to load balance Oracle WebCenter Sites domain clusters. You can configure NGINX for access of the application URL.\nFollow these steps to set up NGINX as a load balancer for an Oracle WebCenter Sites domain in a Kubernetes cluster:\nSee the official installation document for prerequisites.\nAdd the Helm repos (if not added) Add following Helm repos\n$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx $ helm repo update Install the NGINX load balancer Here is the helm install command with the default value for http port.\nhelm install nginx-ingress ingress-nginx/ingress-nginx -n wcsites-ns --set controller.service.type=NodePort --set controller.admissionWebhooks.enabled=false --set controller.service.nodePorts.http=30305 Create an Ingress for the Domain Create an Ingress for the domain (ingress-per-domain-wcsites), in the domain namespace by using the sample Helm chart. Here we are using the path-based routing for ingress. For detailed instructions about ingress, see this page).\nFor now, you can update the kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml with appropriate values. Sample values are shown below:\n$ cat kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml # Copyright 2020, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Default values for ingress-per-domain. # This is a YAML-formatted file. # Declare variables to be passed into your templates. apiVersion: networking.k8s.io/v1beta1 # Load balancer type. Supported values are: TRAEFIK, VOYAGER #type: TRAEFIK #type: VOYAGER type: NGINX # WLS domain as backend to the load balancer wlsDomain: domainUID: wcsitesinfra adminServerName: adminserver adminServerPort: 7001 wcsitesClusterName: wcsites_cluster wcsitesManagedServerPort: 8001 # Voyager specific values voyager: # web port webPort: 30305 # stats port statsPort: 30317 # nginx specific values nginx: #connect timeout connectTimeout: 1800 #read timeout readTimeout: 1800 #send timeout sendTimeout: 1800 ``\n Update the kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/templates/nginx-ingress.yaml with the url routes to be load balanced.\nBelow are the defined ingress rules:\nNOTE: This is not an exhaustive list of rules. You can enhance it based on the application urls that need to be accessed externally. These rules hold good for domain type WCSITES.\n# Copyright 2020, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. {{- if eq .Values.type \u0026#34;NGINX\u0026#34; }} --- apiVersion: {{ .Values.apiVersion }} kind: Ingress metadata: name: {{ .Values.wlsDomain.domainUID }}-ingress namespace: {{ .Release.Namespace }} annotations: nginx.ingress.kubernetes.io/proxy-connect-timeout: \u0026#34;{{ .Values.nginx.connectTimeout }}\u0026#34; nginx.ingress.kubernetes.io/proxy-read-timeout: \u0026#34;{{ .Values.nginx.readTimeout }}\u0026#34; nginx.ingress.kubernetes.io/proxy-send-timeout: \u0026#34;{{ .Values.nginx.sendTimeout }}\u0026#34; nginx.com/sticky-cookie-services: \u0026#34;serviceName={{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} srv_id expires=1h path=/;\u0026#34; spec: rules: - host: \u0026#39;{{ .Values.nginx.hostname }}\u0026#39; http: paths: - path: /console backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /em backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /wls-exporter backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /servicebus backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /sbconsole backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /sites backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} - path: /cas backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} - path: /wls-cat backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} - path: backend: serviceName: \u0026#39;{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }}\u0026#39; servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} {{- end }} Install \u0026ldquo;ingress-per-domain\u0026rdquo; using helm.\n Helm Install ingress-per-domain\n $ helm install wcsitesinfra-ingress kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain \\ --namespace wcsites-ns \\ --values kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml \\ --set \u0026#34;nginx.hostname=$(hostname -f)\u0026#34; --set type=NGINX NAME: wcsitesinfra-ingress LAST DEPLOYED: Fri July 9 00:18:50 2020 NAMESPACE: wcsites-ns STATUS: deployed REVISION: 1 TEST SUITE: None To confirm that the load balancer noticed the new Ingress and is successfully routing to the domain\u0026rsquo;s server pods, you can send a request to the URL for the \u0026ldquo;WebLogic ReadyApp framework\u0026rdquo; which should return a HTTP 200 status code, as shown in the example below:\n -bash-4.2$ curl -v http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready * Trying 149.87.129.203... \u0026gt; GET http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready HTTP/1.1 \u0026gt; User-Agent: curl/7.29.0 \u0026gt; Accept: */* \u0026gt; Proxy-Connection: Keep-Alive \u0026gt; host: $(hostname -f) \u0026gt; \u0026lt; HTTP/1.1 200 OK \u0026lt; Date: Sat, 14 Mar 2020 08:35:03 GMT \u0026lt; Vary: Accept-Encoding \u0026lt; Content-Length: 0 \u0026lt; Proxy-Connection: Keep-Alive \u0026lt; * Connection #0 to host localhost left intact Verify that You can Access the Domain URL After setting up the nginx loadbalancer, verify that the domain applications are accessible through the loadbalancer port 30305. Through load balancer (nginx port 30305), the following URLs are available for setting up domains of WebCenter Sites domain types:\nhttp://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/sites/version.jsp " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/upgrade-operator-release/", + "title": "Upgrade an operator release", + "tags": [], + "description": "Upgrade the WebLogic Kubernetes Operator release to a newer version.", + "content": "These instructions apply to upgrading operators within the 3.x release family as additional versions are released.\nTo upgrade the Kubernetes operator, use the helm upgrade command. Make sure that the weblogic-kubernetes-operator repository on your local machine is at the operator release to which you are upgrading. See the steps here to pull the image and set up the weblogic-kubernetes-operator repository. When upgrading the operator, the helm upgrade command requires that you supply a new Helm chart and image. For example:\n$ cd ${WORKDIR} $ helm upgrade \\ --reuse-values \\ --set image=oracle/weblogic-kubernetes-operator:3.2.1 \\ --namespace weblogic-operator-namespace \\ --wait \\ weblogic-kubernetes-operator \\ charts/weblogic-operator Note: When the WebLogic Kubernetes Operator is upgraded from release version 3.1.1 to 3.2.1 or later, it is expected that the Administration Server pod in the domain gets restarted.\n Post upgrade steps From operator 3.1.1, the T3 channel Kubernetes service name extension is changed from -external to -ext. If the Administration Server was configured to expose a T3 channel in your domain, then follow these steps to recreate the Kubernetes service (for T3 channel) with the new name -ext.\n Note: If these steps are not performed, then the domain restart using spec.serverStartPolicy, would fail to bring up the servers.\n Get the existing Kubernetes service name for T3 channel from the domain namespace. For example, if the domainUID is soainfra, and the Administration Server name is adminserver, then the service would be:\nsoainfra-adminserver-external Delete the existing Kubernetes service for T3 channel, so that operator 3.1.1 creates a new one:\n$ kubectl delete service \u0026lt;T3 channel service\u0026gt; --namespace \u0026lt;domain-namespace\u0026gt; For example, if the domainUID is soainfra, the Administration Server name is adminserver and domain namespace is soans, then the command would be:\n$ kubectl delete service soainfra-adminserver-external --namespace soans Then the operator automatically creates a new Kubernetes service with -ext instead of -external:\nsoainfra-adminserver-ext " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/upgrade-operator-release/", + "title": "Upgrade an operator release", + "tags": [], + "description": "Upgrade the WebLogic Kubernetes Operator release to a newer version.", + "content": "These instructions apply to upgrading operators within the 3.x release family as additional versions are released.\nTo upgrade the Kubernetes operator, use the helm upgrade command. When upgrading the operator, the helm upgrade command requires that you supply a new Helm chart and image. For example:\n$ helm upgrade \\ --reuse-values \\ --set image=oracle/weblogic-kubernetes-operator:3.0.2 \\ --namespace weblogic-operator-namespace \\ --wait \\ weblogic-operator \\ kubernetes/charts/weblogic-operator " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/filesystem/", + "title": "Preparing a file system", + "tags": [], + "description": "Running WebLogic Kubernetes Operator managed Oracle WebCenter Sites domains on OKE", + "content": "Create Filesystem and security list for FSS Note: Make sure you create the filesystem and security list in the OKE created VCN\n Login to OCI Console and go to File Storage and Click \u0026ldquo;File System\u0026rdquo; Click \u0026ldquo;Create File System\u0026rdquo; You can create File System and Mount Targets with the default values. But in case you want to rename the file System and mount targets, follow below steps. Note: Make Sure the Virtual Cloud Network in Mount Target refers to the one where your instances are created and you will be accessing this file system. Edit and change the File System name to say \u0026ldquo;WCSFileSystem\u0026rdquo; Edit and change the Mount Target name to WCSMountTarget and make sure the Virtual Cloud Network selected is \u0026ldquo;WCSVCN\u0026rdquo; the one where all the instances are created. Select Public Subnet. Click \u0026ldquo;Create\u0026rdquo; Once the File System is created, it lands at below page. Click on \u0026ldquo;WCSFileSystem\u0026rdquo; link. Click on Mount Commands which gives details on how to mount this file system on your instances. Mount Command pop up gives details on what must be configured on security list to access the mount targets from instances. Note down the mount command which need to be executed on the instance Create the security list \u0026ldquo;fss_security list \u0026quot; with below Ingress Rules as given in the Mount commands pop up. Create the Egress rules as below as given in the Mount commands pop up. Make sure to add the created security list \u0026ldquo;fss_security list \u0026quot; to each subnets as shown below: Otherwise the created security list rules will not apply to the instances. Once the created security list \u0026ldquo;fss_security list \u0026quot; is added into the subnet, login to the instances and mount the file systems on to Bastion Node #login as root sudo su #Install NFS Utils yum install nfs-utils #Create directory where you want the mount the file system mkdir -p /mnt/WCSFileSystem #Give proper permissions so that all users can access the share volume chmod 777 /mnt/WCSFileSystem # Alternatively you can use: \u0026quot;mount 10.0.0.7:/WCSFileSystem /mnt/WCSFileSystem\u0026quot;. To persist on reboot add into /etc/fstab echo \u0026quot;10.0.0.7:/WCSFileSystem /mnt/WCSFileSystem nfs nfsvers=3 0 0\u0026quot; \u0026gt;\u0026gt; /etc/fstab mount -a cd /mnt/WCSFileSystem Confirm that /WCSFileSystem is now pointing to created File System [root@wcsbastioninstance WCSFileSystem]# df -h . Filesystem Size Used Avail Use% Mounted on 10.0.0.7:/WCSFileSystem 8.0E 0 8.0E 0% /mnt/WCSFileSystem [root@wcsbastioninstance WCSFileSystem]# " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/installguide/create-soa-domains/", + "title": "Create Oracle SOA Suite domains", + "tags": [], + "description": "Create an Oracle SOA Suite domain home on an existing PV or PVC, and create the domain resource YAML file for deploying the generated Oracle SOA Suite domain.", + "content": "The SOA deployment scripts demonstrate the creation of an Oracle SOA Suite domain home on an existing Kubernetes persistent volume (PV) and persistent volume claim (PVC). The scripts also generate the domain YAML file, which can then be used to start the Kubernetes artifacts of the corresponding domain.\nPrerequisites Before you begin, complete the following steps:\n Review the Domain resource documentation. Review the requirements and limitations. Ensure that you have executed all the preliminary steps in Prepare your environment. Ensure that the database and the WebLogic Server Kubernetes Operator are running. Prepare to use the create domain script The sample scripts for Oracle SOA Suite domain deployment are available at ${WORKDIR}/create-soa-domain.\nYou must edit create-domain-inputs.yaml (or a copy of it) to provide the details for your domain. Refer to the configuration parameters below to understand the information that you must provide in this file.\nConfiguration parameters The following parameters can be provided in the inputs file.\n Parameter Definition Default sslEnabled Boolean value indicating whether to enable SSL for each WebLogic Server instance. false adminPort Port number for the Administration Server inside the Kubernetes cluster. 7001 adminServerSSLPort SSL port number of the Administration Server inside the Kubernetes cluster. 7002 adminNodePort Port number of the Administration Server outside the Kubernetes cluster. 30701 adminServerName Name of the Administration Server. AdminServer configuredManagedServerCount Number of Managed Server instances to generate for the domain. 5 soaClusterName Name of the SOA WebLogic Server cluster instance to generate for the domain. By default, the cluster name is soa_cluster. This configuration parameter is applicable only for soa and soaosb domain types. soa_cluster osbClusterName Name of the Oracle Service Bus WebLogic Server cluster instance to generate for the domain. By default, the cluster name is osb_cluster. This configuration parameter is applicable only for osb and soaosb domain types. osb_cluster createDomainFilesDir Directory on the host machine to locate all the files to create a WebLogic Server domain, including the script that is specified in the createDomainScriptName parameter. By default, this directory is set to the relative path wlst, and the create script will use the built-in WLST offline scripts in the wlst directory to create the WebLogic Server domain. An absolute path is also supported to point to an arbitrary directory in the file system. The built-in scripts can be replaced by the user-provided scripts as long as those files are in the specified directory. Files in this directory are put into a Kubernetes config map, which in turn is mounted to the createDomainScriptsMountPath, so that the Kubernetes pod can use the scripts and supporting files to create a domain home. wlst createDomainScriptsMountPath Mount path where the create domain scripts are located inside a pod. The create-domain.sh script creates a Kubernetes job to run the script (specified by the createDomainScriptName parameter) in a Kubernetes pod to create a domain home. Files in the createDomainFilesDir directory are mounted to this location in the pod, so that the Kubernetes pod can use the scripts and supporting files to create a domain home. /u01/weblogic createDomainScriptName Script that the create domain script uses to create a WebLogic Server domain. The create-domain.sh script creates a Kubernetes job to run this script to create a domain home. The script is located in the in-pod directory that is specified by the createDomainScriptsMountPath parameter. If you need to provide your own scripts to create the domain home, instead of using the built-in scripts, you must use this property to set the name of the script that you want the create domain job to run. create-domain-job.sh domainHome Home directory of the SOA domain. If not specified, the value is derived from the domainUID as /shared/domains/\u0026lt;domainUID\u0026gt;. /u01/oracle/user_projects/domains/soainfra domainPVMountPath Mount path of the domain persistent volume. /u01/oracle/user_projects domainUID Unique ID that will be used to identify this particular domain. Used as the name of the generated WebLogic Server domain as well as the name of the Kubernetes domain resource. This ID must be unique across all domains in a Kubernetes cluster. This ID cannot contain any character that is not valid in a Kubernetes service name. soainfra domainType Type of the domain. Mandatory input for Oracle SOA Suite domains. You must provide one of the supported domain type values: soa (deploys a SOA domain with Enterprise Scheduler (ESS)), osb (deploys an Oracle Service Bus domain), and soaosb (deploys a domain with SOA, Oracle Service Bus, and Enterprise Scheduler (ESS)). soa exposeAdminNodePort Boolean value indicating if the Administration Server is exposed outside of the Kubernetes cluster. false exposeAdminT3Channel Boolean value indicating if the T3 administrative channel is exposed outside the Kubernetes cluster. false httpAccessLogInLogHome Boolean value indicating if server HTTP access log files should be written to the same directory as logHome. If false, server HTTP access log files will be written to the directory specified in the WebLogic Server domain home configuration. true image SOA Suite Docker image. The operator requires Oracle SOA Suite 12.2.1.4. Refer to Obtain the Oracle SOA Suite Docker image for details on how to obtain or create the image. soasuite:12.2.1.4 imagePullPolicy Oracle SOA Suite Docker image pull policy. Valid values are IfNotPresent, Always, Never. IfNotPresent imagePullSecretName Name of the Kubernetes secret to access the Docker Store to pull the WebLogic Server Docker image. The presence of the secret will be validated when this parameter is specified. includeServerOutInPodLog Boolean value indicating whether to include the server .out to the pod\u0026rsquo;s stdout. true initialManagedServerReplicas Number of Managed Servers to initially start for the domain. 2 javaOptions Java options for starting the Administration Server and Managed Servers. A Java option can have references to one or more of the following predefined variables to obtain WebLogic Server domain information: $(DOMAIN_NAME), $(DOMAIN_HOME), $(ADMIN_NAME), $(ADMIN_PORT), and $(SERVER_NAME). If sslEnabled is set to true and the WebLogic Server demo certificate is used, add -Dweblogic.security.SSL.ignoreHostnameVerification=true to allow the Managed Servers to connect to the Administration Server while booting up. The WebLogic Server generated demo certificate in this environment typically contains a host name that is different from the runtime container\u0026rsquo;s host name. -Dweblogic.StdoutDebugEnabled=false logHome The in-pod location for the domain log, server logs, server out, and Node Manager log files. If not specified, the value is derived from the domainUID as /shared/logs/\u0026lt;domainUID\u0026gt;. /u01/oracle/user_projects/domains/logs/soainfra soaManagedServerNameBase Base string used to generate Managed Server names in the SOA cluster. The default value is soa_server. This configuration parameter is applicable only for soa and soaosb domain types. soa_server osbManagedServerNameBase Base string used to generate Managed Server names in the Oracle Service Bus cluster. The default value is osb_server. This configuration parameter is applicable only for osb and soaosb domain types. osb_server soaManagedServerPort Port number for each Managed Server in the SOA cluster. This configuration parameter is applicable only for soa and soaosb domain types. 8001 osbManagedServerPort Port number for each Managed Server in the Oracle Service Bus cluster. This configuration parameter is applicable only for osb and soaosb domain types. 9001 soaManagedServerSSLPort SSL port number for each Managed Server in the SOA cluster. This configuration parameter is applicable only for soa and soaosb domain types. 8002 osbManagedServerSSLPort SSL port number for each Managed Server in the Oracle Service Bus cluster. This configuration parameter is applicable only for osb and soaosb domain types. 9002 namespace Kubernetes namespace in which to create the domain. soans persistentVolumeClaimName Name of the persistent volume claim created to host the domain home. If not specified, the value is derived from the domainUID as \u0026lt;domainUID\u0026gt;-weblogic-sample-pvc. soainfra-domain-pvc productionModeEnabled Boolean value indicating if production mode is enabled for the domain. true serverStartPolicy Determines which WebLogic Server instances will be started. Valid values are NEVER, IF_NEEDED, ADMIN_ONLY. IF_NEEDED t3ChannelPort Port for the T3 channel of the NetworkAccessPoint. 30012 t3PublicAddress Public address for the T3 channel. This should be set to the public address of the Kubernetes cluster. This would typically be a load balancer address. For development environments only: In a single server (all-in-one) Kubernetes deployment, this may be set to the address of the master, or at the very least, it must be set to the address of one of the worker nodes. If not provided, the script will attempt to set it to the IP address of the Kubernetes cluster. weblogicCredentialsSecretName Name of the Kubernetes secret for the Administration Server\u0026rsquo;s user name and password. If not specified, then the value is derived from the domainUID as \u0026lt;domainUID\u0026gt;-weblogic-credentials. soainfra-domain-credentials weblogicImagePullSecretName Name of the Kubernetes secret for the Docker Store, used to pull the WebLogic Server image. serverPodCpuRequest, serverPodMemoryRequest, serverPodCpuCLimit, serverPodMemoryLimit The maximum amount of compute resources allowed, and minimum amount of compute resources required, for each server pod. Refer to the Kubernetes documentation on Managing Compute Resources for Containers for details. Resource requests and resource limits are not specified. rcuSchemaPrefix The schema prefix to use in the database. For example SOA1. You may wish to make this the same as the domainUID in order to simplify matching domains to their RCU schemas. SOA1 rcuDatabaseURL The database URL. oracle-db.default.svc.cluster.local:1521/devpdb.k8s rcuCredentialsSecret The Kubernetes secret containing the database credentials. soainfra-rcu-credentials persistentStore The persistent store for \u0026lsquo;JMS servers\u0026rsquo; and \u0026lsquo;Transaction log store\u0026rsquo; in the domain. Valid values are jdbc, file. jdbc Note that the names of the Kubernetes resources in the generated YAML files may be formed with the value of some of the properties specified in the create-inputs.yaml file. Those properties include the adminServerName, clusterName, and managedServerNameBase. If those values contain any characters that are invalid in a Kubernetes service name, those characters are converted to valid values in the generated YAML files. For example, an uppercase letter is converted to a lowercase letter and an underscore (\u0026quot;_\u0026quot;) is converted to a hyphen (\u0026quot;-\u0026quot;).\nThe sample demonstrates how to create an Oracle SOA Suite domain home and associated Kubernetes resources for a domain that has one cluster only. In addition, the sample provides the capability for users to supply their own scripts to create the domain home for other use cases. The generated domain YAML file could also be modified to cover more use cases.\nRun the create domain script Run the create domain script, specifying your inputs file and an output directory to store the generated artifacts:\n$ ./create-domain.sh \\ -i create-domain-inputs.yaml \\ -o \u0026lt;path to output-directory\u0026gt; The script will perform the following steps:\n Create a directory for the generated Kubernetes YAML files for this domain if it does not already exist. The path name is \u0026lt;path to output-directory\u0026gt;/weblogic-domains/\u0026lt;domainUID\u0026gt;. If the directory already exists, its contents must be removed before using this script.\n Create a Kubernetes job that will start up a utility Oracle SOA Suite container and run offline WLST scripts to create the domain on the shared storage.\n Run and wait for the job to finish.\n Create a Kubernetes domain YAML file, domain.yaml, in the \u0026ldquo;output\u0026rdquo; directory that was created above. This YAML file can be used to create the Kubernetes resource using the kubectl create -f or kubectl apply -f command:\n$ kubectl apply -f \u0026lt;path to output-directory\u0026gt;/weblogic-domains/\u0026lt;domainUID\u0026gt;/domain.yaml Create a convenient utility script, delete-domain-job.yaml, to clean up the domain home created by the create script.\n The default domain created by the script has the following characteristics:\n An Administration Server named AdminServer listening on port 7001. A configured cluster named soa_cluster of size 5. Two Managed Servers, named soa_server1 and soa_server2, listening on port 8001. Log files that are located in /shared/logs/\u0026lt;domainUID\u0026gt;. SOA Infra, SOA composer and WorklistApp applications deployed. Verify the results The create domain script will verify that the domain was created, and will report failure if there was any error. However, it may be desirable to manually verify the domain, even if just to gain familiarity with the various Kubernetes objects that were created by the script.\nGenerated YAML files with the default inputs Click here to see sample content of the generated `domain.yaml` for `soaosb` domainType that creates SOA and Oracle Service Bus clusters. $ cat output/weblogic-domains/soainfra/domain.yaml # Copyright (c) 2020, 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # This is an example of how to define a Domain resource. # apiVersion: \u0026quot;weblogic.oracle/v8\u0026quot; kind: Domain metadata: name: soainfra namespace: soans labels: weblogic.domainUID: soainfra spec: # The WebLogic Domain Home domainHome: /u01/oracle/user_projects/domains/soainfra # The domain home source type # Set to PersistentVolume for domain-in-pv, Image for domain-in-image, or FromModel for model-in-image domainHomeSourceType: PersistentVolume # The WebLogic Server image that the Operator uses to start the domain image: \u0026quot;soasuite:12.2.1.4\u0026quot; # imagePullPolicy defaults to \u0026quot;Always\u0026quot; if image version is :latest imagePullPolicy: \u0026quot;IfNotPresent\u0026quot; # Identify which Secret contains the credentials for pulling an image #imagePullSecrets: #- name: # Identify which Secret contains the WebLogic Admin credentials (note that there is an example of # how to create that Secret at the end of this file) webLogicCredentialsSecret: name: soainfra-domain-credentials # Whether to include the server out file into the pod's stdout, default is true includeServerOutInPodLog: true # Whether to enable log home logHomeEnabled: true # Whether to write HTTP access log file to log home httpAccessLogInLogHome: true # The in-pod location for domain log, server logs, server out, introspector out, and Node Manager log files logHome: /u01/oracle/user_projects/domains/logs/soainfra # An (optional) in-pod location for data storage of default and custom file stores. # If not specified or the value is either not set or empty (e.g. dataHome: \u0026quot;\u0026quot;) then the # data storage directories are determined from the WebLogic domain home configuration. dataHome: \u0026quot;\u0026quot; # serverStartPolicy legal values are \u0026quot;NEVER\u0026quot;, \u0026quot;IF_NEEDED\u0026quot;, or \u0026quot;ADMIN_ONLY\u0026quot; # This determines which WebLogic Servers the Operator will start up when it discovers this Domain # - \u0026quot;NEVER\u0026quot; will not start any server in the domain # - \u0026quot;ADMIN_ONLY\u0026quot; will start up only the administration server (no managed servers will be started) # - \u0026quot;IF_NEEDED\u0026quot; will start all non-clustered servers, including the administration server and clustered servers up to the replica count serverStartPolicy: \u0026quot;IF_NEEDED\u0026quot; serverPod: # an (optional) list of environment variable to be set on the servers env: - name: JAVA_OPTIONS value: \u0026quot;-Dweblogic.StdoutDebugEnabled=false -Dweblogic.ssl.Enabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=true\u0026quot; - name: USER_MEM_ARGS value: \u0026quot;-Djava.security.egd=file:/dev/./urandom -Xms256m -Xmx1024m \u0026quot; volumes: - name: weblogic-domain-storage-volume persistentVolumeClaim: claimName: soainfra-domain-pvc volumeMounts: - mountPath: /u01/oracle/user_projects name: weblogic-domain-storage-volume # adminServer is used to configure the desired behavior for starting the administration server. adminServer: # serverStartState legal values are \u0026quot;RUNNING\u0026quot; or \u0026quot;ADMIN\u0026quot; # \u0026quot;RUNNING\u0026quot; means the listed server will be started up to \u0026quot;RUNNING\u0026quot; mode # \u0026quot;ADMIN\u0026quot; means the listed server will be start up to \u0026quot;ADMIN\u0026quot; mode serverStartState: \u0026quot;RUNNING\u0026quot; adminService: channels: # The Admin Server's NodePort # - channelName: default # nodePort: 30701 # Uncomment to export the T3Channel as a service - channelName: T3Channel serverPod: # an (optional) list of environment variable to be set on the admin servers env: - name: USER_MEM_ARGS value: \u0026quot;-Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx1024m \u0026quot; # clusters is used to configure the desired behavior for starting member servers of a cluster. # If you use this entry, then the rules will be applied to ALL servers that are members of the named clusters. clusters: - clusterName: osb_cluster serverService: precreateService: true serverStartState: \u0026quot;RUNNING\u0026quot; serverPod: env: # This parameter can be used to pass in new system properties, use the space delimiter to append multiple values. # Do not change the below value, only append new values to it. - name: K8S_REFCONF_OVERRIDES value: \u0026quot;-Doracle.sb.tracking.resiliency.MemoryMetricEnabled=false \u0026quot; # Instructs Kubernetes scheduler to prefer nodes for new cluster members where there are not # already members of the same cluster. affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: \u0026quot;weblogic.clusterName\u0026quot; operator: In values: - $(CLUSTER_NAME) topologyKey: \u0026quot;kubernetes.io/hostname\u0026quot; replicas: 2 # The number of managed servers to start for unlisted clusters # replicas: 1 # Istio # configuration: # istio: # enabled: # readinessPort: - clusterName: soa_cluster serverService: precreateService: true serverStartState: \u0026quot;RUNNING\u0026quot; serverPod: env: # This parameter can be used to pass in new system properties, use the space delimiter to append multiple values. # Do not change the below value, only append new values to it. - name: K8S_REFCONF_OVERRIDES value: \u0026quot;-Doracle.soa.tracking.resiliency.MemoryMetricEnabled=false \u0026quot; # Instructs Kubernetes scheduler to prefer nodes for new cluster members where there are not # already members of the same cluster. affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: \u0026quot;weblogic.clusterName\u0026quot; operator: In values: - $(CLUSTER_NAME) topologyKey: \u0026quot;kubernetes.io/hostname\u0026quot; replicas: 2 # The number of managed servers to start for unlisted clusters # replicas: 1 Verify the domain To confirm that the domain was created, enter the following command:\n$ kubectl describe domain DOMAINUID -n NAMESPACE Replace DOMAINUID with the domainUID and NAMESPACE with the actual namespace.\n Click here to see a sample domain description. $ kubectl describe domain soainfra -n soans Name: soainfra Namespace: soans Labels: weblogic.domainUID=soainfra Annotations: \u0026lt;none\u0026gt; API Version: weblogic.oracle/v8 Kind: Domain Metadata: Creation Timestamp: 2021-03-01T05:27:38Z Generation: 1 Managed Fields: API Version: weblogic.oracle/v8 Fields Type: FieldsV1 fieldsV1: f:metadata: f:labels: .: f:weblogic.domainUID: Manager: kubectl Operation: Update Time: 2021-03-01T05:27:38Z API Version: weblogic.oracle/v8 Fields Type: FieldsV1 fieldsV1: f:status: .: f:clusters: f:conditions: f:introspectJobFailureCount: f:servers: f:startTime: Manager: Kubernetes Java Client Operation: Update Time: 2021-03-02T10:26:59Z Resource Version: 13351862 Self Link: /apis/weblogic.oracle/v8/namespaces/soans/domains/soainfra UID: 295dfc48-999e-45e3-b275-9d752587b8d9 Spec: Admin Server: Admin Service: Channels: Channel Name: T3Channel Server Pod: Env: Name: USER_MEM_ARGS Value: -Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx1024m Server Start State: RUNNING Clusters: Cluster Name: osb_cluster Replicas: 2 Server Pod: Affinity: Pod Anti Affinity: Preferred During Scheduling Ignored During Execution: Pod Affinity Term: Label Selector: Match Expressions: Key: weblogic.clusterName Operator: In Values: $(CLUSTER_NAME) Topology Key: kubernetes.io/hostname Weight: 100 Env: Name: K8S_REFCONF_OVERRIDES Value: -Doracle.sb.tracking.resiliency.MemoryMetricEnabled=false Server Service: Precreate Service: true Server Start State: RUNNING Cluster Name: soa_cluster Replicas: 2 Server Pod: Affinity: Pod Anti Affinity: Preferred During Scheduling Ignored During Execution: Pod Affinity Term: Label Selector: Match Expressions: Key: weblogic.clusterName Operator: In Values: $(CLUSTER_NAME) Topology Key: kubernetes.io/hostname Weight: 100 Env: Name: K8S_REFCONF_OVERRIDES Value: -Doracle.soa.tracking.resiliency.MemoryMetricEnabled=false Server Service: Precreate Service: true Server Start State: RUNNING Data Home: Domain Home: /u01/oracle/user_projects/domains/soainfra Domain Home Source Type: PersistentVolume Http Access Log In Log Home: true Image: soasuite:12.2.1.4 Image Pull Policy: IfNotPresent Include Server Out In Pod Log: true Log Home: /u01/oracle/user_projects/domains/logs/soainfra Log Home Enabled: true Server Pod: Env: Name: JAVA_OPTIONS Value: -Dweblogic.StdoutDebugEnabled=false -Dweblogic.ssl.Enabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=true Name: USER_MEM_ARGS Value: -Djava.security.egd=file:/dev/./urandom -Xms256m -Xmx1024m Volume Mounts: Mount Path: /u01/oracle/user_projects Name: weblogic-domain-storage-volume Volumes: Name: weblogic-domain-storage-volume Persistent Volume Claim: Claim Name: soainfra-domain-pvc Server Start Policy: IF_NEEDED Web Logic Credentials Secret: Name: soainfra-domain-credentials Status: Clusters: Cluster Name: osb_cluster Maximum Replicas: 5 Minimum Replicas: 0 Ready Replicas: 2 Replicas: 2 Replicas Goal: 2 Cluster Name: soa_cluster Maximum Replicas: 5 Minimum Replicas: 0 Ready Replicas: 2 Replicas: 2 Replicas Goal: 2 Conditions: Last Transition Time: 2021-03-02T10:26:59.683Z Reason: ManagedServersStarting Status: True Type: Progressing Introspect Job Failure Count: 0 Servers: Desired State: RUNNING Node Name: k8sdev Server Name: AdminServer State: UNKNOWN Cluster Name: osb_cluster Desired State: RUNNING Node Name: k8sdev Server Name: osb_server1 State: UNKNOWN Cluster Name: osb_cluster Desired State: RUNNING Node Name: k8sdev Server Name: osb_server2 State: UNKNOWN Cluster Name: osb_cluster Desired State: SHUTDOWN Server Name: osb_server3 Cluster Name: osb_cluster Desired State: SHUTDOWN Server Name: osb_server4 Cluster Name: osb_cluster Desired State: SHUTDOWN Server Name: osb_server5 Cluster Name: soa_cluster Desired State: RUNNING Node Name: k8sdev Server Name: soa_server1 State: UNKNOWN Cluster Name: soa_cluster Desired State: RUNNING Node Name: k8sdev Server Name: soa_server2 State: UNKNOWN Cluster Name: soa_cluster Desired State: SHUTDOWN Server Name: soa_server3 Cluster Name: soa_cluster Desired State: SHUTDOWN Server Name: soa_server4 Cluster Name: soa_cluster Desired State: SHUTDOWN Server Name: soa_server5 Start Time: 2021-03-01T05:27:38.844Z Events: \u0026lt;none\u0026gt; In the Status section of the output, the available servers and clusters are listed. Note that if this command is issued very soon after the script finishes, there may be no servers available yet, or perhaps only the Administration Server but no Managed Servers. The operator will start up the Administration Server first and wait for it to become ready before starting the Managed Servers.\nVerify the pods Enter the following command to see the pods running the servers:\n$ kubectl get pods -n NAMESPACE Here is an example of the output of this command. You can verify that an Administration Server and two Managed Servers for each cluster (SOA and Oracle Service Bus) are running for soaosb domain type.\n$ kubectl get pods -n soans NAME READY STATUS RESTARTS AGE soainfra-adminserver 1/1 Running 0 53m soainfra-osb-server1 1/1 Running 0 50m soainfra-osb-server2 1/1 Running 0 50m soainfra-soa-server1 1/1 Running 0 50m soainfra-soa-server2 1/1 Running 0 50m Verify the services Enter the following command to see the services for the domain:\n$ kubectl get services -n NAMESPACE Here is an example of the output of this command. You can verify that services for Administration Server and Managed Servers (for SOA and Oracle Service Bus clusters) are created for soaosb domain type.\n Click here to see a sample list of services. $ kubectl get services -n soans NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE soainfra-adminserver ClusterIP None \u0026lt;none\u0026gt; 30012/TCP,7001/TCP,7002/TCP 54m soainfra-cluster-osb-cluster ClusterIP 10.100.138.57 \u0026lt;none\u0026gt; 9001/TCP,9002/TCP 51m soainfra-cluster-soa-cluster ClusterIP 10.99.117.240 \u0026lt;none\u0026gt; 8001/TCP,8002/TCP 51m soainfra-osb-server1 ClusterIP None \u0026lt;none\u0026gt; 9001/TCP,9002/TCP 51m soainfra-osb-server2 ClusterIP None \u0026lt;none\u0026gt; 9001/TCP,9002/TCP 51m soainfra-osb-server3 ClusterIP 10.108.71.8 \u0026lt;none\u0026gt; 9001/TCP,9002/TCP 51m soainfra-osb-server4 ClusterIP 10.100.1.144 \u0026lt;none\u0026gt; 9001/TCP,9002/TCP 51m soainfra-osb-server5 ClusterIP 10.108.57.147 \u0026lt;none\u0026gt; 9001/TCP,9002/TCP 51m soainfra-soa-server1 ClusterIP None \u0026lt;none\u0026gt; 8001/TCP,8002/TCP 51m soainfra-soa-server2 ClusterIP None \u0026lt;none\u0026gt; 8001/TCP,8002/TCP 51m soainfra-soa-server3 ClusterIP 10.98.160.126 \u0026lt;none\u0026gt; 8001/TCP,8002/TCP 51m soainfra-soa-server4 ClusterIP 10.105.164.133 \u0026lt;none\u0026gt; 8001/TCP,8002/TCP 51m soainfra-soa-server5 ClusterIP 10.109.168.179 \u0026lt;none\u0026gt; 8001/TCP,8002/TCP 51m " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/installguide/create-wcsites-domains/", + "title": "Create Oracle WebCenter Sites domains", + "tags": [], + "description": "Create an Oracle WebCenter Sites domain home on an existing PV or PVC, and create the domain resource YAML file for deploying the generated Oracle WebCenter Sites domain.", + "content": "Contents Introduction Prerequisites Prepare the WebCenter Sites Domain Creation Input File Create the WebCenter Sites Domain Initialize the WebCenter Sites Domain Verify the WebCenter Sites Domain Expose WebCenter Sites Services Load Balance With an Ingress Controller or A Web Server Configure WebCenter Sites Settings in WebCenter Sites Property Management For Publishing Setting in WebCenter Sites Introduction This document details on how to use sample scripts to demonstrate the creation of a WebCenter Sites domain home on an existing Kubernetes persistent volume (PV) and persistent volume claim (PVC). The scripts also generate the domain YAML file, which can then be used to start the Kubernetes artifacts of the corresponding domain.\nPrerequisites Ensure that you have completed all of the steps under prepare-your-environment. Ensure that the database and the WebLogic Kubernetes Operator is up. Prepare the WebCenter Sites Domain Creation Input File If required, domain creation inputs can be customized by editing create-domain-inputs.yaml as described below:\nPlease note that the sample scripts for the WebCenter Sites domain deployment are available from the previously downloaded repository at kubernetes/samples/scripts/create-wcsites-domain/domain-home-on-pv/.\nMake a copy of the create-domain-inputs.yaml file before updating the default values.\nThe default domain created by the script has the following characteristics:\n An Administration Server named AdminServer listening on port 7001. A configured cluster named wcsites_cluster of size 5. Managed Server, named wcsites_server1, listening on port 8001. Log files that are located in /shared/logs/\u0026lt;domainUID\u0026gt;. Configuration parameters The following parameters can be provided in the inputs file:\n Parameter Definition Default adminPort Port number for the Administration Server inside the Kubernetes cluster. 7001 adminServerName Name of the Administration Server. AdminServer clusterName Name of the WebLogic cluster instance to generate for the domain. By default the cluster name is wcsites_cluster for the WebCenter Sites domain. wcsites_cluster configuredManagedServerCount Number of Managed Server instances for the domain. 3 createDomainFilesDir Directory on the host machine to locate all the files that you need to create a WebLogic domain, including the script that is specified in the createDomainScriptName property. By default, this directory is set to the relative path wlst, and the create script will use the built-in WLST offline scripts in the wlst directory to create the WebLogic domain. An absolute path is also supported to point to an arbitrary directory in the file system. The built-in scripts can be replaced by the user-provided scripts or model files as long as those files are in the specified directory. Files in this directory are put into a Kubernetes config map, which in turn is mounted to the createDomainScriptsMountPath, so that the Kubernetes pod can use the scripts and supporting files to create a domain home. wlst createDomainScriptsMountPath Mount path where the create domain scripts are located inside a pod. The create-domain.sh script creates a Kubernetes job to run the script (specified in the createDomainScriptName property) in a Kubernetes pod to create a domain home. Files in the createDomainFilesDir directory are mounted to this location in the pod, so that the Kubernetes pod can use the scripts and supporting files to create a domain home. /u01/weblogic createDomainScriptName Script that the create domain script uses to create a WebLogic domain. The create-domain.sh script creates a Kubernetes job to run this script to create a domain home. The script is located in the in-pod directory that is specified in the createDomainScriptsMountPath property. If you need to provide your own scripts to create the domain home, instead of using the built-it scripts, you must use this property to set the name of the script that you want the create domain job to run. create-domain-job.sh domainHome Home directory of the WebCenter Sites domain. This field cannot be modified. /u01/oracle/user_projects/domains/wcsitesinfra domainPVMountPath Mount path of the domain persistent volume. This field cannot be modified. /u01/oracle/user_projects/domains domainUID Unique ID that will be used to identify this particular domain. Used as the name of the generated WebLogic domain as well as the name of the Kubernetes domain resource. This ID must be unique across all domains in a Kubernetes cluster. This ID cannot contain any character that is not valid in a Kubernetes service name. wcsitesinfra exposeAdminNodePort Boolean indicating if the Administration Server is exposed outside of the Kubernetes cluster. false exposeAdminT3Channel Boolean indicating if the T3 administrative channel is exposed outside the Kubernetes cluster. false image WebCenter Sites Docker image. The Operator requires WebCenter Sites release 12.2.1.4.0. Refer to WebCenter Sites Docker image for details on how to obtain or create the image. oracle/wcsites:12.2.1.4-21.1.1 imagePullPolicy WebLogic Docker image pull policy. Legal values are IfNotPresent, Always, or Never IfNotPresent imagePullSecretName Name of the Kubernetes secret to access the Docker Store to pull the WebLogic Server Docker image. The presence of the secret will be validated when this parameter is specified. includeServerOutInPodLog Boolean indicating whether to include the server.out to the pod\u0026rsquo;s stdout. true initialManagedServerReplicas Number of Managed Server to initially start for the domain. 1 javaOptions Java options for starting the Administration Server and Managed Servers. A Java option can include references to one or more of the following pre-defined variables to obtain WebLogic domain information: $(DOMAIN_NAME), $(DOMAIN_HOME), $(ADMIN_NAME), $(ADMIN_PORT), and $(SERVER_NAME). -Dweblogic.StdoutDebugEnabled=false logHome The in-pod location for the domain log, server logs, server out, and Node Manager log files. This field cannot be modified. /u01/oracle/user_projects/logs/wcsitesinfra managedServerNameBase Base string used to generate Managed Server names. wcsites_server managedServerPort Port number for each Managed Server. 8001 namespace Kubernetes namespace in which to create the domain. wcsites-ns persistentVolumeClaimName Name of the persistent volume claim created to host the domain home. If not specified, the value is derived from the domainUID as \u0026lt;domainUID\u0026gt;-weblogic-sample-pvc. wcsitesinfra-domain-pvc productionModeEnabled Boolean indicating if production mode is enabled for the domain. true serverStartPolicy Determines which WebLogic Server instances will be started. Legal values are NEVER, IF_NEEDED, ADMIN_ONLY. IF_NEEDED t3ChannelPort Port for the T3 channel of the NetworkAccessPoint. 30012 t3PublicAddress Public address for the T3 channel. This should be set to the public address of the Kubernetes cluster. This would typically be a load balancer address. For development environments only: In a single server (all-in-one) Kubernetes deployment, this may be set to the address of the master, or at the very least, it must be set to the address of one of the worker nodes. If not provided, the script will attempt to set it to the IP address of the Kubernetes cluster. weblogicCredentialsSecretName Name of the Kubernetes secret for the Administration Server\u0026rsquo;s user name and password. If not specified, then the value is derived from the domainUID as \u0026lt;domainUID\u0026gt;-weblogic-credentials. wcsites-domain-credentials weblogicImagePullSecretName Name of the Kubernetes secret for the Docker Store, used to pull the WebLogic Server image. serverPodCpuRequest, serverPodMemoryRequest, serverPodCpuCLimit, serverPodMemoryLimit The maximum amount of compute resources allowed and minimum amount of compute resources required for each server pod. Please refer to the Kubernetes documentation on Managing Compute Resources for Containers for details. Resource requests and resource limits are not specified. Refer to WebCenter Sites Cluster Sizing Recommendations for more details. rcuSchemaPrefix The schema prefix to use in the database, for example WCS1. You may wish to make this the same as the domainUID in order to simplify matching domains to their RCU schemas. WCS1 rcuDatabaseURL The database URL. oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s rcuCredentialsSecret The loadbalancer hostname to be provided. wcsites-rcu-credentials loadBalancerHostName Hostname for the final url accessible outside K8S environment. abc.def.com loadBalancerPortNumber Port for the final url accessible outside K8S environment. 30305 loadBalancerProtocol Protocol for the final url accessible outside K8S environment. http loadBalancerType Loadbalancer name that will be used. Example: Traefik or \u0026quot;\u0026rdquo; traefik unicastPort Starting range of uniciast port that application will use. 50000 sitesSamples Sites to be installed without samples sites by default, else true. false You can form the names of the Kubernetes resources in the generated YAML files with the value of these properties specified in the create-domain-inputs.yaml file: adminServerName , clusterName and managedServerNameBase . Characters that are invalid in a Kubernetes service name are converted to valid values in the generated YAML files. For example, an uppercase letter is converted to a lowercase letter and an underscore (\u0026quot;_\u0026quot;) is converted to a hyphen (\u0026quot;-\u0026quot;) .\nThe sample demonstrates how to create a WebCenter Sites domain home and associated Kubernetes resources for a domain that has one cluster only. In addition, the sample provides the capability for users to supply their own scripts to create the domain home for other use cases. You can modify the generated domain YAML file to include more use cases.\nCreate the WebCenter Sites Domain Understanding the syntax of the create-domain.sh script:\n$ ./create-domain.sh \\ -i create-domain-inputs.yaml \\ -o /\u0026lt;path to output-directory\u0026gt; The script performs the following functions:\n Creates a directory for the generated Kubernetes YAML files for this domain if it does not already exist. The path name is /\u0026lt;path to output-directory\u0026gt;/weblogic-domains/\u0026lt;domainUID\u0026gt;. If the directory already exists, remove its content before using this script.\n Creates a Kubernetes job that will start up a utility WebCenter Sites container and run offline WLST scripts to create the domain on the shared storage.\n Runs and waits for the job to finish.\n Creates a Kubernetes domain YAML file, domain.yaml, in the directory that is created above. This YAML file can be used to create the Kubernetes resource using the kubectl create -f or kubectl apply -f command:\n$ kubectl apply -f ../\u0026lt;path to output-directory\u0026gt;/weblogic-domains/\u0026lt;domainUID\u0026gt;/domain.yaml Creates a convenient utility script, delete-domain-job.yaml, to clean up the domain home created by the create script.\n Now, run the create-domain.sh sample script below, pointing it at the create-domain-inputs inputs file and an output directory like below:\nbash-4.2$ rm -rf kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains bash-4.2$ sh kubernetes/samples/scripts/create-wcsites-domain/domain-home-on-pv/create-domain.sh \\ -i kubernetes/samples/scripts/create-wcsites-domain/domain-home-on-pv/create-domain-inputs.yaml \\ -o kubernetes/samples/scripts/create-wcsites-domain/output Input parameters being used export version=\u0026#34;create-weblogic-sample-domain-inputs-v1\u0026#34; export adminPort=\u0026#34;7001\u0026#34; export adminServerName=\u0026#34;adminserver\u0026#34; export domainUID=\u0026#34;wcsitesinfra\u0026#34; export domainHome=\u0026#34;/u01/oracle/user_projects/domains/$domainUID\u0026#34; export serverStartPolicy=\u0026#34;IF_NEEDED\u0026#34; export clusterName=\u0026#34;wcsites_cluster\u0026#34; export configuredManagedServerCount=\u0026#34;3\u0026#34; export initialManagedServerReplicas=\u0026#34;1\u0026#34; export managedServerNameBase=\u0026#34;wcsites_server\u0026#34; export managedServerPort=\u0026#34;8001\u0026#34; export image=\u0026#34;oracle/wcsites:12.2.1.4-21.1.1\u0026#34; export imagePullPolicy=\u0026#34;IfNotPresent\u0026#34; export productionModeEnabled=\u0026#34;true\u0026#34; export weblogicCredentialsSecretName=\u0026#34;wcsitesinfra-domain-credentials\u0026#34; export includeServerOutInPodLog=\u0026#34;true\u0026#34; export logHome=\u0026#34;/u01/oracle/user_projects/domains/logs/$domainUID\u0026#34; export t3ChannelPort=\u0026#34;30012\u0026#34; export exposeAdminT3Channel=\u0026#34;false\u0026#34; export adminNodePort=\u0026#34;30701\u0026#34; export exposeAdminNodePort=\u0026#34;false\u0026#34; export namespace=\u0026#34;wcsites-ns\u0026#34; javaOptions=-Dweblogic.StdoutDebugEnabled=false -Xms2g export persistentVolumeClaimName=\u0026#34;wcsitesinfra-domain-pvc\u0026#34; export domainPVMountPath=\u0026#34;/u01/oracle/user_projects/domains\u0026#34; export createDomainScriptsMountPath=\u0026#34;/u01/weblogic\u0026#34; export createDomainScriptName=\u0026#34;create-domain-job.sh\u0026#34; export createDomainFilesDir=\u0026#34;wlst\u0026#34; export rcuSchemaPrefix=\u0026#34;WCS1\u0026#34; export rcuDatabaseURL=\u0026#34;oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s\u0026#34; export rcuCredentialsSecret=\u0026#34;wcsitesinfra-rcu-credentials\u0026#34; export loadBalancerHostName=\u0026#34;abc.def.com\u0026#34; export loadBalancerPortNumber=\u0026#34;30305\u0026#34; export loadBalancerProtocol=\u0026#34;http\u0026#34; export loadBalancerType=\u0026#34;traefik\u0026#34; export unicastPort=\u0026#34;50000\u0026#34; export sitesSamples=\u0026#34;true\u0026#34; Generating kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/create-domain-job.yaml Generating kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/delete-domain-job.yaml Generating kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/domain.yaml Checking to see if the secret wcsitesinfra-domain-credentials exists in namespace wcsites-ns configmap/wcsitesinfra-create-fmw-infra-sample-domain-job-cm created Checking the configmap wcsitesinfra-create-fmw-infra-sample-domain-job-cm was created configmap/wcsitesinfra-create-fmw-infra-sample-domain-job-cm labeled Checking if object type job with name wcsitesinfra-create-fmw-infra-sample-domain-job exists No resources found. $loadBalancerType is NOT empty Creating the domain by creating the job kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/create-domain-job.yaml job.batch/wcsitesinfra-create-fmw-infra-sample-domain-job created Waiting for the job to complete... status on iteration 1 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 2 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 3 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 4 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 5 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 6 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 7 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 8 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 9 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 10 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 11 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 12 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 13 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 14 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 15 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Running status on iteration 16 of 20 pod wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh status is Completed Domain wcsitesinfra was created and will be started by the WebLogic Kubernetes Operator The following files were generated: kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/create-domain-inputs.yaml kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/create-domain-job.yaml kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/domain.yaml Completed\t To monitor the above domain creation logs:\n$ kubectl get pods -n wcsites-ns |grep wcsitesinfra-create wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh 1/1 Running 0 6s $ kubectl get pods -n wcsites-ns | grep wcsitesinfra-create | awk \u0026#39;{print $1}\u0026#39; | xargs kubectl -n wcsites-ns logs -f SAMPLE OUTPUT:\nThe domain will be created using the script /u01/weblogic/createSitesDomain.sh Install Automation -\u0026gt; Starting automation script [mkdir] Created dir: /u01/wcs-wls-docker-install/work [echo] [3/14/20 7:54 AM] Work Directory=/u01/wcs-wls-docker-install/work [echo] [3/14/20 7:54 AM] DB URL: jdbc:oracle:thin:@ [echo] [3/14/20 7:54 AM] Info -\u0026gt; The script.db.connectstring has been set. [echo] [3/14/20 7:54 AM] Info.setDBConnectStringPropertey -\u0026gt; setting oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s [echo] [3/14/20 7:54 AM] Validation -\u0026gt; Checking if full path to JAVA executable is correctly specified [exec] java version \u0026quot;1.8.0_241\u0026quot; [exec] Java(TM) SE Runtime Environment (build 1.8.0_241-b07) [exec] Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode) [echo] [3/14/20 7:54 AM] Validation -\u0026gt; Checking database connection [echo] [3/14/20 7:54 AM] dbUrl-----------------: jdbc:oracle:thin:@oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s [echo] [3/14/20 7:54 AM] Database Connection --\u0026gt; Success! [echo] [3/14/20 7:54 AM] 1st phase: WebCenter Sites installation started... [copy] Copying 1 file to /u01/wcs-wls-docker-install/work [copy] Copying /u01/wcs-wls-docker-install/rcu.rsp to /u01/wcs-wls-docker-install/work/rcu.rsp [echo] [3/14/20 7:54 AM] 1st phase: WebCenter Sites installation completed [echo] [3/14/20 7:54 AM] 2nd phase: WebCenter Sites RCU configuration started... [echo] [3/14/20 7:54 AM] Installation -\u0026gt; Repository Creation Utility - creates schema [echo] [3/14/20 7:54 AM] connectString-----------------: oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s [replace] Replaced 1 occurrences in 1 files. [replace] Replaced 1 occurrences in 1 files. [replace] Replaced 1 occurrences in 1 files. [replace] Replaced 1 occurrences in 1 files. [replace] Replaced 1 occurrences in 1 files. [echo] [3/14/20 7:54 AM] Create schema using command: /u01/oracle/oracle_common/bin/rcu -silent -responseFile /u01/wcs-wls-docker-install/work/rcu.rsp -f \u0026lt; /u01/wcs-wls-docker-install/work/rcuPasswords8852085298596415722.txt \u0026gt;/u01/wcs-wls-docker-install/work/rcu_output.log [echo] [3/14/20 7:54 AM] RCU Create Schema -\u0026gt; Please wait ... may take several minutes [echo] [3/14/20 8:00 AM] [echo] RCU Logfile: /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/rcu.log [echo] Processing command line .... [echo] Repository Creation Utility - Checking Prerequisites [echo] Checking Global Prerequisites [echo] Repository Creation Utility - Checking Prerequisites [echo] Checking Component Prerequisites [echo] Repository Creation Utility - Creating Tablespaces [echo] Validating and Creating Tablespaces [echo] Create tablespaces in the repository database [echo] Repository Creation Utility - Create [echo] Repository Create in progress. [echo] Executing pre create operations [echo] Percent Complete: 20 [echo] Percent Complete: 20 [echo] Percent Complete: 22 [echo] Percent Complete: 24 [echo] Percent Complete: 26 [echo] Percent Complete: 26 [echo] Percent Complete: 28 [echo] Percent Complete: 28 [echo] Creating Common Infrastructure Services(STB) [echo] Percent Complete: 36 [echo] Percent Complete: 36 [echo] Percent Complete: 46 [echo] Percent Complete: 46 [echo] Percent Complete: 46 [echo] Creating Audit Services Append(IAU_APPEND) [echo] Percent Complete: 54 [echo] Percent Complete: 54 [echo] Percent Complete: 64 [echo] Percent Complete: 64 [echo] Percent Complete: 64 [echo] Creating Audit Services Viewer(IAU_VIEWER) [echo] Percent Complete: 72 [echo] Percent Complete: 72 [echo] Percent Complete: 72 [echo] Percent Complete: 73 [echo] Percent Complete: 73 [echo] Percent Complete: 74 [echo] Percent Complete: 74 [echo] Percent Complete: 74 [echo] Creating WebLogic Services(WLS) [echo] Percent Complete: 79 [echo] Percent Complete: 79 [echo] Percent Complete: 83 [echo] Percent Complete: 83 [echo] Percent Complete: 92 [echo] Percent Complete: 99 [echo] Percent Complete: 99 [echo] Creating Audit Services(IAU) [echo] Percent Complete: 100 [echo] Creating Oracle Platform Security Services(OPSS) [echo] Creating WebCenter Sites(WCSITES) [echo] Executing post create operations [echo] Repository Creation Utility: Create - Completion Summary [echo] Database details: [echo] ----------------------------- [echo] Host Name : oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s [echo] Port : 1521 [echo] Service Name : devpdb.k8s [echo] Connected As : sys [echo] Prefix for (prefixable) Schema Owners : WCS1 [echo] RCU Logfile : /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/rcu.log [echo] Component schemas created: [echo] ----------------------------- [echo] Component Status Logfile [echo] Common Infrastructure Services Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/stb.log [echo] Oracle Platform Security Services Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/opss.log [echo] WebCenter Sites Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/wcsites.log [echo] Audit Services Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/iau.log [echo] Audit Services Append Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/iau_append.log [echo] Audit Services Viewer Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/iau_viewer.log [echo] WebLogic Services Success /u01/wcs-wls-docker-install/work/rcu/RCU2020-03-14_07-54_2112542638/logs/wls.log [echo] Repository Creation Utility - Create : Operation Completed [echo] [3/14/20 8:00 AM] Successfully created schemas [echo] [3/14/20 8:00 AM] 2nd phase: WebCenter Sites RCU configuration completed successfully. [echo] [3/14/20 8:00 AM] Oracle WebCenter Sites Installation complete. You can connect to the WebCenter Sites instance at http://10.244.0.252:7002/sites/ Sites RCU Phase completed successfull!!! Sites Installation completed in 366 seconds. --------------------------------------------------------- The domain will be created using the script /u01/weblogic/create-domain-script.sh wlst.sh -skipWLSModuleScanning /u01/weblogic/createSitesDomain.py -oh /u01/oracle -jh /u01/jdk -parent /u01/oracle/user_projects/domains/wcsitesinfra/.. -name wcsitesinfra -user weblogic -password Welcome1 -rcuDb oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s -rcuPrefix WCS1 -rcuSchemaPwd Welcome1 -adminListenPort 7001 -adminName adminserver -managedNameBase wcsites_server -managedServerPort 8001 -prodMode true -managedServerCount 3 -clusterName wcsites_cluster -exposeAdminT3Channel false -t3ChannelPublicAddress 10.123.152.96 -t3ChannelPort 30012 -domainType wcsites -machineName wcsites_machine Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands Creating Admin Server... Creating cluster... Creating Node Managers... managed server name is wcsites_server1 managed server name is wcsites_server2 managed server name is wcsites_server3 ['wcsites_server1', 'wcsites_server2', 'wcsites_server3'] Will create Base domain at /u01/oracle/user_projects/domains/wcsitesinfra Writing base domain... Base domain created at /u01/oracle/user_projects/domains/wcsitesinfra Extending domain at /u01/oracle/user_projects/domains/wcsitesinfra Database oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s ExposeAdminT3Channel false with 10.123.152.96:30012 Applying JRF templates... Extension Templates added Applying Oracle WebCenter Sites templates... Extension Templates added Configuring the Service Table DataSource... fmwDb...jdbc:oracle:thin:@oracle-db.wcsitesdb-ns.svc.cluster.local:1521/devpdb.k8s Set user...WCS140_OPSS Set user...WCS140_IAU_APPEND Set user...WCS140_IAU_VIEWER Set user...WCS140_STB Set user...WCS140_WCSITES Getting Database Defaults... Targeting Server Groups... Targeting Server Groups... Set CoherenceClusterSystemResource to defaultCoherenceCluster for server:wcsites_server1 Set CoherenceClusterSystemResource to defaultCoherenceCluster for server:wcsites_server2 Set CoherenceClusterSystemResource to defaultCoherenceCluster for server:wcsites_server3 Targeting Cluster ... Set CoherenceClusterSystemResource to defaultCoherenceCluster for cluster:wcsites_cluster Set WLS clusters as target of defaultCoherenceCluster:[wcsites_cluster] Preparing to update domain... Mar 14, 2020 8:01:52 AM oracle.security.jps.az.internal.runtime.policy.AbstractPolicyImpl initializeReadStore INFO: Property for read store in parallel: oracle.security.jps.az.runtime.readstore.threads = null Domain updated successfully Copying /u01/weblogic/server-config-update.sh to PV /u01/oracle/user_projects/domains/wcsitesinfra Copying /u01/weblogic/unicast.py to PV /u01/oracle/user_projects/domains/wcsitesinfra replacing tokens in /u01/oracle/user_projects/domains/wcsitesinfra/server-config-update.sh Successfully Completed Initialize the WebCenter Sites Domain To start the domain, apply the above domain.yaml:\n```bash $ kubectl apply -f kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/domain.yaml domain.weblogic.oracle/wcsitesinfra created ``` Verify the WebCenter Sites Domain Verify that the domain and servers pods and services are created and in the READY state:\nSample run below:\n-bash-4.2$ kubectl get pods -n wcsites-ns -w NAME READY STATUS RESTARTS\tAGE wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh 0/1 Completed 0 15m wcsitesinfra-introspect-domain-job-7tvdt 1/1 Running 0 15s wcsitesinfra-introspect-domain-job-7tvdt 0/1 Completed 0 25s wcsitesinfra-introspect-domain-job-7tvdt 0/1 Terminating 0 5s wcsitesinfra-adminserver 0/1 Pending 0 0s wcsitesinfra-adminserver 0/1 Init:0/1 0 0s wcsitesinfra-adminserver 0/1 PodInitializing 0 12s wcsitesinfra-adminserver 0/1 Running 0 13s wcsitesinfra-adminserver 1/1 Running 0 108s wcsitesinfra-wcsites-server1 0/1 Pending 0 0s wcsitesinfra-wcsites-server1 0/1 Init:0/1 0 1s wcsitesinfra-wcsites-server1 0/1 PodInitializing 0 13s wcsitesinfra-wcsites-server1 0/1 Running 0 14s wcsitesinfra-wcsites-server1 1/1 Running 0 96s -bash-4.2$ kubectl get all -n wcsites-ns NAME READY STATUS RESTARTS AGE pod/wcsitesinfra-adminserver 1/1 Running 0 7m5s pod/wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh 0/1 Completed 0 22m pod/wcsitesinfra-wcsites-server1 1/1 Running 0 5m17s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/wcsitesinfra-adminserver ClusterIP None \u0026lt;none\u0026gt; 7001/TCP 7m5s service/wcsitesinfra-cluster-wcsites-cluster ClusterIP 10.109.210.3 \u0026lt;none\u0026gt; 8001/TCP 5m17s service/wcsitesinfra-wcsites-server1 ClusterIP None \u0026lt;none\u0026gt; 8001/TCP 5m17s NAME COMPLETIONS DURATION AGE job.batch/wcsitesinfra-create-fmw-infra-sample-domain-job 1/1 7m40s 22m To see the Admin and Managed Servers logs, you can check the pod logs:\n$ kubectl logs -f wcsitesinfra-adminserver -n wcsites-ns $ kubectl exec -it wcsitesinfra-adminserver -n wcsites-ns -- /bin/bash $ kubectl logs -f wcsitesinfra-wcsites-server1 -n wcsites-ns $ kubectl exec -it wcsitesinfra-wcsites-server1 -n wcsites-ns -- /bin/bash Verify the Pods Use the following command to see the pods running the servers:\n$ kubectl get pods -n NAMESPACE Here is an example of the output of this command:\n-bash-4.2$ kubectl get pods -n wcsites-ns NAME READY STATUS RESTARTS AGE wcsitesinfra-adminserver 1/1 Running 0 56m wcsitesinfra-create-fmw-infra-sample-domain-job-rq4xv 0/1 Completed 0 65m wcsitesinfra-wcsites-server1 1/1 Running 0 41m wcsitesinfra-wcsites-server2 1/1 Running 0 41m Verify the Services Use the following command to see the services for the domain:\n$ kubectl get services -n NAMESPACE Here is an example of the output of this command:\n-bash-4.2$ kubectl get services -n wcsites-ns NAME READY STATUS RESTARTS AGE wcsitesinfra-adminserver 1/1 Running 0 7m38s wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh 0/1 Completed 0 23m wcsitesinfra-wcsites-server1 1/1 Running 0 5m50s Expose WebCenter Sites Services Below are the default values for exposing services required for all the WebCenter Sites Managed Servers. Reset them if any values are modified.\nDetails on kubernetes/samples/scripts/create-wcsites-domain/utils/wcs-services.yaml:\n name: wcsitesinfra-wcsites-server1-np namespace: wcsites-ns weblogic.domainUID: wcsitesinfra weblogic.serverName: wcsites_server1 Execute the below command for exposing the services: (If domain is configured for more than 3 Managed Servers then add the service yaml for additional servers.)\n$ kubectl apply -f kubernetes/samples/scripts/create-wcsites-domain/utils/wcs-services.yaml service/wcsitesinfra-wcsites-server1-np created service/wcsitesinfra-wcsites-server1-svc created service/wcsitesinfra-wcsites-server2-svc created service/wcsitesinfra-wcsites-server3-svc created To verify the services created, here is an example of the output of this command:\n-bash-4.2$ kubectl get services -n wcsites-ns NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wcsitesinfra-adminserver ClusterIP None \u0026lt;none\u0026gt; 7001/TCP 11m wcsitesinfra-cluster-wcsites-cluster ClusterIP 10.109.210.3 \u0026lt;none\u0026gt; 8001/TCP 9m14s wcsitesinfra-wcsites-server1 ClusterIP None \u0026lt;none\u0026gt; 8001/TCP 9m14s wcsitesinfra-wcsites-server1-np NodePort 10.105.167.205 \u0026lt;none\u0026gt; 8001:30155/TCP 2m47s wcsitesinfra-wcsites-server1-svc ClusterIP None \u0026lt;none\u0026gt; 50000/TCP,50001/TCP,50002/TCP,50003/TCP,50004/TCP,50005/TCP,50006/TCP,50007/TCP,50008/TCP,50009/TCP 2m47s wcsitesinfra-wcsites-server2-svc ClusterIP None \u0026lt;none\u0026gt; 50000/TCP,50001/TCP,50002/TCP,50003/TCP,50004/TCP,50005/TCP,50006/TCP,50007/TCP,50008/TCP,50009/TCP 2m47s wcsitesinfra-wcsites-server3-svc ClusterIP None \u0026lt;none\u0026gt; 50000/TCP,50001/TCP,50002/TCP,50003/TCP,50004/TCP,50005/TCP,50006/TCP,50007/TCP,50008/TCP,50009/TCP 2m47s Load Balance With an Ingress Controller or A Web Server You can choose a load balancer provider for your WebLogic domains running in a Kubernetes cluster. Please refer to the WebLogic Kubernetes Operator Load Balancer Samples for information about the current capabilities and setup instructions for each of the supported load balancers.\nFor information on how to set up Loadbalancer for setting up WebCenter Sites domain on K8S:\nFor Traefik, see Setting Up Loadbalancer Traefik for the WebCenter Sites Domain on K8S\nFor Voyager, see Setting Up Loadbalancer Voyager for the WebCenter Sites Domain on K8S\nConfigure WebCenter Sites Configure WebCenter Sites by hitting url http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/sites/sitesconfigsetup\nWhen installing, select sample sites to be installed and enter the required passwords. Do not change the sites-config location. If you change the location, installation will fail.\n After the configuration is complete, edit the domain, and restart the Managed Server.\n To stop Managed Servers:\n$ kubectl patch domain wcsitesinfra -n wcsites-ns --type=\u0026#39;json\u0026#39; -p=\u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/clusters/0/replicas\u0026#34;, \u0026#34;value\u0026#34;: 0 }]\u0026#39; To start all configured Managed Servers:\n$ kubectl patch domain wcsitesinfra -n wcsites-ns --type=\u0026#39;json\u0026#39; -p=\u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/clusters/0/replicas\u0026#34;, \u0026#34;value\u0026#34;: 3 }]\u0026#39; Wait till the Managed Server pod is killed and then restart it. Monitor with below command: -bash-4.2$ kubectl get pods -n wcsites-ns -w NAME READY STATUS RESTARTS AGE wcsitesinfra-adminserver 1/1 Running 0 111m wcsitesinfra-create-fmw-infra-sample-domain-job-6l7zh 0/1 Completed 0 126m wcsitesinfra-wcsites-server1 1/1 Running 0 3m7s wcsitesinfra-wcsites-server2 1/1 Running 0 3m7s wcsitesinfra-wcsites-server3 1/1 Running 0 3m7s Settings in WebCenter Sites Property Management Incase of Voyager Load Balancer: Use Property Management Tool and update cookieserver.validnames property with value JSESSIONID,SERVERID.\nIncase of Traefik Load Balancer: Use Property Management Tool and update cookieserver.validnames property with value JSESSIONID,sticky.\nIncase of Nginx Load Balancer: Use Property Management Tool and update cookieserver.validnames property with value JSESSIONID,stickyid.\nFor Publishing Setting in WebCenter Sites While configuring publishing destination use NodePort port of target cluster which can be found by executing below command:\n(In this example for publishihng the port 30155 has to be used.)\n-bash-4.2$ kubectl get service/wcsitesinfra-wcsites-server1-np -n wcsites-ns NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wcsitesinfra-wcsites-server1-np NodePort 10.105.167.205 \u0026lt;none\u0026gt; 8001:30155/TCP 32h Customization A customer specific customizations (extend.sites.webapp-lib.war) has to be placed in sites-home directory inside your domain mount path (/scratch/K8SVolume/WCSites/sites-home).\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/", + "title": "Administration Guide", + "tags": [], + "description": "Describes how to use some of the common utility tools and configurations to administer Oracle SOA Suite domains.", + "content": "Administer Oracle SOA Suite domains in Kubernetes.\n Set up a load balancer Configure different load balancers for Oracle SOA Suite domains.\n Enable additional URL access Extend an existing ingress to enable additional application URL access for Oracle SOA Suite domains.\n Configure SSL certificates Create and configure custom SSL certificates for Oracle SOA Suite domains.\n Monitor a domain and publish logs Monitor an Oracle SOA Suite domain and publish the WebLogic Server logs to Elasticsearch.\n Expose the T3/T3S protocol Create a T3/T3S channel and the corresponding Kubernetes service to expose the T3/T3S protocol for the Administration Server and Managed Servers in an Oracle SOA Suite domain.\n Deploy composite applications Deploy composite applications for Oracle SOA Suite and Oracle Service Bus domains.\n Persist adapter customizations Persist the customizations done for Oracle SOA Suite adapters.\n Perform WLST operations Perform WLST administration operations using a helper pod running in the same Kubernetes cluster as the Oracle SOA Suite domain.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/", + "title": "Administration Guide", + "tags": [], + "description": "Describes how to use some of the common utility tools and configurations to administer Oracle WebCenter Sites domains.", + "content": "Administer Oracle WebCenter Sites domains in Kubernetes.\n Set up a load balancer Configure different load balancers for Oracle WebCenter Sites domains\n Monitor a domain and publish logs Monitor an Oracle WebCenter Sites domain and publish the WebLogic Server logs to Elasticsearch.\n Elasticsearch integration for logs Monitor an Oracle WebCenter Sites domain and publish the WebLogic Server logs to Elasticsearch.\n Publish logs to Elasticsearch Monitor an Oracle WebCenter Sites domain and publish the WebLogic Server logs to Elasticsearch.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/", + "title": "Oracle SOA Suite", + "tags": [], + "description": "The Oracle WebLogic Kubernetes Operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Follow the instructions in this guide to set up these Oracle SOA Suite domains on Kubernetes.", + "content": "The WebLogic Kubernetes Operator (the “operator”) supports deployment of Oracle SOA Suite components such as Oracle Service-Oriented Architecture (SOA), Oracle Service Bus, and Oracle Enterprise Scheduler (ESS). Currently the operator supports these domain types:\n soa : Deploys a SOA domain with Oracle Enterprise Scheduler (ESS) osb : Deploys an Oracle Service Bus domain soaosb : Deploys a domain with SOA, Oracle Service Bus, and Oracle Enterprise Scheduler (ESS) In this release, Oracle SOA Suite domains are supported using the “domain on a persistent volume” model only, where the domain home is located in a persistent volume (PV).\nThe operator has several key features to assist you with deploying and managing Oracle SOA Suite domains in a Kubernetes environment. You can:\n Create Oracle SOA Suite instances in a Kubernetes persistent volume (PV). This PV can reside in an NFS file system or other Kubernetes volume types. Start servers based on declarative startup parameters and desired states. Expose the Oracle SOA Suite services and composites for external access. Scale Oracle SOA Suite domains by starting and stopping Managed Servers on demand, or by integrating with a REST API. Publish operator and WebLogic Server logs to Elasticsearch and interact with them in Kibana. Monitor the Oracle SOA Suite instance using Prometheus and Grafana. Current production release The current production release for the Oracle SOA Suite domains deployment on Kubernetes is 21.3.2. This release uses the WebLogic Kubernetes Operator version 3.2.1.\nRecent changes and known issues See the Release Notes for recent changes and known issues for Oracle SOA Suite domains deployment on Kubernetes.\nLimitations See here for limitations in this release.\nAbout this documentation This documentation includes sections targeted to different audiences. To help you find what you are looking for more easily, please consult this table of contents:\n Quick Start explains how to quickly get an Oracle SOA Suite domain instance running using default settings. Note that this is only for development and test purposes.\n Install Guide and Administration Guide provide detailed information about all aspects of using the Kubernetes operator including:\n Installing and configuring the operator. Using the operator to create and manage Oracle SOA Suite domains. Configuring Kubernetes load balancers. Configuring custom SSL certificates. Configuring Elasticsearch and Kibana to access the operator and WebLogic Server log files. Deploying composite applications for Oracle SOA Suite and Oracle Service Bus. Patching an Oracle SOA Suite Docker image. Removing domains. And much more! Documentation for earlier releases To view documentation for an earlier release, see:\n Version 21.2.2 Version 21.1.2 Version 20.4.2 Version 20.3.3 Additional reading Oracle SOA Suite domains deployment on Kubernetes leverages the WebLogic Kubernetes Operator framework.\n To develop an understanding of the operator, including design, architecture, domain life cycle management, and configuration overrides, review the operator documentation. To learn more about the Oracle SOA Suite architecture and components, see Understanding Oracle SOA Suite. To review the known issues and common questions for Oracle SOA Suite domains deployment on Kubernetes, see the frequently asked questions. " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/configuring-custom-ssl-certificates/", + "title": "Configure SSL certificates", + "tags": [], + "description": "Create and configure custom SSL certificates for Oracle SOA Suite domains.", + "content": "Secure Socket Layer (SSL) provides a secured communication for data sent over unsecured networks. In an SSL termination scenario, you can configure SSL between the client browser and the load balancer in your Oracle SOA Suite instance to ensure that applications are accessed securely. In an SSL end-to-end scenario, an Oracle SOA Suite domain is configured to use a self-signed SSL certificate that was generated during domain creation. Clients will typically receive a message indicating that the signing CA for the certificate is unknown and not trusted.\nThis section provides details on how to create and configure custom (CA-issued) SSL certificates for Oracle SOA Suite domains in both SSL end-to-end and SSL termination scenarios.\n Create custom SSL certificates in an SSL end-to-end scenario Create custom SSL certificates in an SSL termination at a load balancer Create custom SSL certificates in an SSL end-to-end scenario These steps describe how to replace the identity and trust keystore of an Oracle SOA Suite domain with a custom identity and custom trust keystore and register with digital certificates procured from any third party authority.\nIn this documentation, the registered domain is mydomain.com and the CA signed certificates are taken from mydomain.\nCreate a custom identity and custom trust keystore and generate a certificate signing request (CSR) To create a custom identity and custom trust keystore and generate a CSR:\n Log in to the Enterprise Manager (EM) Console and access the Keystores page by opening WebLogic Domain \u0026gt; Security \u0026gt; Keystore.\n Under the system stripe, click Create Keystore to create a new keystore.\n Provide the following details for custom identity:\nKeystore Name: custIdentity Protection: Select the Password option. Keystore Password: Enter the password. Confirm Password: Confirm the password.\n Click Create Keystore to create another new keystore.\n Provide the following details for custom trust:\n Keystore Name: custTrust Protection: Select the Password option. Keystore Password: Enter the password. Confirm Password: Confirm the password. Click Manage on the custIdentity keystore name and provide the password that you specified previously.\n Click Generate Keypair to create a new key pair, and provide the following details for custIdentity with alias as custIdentity and password:\n Alias Name: custIdentity Common Name: Common name, for example, soak8s.mydomain.com (Registered domain name) Organizational Unit: Name of the organizational unit Organization: Organization name Enter City, State, and Country names Key Type: RSA Key Size: 2048 Password: Enter the password Click OK to generate the keypair.\n Select the newly created keypair and click Generate CSR.\n Export the created CSR, share it with Certificate Authority, such as digicert CA, and get root, intermediate, and signed certificates. The certificate is generated for the domain name you used in the Common Name field.\n It is not mandatory to create identity and trust keystore under the system stripe that comes with default provisioning. You can create a new custom stripe and create identity and trust keystores under it.\nShare the CSR with CA to get CA-signed certificates Select the new keypair under the custIdentity and click Generate CSR.\n Export the created CSR and share it with the Certificate Authority and get root, intermediate, and signed certificates. The certificate is generated for the domain name you used in the Common Name field.\n Download the certificates shared in the zip file from the CA. The zip file contains one of the following:\n the three certificates individually - root, intermediate, and signed certificates root and intermediate certificates in one chain and signed certificate separately Double-click the certificate chain for root and intermediate certificates. You can see the full chain when you click on the certification path.\n Extract the root and intermediate certificates individually by going to the certification path, select the certificate to be extracted (root or intermediate) and click View Certificate.\n On the View Certificates pop-up, select the Details tab and click Copy to File.\n In the Certificate Export wizard, click Next, then select Base 64 encoded X.509 (CER), and then click Next. Export the certificate.\n Name the exported certificate as root and intermediate certificates respectively.\n Import CA certificates Certificate Authority (CA) certificates must be imported in the following order: first the signed server certificate, then the intermediate certificate, and then the root certificate.\nTo import CA certificates:\n Use WLST commands to import the certificate chain in the identity keystore (custIdentity):\na. Combine the three certificates into a single text file called chain.pem in the following order: signed server certificate, followed by intermediate certificate, followed by root certificate:\n-----BEGIN CERTIFICATE----- \u0026lt;signed server certificate\u0026gt; -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- \u0026lt;intermediate certificate\u0026gt; -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- \u0026lt;root certificate\u0026gt; -----END CERTIFICATE----- b. Place the chain.pem in /tmp from where you will be executing the kubectl commands (for example, on the master node).\nc. Enter the following command to change the file ownership to 1000:1000 user/group:\n$ sudo chown 1000:1000 /tmp/chain.pem d. Copy /tmp/chain.pem into the Administration Server pod (for example, soainfra-adminserver):\n$ kubectl cp /tmp/chain.pem soans/soainfra-adminserver:/tmp/chain.pem e. Exec into the Administration Server pod to perform all operations:\n$ kubectl exec -it soainfra-adminserver -n soans -- bash f. Start WLST and access the Oracle Platform Security Services (OPSS) key store service:\n$ cd /u01/oracle/oracle_common/common/bin/ $ ./wlst.sh : : wls:/offline\u0026gt; connect(\u0026quot;weblogic\u0026quot;,\u0026quot;Welcome1\u0026quot;,\u0026quot;t3://soainfra-adminserver:7001\u0026quot;) : : wls:/soainfra/serverConfig/\u0026gt; svc = getOpssService(name='KeyStoreService') g. Use the WLST importKeyStoreCertificate command to import chain.pem:\nsvc.importKeyStoreCertificate(appStripe='stripe', name='keystore', password='password', alias='alias', keypassword='keypassword', type='entrytype',filepath='absolute_file_path') For example:\nwls:/soainfra/serverConfig/\u0026gt; svc.importKeyStoreCertificate(appStripe='system', name='custIdentity', password=welcome1, alias='custIdentity', keypassword='welcome1', type='CertificateChain', filepath='/tmp/chain.pem') e. Exit WLST:\nexit() Use Oracle Enterprise Manager to import the certificate chain into the trust keystore (custTrust):\na. Log in to the Enterprise Manager Console and access the Keystores page by opening WebLogic domain \u0026gt; Security \u0026gt; Keystore.\nb. Select the trust keystore (custTrust) and click Manage.\nc. Click Import Certificate and import the certificates in this order:\n the signed server certificate as a trusted certificate (alias mySignedCert)\n the intermediate certificate from CA as a trusted certificate (alias myInterCA)\n the root certificate from CA as a trusted certificate (alias myRootCA)\n Synchronize the local keystore with the security store Synchronize keystores to synchronize information between the domain home and the Oracle Platform Security Services (OPSS) store in the database.\nTo synchronize keystores:\n Exec into the Administration server pod (for example, soainfra-adminserver): $ kubectl exec -it soainfra-adminserver -n soans -- bash Start WLST and access the Oracle Platform Security Services (OPSS) keystore service: $ cd /u01/oracle/oracle_common/common/bin/ $ ./wlst.sh : : wls:/offline\u0026gt; connect(\u0026quot;weblogic\u0026quot;,\u0026quot;Welcome1\u0026quot;,\u0026quot;t3://soainfra-adminserver:7001\u0026quot;) : : wls:/soainfra/serverConfig/\u0026gt; svc = getOpssService(name='KeyStoreService') Enter the following commands to synchronize the custom identity and custom trust keystores: Note: This step is necessary only if you are using the system stripe. You do not need to synchronize the keystores if you are using a custom stripe.\n wls:/soainfra/serverConfig/\u0026gt; svc.listKeyStoreAliases(appStripe=\u0026quot;system\u0026quot;, name=\u0026quot;custIdentity\u0026quot;, password=\u0026quot; ****\u0026quot;, type=\u0026quot;*\u0026quot;) wls:/soainfra/serverConfig/\u0026gt; syncKeyStores(appStripe='system',keystoreFormat='KSS') wls:/soainfra/serverConfig/\u0026gt; svc.listKeyStoreAliases (appStripe=\u0026quot;system\u0026quot;, name=\u0026quot;myKSSTrust\u0026quot;, password=\u0026quot;****\u0026quot;, type=\u0026quot;*\u0026quot;) wls:/soainfra/serverConfig/\u0026gt; syncKeyStores(appStripe='system',keystoreFormat='KSS') Update the WebLogic keystores with custom identity and trust To update the WebLogic keystores with custom identity and custom trust:\n In the WebLogic Server Administration Console, open Servers \u0026gt; AdminServer \u0026gt; Configurations \u0026gt; Keystores tab.\n Change the Keystores to Custom Identity and Custom Trust and Save.\n Provide the values for Custom Identity:\n Custom Identity Keystore: kss://system/custidentity Custom Identity KeyStore Type: KSS Custom Identity PassPhrase: enter password given while creating the custIdentity keystore. Confirm Custom Identity PassPhrase: reenter the password. Provide the values for Custom Trust:\n Custom Trust Keystore: kss://system/custTrust Custom Trust KeyStore Type: KSS Custom Trust PassPhrase: enter password given while creating the custTrust keystore. Confirm Custom Trust PassPhrase: reenter the password. Click Save and then Activate changes.\n Open the SSL tab and provide the following details:\n Private Key Alias: custIdentity (this is the alias given while creating the key pair in the custIdentity keystore.) Private Key PassPhrase: enter password given while creating the key pair under the custIdentity keystore. Confirm Private Key PassPhrase: reenter the password. In the Advanced section, change Hostname Verification to None. Click Save and Activate changes.\n Repeat steps 1 to 7 for all Managed Servers.\n Restart the domain.\n Once the servers are up and running, you can check if the SSL URLs show the updated certificates.\n For more details, refer to:\n Administering Oracle SOA Cloud Service Administering Oracle Fusion Middleware Create custom SSL certificates in an SSL termination at a load balancer This section provides references to configure a custom SSL certificate at a load balancer.\nThere are multiple CA vendors in the marketplace today, each offering different levels of service at varying price points. Research and choose a CA vendor that meets your service-level and budget requirements.\nFor a CA vendor to issue you a CA-issued SSL certificate, you must provide the following information:\n Your custom domain name. Public information associated with the domain confirming you as the owner. Email address associated with the custom domain for verification. Create a Certificate Signing Request (CSR) for your load balancer and submit the CSR to the CA vendor. After receiving the CA-issued certificate, refer to Administering Oracle SOA Cloud Service to import the CA-issued SSL certificate to the load balancer. If you are using openssl to create the certificates, you can refer to Manually Generate a Certificate Signing Request (CSR) Using OpenSSL to submit the CSR to the CA vendor.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/monitoring-wcsites-domains/", + "title": "Monitor a domain and publish logs", + "tags": [], + "description": "Monitor an Oracle WebCenter Sites domain and publish the WebLogic Server logs to Elasticsearch.", + "content": "After the Oracle WebCenter Sites domain is set up, you can:\n Monitor the Oracle WebCenter Sites instance using Prometheus and Grafana Publish WebLogic Server logs into Elasticsearch Monitor the Oracle WebCenter Sites instance using Prometheus and Grafana Using the WebLogic Monitoring Exporter you can scrape runtime information from a running Oracle WebCenter Sites instance and monitor them using Prometheus and Grafana.\nPrerequisites This document assumes that the Prometheus Operator is deployed on the Kubernetes cluster. If it is not already deployed, follow the steps below for deploying the Prometheus Operator.\nClone the kube-prometheus project $ git clone https://github.com/coreos/kube-prometheus.git Label the nodes Kube-Prometheus requires all the exporter nodes to be labelled with kubernetes.io/os=linux. If a node is not labelled, then you must label it using the following command:\n$ kubectl label nodes --all kubernetes.io/os=linux Create Prometheus and Grafana resources Change to the kube-prometheus directory and execute the following commands to create the namespace and CRDs:\nNOTE: Wait for a minute for each command to process.\n$ cd kube-prometheus $ kubectl create -f manifests/setup $ until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo \u0026#34;\u0026#34;; done $ kubectl create -f manifests/ Provide external access To provide external access for Grafana, Prometheus, and Alertmanager, execute the commands below:\n$ kubectl patch svc grafana -n monitoring --type=json -p \u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/type\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;NodePort\u0026#34; },{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/ports/0/nodePort\u0026#34;, \u0026#34;value\u0026#34;: 32100 }]\u0026#39; $ kubectl patch svc prometheus-k8s -n monitoring --type=json -p \u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/type\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;NodePort\u0026#34; },{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/ports/0/nodePort\u0026#34;, \u0026#34;value\u0026#34;: 32101 }]\u0026#39; $ kubectl patch svc alertmanager-main -n monitoring --type=json -p \u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/type\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;NodePort\u0026#34; },{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/ports/0/nodePort\u0026#34;, \u0026#34;value\u0026#34;: 32102 }]\u0026#39; NOTE:\n 32100 is the external port for Grafana 32101 is the external port for Prometheus 32102 is the external port for Alertmanager Set Up the WebLogic Monitoring Exporter Set up the WebLogic Monitoring Exporter that will collect WebLogic Server metrics and monitor your WebCenter Sites domain.\nGenerate the WebLogic Monitoring Exporter Deployment Package Two packages are required as the listening ports are different for the Administration Server and Managed Servers. One binary required for the Admin Server (wls-exporter-as.war) and one for Managed Cluster (wls-exporter-ms.war). Set the required proxies and then run the script getX.X.X.sh to generate two binaries:\n$ cd kubernetes/samples/scripts/create-wcsites-domain/utils/weblogic-monitoring-exporter $ sh get1.1.0.sh Output:\n % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 607 0 607 0 0 357 0 --:--:-- 0:00:01 --:--:-- 357 100 2016k 100 2016k 0 0 398k 0 0:00:05 0:00:05 --:--:-- 797k -------------------wls-exporter-ms start------------------- created /tmp/ci-GNysQzP1kv Copying completed /tmp/ci-GNysQzP1kv /kubernetes/3.0.1/scripts/create-wcsites-domain/utils/weblogic-monitoring-exporter in temp dir adding: WEB-INF/weblogic.xml (deflated 66%) adding: config.yml (deflated 63%) wls-exporter-ms.war is ready -------------------wls-exporter-ms end------------------- -------------------wls-exporter-as start------------------- Copying completed in temp dir adding: WEB-INF/weblogic.xml (deflated 66%) adding: config.yml (deflated 52%) wls-exporter-as.war is ready -------------------wls-exporter-as end------------------- zip completed kubernetes/3.0.1/scripts/create-wcsites-domain/utils/weblogic-monitoring-exporter Copy the WAR Files to the WebLogic Domain Home Copy the wls-exporter-as.war and wls-exporter-ms.war files to the domain home directory in the Administration Server pod.\n$ kubectl cp wls-exporter-as.war wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/ $ kubectl cp wls-exporter-ms.war wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/ Deploy the WebLogic Monitoring Exporter Follow these steps to deploy the package in the WebLogic Server instances:\n In the Administration Server and Managed Servers, deploy the WebLogic Monitoring Exporter (wls-exporter-ms.war) separately using the Oracle Enterprise Manager.\n Select the servers to which the Exporter WAR should be deployed:\n Set the application name. The application name must be different if it is deployed separately in the Administration Server and Managed Servers. Make sure the context-root for both the deployments is wls-exporter:\n Click Install and start application.\n Then deploy the WebLogic Monitoring Exporter application (wls-exporter-ms.war).\n Activate the changes to start the application. If the application is started and the port is exposed, then you can access the WebLogic Monitoring Exporter console using this URL: http://\u0026lt;server:port\u0026gt;/wls-exporter.\n Repeat same steps for wls-exporter-as.war.\n Configure Prometheus Operator Prometheus enables you to collect metrics from the WebLogic Monitoring Exporter. The Prometheus Operator identifies the targets using service discovery. To get the WebLogic Monitoring Exporter end point discovered as a target, you must create a service monitor pointing to the service.\nSee the following sample service monitor deployment YAML configuration file located at\nkubernetes/samples/scripts/create-wcsites-domain/utils/weblogic-monitoring-exporter/wls-exporter.yaml.\nServiceMonitor for wls-exporter:\napiVersion: v1 kind: Secret metadata: name: basic-auth namespace: monitoring data: password: V2VsY29tZTE= # Welcome1 i.e.'WebLogic password' user: d2VibG9naWM= # weblogic i.e. 'WebLogic username' type: Opaque --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: wls-exporter-wcsitesinfra namespace: monitoring labels: k8s-app: wls-exporter spec: namespaceSelector: matchNames: - wcsites-ns selector: matchLabels: weblogic.domainName: wcsitesinfra endpoints: - basicAuth: password: name: basic-auth key: password username: name: basic-auth key: user port: default relabelings: - action: labelmap regex: __meta_kubernetes_service_label_(.+) interval: 10s honorLabels: true path: /wls-exporter/metrics The exporting of metrics from wls-exporter requires basicAuth so a Kubernetes Secret is created with the user name and password that are base64 encoded. This Secret will be used in the ServiceMonitor deployment.\nWhen generating the base64 encoded strings for the user name and password, observe if a new line character is appended in the encoded string. This line character causes an authentication failure. To avoid a new line string, use the following example:\n$ echo -n \u0026quot;Welcome1\u0026quot; | base64 V2VsY29tZTE= In the deployment YAML configuration for wls-exporter shown above, weblogic.domainName: wcsitesinfra is used as a label under spec.selector.matchLabels, so all the services will be selected for the service monitor. If you don\u0026rsquo;t use this label, you should create separate service monitors for each server\u0026ndash;if the server name is used as matching labels in spec.selector.matchLabels. Doing so will require you to relabel the configuration because Prometheus, by default, ignores the labels provided in the wls-exporter.\nBy default, Prometheus does not store all the labels provided by the target. In the service monitor deployment YAML configuration, you must mention the relabeling configuration (spec.endpoints.relabelings) so that certain labels provided by weblogic-monitoring-exporter (required for the Grafana dashboard) are stored in Prometheus. Do not delete the following section from the configuration YAML file:\nrelabelings: - action: labelmap regex: __meta_kubernetes_service_label_(.+) Add RoleBinding and Role for the WebLogic Domain Namespace The RoleBinding is required for Prometheus to access the endpoints provided by the WebLogic Monitoring Exporter. You need to add RoleBinding for the namespace under which the WebLogic Servers pods are running in the Kubernetes cluster. Edit the kube-prometheus/manifests/prometheus-roleBindingSpecificNamespaces.yaml file in the Prometheus Operator deployment manifests and add the RoleBinding for the namespace (wcsites-ns) similar to the following example:\n- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: prometheus-k8s namespace: wcsites-ns roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: prometheus-k8s subjects: - kind: ServiceAccount name: prometheus-k8s namespace: monitoring Similarly, add the Role for the namespace under which the WebLogic Servers pods are running in the Kubernetes cluster. Edit kube-prometheus/manifests/prometheus-roleSpecificNamespaces.yaml in the Prometheus Operator deployment manifests and add the Role for the namespace (wcsites-ns) similar to the following example:\n- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: prometheus-k8s namespace: wcsites-ns rules: - apiGroups: - \u0026quot;\u0026quot; resources: - services - endpoints - pods verbs: - get - list - watch Then apply prometheus-roleBindingSpecificNamespaces.yaml and prometheus-roleSpecificNamespaces.yaml for the RoleBinding and Role to take effect in the cluster.\n$ kubectl apply -f kube-prometheus/manifests/prometheus-roleBindingSpecificNamespaces.yaml $ kubectl apply -f kube-prometheus/manifests/prometheus-roleSpecificNamespaces.yaml Deploy the Service Monitor To deploy the service monitor, use the above wls-exporter.yaml deployment YAML and run the following command:\n$ kubectl create -f kubernetes/samples/scripts/create-wcsites-domain/utils/weblogic-monitoring-exporter/wls-exporter.yaml Enable Prometheus to Discover the Service After the deployment of the service monitor, Prometheus should be able to discover wls-exporter and export metrics.\nYou can access the Prometheus dashboard at http://mycompany.com:32101/.\nDeploy Grafana Dashboard To view the domain metrics, deploy the Grafana dashboard provided in the WebLogic Monitoring Exporter.\nYou can access the Grafana dashboard at http://mycompany.com:32100/.\n Log in to Grafana dashboard with admin/admin.\n Go to Settings, then select DataSources, and then Add Data Source.\nHTTP URL: Prometheus URL http://mycompany.com:32101/\nAuth: Enable Basic Auth\nBasic Auth Details: WebLogic credentials provided in step Configure Prometheus Operator\n Download the weblogic_dashboard.json file from here.\n Click Add and then Import. Paste the modified JSON in the Paste JSON block, and then load it.\nThis displays the WebLogic Server Dashboard.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/appendix/docker-k8s-hardening/", + "title": "Security hardening", + "tags": [], + "description": "Review resources for the Docker and Kubernetes cluster hardening.", + "content": "Securing a Kubernetes cluster involves hardening on multiple fronts - securing the API servers, etcd, nodes, container images, container run-time, and the cluster network. Apply principles of defense in depth, principle of least privilege, and minimize the attack surface. Use security tools such as Kube-Bench to verify the cluster\u0026rsquo;s security posture. Since Kubernetes is evolving rapidly refer to Kubernetes Security Overview for the latest information on securing a Kubernetes cluster. Also ensure the deployed Docker containers follow the Docker Security guidance.\nThis section provides references on how to securely configure Docker and Kubernetes.\nReferences Docker hardening\n https://docs.docker.com/engine/security/security/ https://blog.aquasec.com/docker-security-best-practices Kubernetes hardening\n https://kubernetes.io/docs/concepts/security/overview/ https://kubernetes.io/docs/concepts/security/pod-security-standards/ https://blogs.oracle.com/developers/5-best-practices-for-kubernetes-security Security best practices for Oracle WebLogic Server Running in Docker and Kubernetes\n https://blogs.oracle.com/weblogicserver/security-best-practices-for-weblogic-server-running-in-docker-and-kubernetes " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/appendix/docker-k8s-hardening/", + "title": "Security hardening", + "tags": [], + "description": "Review resources for the Docker and Kubernetes cluster hardening.", + "content": "Securing a Kubernetes cluster involves hardening on multiple fronts - securing the API servers, etcd, nodes, container images, container run-time, and the cluster network. Apply principles of defense in depth, principle of least privilege, and minimize the attack surface. Use security tools such as Kube-Bench to verify the cluster\u0026rsquo;s security posture. Since Kubernetes is evolving rapidly refer to Kubernetes Security Overview for the latest information on securing a Kubernetes cluster. Also ensure the deployed Docker containers follow the Docker Security guidance.\nThis section provides references on how to securely configure Docker and Kubernetes.\nReferences Docker hardening\n https://docs.docker.com/engine/security/security/ https://blog.aquasec.com/docker-security-best-practices Kubernetes hardening\n https://kubernetes.io/docs/concepts/security/overview/ https://kubernetes.io/docs/concepts/security/pod-security-standards/ https://blogs.oracle.com/developers/5-best-practices-for-kubernetes-security Security best practices for Oracle WebLogic Server Running in Docker and Kubernetes\n https://blogs.oracle.com/weblogicserver/security-best-practices-for-weblogic-server-running-in-docker-and-kubernetes " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/upgrade-k8s-cluster/", + "title": "Upgrade a Kubernetes cluster", + "tags": [], + "description": "Upgrade the underlying Kubernetes cluster version in a running SOA Kubernetes environment.", + "content": "These instructions describe how to upgrade a Kubernetes cluster created using kubeadm on which an Oracle SOA Suite domain is deployed. A rolling upgrade approach is used to upgrade nodes (master and worker) of the Kubernetes cluster.\nIt is expected that there will be a down time during the upgrade of the Kubernetes cluster as the nodes need to be drained as part of the upgrade process.\n Prerequisites Review Prerequisites and ensure that your Kubernetes cluster is ready for upgrade. Make sure your environment meets all prerequisites. Make sure the database used for the SOA domain deployment is up and running during the upgrade process. Upgrade the Kubernetes version An upgrade of Kubernetes is supported from one MINOR version to the next MINOR version, or between PATCH versions of the same MINOR. For example, you can upgrade from 1.x to 1.x+1, but not from 1.x to 1.x+2. To upgrade a Kubernetes version, first all the master nodes of the Kubernetes cluster must be upgraded sequentially, followed by the sequential upgrade of each worker node.\n See here for Kubernetes official documentation to upgrade from v1.14.x to v1.15.x. See here for Kubernetes official documentation to upgrade from v1.15.x to v1.16.x. See here for Kubernetes official documentation to upgrade from v1.16.x to v1.17.x. See here for Kubernetes official documentation to upgrade from v1.17.x to v1.18.x. See here for Kubernetes official documentation to upgrade from v1.18.x to v1.19.x. " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/upgrade-k8s-cluster/", + "title": "Upgrade a Kubernetes cluster", + "tags": [], + "description": "Upgrade the underlying Kubernetes cluster version in a running Oracle WebCenter Sites Kubernetes environment.", + "content": "These instructions describe how to upgrade a Kubernetes cluster created using kubeadm on which an Oracle WebCenter Sites domain is deployed. A rolling upgrade approach is used to upgrade nodes (master and worker) of the Kubernetes cluster.\nIt is expected that there will be a down time during the upgrade of the Kubernetes cluster as the nodes need to be drained as part of the upgrade process.\n Prerequisites Review Prerequisites and ensure that your Kubernetes cluster is ready for upgrade. Make sure your environment meets all prerequisites. Make sure the database used for the Oracle WebCenter Sites domain deployment is up and running during the upgrade process. Upgrade the Kubernetes version An upgrade of Kubernetes is supported from one MINOR version to the next MINOR version, or between PATCH versions of the same MINOR. For example, you can upgrade from 1.x to 1.x+1, but not from 1.x to 1.x+2. To upgrade a Kubernetes version, first all the master nodes of the Kubernetes cluster must be upgraded sequentially, followed by the sequential upgrade of each worker node.\n See here for Kubernetes official documentation to upgrade from v1.14.x to v1.15.x. See here for Kubernetes official documentation to upgrade from v1.15.x to v1.16.x. See here for Kubernetes official documentation to upgrade from v1.16.x to v1.17.x. See here for Kubernetes official documentation to upgrade from v1.17.x to v1.18.x. " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/voyager/", + "title": "Voyager", + "tags": [], + "description": "Configure the ingress-based Voyager load balancer for Oracle SOA Suite domains.", + "content": "Voyager/HAProxy is a popular ingress-based load balancer for production environments. This section provides information about how to install and configure Voyager/HAProxy to load balance Oracle SOA Suite domain clusters. You can configure Voyager for non-SSL, SSL termination, and end-to-end SSL access of the application URL.\nFollow these steps to set up Voyager as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster:\n Install the Voyager load balancer Configure Voyager to manage ingresses Verify domain application URL access Uninstalling Voyager Ingress Uninstall Voyager Install the Voyager load balancer Add the AppsCode chart repository:\n$ helm repo add appscode https://charts.appscode.com/stable/ $ helm repo update Verify that the chart repository has been added:\n$ helm search repo appscode/voyager NOTE: After updating the Helm repository, the Voyager version listed may be newer that the one appearing here. Check with the Voyager site for the latest supported versions.\n Install the Voyager operator:\n NOTE: The Voyager version used for the install should match the version found with helm search.\n $ kubectl create ns voyager $ helm install voyager-operator appscode/voyager --version 12.0.0 \\ --namespace voyager \\ --set cloudProvider=baremetal \\ --set apiserver.enableValidatingWebhook=false Wait until the Voyager operator is running.\n Check the status of the Voyager operator:\n$ kubectl get all -n voyager Click here to see the sample output. NAME READY STATUS RESTARTS AGE pod/voyager-operator-b84f95f8f-4szhl 1/1 Running 0 43h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/voyager-operator ClusterIP 10.107.201.155 \u0026lt;none\u0026gt; 443/TCP,56791/TCP 43h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/voyager-operator 1/1 1 1 43h NAME DESIRED CURRENT READY AGE replicaset.apps/voyager-operator-b84f95f8f 1 1 1 43h See the official installation document for more details.\n Update the Voyager operator\nAfter the Voyager operator is installed and running, upgrade the Voyager operator using the helm upgrade command, where voyager is the Voyager namespace and soans is the namespace of the domain.\n$ helm upgrade voyager-operator appscode/voyager --namespace voyager Click here to see the sample output. Release \u0026quot;voyager-operator\u0026quot; has been upgraded. Happy Helming! NAME: voyager-operator LAST DEPLOYED: Mon Sep 28 11:53:43 2020 NAMESPACE: voyager STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: Set cloudProvider for installing Voyager To verify that Voyager has started, run: kubectl get deployment --namespace voyager -l \u0026quot;app.kubernetes.io/name=voyager,app.kubernetes.io/instance=voyager-operator\u0026quot; Configure Voyager to manage ingresses Create an ingress for the domain in the domain namespace by using the sample Helm chart. Here path-based routing is used for ingress. Sample values for default configuration are shown in the file ${WORKDIR}/charts/ingress-per-domain/values.yaml. By default, type is TRAEFIK , sslType is NONSSL, and domainType is soa. These values can be overridden by passing values through the command line or can be edited on the sample file values.yaml.\n Note: See here for all the configuration parameters.\n If needed, you can update the ingress yaml file to define more path rules (in the spec.rules.host.http.paths section) based on the domain application URLs that need to be accessed. You need to update the template yaml file for the Voyager (ingress-based) load balancer located at ${WORKDIR}/charts/ingress-per-domain/templates/voyager-ingress.yaml\n$ cd ${WORKDIR} $ helm install soa-voyager-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set type=VOYAGER Click here to check the output of the ingress per domain NAME: soa-voyager-ingress LAST DEPLOYED: Mon Jul 20 08:20:27 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None To secure access (SSL and E2ESSL) to the Oracle SOA Suite application, create a certificate and generate secrets:\n$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls1.key -out /tmp/tls1.crt -subj \u0026#34;/CN=*\u0026#34; $ kubectl -n soans create secret tls domain1-tls-cert --key /tmp/tls1.key --cert /tmp/tls1.crt Deploy ingress-per-domain using Helm for SSL termination configuration.\n$ cd ${WORKDIR} $ helm install soa-voyager-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set type=VOYAGER \\ --set sslType=SSL Click here to see the sample output of the above Commnad. NAME: soa-voyager-ingress LAST DEPLOYED: Mon Jul 20 08:20:27 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None Deploy ingress-per-domain using Helm for E2ESSL configuration.\n$ cd ${WORKDIR} $ helm install soa-voyager-ingress charts/ingress-per-domain \\ --namespace soans \\ --values charts/ingress-per-domain/values.yaml \\ --set type=VOYAGER \\ --set sslType=E2ESSL Click here to see the sample output of the above Commnad. NAME: soa-voyager-ingress LAST DEPLOYED: Mon Apr 20 08:20:27 2021 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None For NONSSL access to the Oracle SOA Suite application, get the details of the services deployed by the above ingress:\n$ kubectl describe ingress.voyager.appscode.com/soainfra-voyager -n soans Click here to see the sample output of the services supported by the above deployed ingress. Sample output:\nName: soainfra-voyager Namespace: soans Labels: \u0026lt;none\u0026gt; Annotations: ingress.appscode.com/affinity: cookie ingress.appscode.com/default-timeout: {\u0026#34;connect\u0026#34;: \u0026#34;1800s\u0026#34;, \u0026#34;server\u0026#34;: \u0026#34;1800s\u0026#34;} ingress.appscode.com/stats: true ingress.appscode.com/type: NodePort API Version: voyager.appscode.com/v1beta1 Kind: Ingress Metadata: Creation Timestamp: 2020-07-20T08:20:28Z Generation: 1 Managed Fields: API Version: voyager.appscode.com/v1beta1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:ingress.appscode.com/affinity: f:ingress.appscode.com/default-timeout: f:ingress.appscode.com/stats: f:ingress.appscode.com/type: f:spec: .: f:rules: Manager: Go-http-client Operation: Update Time: 2020-07-20T08:20:28Z Resource Version: 370484 Self Link: /apis/voyager.appscode.com/v1beta1/namespaces/soans/ingresses/soainfra-voyager UID: bb756966-cd7f-40a5-b08c-79f69e2b9440 Spec: Rules: Host: * Http: Node Port: 30305 Paths: Backend: Service Name: soainfra-adminserver Service Port: 7001 Path: /console Backend: Service Name: soainfra-adminserver Service Port: 7001 Path: /em Backend: Service Name: soainfra-adminserver Service Port: 7001 Path: /weblogic/ready Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: / Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: /soa-infra Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: /soa/composer Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: /integration/worklistapp Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ServiceReconcileSuccessful 4m30s voyager-operator Successfully created NodePort Service voyager-soainfra-voyager Normal ConfigMapReconcileSuccessful 4m30s voyager-operator Successfully created ConfigMap voyager-soainfra-voyager Normal RBACSuccessful 4m30s voyager-operator Successfully created ServiceAccount voyager-soainfra-voyager Normal RBACSuccessful 4m30s voyager-operator Successfully created Role voyager-soainfra-voyager Normal RBACSuccessful 4m30s voyager-operator Successfully created RoleBinding voyager-soainfra-voyager Normal DeploymentReconcileSuccessful 4m30s voyager-operator Successfully created HAProxy Deployment voyager-soainfra-voyager Normal StatsServiceReconcileSuccessful 4m30s voyager-operator Successfully created stats Service voyager-soainfra-voyager-stats For SSL access to the Oracle SOA Suite application, get the details of the services by the above deployed ingress:\n$ kubectl describe ingress.voyager.appscode.com/soainfra-voyager -n soans Click here to see all the services configured by the above deployed ingress. Name: soainfra-voyager Namespace: soans Labels: \u0026lt;none\u0026gt; Annotations: ingress.appscode.com/affinity: cookie ingress.appscode.com/default-timeout: {\u0026#34;connect\u0026#34;: \u0026#34;1800s\u0026#34;, \u0026#34;server\u0026#34;: \u0026#34;1800s\u0026#34;} ingress.appscode.com/stats: true ingress.appscode.com/type: NodePort API Version: voyager.appscode.com/v1beta1 Kind: Ingress Metadata: Creation Timestamp: 2020-07-20T08:20:28Z Generation: 1 Managed Fields: API Version: voyager.appscode.com/v1beta1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:ingress.appscode.com/affinity: f:ingress.appscode.com/default-timeout: f:ingress.appscode.com/stats: f:ingress.appscode.com/type: f:spec: .: f:rules: Manager: Go-http-client Operation: Update Time: 2020-07-20T08:20:28Z Resource Version: 370484 Self Link: /apis/voyager.appscode.com/v1beta1/namespaces/soans/ingresses/soainfra-voyager UID: bb756966-cd7f-40a5-b08c-79f69e2b9440 Spec: Frontend Rules: Port: 443 Rules: http-request set-header WL-Proxy-SSL true Rules: Host: * Http: Node Port: 30305 Paths: Backend: Service Name: soainfra-adminserver Service Port: 7001 Path: /console Backend: Service Name: soainfra-adminserver Service Port: 7001 Path : /em Backend: Service Name: soainfra-adminserver Service Port: 7001 Path: /weblogic/ready Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: / Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: /soa-infra Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: /soa/composer Backend: Service Name: soainfra-cluster-soa-cluster Service Port: 8001 Path: /integration/worklistapp Tls: Hosts: * Secret Name: domain1-tls-cert Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ServiceReconcileSuccessful 22s voyager-operator Successfully created NodePort Service voyager-soainfra-voyager Normal ConfigMapReconcileSuccessful 21s voyager-operator Successfully created ConfigMap voyager-soainfra-voyager Normal RBACSuccessful 21s voyager-operator Successfully created ServiceAccount voyager-soainfra-voyager Normal RBACSuccessful 21s voyager-operator Successfully created Role voyager-soainfra-voyager Normal RBACSuccessful 21s voyager-operator Successfully created RoleBinding voyager-soainfra-voyager Normal DeploymentReconcileSuccessful 21s voyager-operator Successfully created HAProxy Deployment voyager-soainfra-voyager Normal StatsServiceReconcileSuccessful 21s voyager-operator Successfully created stats Service voyager-soainfra-voyager-stats For E2ESSL access to the Oracle SOA Suite application, get the details of the services by the above deployed ingress:\n$ kubectl describe ingress.voyager.appscode.com/soainfra-voyager-e2essl-admin -n soans Click here to see all the services configured by the above deployed ingress. Name: soainfra-voyager-e2essl Namespace: soans Labels: app.kubernetes.io/managed-by=Helm Annotations: ingress.appscode.com/affinity: cookie ingress.appscode.com/ssl-passthrough: true ingress.appscode.com/stats: true ingress.appscode.com/type: NodePort meta.helm.sh/release-name: soa-voyager-ingress meta.helm.sh/release-namespace: soans API Version: voyager.appscode.com/v1beta1 Kind: Ingress Metadata: Creation Timestamp: 2021-04-09T07:04:07Z Generation: 1 Managed Fields: API Version: voyager.appscode.com/v1beta1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:ingress.appscode.com/affinity: f:ingress.appscode.com/ssl-passthrough: f:ingress.appscode.com/stats: f:ingress.appscode.com/type: f:meta.helm.sh/release-name: f:meta.helm.sh/release-namespace: f:labels: .: f:app.kubernetes.io/managed-by: f:spec: .: f:rules: f:tls: Manager: Go-http-client Operation: Update Time: 2021-04-09T07:04:07Z Resource Version: 526406 Self Link: /apis/voyager.appscode.com/v1beta1/namespaces/soans/ingresses/soainfra-voyager-e2essl UID: 0d315fa3-893e-4cde-b589-f87f5d5fd8ce Spec: Rules: Host: * Http: Node Port: 30443 Paths: Backend: Service Name: soainfra-adminserver Service Port: 7002 Path: / Tls: Hosts: * Secret Name: domain1-tls-cert Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ServiceReconcileSuccessful 3m16s voyager-operator Successfully created NodePort Service voyager-soainfra-voyager-e2essl Normal ConfigMapReconcileSuccessful 3m16s voyager-operator Successfully created ConfigMap voyager-soainfra-voyager-e2essl Normal RBACSuccessful 3m16s voyager-operator Successfully created ServiceAccount voyager-soainfra-voyager-e2essl Normal RBACSuccessful 3m16s voyager-operator Successfully created Role voyager-soainfra-voyager-e2essl Normal RBACSuccessful 3m16s voyager-operator Successfully created RoleBinding voyager-soainfra-voyager-e2essl Normal DeploymentReconcileSuccessful 3m16s voyager-operator Successfully created HAProxy Deployment voyager-soainfra-voyager-e2essl Normal StatsServiceReconcileSuccessful 3m16s voyager-operator Successfully created stats Service voyager-soainfra-voyager-e2essl-stats To confirm that the load balancer noticed the new ingress and is successfully routing to the domain\u0026rsquo;s server pods, you can send a request to the URL for the \u0026ldquo;WebLogic ReadyApp framework\u0026rdquo; which should return a HTTP 200 status code, as follows:\n$ curl -v http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready * About to connect() to localhost port 30305 (#0) * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 30305 (#0) \u0026gt; GET /weblogic/ready HTTP/1.1 \u0026gt; User-Agent: curl/7.29.0 \u0026gt; Accept: */* \u0026gt; host: *****.com \u0026gt; \u0026lt; HTTP/1.1 200 OK \u0026lt; Content-Length: 0 \u0026lt; Date: Thu, 12 Mar 2020 10:16:43 GMT \u0026lt; Vary: Accept-Encoding \u0026lt; * Connection #0 to host localhost left intact Verify domain application URL access After setting up the Voyager (ingress-based) load balancer, verify that the Oracle SOA Suite domain applications are accessible through the load balancer port 30305 for NONSSL, 30443 for SSL and on ports 30445(admin), 30447(soa) and 30449(osb) for E2ESSL. The application URLs for Oracle SOA Suite domain of type soa are:\n Note: Port 30305 is the LOADBALANCER-Non-SSLPORT and 30443 is LOADBALANCER-SSLPORT.\n NONSSL configuration http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa-infra http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa/composer http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/integration/worklistapp SSL configuration https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/weblogic/ready https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/console https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/em https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/soa-infra https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/soa/composer https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/integration/worklistapp E2ESSL configuration https://${LOADBALANCER-HOSTNAME}:30445/weblogic/ready https://${LOADBALANCER-HOSTNAME}:30445/console https://${LOADBALANCER-HOSTNAME}:30445/em https://${LOADBALANCER-HOSTNAME}:30447/soa-infra https://${LOADBALANCER-HOSTNAME}:30447/soa/composer https://${LOADBALANCER-HOSTNAME}:30447/integration/worklistapp Uninstalling Voyager ingress To uninstall and delete the ingress deployment, enter the following command:\n$ helm delete soa-voyager-ingress -n soans Uninstall Voyager $ helm delete voyager-operator -n voyager " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/voyager/", + "title": "Voyager", + "tags": [], + "description": "Configure the ingress-based Voyager load balancer for Oracle WebCenter Sites domains.", + "content": "Voyager/HAProxy is a popular ingress-based load balancer for production environments. This section provides information about how to install and configure Voyager/HAProxy to load balance Oracle WebCenter Sites domain clusters. You can configure Voyager for access of the application URL.\nFollow these steps to set up Voyager as a load balancer for an Oracle WebCenter Sites domain in a Kubernetes cluster:\n Install the Voyager Load Balancer Configure Voyager to Manage Ingresses Verify that You can Access the Domain URL Install the Voyager Load Balancer See the official installation document and follow step 1 and 2 here.\nConfigure Voyager to Manage Ingresses Create an Ingress for the domain (ingress-per-domain) in the domain namespace, by using the sample Helm chart.\nHere we are using the path based routing for ingress. For detailed instructions about ingress, refer this page.\nFor this update the kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml with appropriate values, sample values are shown below:\n# Copyright 2020, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Default values for ingress-per-domain. # This is a YAML-formatted file. # Declare variables to be passed into your templates. apiVersion: networking.k8s.io/v1beta1 # Load balancer type. Supported values are: TRAEFIK, VOYAGER #type: TRAEFIK type: VOYAGER #type: NGINX # WLS domain as backend to the load balancer wlsDomain: domainUID: wcsitesinfra adminServerName: adminserver adminServerPort: 7001 wcsitesClusterName: wcsites_cluster wcsitesManagedServerPort: 8001 # Voyager specific values voyager: # web port webPort: 30305 # stats port statsPort: 30317 # Ngnix specific values ngnix: #connect timeout connectTimeout: 1800s #read timeout readTimeout: 1800s #send timeout sendTimeout: 1800s Update the kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/templates/voyager-ingress.yaml with the url routes to be load balanced.\nBelow are the ingress rules defined:\nNOTE: These are not the exhausted list of rules. These can be enhanced based on the application urls that needs to be accessed externally.\nBelow rules hold good for domain type WCSITES.\n# Copyright 2020, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. {{- if eq .Values.type \u0026#34;VOYAGER\u0026#34; }} --- apiVersion: voyager.appscode.com/v1beta1 kind: Ingress metadata: name: {{ .Values.wlsDomain.domainUID }}-voyager namespace: {{ .Release.Namespace }} annotations: ingress.appscode.com/type: \u0026#39;NodePort\u0026#39; ingress.appscode.com/stats: \u0026#39;true\u0026#39; ingress.appscode.com/affinity: \u0026#39;cookie\u0026#39; ingress.appscode.com/default-timeout: \u0026#39;{\u0026#34;connect\u0026#34;: \u0026#34;1800s\u0026#34;, \u0026#34;server\u0026#34;: \u0026#34;1800s\u0026#34;}\u0026#39; spec: rules: - host: \u0026#39;*\u0026#39; http: nodePort: {{ .Values.voyager.webPort }} paths: - path: /console backend: serviceName: {{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /em backend: serviceName: {{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} servicePort: {{ .Values.wlsDomain.adminServerPort }} # - path: /wls-exporter # backend: # serviceName: {{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} # servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /weblogic backend: serviceName: {{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /sbconsole backend: serviceName: {{ .Values.wlsDomain.domainUID }}-{{ .Values.wlsDomain.adminServerName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} servicePort: {{ .Values.wlsDomain.adminServerPort }} - path: /sites backend: serviceName: {{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} - path: /cas backend: serviceName: {{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} # - path: /wls-exporter # backend: # serviceName: {{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.wcsitesClusterName | lower | replace \u0026#34;_\u0026#34; \u0026#34;-\u0026#34; }} # servicePort: {{ .Values.wlsDomain.wcsitesManagedServerPort }} --- apiVersion: v1 kind: Service metadata: name: {{ .Values.wlsDomain.domainUID }}-voyager-stats namespace: {{ .Release.Namespace }} spec: type: NodePort ports: - name: client protocol: TCP port: 56789 targetPort: 56789 nodePort: {{ .Values.voyager.statsPort }} selector: origin: voyager origin-name: {{ .Values.wlsDomain.domainUID }}-voyager {{- end }} Install ingress-per-domain using helm.\n Helm Install ingress-per-domain\n $ helm install wcsitesinfra-voyager-ingress kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain --namespace wcsites-ns --values kubernetes/samples/scripts/create-wcsites-domain/ingress-per-domain/values.yaml NAME: wcsitesinfra-ingress LAST DEPLOYED: Fri Jun 19 00:18:50 2020 NAMESPACE: wcsites-ns STATUS: deployed REVISION: 1 TEST SUITE: None To confirm that the load balancer noticed the new Ingress and is successfully routing to the domain\u0026rsquo;s server pods, you can send a request to the URL for the \u0026ldquo;WebLogic ReadyApp framework\u0026rdquo; which should return a HTTP 200 status code, as shown in the example below:\n -bash-4.2$ curl -v http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready * About to connect() to localhost port 30305 (#0) * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 30305 (#0) \u0026gt; GET /weblogic/ready HTTP/1.1 \u0026gt; User-Agent: curl/7.29.0 \u0026gt; Accept: */* \u0026gt; host: *****.com \u0026gt; \u0026lt; HTTP/1.1 200 OK \u0026lt; Content-Length: 0 \u0026lt; Date: Thu, 12 Mar 2020 10:16:43 GMT \u0026lt; Vary: Accept-Encoding \u0026lt; * Connection #0 to host localhost left intact Verify that You can Access the Domain URL After setting up the Voyager loadbalancer, verify that the domain applications are accessible through the loadbalancer port 30305. Through load balancer (Voyager port 30305), the following URLs are available for setting up domains of WebCenter Sites domain types:\nhttp://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-PORT}/sites/version.jsp " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/", + "title": "Patch and upgrade", + "tags": [], + "description": "", + "content": "Patch an existing Oracle SOA Suite image or upgrade the infrastructure, such as upgrading the underlying Kubernetes cluster to a new release and upgrading the WebLogic Kubernetes Operator release.\n Patch an image Create a patched Oracle SOA Suite image using the WebLogic Image Tool.\n Upgrade an operator release Upgrade the WebLogic Kubernetes Operator release to a newer version.\n Upgrade a Kubernetes cluster Upgrade the underlying Kubernetes cluster version in a running SOA Kubernetes environment.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/ocir/", + "title": "Creating an OCIR", + "tags": [], + "description": "Running WebLogic Kubernetes Operator managed Oracle WebCenter Sites domains on OKE", + "content": "Creation of OCIR Push all the required images to OCIR and use from OCIR. Follow the below steps before pushing the images to OCIR\nCreate an \u0026ldquo;Auth token\u0026rdquo; Create an \u0026ldquo;Auth token\u0026rdquo; which will be used as docker password to push/pull images from OCIR Login to Console and navigate to User Settings, which is in the drop down under your OCI username in the top nav On User Details page, select \u0026ldquo;Auth Tokens\u0026rdquo; in the left nav and then Click the \u0026ldquo;Generate Token\u0026rdquo; button: Enter a Name and Click \u0026ldquo;Generate Token\u0026rdquo; Token will get generated Copy the generated token. NOTE: It will only be displayed this one time, and you will need to copy it to a secure place for further use. NOTE: It will only be displayed this one time, and you will need to copy it to a secure place for further use. Get the OCIR name Get the OCIR Repo Name by Log in to Oracle Cloud Infrastructure Console. In he OCI Console, open the Navigation menu. Under Solutions and Platform, go to Developer Services and click Registry (OCIR). Using the OCIR Using the Docker CLI to login to OCIR ( for phoenix : phx.ocir.io , ashburn: iad.ocir.io etc) a. docker login phx.ocir.io b. When promoted for username enter docker username as OCIR RepoName/oci username ( eg., axcmmdmzqtqb/oracleidentitycloudservice/myemailid@oracle.com) c. When prompted for your password, enter the generated Auth Token i.e p[3k;pYePDSTD:-(LlAS Now you can tag the images and push to OCIR.\n$ docker login phx.ocir.io $ username - axcmmdmzqtqb/oracleidentitycloudservice/myemailid@oracle.com $ password - p[3k;pYePDSTD:-(LlAS (Token Generated for OCIR using user setting) This has to be done on Bastion Node for all the images.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/", + "title": "Upgrade and Patch ", + "tags": [], + "description": "Pre-requisites for setting up WebCenter Sites domains with WebLogic Kubernetes Operator", + "content": "Patch an existing Oracle WebCenter Sites image or upgrade the infrastructure, such as upgrading the underlying Kubernetes cluster to a new release and upgrading the WebLogic Kubernetes Operator release.\n Patch a Oracle WebCenter Sites product Docker image Upgrade the underlying Oracle WebCenter Sites product image in a running Oracle WebCenter Sites Kubernetes environment.\n Upgrade an operator release Upgrade the WebLogic Kubernetes Operator release to a newer version.\n Upgrade a Kubernetes cluster Upgrade the underlying Kubernetes cluster version in a running Oracle WebCenter Sites Kubernetes environment.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/apache/", + "title": "Apache web tier", + "tags": [], + "description": "Configure the Apache web tier load balancer for Oracle SOA Suite domains.", + "content": "This section provides information about how to install and configure the Apache web tier to load balance Oracle SOA Suite domain clusters. You can configure Apache web tier for non-SSL and SSL termination access of the application URL.\nFollow these steps to set up the Apache web tier as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster:\n Build the Apache web tier image Create the Apache plugin configuration file Prepare the certificate and private key Install the Apache web tier Helm chart Verify domain application URL access Uninstall Apache web tier Build the Apache web tier image Refer to the sample, to build the Apache web tier Docker image.\nCreate the Apache plugin configuration file The configuration file named custom_mod_wl_apache.conf should have all the URL routing rules for the Oracle SOA Suite applications deployed in the domain that needs to be accessible externally. Update this file with values based on your environment. The file content is similar to below.\n Click here to see the sample content of the configuration file custom_mod_wl_apache.conf for soa domain # Copyright (c) 2020 Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # \u0026lt;IfModule mod_weblogic.c\u0026gt; WebLogicHost \u0026lt;WEBLOGIC_HOST\u0026gt; WebLogicPort 7001 \u0026lt;/IfModule\u0026gt; # Directive for weblogic admin Console deployed on WebLogic Admin Server \u0026lt;Location /console\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; \u0026lt;Location /em\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; \u0026lt;Location /servicebus\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; \u0026lt;Location /lwpfconsole\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; \u0026lt;Location /xbusrouting\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; \u0026lt;Location /xbustransform\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; \u0026lt;Location /weblogic/ready\u0026gt; SetHandler weblogic-handler WebLogicHost soainfra-adminserver WebLogicPort 7001 \u0026lt;/Location\u0026gt; # Directive for all applications deployed on weblogic cluster with a prepath defined by LOCATION variable. # For example, if the LOCATION is set to \u0026#39;/weblogic\u0026#39;, all applications deployed on the cluster can be accessed via # http://myhost:myport/weblogic/application_end_url # where \u0026#39;myhost\u0026#39; is the IP of the machine that runs the Apache web tier, and # \u0026#39;myport\u0026#39; is the port that the Apache web tier is publicly exposed to. # Note that LOCATION cannot be set to \u0026#39;/\u0026#39; unless this is the only Location module configured. \u0026lt;Location /soa-infra\u0026gt; WLSRequest On WebLogicCluster soainfra-cluster-soa-cluster:8001 PathTrim /weblogic1 \u0026lt;/Location\u0026gt; \u0026lt;Location /soa/composer\u0026gt; WLSRequest On WebLogicCluster soainfra-cluster-soa-cluster:8001 PathTrim /weblogic1 \u0026lt;/Location\u0026gt; \u0026lt;Location /integration/worklistapp\u0026gt; WLSRequest On WebLogicCluster soainfra-cluster-soa-cluster:8001 PathTrim /weblogic1 \u0026lt;/Location\u0026gt; \u0026lt;Location /ess\u0026gt; WLSRequest On WebLogicCluster soainfra-cluster-soa-cluster:8001 PathTrim /weblogic1 \u0026lt;/Location\u0026gt; \u0026lt;Location /EssHealthCheck\u0026gt; WLSRequest On WebLogicCluster soainfra-cluster-soa-cluster:8001 PathTrim /weblogic1 \u0026lt;/Location\u0026gt; # Directive for all application deployed on weblogic cluster with a prepath defined by LOCATION2 variable # For example, if the LOCATION2 is set to \u0026#39;/weblogic2\u0026#39;, all applications deployed on the cluster can be accessed via # http://myhost:myport/weblogic2/application_end_url # where \u0026#39;myhost\u0026#39; is the IP of the machine that runs the Apache web tier, and # \u0026#39;myport\u0026#39; is the port that the Apache webt ier is publicly exposed to. #\u0026lt;Location /weblogic2\u0026gt; #WLSRequest On #WebLogicCluster domain2-cluster-cluster-1:8021 #PathTrim /weblogic2 #\u0026lt;/Location\u0026gt; Create a PV and PVC (pv-claim-name) that can be used to store the custom_mod_wl_apache.conf. Refer to the Sample for creating a PV or PVC.\n Prepare the certificate and private key (For the SSL termination configuration only) Run the following commands to generate your own certificate and private key using openssl.\n$ cd ${WORKDIR} $ cd charts/apache-samples/custom-sample $ export VIRTUAL_HOST_NAME=WEBLOGIC_HOST $ export SSL_CERT_FILE=WEBLOGIC_HOST.crt $ export SSL_CERT_KEY_FILE=WEBLOGIC_HOST.key $ sh certgen.sh NOTE: Replace WEBLOGIC_HOST with the host name on which Apache web tier is to be installed.\n Click here to see the output of the certifcate generation $ls certgen.sh custom_mod_wl_apache.conf custom_mod_wl_apache.conf_orig input.yaml README.md $ sh certgen.sh Generating certs for WEBLOGIC_HOST Generating a 2048 bit RSA private key ........................+++ .......................................................................+++ unable to write \u0026#39;random state\u0026#39; writing new private key to \u0026#39;apache-sample.key\u0026#39; ----- $ ls certgen.sh custom_mod_wl_apache.conf_orig WEBLOGIC_HOST.info config.txt input.yaml WEBLOGIC_HOST.key custom_mod_wl_apache.conf WEBLOGIC_HOST.crt README.md Prepare input values for the Apache web tier Helm chart.\nRun the following commands to prepare the input value file for the Apache web tier Helm chart.\n$ base64 -i ${SSL_CERT_FILE} | tr -d \u0026#39;\\n\u0026#39; $ base64 -i ${SSL_CERT_KEY_FILE} | tr -d \u0026#39;\\n\u0026#39; $ touch input.yaml Update the input parameters file, charts/apache-samples/custom-sample/input.yaml.\n Click here to see the snapshot of the sample input.yaml file $ cat apache-samples/custom-sample/input.yaml # Use this to provide your own Apache web tier configuration as needed; simply define this # Persistence Volume which contains your own custom_mod_wl_apache.conf file. persistentVolumeClaimName: \u0026lt;pv-claim-name\u0026gt; # The VirtualHostName of the Apache HTTP server. It is used to enable custom SSL configuration. virtualHostName: \u0026lt;WEBLOGIC_HOST\u0026gt; # The customer-supplied certificate to use for Apache web tier SSL configuration. # The value must be a string containing a base64 encoded certificate. Run following command to get it. # base64 -i ${SSL_CERT_FILE} | tr -d \u0026#39;\\n\u0026#39; customCert: \u0026lt;cert_data\u0026gt; # The customer-supplied private key to use for Apache web tier SSL configuration. # The value must be a string containing a base64 encoded key. Run following command to get it. # base64 -i ${SSL_KEY_FILE} | tr -d \u0026#39;\\n\u0026#39; customKey: \u0026lt;key_data\u0026gt; Install the Apache web tier Helm chart Install the Apache web tier Helm chart to the domain soans namespace with the specified input parameters:\n$ cd ${WORKDIR}/charts $ kubectl create namespace apache-webtier $ helm install apache-webtier --values apache-samples/custom-sample/input.yaml --namespace soans apache-webtier --set image=oracle/apache:12.2.1.3 Check the status of the Apache web tier:\n$ kubectl get all -n soans | grep apache Sample output of the status of the Apache web tier:\npod/apache-webtier-apache-webtier-65f69dc6bc-zg5pj 1/1 Running 0 22h service/apache-webtier-apache-webtier NodePort 10.108.29.98 \u0026lt;none\u0026gt; 80:30305/TCP,4433:30443/TCP 22h deployment.apps/apache-webtier-apache-webtier 1/1 1 1 22h replicaset.apps/apache-webtier-apache-webtier-65f69dc6bc 1 1 1 22h Verify domain application URL access After the Apache web tier load balancer is running, verify that the domain applications are accessible through the load balancer port 30305/30443. The application URLs for domain of type soa are:\n Note: Port 30305 is the LOADBALANCER-Non-SSLPORT and port 30443 is LOADBALANCER-SSLPORT.\n NONSSL configuration http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/weblogic/ready http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/console http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/em http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa-infra http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/soa/composer http://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-Non-SSLPORT}/integration/worklistapp SSL configuration https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/weblogic/ready https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/console https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/em https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/soa-infra https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/soa/composer https://${LOADBALANCER-HOSTNAME}:${LOADBALANCER-SSLPORT}/integration/worklistapp Uninstall Apache web tier $ helm delete apache-webtier -n soans " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/elasticsearch-integration/", + "title": "Elasticsearch integration for logs", + "tags": [], + "description": "Monitor an Oracle WebCenter Sites domain and publish the WebLogic Server logs to Elasticsearch.", + "content": "1. Integrate Elasticsearch to WebLogic Kubernetes Operator For reference information, see Elasticsearch integration for the WebLogic Kubernetes Operator.\nTo enable elasticsearch integration, you must edit file kubernetes/charts/weblogic-operator/values.yaml before deploying the WebLogic Kubernetes Operator.\n# elkIntegrationEnabled specifies whether or not ELK integration is enabled. elkIntegrationEnabled: true # logStashImage specifies the Docker image containing logstash. # This parameter is ignored if 'elkIntegrationEnabled' is false. logStashImage: \u0026quot;logstash:6.6.0\u0026quot; # elasticSearchHost specifies the hostname of where Elasticsearch is running. # This parameter is ignored if 'elkIntegrationEnabled' is false. elasticSearchHost: \u0026quot;elasticsearch.default.svc.cluster.local\u0026quot; # elasticSearchPort specifies the port number of where Elasticsearch is running. # This parameter is ignored if 'elkIntegrationEnabled' is false. elasticSearchPort: 9200\rAfter you\u0026rsquo;ve deployed WebLogic Kubernetes Operator and made the above changes, the weblogic-operator pod will have additional Logstash container. The Logstash container will push the weblogic-operator logs to the configured Elasticsearch server.\n2. Publish WebLogic Server and WebCenter Sites Logs using Logstash Pod You can publish the WebLogic Server logs to Elasticsearch Server using Logstash pod. This Logstash pod must have access to the shared domain home. For the WebCenter Sites wcsitesinfra, you can use the persistent volume of the domain home in the Logstash pod. The steps to create the Logstash pod are as follows:\nSample Logstash configuration file is located at kubernetes/samples/scripts/create-wcsites-domain/utils/logstash/logstash.conf\n$ vi kubernetes/samples/scripts/create-wcsites-domain/utils/logstash/logstash.conf input {\rfile {\rpath =\u0026gt; \u0026quot;/u01/oracle/user_projects/logs/wcsitesinfra/adminserver.log\u0026quot;\rstart_position =\u0026gt; beginning\r}\rfile {\rpath =\u0026gt; \u0026quot;/u01/oracle/user_projects/logs/wcsitesinfra/wcsites-server*.log\u0026quot;\rstart_position =\u0026gt; beginning\r}\rfile {\rpath =\u0026gt; \u0026quot;/u01/oracle/user_projects/logs/wcsitesinfra/adminserver.out\u0026quot;\rstart_position =\u0026gt; beginning\r}\rfile {\rpath =\u0026gt; \u0026quot;/u01/oracle/user_projects/logs/wcsitesinfra/wcsites-server*.out\u0026quot;\rstart_position =\u0026gt; beginning\r}\rfile {\rpath =\u0026gt; \u0026quot;/u01/oracle/user_projects/domains/wcsitesinfra/servers/**/logs/sites.log\u0026quot;\rstart_position =\u0026gt; beginning\r}\rfile {\rpath =\u0026gt; \u0026quot;/u01/oracle/user_projects/domains/wcsitesinfra/servers/**/logs/cas.log\u0026quot;\rstart_position =\u0026gt; beginning\r}\r}\rfilter {\rgrok {\rmatch =\u0026gt; [ \u0026quot;message\u0026quot;, \u0026quot;\u0026lt;%{DATA:log_timestamp}\u0026gt; \u0026lt;%{WORD:log_level}\u0026gt; \u0026lt;%{WORD:thread}\u0026gt; \u0026lt;%{HOSTNAME:hostname}\u0026gt; \u0026lt;%{HOSTNAME:servername}\u0026gt; \u0026lt;%{DATA:timer}\u0026gt; \u0026lt;\u0026lt;%{DATA:kernel}\u0026gt;\u0026gt; \u0026lt;\u0026gt; \u0026lt;%{DATA:uuid}\u0026gt; \u0026lt;%{NUMBER:timestamp}\u0026gt; \u0026lt;%{DATA:misc}\u0026gt; \u0026lt;%{DATA:log_number}\u0026gt; \u0026lt;%{DATA:log_message}\u0026gt;\u0026quot; ]\r}\r}\routput {\relasticsearch {\rhosts =\u0026gt; [\u0026quot;elasticsearch.default.svc.cluster.local:9200\u0026quot;]\r}\r}\rHere ** means that all sites.log and cas.log from any servers under wcsitesinfra will be pushed to Logstash.\n$ kubectl cp kubernetes/samples/scripts/create-wcsites-domain/utils/logstash/logstash.conf wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/logs/logstash.conf Get the persistent volume details of the domain home of the WebLogic Server(s). The following command will list the persistent volume details in the namespace - \u0026ldquo;wcsites-ns\u0026rdquo;:\n$ kubectl get pv -n wcsites-ns NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE wcsitesinfra-domain-pv 10Gi RWX Retain Bound wcsites-ns/wcsitesinfra-domain-pvc wcsitesinfra-domain-storage-class 5d21h Sample Logstash deployment is located at kubernetes/samples/scripts/create-wcsites-domain/utils/logstash/logstash.yaml for Logstash pod. The mounted persistent volume of the domain home will provide access to the WebLogic Server logs to Logstash pod.\napiVersion: apps/v1beta1\rkind: Deployment\rmetadata:\rname: logstash-wls\rnamespace: wcsites-ns\rspec:\rtemplate: # create pods using pod definition in this template\rmetadata:\rlabels:\rk8s-app: logstash-wls\rspec:\rvolumes:\r- name: weblogic-domain-storage-volume\rpersistentVolumeClaim:\rclaimName: wcsitesinfra-domain-pvc\r- name: shared-logs\remptyDir: {}\rcontainers:\r- name: logstash\rimage: logstash:6.6.0\rcommand: [\u0026quot;/bin/sh\u0026quot;]\rargs: [\u0026quot;/usr/share/logstash/bin/logstash\u0026quot;, \u0026quot;-f\u0026quot;, \u0026quot;/u01/oracle/user_projects/logs/logstash.conf\u0026quot;]\rimagePullPolicy: IfNotPresent\rvolumeMounts:\r- mountPath: /u01/oracle/user_projects\rname: weblogic-domain-storage-volume\r- name: shared-logs\rmountPath: /shared-logs\rports:\r- containerPort: 5044\rname: logstash\rAfter you have created the Logstash deployment yaml and Logstash configuration file, deploy Logstash using following command:\n$ kubectl create -f kubernetes/samples/scripts/create-wcsites-domain/utils/logstash/logstash.yaml 3. Test the Deployment of Elasticsearch and Kibana The WebLogic Operator also provides a sample deployment of Elasticsearch and Kibana for testing purpose. You can deploy Elasticsearch and Kibana on the Kubernetes cluster as shown below:\n$ kubectl create -f kubernetes/samples/scripts/elasticsearch-and-kibana/elasticsearch_and_kibana.yaml Get the Kibana dashboard port information as shown below: Wait for pods to start:\n-bash-4.2$ kubectl get pods -w NAME READY STATUS RESTARTS AGE elasticsearch-8bdb7cf54-mjs6s 1/1 Running 0 4m3s kibana-dbf8964b6-n8rcj 1/1 Running 0 4m3s -bash-4.2$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE elasticsearch ClusterIP 10.100.11.154 \u0026lt;none\u0026gt; 9200/TCP,9300/TCP 4m32s kibana NodePort 10.97.205.0 \u0026lt;none\u0026gt; 5601:31884/TCP 4m32s kubernetes ClusterIP 10.96.0.1 \u0026lt;none\u0026gt; 443/TCP 71d You can access the Kibana dashboard at http://mycompany.com:kibana-nodeport/. In our example, the node port would be 31884.\nCreate an Index Pattern in Kibana Create an index pattern logstash* in Kibana \u0026gt; Management. After the servers are started, you will see the log data in the Kibana dashboard:\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/monitoring-soa-domains/", + "title": "Monitor a domain and publish logs", + "tags": [], + "description": "Monitor an Oracle SOA Suite domain and publish the WebLogic Server logs to Elasticsearch.", + "content": "After the Oracle SOA Suite domain is set up, you can:\n Monitor the Oracle SOA Suite instance using Prometheus and Grafana Publish WebLogic Server logs into Elasticsearch Publish SOA server diagnostics logs into Elasticsearch Monitor the Oracle SOA Suite instance using Prometheus and Grafana Using the WebLogic Monitoring Exporter you can scrape runtime information from a running Oracle SOA Suite instance and monitor them using Prometheus and Grafana.\nPrerequisite: Before setting up monitoring, make sure that Prometheus and Grafana are deployed on the Kubernetes cluster.\nDeploy Prometheus and Grafana Refer to the compatibility matrix of Kube Prometheus and clone the release version of the kube-prometheus repository according to the Kubernetes version of your cluster.\n Clone the kube-prometheus repository:\n$ git clone https://github.com/coreos/kube-prometheus.git Change to folder kube-prometheus and enter the following commands to create the namespace and CRDs, and then wait for their availability before creating the remaining resources:\n$ cd kube-prometheus $ kubectl create -f manifests/setup $ until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo \u0026quot;\u0026quot;; done $ kubectl create -f manifests/ kube-prometheus requires all nodes in the Kubernetes cluster to be labeled with kubernetes.io/os=linux. If any node is not labeled with this, then you need to label it using the following command:\n$ kubectl label nodes --all kubernetes.io/os=linux Enter the following commands to provide external access for Grafana, Prometheus, and Alertmanager:\n$ kubectl patch svc grafana -n monitoring --type=json -p '[{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/type\u0026quot;, \u0026quot;value\u0026quot;: \u0026quot;NodePort\u0026quot; },{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/ports/0/nodePort\u0026quot;, \u0026quot;value\u0026quot;: 32100 }]' $ kubectl patch svc prometheus-k8s -n monitoring --type=json -p '[{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/type\u0026quot;, \u0026quot;value\u0026quot;: \u0026quot;NodePort\u0026quot; },{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/ports/0/nodePort\u0026quot;, \u0026quot;value\u0026quot;: 32101 }]' $ kubectl patch svc alertmanager-main -n monitoring --type=json -p '[{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/type\u0026quot;, \u0026quot;value\u0026quot;: \u0026quot;NodePort\u0026quot; },{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/ports/0/nodePort\u0026quot;, \u0026quot;value\u0026quot;: 32102 }]' Note:\n 32100 is the external port for Grafana 32101 is the external port for Prometheus 32102 is the external port for Alertmanager Set up monitoring Follow these steps to set up monitoring for an Oracle SOA Suite instance. For more details on WebLogic Monitoring Exporter, see here.\nPublish WebLogic Server logs into Elasticsearch You can publish the WebLogic Server logs to Elasticsearch using the WebLogic Logging exporter and interact with them in Kibana. See Publish logs to Elasticsearch.\nWebLogic Server logs can also be published to Elasticsearch using Fluentd. See Fluentd configuration steps.\nPublish SOA server diagnostics logs into Elasticsearch This section shows you how to publish diagnostics logs to Elasticsearch and view them in Kibana. For publishing operator logs, see this sample.\nPrerequisites If you have not already set up Elasticsearch and Kibana for logs collection, refer this document and complete the setup.\nPublish to Elasticsearch The Diagnostics or other logs can be pushed to Elasticsearch server using logstash pod. The logstash pod should have access to the shared domain home or the log location. In case of the Oracle SOA Suite domain, the persistent volume of the domain home can be used in the logstash pod. The steps to create the logstash pod are,\n Get Domain home persistence volume claim details of the domain home of the Oracle SOA Suite domain. The following command will list the persistent volume claim details in the namespace - soans. In the example below the persistent volume claim is soainfra-domain-pvc:\n$ kubectl get pvc -n soans Sample output:\nNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE soainfra-domain-pvc Bound soainfra-domain-pv 10Gi RWX soainfra-domain-storage-class xxd Create logstash configuration file (logstash.conf). Below is a sample logstash configuration to push diagnostic logs of all servers available at DOMAIN_HOME/servers/\u0026lt;server_name\u0026gt;/logs/-diagnostic.log:\ninput { file { path =\u0026gt; \u0026quot;/u01/oracle/user_projects/domains/soainfra/servers/**/logs/*-diagnostic.log\u0026quot; start_position =\u0026gt; beginning } } filter { grok { match =\u0026gt; [ \u0026quot;message\u0026quot;, \u0026quot;\u0026lt;%{DATA:log_timestamp}\u0026gt; \u0026lt;%{WORD:log_level}\u0026gt; \u0026lt;%{WORD:thread}\u0026gt; \u0026lt;%{HOSTNAME:hostname}\u0026gt; \u0026lt;%{HOSTNAME:servername}\u0026gt; \u0026lt;%{DATA:timer}\u0026gt; \u0026lt;\u0026lt;%{DATA:kernel}\u0026gt;\u0026gt; \u0026lt;\u0026gt; \u0026lt;%{DATA:uuid}\u0026gt; \u0026lt;%{NUMBER:timestamp}\u0026gt; \u0026lt;%{DATA:misc}\u0026gt; \u0026lt;%{DATA:log_number}\u0026gt; \u0026lt;%{DATA:log_message}\u0026gt;\u0026quot; ] } } output { elasticsearch { hosts =\u0026gt; [\u0026quot;elasticsearch.default.svc.cluster.local:9200\u0026quot;] } } Copy the logstash.conf into say /u01/oracle/user_projects/domains so that it can be used for logstash deployment, using Administration Server pod ( For example soainfra-adminserver pod in namespace soans):\n$ kubectl cp logstash.conf soans/soainfra-adminserver:/u01/oracle/user_projects/domains --namespace soans Create deployment YAML (logstash.yaml) for logstash pod using the domain home persistence volume claim. Make sure to point the logstash configuration file to correct location ( For example: we copied logstash.conf to /u01/oracle/user_projects/domains/logstash.conf) and also correct domain home persistence volume claim. Below is a sample logstash deployment YAML:\napiVersion: apps/v1 kind: Deployment metadata: name: logstash-soa namespace: soans spec: selector: matchLabels: app: logstash-soa template: # create pods using pod definition in this template metadata: labels: app: logstash-soa spec: volumes: - name: soainfra-domain-storage-volume persistentVolumeClaim: claimName: soainfra-domain-pvc - name: shared-logs emptyDir: {} containers: - name: logstash image: logstash:6.6.0 command: [\u0026quot;/bin/sh\u0026quot;] args: [\u0026quot;/usr/share/logstash/bin/logstash\u0026quot;, \u0026quot;-f\u0026quot;, \u0026quot;/u01/oracle/user_projects/domains/logstash.conf\u0026quot;] imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /u01/oracle/user_projects name: soainfra-domain-storage-volume - name: shared-logs mountPath: /shared-logs ports: - containerPort: 5044 name: logstash Deploy logstash to start publish logs to Elasticsearch:\n$ kubectl create -f logstash.yaml Now, you can view the diagnostics logs using Kibana with index pattern \u0026ldquo;logstash-*\u0026rdquo;.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/adminguide/weblogic-logging-exporter-setup/", + "title": "Publish logs to Elasticsearch", + "tags": [], + "description": "Monitor an Oracle WebCenter Sites domain and publish the WebLogic Server logs to Elasticsearch.", + "content": "The WebLogic Logging Exporter adds a log event handler to WebLogic Server. WebLogic Server logs can be pushed to Elasticsearch in Kubernetes directly by using the Elasticsearch REST API. For more details, see to the WebLogic Logging Exporter project.\nThis sample shows you how to publish WebLogic Server logs to Elasticsearch and view them in Kibana. For publishing operator logs, see this sample.\nPrerequisites This document assumes that you have already set up Elasticsearch and Kibana for logs collection. If you have not, please see this document.\n Download the WebLogic Logging Exporter binaries The pre-built binaries are available on the WebLogic Logging Exporter Releases page.\nDownload:\n weblogic-logging-exporter-1.0.0.jar from the Releases page. snakeyaml-1.25.jar from Maven Central. These identifiers are used in the sample commands in this document.\n wcsites-ns: WebCenter Sites domain namespace wcsitesinfra: domainUID wcsitesinfra-adminserver: Administration Server pod name Copy the JAR Files to the WebLogic Domain Home Copy the weblogic-logging-exporter-1.0.0.jar and snakeyaml-1.25.jar files to the domain home directory in the Administration Server pod.\n$ kubectl cp \u0026lt;file-to-copy\u0026gt; \u0026lt;namespace\u0026gt;/\u0026lt;Administration-Server-pod\u0026gt;:\u0026lt;domainhome\u0026gt; $ kubectl cp snakeyaml-1.25.jar wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/ $ kubectl cp weblogic-logging-exporter-1.0.0.jar wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/ Add a Startup Class to the Domain Configuration In the WebLogic Server Administration Console, in the left navigation pane, expand Environment, and then select Startup and Shutdown Classes.\n Add a new startup class. You may choose any descriptive name, however, the class name must be weblogic.logging.exporter.Startup.\n Target the startup class to each server from which you want to export logs.\n In your /u01/oracle/user_projects/domains/wcsitesinfra/config/config.xml file, this update should look similar to the following example:\n$ kubectl exec -it wcsitesinfra-adminserver -n wcsites-ns cat /u01/oracle/user_projects/domains/wcsitesinfra/config/config.xml \u0026lt;startup-class\u0026gt; \u0026lt;name\u0026gt;weblogic-logging-exporter\u0026lt;/name\u0026gt; \u0026lt;target\u0026gt;AdminServer,wcsites_cluster\u0026lt;/target\u0026gt; \u0026lt;class-name\u0026gt;weblogic.logging.exporter.Startup\u0026lt;/class-name\u0026gt; \u0026lt;/startup-class\u0026gt; Update the WebLogic Server CLASSPATH Copy the setDomainEnv.sh file from the pod to a local folder:\n$ kubectl cp wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/bin/setDomainEnv.sh $PWD/setDomainEnv.sh tar: Removing leading `/' from member names Ignore exception: tar: Removing leading '/' from member names\n Update the server class path in setDomainEnv.sh:\nCLASSPATH=/u01/oracle/user_projects/domains/wcsitesinfra/weblogic-logging-exporter-1.0.0.jar:/u01/oracle/user_projects/domains/wcsitesinfra/snakeyaml-1.25.jar:${CLASSPATH} export CLASSPATH Copy back the modified setDomainEnv.sh file to the pod:\n$ kubectl cp setDomainEnv.sh wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/bin/setDomainEnv.sh ``\n Create a Configuration File for the WebLogic Logging Exporter Specify the Elasticsearch server host and port number in file kubernetes/samples/scripts/create-wcsites-domain/utils/weblogic-logging-exporter/WebLogicLoggingExporter.yaml:\nExample:\nweblogicLoggingIndexName: wls publishHost: elasticsearch.default.svc.cluster.local publishPort: 9200 domainUID: wcsitesinfra weblogicLoggingExporterEnabled: true weblogicLoggingExporterSeverity: TRACE weblogicLoggingExporterBulkSize: 1 Copy the WebLogicLoggingExporter.yaml file to the domain home directory in the WebLogic Administration Server pod:\n$ kubectl cp kubernetes/samples/scripts/create-wcsites-domain/utils/weblogic-logging-exporter/WebLogicLoggingExporter.yaml wcsites-ns/wcsitesinfra-adminserver:/u01/oracle/user_projects/domains/wcsitesinfra/config/ Edit the wcsites ingress to enable wls-logging-exporter (Only if you are using Yoyager load-balancer) By default paths for wls-exporter are commented in ingress template. In order to expose the wls-exporter end-point externally, wcsites ingress must be edited and needs to be re-applied (if necessary). (See Using Voyager Loadbalacer)\nRestart All the Servers in the Domain To restart the servers, stop and then start them using the following commands:\nTo stop the servers:\n$ kubectl patch domain wcsitesinfra -n wcsites-ns --type='json' -p='[{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/serverStartPolicy\u0026quot;, \u0026quot;value\u0026quot;: \u0026quot;NEVER\u0026quot; }]' To start the servers:\n$ kubectl patch domain wcsitesinfra -n wcsites-ns --type='json' -p='[{\u0026quot;op\u0026quot;: \u0026quot;replace\u0026quot;, \u0026quot;path\u0026quot;: \u0026quot;/spec/serverStartPolicy\u0026quot;, \u0026quot;value\u0026quot;: \u0026quot;IF_NEEDED\u0026quot; }]' After all the servers are restarted, see their server logs to check that the weblogic-logging-exporter class is called, as shown below:\n======================= WebLogic Logging Exporter Startup class called Reading configuration from file name: /u01/oracle/user_projects/domains/wcsitesinfra/config/WebLogicLoggingExporter.yaml Config{weblogicLoggingIndexName='wls', publishHost='domain.host.com', publishPort=9200, weblogicLoggingExporterSeverity='Notice', weblogicLoggingExporterBulkSize='2', enabled=true, weblogicLoggingExporterFilters=FilterConfig{expression='NOT(MSGID = 'BEA-000449')', servers=[]}], domainUID='wcsitesinfra'} Create an Index Pattern in Kibana Create an index pattern wls* in Kibana \u0026gt; Management. After the servers are started, you will see the log data in the Kibana dashboard:\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/create-or-update-image/", + "title": "Create or update an image", + "tags": [], + "description": "Create or update an Oracle SOA Suite Docker image used for deploying Oracle SOA Suite domains. An Oracle SOA Suite Docker image can be created using the WebLogic Image Tool or using the Dockerfile approach.", + "content": "If you have access to the My Oracle Support (MOS), and there is a need to build a new image with a patch (bundle or interim), it is recommended to use the WebLogic Image Tool to build an Oracle SOA Suite image for production deployments.\n Create or update an Oracle SOA Suite Docker image using the WebLogic Image Tool Set up the WebLogic Image Tool Create an image Update an image Create an Oracle SOA Suite Docker image using Dockerfile Create or update an Oracle SOA Suite Docker image using the WebLogic Image Tool Using the WebLogic Image Tool, you can create a new Oracle SOA Suite Docker image (can include patches as well) or update an existing image with one or more patches (bundle patch and interim patches).\n Recommendations:\n Use create for creating a new Oracle SOA Suite Docker image either: without any patches or, containing the Oracle SOA Suite binaries, bundle patch and interim patches. This is the recommended approach if you have access to the Oracle SOA Suite patches because it optimizes the size of the image. Use update for patching an existing Oracle SOA Suite Docker image with a single interim patch. Note that the patched image size may increase considerably due to additional image layers introduced by the patch application tool. Set up the WebLogic Image Tool Prerequisites Set up the WebLogic Image Tool Validate setup WebLogic Image Tool build directory WebLogic Image Tool cache Set up additional build scripts Prerequisites Verify that your environment meets the following prerequisites:\n Docker client and daemon on the build machine, with minimum Docker version 18.03.1.ce. Bash version 4.0 or later, to enable the command complete feature. JAVA_HOME environment variable set to the appropriate JDK location. Set up the WebLogic Image Tool To set up the WebLogic Image Tool:\n Create a working directory and change to it. In these steps, this directory is imagetool-setup.\n$ mkdir imagetool-setup $ cd imagetool-setup Download the latest version of the WebLogic Image Tool from the releases page.\n Unzip the release ZIP file to the imagetool-setup directory.\n Execute the following commands to set up the WebLogic Image Tool on a Linux environment:\n$ cd imagetool-setup/imagetool/bin $ source setup.sh Validate setup To validate the setup of the WebLogic Image Tool:\n Enter the following command to retrieve the version of the WebLogic Image Tool:\n$ imagetool --version Enter imagetool then press the Tab key to display the available imagetool commands:\n$ imagetool \u0026lt;TAB\u0026gt; cache create help rebase update WebLogic Image Tool build directory The WebLogic Image Tool creates a temporary Docker context directory, prefixed by wlsimgbuilder_temp, every time the tool runs. Under normal circumstances, this context directory will be deleted. However, if the process is aborted or the tool is unable to remove the directory, it is safe for you to delete it manually. By default, the WebLogic Image Tool creates the Docker context directory under the user\u0026rsquo;s home directory. If you prefer to use a different directory for the temporary context, set the environment variable WLSIMG_BLDDIR:\n$ export WLSIMG_BLDDIR=\u0026#34;/path/to/buid/dir\u0026#34; WebLogic Image Tool cache The WebLogic Image Tool maintains a local file cache store. This store is used to look up where the Java, WebLogic Server installers, and WebLogic Server patches reside in the local file system. By default, the cache store is located in the user\u0026rsquo;s $HOME/cache directory. Under this directory, the lookup information is stored in the .metadata file. All automatically downloaded patches also reside in this directory. You can change the default cache store location by setting the environment variable WLSIMG_CACHEDIR:\n$ export WLSIMG_CACHEDIR=\u0026#34;/path/to/cachedir\u0026#34; Set up additional build scripts Creating an Oracle SOA Suite Docker image using the WebLogic Image Tool requires additional container scripts for Oracle SOA Suite domains.\n Clone the docker-images repository to set up those scripts. In these steps, this directory is DOCKER_REPO:\n$ cd imagetool-setup $ git clone https://github.com/oracle/docker-images.git Copy the additional WebLogic Image Tool build files from the operator source repository to the imagetool-setup location:\n$ mkdir -p imagetool-setup/docker-images/OracleSOASuite/imagetool/12.2.1.4.0 $ cd imagetool-setup/docker-images/OracleSOASuite/imagetool/12.2.1.4.0 $ cp -rf ${WORKDIR}/imagetool-scripts/* . Note: If you want to create the image continue with the following steps, otherwise to update the image see update an image.\n Create an image After setting up the WebLogic Image Tool and required build scripts, follow these steps to use the WebLogic Image Tool to create a new Oracle SOA Suite Docker image.\nDownload the Oracle SOA Suite installation binaries and patches You must download the required Oracle SOA Suite installation binaries and patches as listed below from the Oracle Software Delivery Cloud and save them in a directory of your choice. In these steps, this directory is download location.\nThe installation binaries and patches required for release 21.3.2 are:\n JDK:\n jdk-8u301-linux-x64-24315225.tar.gz Fusion Middleware Infrastructure installer:\n fmw_12.2.1.4.0_infrastructure.jar Oracle SOA Suite installers:\n fmw_12.2.1.4.0_soa.jar fmw_12.2.1.4.0_osb.jar fmw_12.2.1.4.0_b2bhealthcare.jar In this release, Oracle B2B is not supported to be configured, but the installer is required for completeness.\n Fusion Middleware Infrastructure patches:\n p28186730_139426_Generic.zip (OPATCH 13.9.4.2.6 FOR FMW/WLS 12.2.1.3.0, 12.2.1.4.0 AND 14.1.1.0.0) p33059296_122140_Generic.zip (WLS PATCH SET UPDATE 12.2.1.4.210629) p32880070_122140_Generic.zip (FMW COMMON THIRDPARTY SPU 12.2.1.4.0 FOR APRIL2021CPU) p32784652_122140_Generic.zip (OPSS BUNDLE PATCH 12.2.1.4.210418) p32905339_122140_Generic.zip (OWSM BUNDLE PATCH 12.2.1.4.210520) p33084721_122140_Generic.zip (ADF BUNDLE PATCH 12.2.1.4.210706) p32973297_122140_Generic.zip (Coherence 12.2.1.4 Cumulative Patch 10 (12.2.1.4.10)) p33093748_122140_Generic.zip (FMW PLATFORM 12.2.1.4.0 SPU FOR APRCPU2021) p31544353_122140_Linux-x86-64-23673193.zip (ADR FOR WEBLOGIC SERVER 12.2.1.4.0 JULY CPU 2020) p31287540_122140_Generic.zip (WLS One-off) p31918617_122140_Generic.zip (WLS One-off SSL certificate) Oracle SOA Suite and Oracle Service Bus patches\n p32957445_122140_Generic.zip (SOA BUNDLE PATCH 12.2.1.4.210602) p32121987_122140_Generic.zip (Oracle Service Bus BUNDLE PATCH 12.2.1.4.201105) p31857456_122140_Generic.zip (Oracle Service Bus One-off) p30741105_122140_Generic.zip (Oracle Service Bus One-off) p31713053_122140_Linux-x86-64-23753213.zip (One-off patch) Update required build files The following files in the code repository location \u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/imagetool/12.2.1.4.0 are used for creating the image:\n additionalBuildCmds.txt buildArgs In the buildArgs file, update all occurrences of %DOCKER_REPO% with the docker-images repository location, which is the complete path of \u0026lt;imagetool-setup-location\u0026gt;/docker-images.\nFor example, update:\n%DOCKER_REPO%/OracleSOASuite/imagetool/12.2.1.4.0/\nto:\n\u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/imagetool/12.2.1.4.0/\n Similarly, update the placeholders %JDK_VERSION% and %BUILDTAG% with appropriate values.\n Update the response file \u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleFMWInfrastructure/dockerfiles/12.2.1.4/install.file to add the parameter INSTALL_TYPE=\u0026quot;Fusion Middleware Infrastructure\u0026quot; in the [GENERIC] section.\n Create the image Add a JDK package to the WebLogic Image Tool cache:\n$ imagetool cache addInstaller --type jdk --version 8u291 --path \u0026lt;download location\u0026gt;/jdk-8u291-linux-x64.tar.gz Add the downloaded installation binaries to the WebLogic Image Tool cache:\n$ imagetool cache addInstaller --type jdk --version 8u301 --path \u0026lt;download location\u0026gt;/jdk-8u301-linux-x64.tar.gz $ imagetool cache addInstaller --type fmw --version 12.2.1.4.0 --path \u0026lt;download location\u0026gt;/fmw_12.2.1.4.0_infrastructure.jar $ imagetool cache addInstaller --type soa --version 12.2.1.4.0 --path \u0026lt;download location\u0026gt;/fmw_12.2.1.4.0_soa.jar $ imagetool cache addInstaller --type osb --version 12.2.1.4.0 --path \u0026lt;download location\u0026gt;/fmw_12.2.1.4.0_osb.jar $ imagetool cache addInstaller --type b2b --version 12.2.1.4.0 --path \u0026lt;download location\u0026gt;/fmw_12.2.1.4.0_b2bhealthcare.jar Add the downloaded OPatch patch to the WebLogic Image Tool cache:\n$ imagetool cache addEntry --key 28186730_13.9.4.2.6 --value \u0026lt;download location\u0026gt;/p28186730_139426_Generic.zip Append the --opatchBugNumber flag and the OPatch patch key to the create command in the buildArgs file:\n--opatchBugNumber 28186730_13.9.4.2.6 Add the downloaded product patches to the WebLogic Image Tool cache:\n$ imagetool cache addEntry --key 28186730_13.9.4.2.6 --value \u0026lt;download location\u0026gt;/p28186730_139426_Generic.zip $ imagetool cache addEntry --key 30741105_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p30741105_122140_Generic.zip $ imagetool cache addEntry --key 31287540_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p31287540_122140_Generic.zip $ imagetool cache addEntry --key 31544353_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p31544353_122140_Linux-x86-64-23673193.zip $ imagetool cache addEntry --key 31713053_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p31713053_122140_Linux-x86-64-23753213.zip $ imagetool cache addEntry --key 31857456_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p31857456_122140_Generic.zip $ imagetool cache addEntry --key 31918617_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p31918617_122140_Generic.zip $ imagetool cache addEntry --key 32121987_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32121987_122140_Generic.zip $ imagetool cache addEntry --key 32784652_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32784652_122140_Generic.zip $ imagetool cache addEntry --key 32880070_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32880070_122140_Generic.zip $ imagetool cache addEntry --key 32905339_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32905339_122140_Generic.zip $ imagetool cache addEntry --key 32957445_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32957445_122140_Generic.zip $ imagetool cache addEntry --key 32973297_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32973297_122140_Generic.zip $ imagetool cache addEntry --key 33059296_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p33059296_122140_Generic.zip $ imagetool cache addEntry --key 33084721_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p33084721_122140_Generic.zip $ imagetool cache addEntry --key 33093748_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p33093748_122140_Generic.zip Append the --patches flag and the product patch keys to the create command in the buildArgs file. The --patches list must be a comma-separated collection of patch --key values used in the imagetool cache addEntry commands above.\nSample --patches list for the product patches added in to the cache:\n--patches 30741105_12.2.1.4.0,31287540_12.2.1.4.0,31544353_12.2.1.4.0,31713053_12.2.1.4.0,31857456_12.2.1.4.0,31918617_12.2.1.4.0,32121987_12.2.1.4.0,32784652_12.2.1.4.0,32880070_12.2.1.4.0,32905339_12.2.1.4.0,32957445_12.2.1.4.0,32973297_12.2.1.4.0,33059296_12.2.1.4.0,33084721_12.2.1.4.0,33093748_12.2.1.4.0 Example buildArgs file after appending the OPatch patch and product patches:\ncreate --jdkVersion 8u291 --type soa_osb_b2b --version 12.2.1.4.0 --tag oracle/soasuite:12.2.1.4.0 --pull --chown oracle:root --additionalBuildCommands \u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/imagetool/12.2.1.4.0/additionalBuildCmds.txt --additionalBuildFiles \u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/container-scripts --installerResponseFile \u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleFMWInfrastructure/dockerfiles/12.2.1.4/install.file,\u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/install/soasuite.response,\u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/install/osb.response,\u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/dockerfiles/12.2.1.4/install/b2b.response --patches 30741105_12.2.1.4.0,31287540_12.2.1.4.0,31544353_12.2.1.4.0,31713053_12.2.1.4.0,31857456_12.2.1.4.0,31918617_12.2.1.4.0,32121987_12.2.1.4.0,32784652_12.2.1.4.0,32880070_12.2.1.4.0,32905339_12.2.1.4.0,32957445_12.2.1.4.0,32973297_12.2.1.4.0,33059296_12.2.1.4.0,33084721_12.2.1.4.0,33093748_12.2.1.4.0 --opatchBugNumber 28186730_13.9.4.2.6 Note: In the buildArgs file:\n --jdkVersion value must match the --version value used in the imagetool cache addInstaller command for --type jdk. --version value must match the --version value used in the imagetool cache addInstaller command for --type soa. --pull always pulls the latest base Linux image oraclelinux:7-slim from the Docker registry. This flag can be removed if you want to use the Linux image oraclelinux:7-slim, which is already available on the host where the SOA image is created. Refer to this page for the complete list of options available with the WebLogic Image Tool create command.\n Create the Oracle SOA Suite image:\n$ imagetool @\u0026lt;absolute path to buildargs file\u0026gt; Note: Make sure that the absolute path to the buildargs file is prepended with a @ character, as shown in the example above.\n For example:\n$ imagetool @\u0026lt;imagetool-setup-location\u0026gt;/docker-images/OracleSOASuite/imagetool/12.2.1.4.0/buildArgs Click here to see the sample Dockerfile generated with the `imagetool` command. ########## BEGIN DOCKERFILE ########## # Copyright (c) 2019, 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # FROM ghcr.io/oracle/oraclelinux:7-slim as os_update LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;b4554a25-22dd-4793-b121-9989bd4be40a\u0026quot; USER root # Use package manager to make sure that unzip, tar, and other required packages are installed # # Copyright (c) 2021, Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Ensure necessary OS packages are installed RUN yum -y --downloaddir=/tmp/imagetool install gzip tar unzip libaio jq findutils diffutils hostname ant \\ \u0026amp;\u0026amp; yum -y --downloaddir=/tmp/imagetool clean all \\ \u0026amp;\u0026amp; rm -rf /var/cache/yum/* \\ \u0026amp;\u0026amp; rm -rf /tmp/imagetool # Create the Oracle user that will be the owner of the installed software # # Copyright (c) 2021, Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Create user and group RUN if [ -z \u0026quot;$(getent group root)\u0026quot; ]; then hash groupadd \u0026amp;\u0026gt; /dev/null \u0026amp;\u0026amp; groupadd root || exit -1 ; fi \\ \u0026amp;\u0026amp; if [ -z \u0026quot;$(getent passwd oracle)\u0026quot; ]; then hash useradd \u0026amp;\u0026gt; /dev/null \u0026amp;\u0026amp; useradd -g root oracle || exit -1; fi \\ \u0026amp;\u0026amp; mkdir -p /u01 \\ \u0026amp;\u0026amp; chown oracle:root /u01 \\ \u0026amp;\u0026amp; chmod 775 /u01 # If Java is not already in the base image, install it # Copyright (c) 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Installing Java FROM os_update as jdk_build LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;b4554a25-22dd-4793-b121-9989bd4be40a\u0026quot; ENV JAVA_HOME=/u01/jdk COPY --chown=oracle:root jdk-8u301-linux-x64.tar.gz /tmp/imagetool/ USER oracle RUN tar xzf /tmp/imagetool/jdk-8u301-linux-x64.tar.gz -C /u01 \\ \u0026amp;\u0026amp; $(test -d /u01/jdk* \u0026amp;\u0026amp; mv /u01/jdk* /u01/jdk || mv /u01/graal* /u01/jdk) \\ \u0026amp;\u0026amp; rm -rf /tmp/imagetool \\ \u0026amp;\u0026amp; rm -f /u01/jdk/javafx-src.zip /u01/jdk/src.zip # If an Oracle Home is not already in the base image, install the middleware components # Copyright (c) 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Installing Middleware FROM os_update as wls_build LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;b4554a25-22dd-4793-b121-9989bd4be40a\u0026quot; ENV JAVA_HOME=/u01/jdk \\ ORACLE_HOME=/u01/oracle \\ OPATCH_NO_FUSER=true RUN mkdir -p /u01/oracle \\ \u0026amp;\u0026amp; mkdir -p /u01/oracle/oraInventory \\ \u0026amp;\u0026amp; chown oracle:root /u01/oracle/oraInventory \\ \u0026amp;\u0026amp; chown oracle:root /u01/oracle COPY --from=jdk_build --chown=oracle:root /u01/jdk /u01/jdk/ COPY --chown=oracle:root fmw_12.2.1.4.0_infrastructure.jar install.file /tmp/imagetool/ COPY --chown=oracle:root fmw_12.2.1.4.0_soa.jar soasuite.response /tmp/imagetool/ COPY --chown=oracle:root fmw_12.2.1.4.0_osb.jar osb.response /tmp/imagetool/ COPY --chown=oracle:root fmw_12.2.1.4.0_b2bhealthcare.jar b2b.response /tmp/imagetool/ COPY --chown=oracle:root oraInst.loc /u01/oracle/ USER oracle RUN echo \u0026quot;INSTALLING MIDDLEWARE\u0026quot; \\ \u0026amp;\u0026amp; echo \u0026quot;INSTALLING fmw\u0026quot; \\ \u0026amp;\u0026amp; \\ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_infrastructure.jar -silent ORACLE_HOME=/u01/oracle \\ -responseFile /tmp/imagetool/install.file -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \\ \u0026amp;\u0026amp; echo \u0026quot;INSTALLING soa\u0026quot; \\ \u0026amp;\u0026amp; \\ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_soa.jar -silent ORACLE_HOME=/u01/oracle \\ -responseFile /tmp/imagetool/soasuite.response -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \\ \u0026amp;\u0026amp; echo \u0026quot;INSTALLING osb\u0026quot; \\ \u0026amp;\u0026amp; \\ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_osb.jar -silent ORACLE_HOME=/u01/oracle \\ -responseFile /tmp/imagetool/osb.response -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \\ \u0026amp;\u0026amp; echo \u0026quot;INSTALLING b2b\u0026quot; \\ \u0026amp;\u0026amp; \\ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_b2bhealthcare.jar -silent ORACLE_HOME=/u01/oracle \\ -responseFile /tmp/imagetool/b2b.response -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation \\ \u0026amp;\u0026amp; test $? -eq 0 \\ \u0026amp;\u0026amp; chmod -R g+r /u01/oracle \\ || (grep -vh \u0026quot;NOTIFICATION\u0026quot; /tmp/OraInstall*/install*.log \u0026amp;\u0026amp; exit 1) # # Copyright (c) 2021, Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Update OPatch and apply WebLogic patches COPY --chown=oracle:root p28186730_139426_Generic-24269359.zip /tmp/imagetool/opatch/ RUN cd /tmp/imagetool/opatch \\ \u0026amp;\u0026amp; /u01/jdk/bin/jar -xf /tmp/imagetool/opatch/p28186730_139426_Generic-24269359.zip \\ \u0026amp;\u0026amp; /u01/jdk/bin/java -jar /tmp/imagetool/opatch/6880880/opatch_generic.jar -silent -ignoreSysPrereqs -force -novalidation oracle_home=/u01/oracle \\ \u0026amp;\u0026amp; rm -rf /tmp/imagetool COPY --chown=oracle:root patches/* /tmp/imagetool/patches/ # Apply all patches provided at the same time RUN /u01/oracle/OPatch/opatch napply -silent -oh /u01/oracle -nonrollbackable -phBaseDir /tmp/imagetool/patches \\ \u0026amp;\u0026amp; test $? -eq 0 \\ \u0026amp;\u0026amp; /u01/oracle/OPatch/opatch util cleanup -silent -oh /u01/oracle FROM os_update as final_build ENV ORACLE_HOME=/u01/oracle \\ JAVA_HOME=/u01/jdk \\ PATH=${PATH}:/u01/jdk/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;b4554a25-22dd-4793-b121-9989bd4be40a\u0026quot; COPY --from=jdk_build --chown=oracle:root /u01/jdk /u01/jdk/ COPY --from=wls_build --chown=oracle:root /u01/oracle /u01/oracle/ USER oracle WORKDIR /u01/oracle #ENTRYPOINT /bin/bash ENV ORACLE_HOME=/u01/oracle \\ VOLUME_DIR=/u01/oracle/user_projects \\ SCRIPT_FILE=/u01/oracle/container-scripts/* \\ HEALTH_SCRIPT_FILE=/u01/oracle/container-scripts/get_healthcheck_url.sh \\ JAVA_OPTIONS=\u0026quot;-Doracle.jdbc.fanEnabled=false -Dweblogic.StdoutDebugEnabled=false\u0026quot; \\ PATH=$PATH:/usr/java/default/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/container-scripts USER root RUN mkdir -p $VOLUME_DIR \u0026amp;\u0026amp; chown oracle:root /u01 $VOLUME_DIR \u0026amp;\u0026amp; \\ mkdir -p /u01/oracle/container-scripts COPY --chown=oracle:root files/container-scripts/ /u01/oracle/container-scripts/ RUN chmod +xr $SCRIPT_FILE USER oracle RUN if [ -f \u0026quot;${ORACLE_HOME}/soa/soa/thirdparty/edifecs/XEngine_8_4_1_23.tar.gz\u0026quot; ]; then \\ cd $ORACLE_HOME/soa/soa/thirdparty/edifecs \u0026amp;\u0026amp; \\ tar -zxvf XEngine_8_4_1_23.tar.gz; \\ else \\ echo -e \u0026quot;\\nXEngine_8_4_1_23.tar.gz not present in ${ORACLE_HOME}/soa/soa/thirdparty/edifecs directory. Skipping untar.\u0026quot;; \\ fi HEALTHCHECK --start-period=5m --interval=1m CMD curl -k -s --fail `$HEALTH_SCRIPT_FILE` || exit 1 WORKDIR ${ORACLE_HOME} CMD [\u0026quot;/u01/oracle/container-scripts/createDomainAndStart.sh\u0026quot;] ########## END DOCKERFILE ########## Check the created image using the docker images command:\n$ docker images | grep soasuite Update an image After setting up the WebLogic Image Tool and required build scripts, use the WebLogic Image Tool to update an existing Oracle SOA Suite Docker image:\n Enter the following command to add the OPatch patch to the WebLogic Image Tool cache:\n$ imagetool cache addEntry --key 28186730_13.9.4.2.5 --value \u0026lt;downloaded-patches-location\u0026gt;/p28186730_139425_Generic.zip Execute the imagetool cache addEntry command for each patch to add the required patch(es) to the WebLogic Image Tool cache. For example, to add patch p30761841_122140_Generic.zip:\n$ imagetool cache addEntry --key=30761841_12.2.1.4.0 --value \u0026lt;downloaded-patches-location\u0026gt;/p30761841_122140_Generic.zip Provide the following arguments to the WebLogic Image Tool update command:\n –-fromImage - Identify the image that needs to be updated. In the example below, the image to be updated is soasuite:12.2.1.4. –-patches - Multiple patches can be specified as a comma-separated list. --tag - Specify the new tag to be applied for the image being built. Refer here for the complete list of options available with the WebLogic Image Tool update command.\n Note: The WebLogic Image Tool cache should have the latest OPatch zip. The WebLogic Image Tool will update the OPatch if it is not already updated in the image.\n Examples Click here to see the example \u0026#39;update\u0026#39; command: $ imagetool update --fromImage soasuite:12.2.1.4 --chown oracle:root --tag=soasuite:12.2.1.4-30761841 --patches=30761841_12.2.1.4.0 --opatchBugNumber=28186730_13.9.4.2.5 [INFO ] Image Tool build ID: bd21dc73-b775-4186-ae03-8219bf02113e [INFO ] Temporary directory used for docker build context: \u0026lt;work-directory\u0026gt;/wlstmp/wlsimgbuilder_temp1117031733123594064 [INFO ] Using patch 28186730_13.9.4.2.5 from cache: \u0026lt;downloaded-patches-location\u0026gt;/p28186730_139425_Generic.zip [WARNING] skipping patch conflict check, no support credentials provided [WARNING] No credentials provided, skipping validation of patches [INFO ] Using patch 30761841_12.2.1.4.0 from cache: \u0026lt;downloaded-patches-location\u0026gt;/p30761841_122140_Generic.zip [INFO ] docker cmd = docker build --force-rm=true --no-cache --tag soasuite:12.2.1.4-30761841 --build-arg http_proxy=http://\u0026lt;YOUR-COMPANY-PROXY\u0026gt; --build-arg https_proxy=http://\u0026lt;YOUR-COMPANY-PROXY\u0026gt; --build-arg no_proxy=\u0026lt;IP addresses and Domain address for no_proxy\u0026gt;,/var/run/docker.sock \u0026lt;work-directory\u0026gt;/wlstmp/wlsimgbuilder_temp1117031733123594064 Sending build context to Docker daemon 53.47MB Step 1/7 : FROM soasuite:12.2.1.4 as FINAL_BUILD ---\u0026gt; 445b649a3459 Step 2/7 : USER root ---\u0026gt; Running in 27f45e6958c3 Removing intermediate container 27f45e6958c3 ---\u0026gt; 150ae0161d46 Step 3/7 : ENV OPATCH_NO_FUSER=true ---\u0026gt; Running in daddfbb8fd9e Removing intermediate container daddfbb8fd9e ---\u0026gt; a5fc6b74be39 Step 4/7 : LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;bd21dc73-b775-4186-ae03-8219bf02113e\u0026quot; ---\u0026gt; Running in cdfec79c3fd4 Removing intermediate container cdfec79c3fd4 ---\u0026gt; 4c773aeb956f Step 5/7 : USER oracle ---\u0026gt; Running in ed3432e43e89 Removing intermediate container ed3432e43e89 ---\u0026gt; 54fe6b07c447 Step 6/7 : COPY --chown=oracle:oracle patches/* /tmp/imagetool/patches/ ---\u0026gt; d6d12f02a9be Step 7/7 : RUN /u01/oracle/OPatch/opatch napply -silent -oh /u01/oracle -phBaseDir /tmp/imagetool/patches \u0026amp;\u0026amp; /u01/oracle/OPatch/opatch util cleanup -silent -oh /u01/oracle \u0026amp;\u0026amp; rm -rf /tmp/imagetool ---\u0026gt; Running in a79addca4d2f Oracle Interim Patch Installer version 13.9.4.2.5 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/oracle Central Inventory : /u01/oracle/oraInventory from : /u01/oracle/oraInst.loc OPatch version : 13.9.4.2.5 OUI version : 13.9.4.0.0 Log file location : /u01/oracle/cfgtoollogs/opatch/opatch2020-06-01_10-56-13AM_1.log OPatch detects the Middleware Home as \u0026quot;/u01/oracle\u0026quot; Verifying environment and performing prerequisite checks... OPatch continues with these patches: 30761841 Do you want to proceed? [y|n] Y (auto-answered by -silent) User Responded with: Y All checks passed. Please shutdown Oracle instances running out of this ORACLE_HOME on the local system. (Oracle Home = '/u01/oracle') Is the local system ready for patching? [y|n] Y (auto-answered by -silent) User Responded with: Y Backing up files... Applying interim patch '30761841' to OH '/u01/oracle' ApplySession: Optional component(s) [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.55.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.55.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.5.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.5.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.55.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.55.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.52.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.52.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.48.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.48.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.49.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.49.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.51.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.51.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.54.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.54.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.54.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.54.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.5.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.5.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.54.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.54.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.55.0.0.0 ] , [ oracle.org.bouncycastle.bcpkix.jdk15on, 1.55.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.49.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.49.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.5.0.0.0 ] , [ oracle.org.bouncycastle.bcprov.jdk15on, 1.5.0.0.0 ] not present in the Oracle Home or a higher version is found. Patching component oracle.org.bouncycastle.bcprov.jdk15on, 1.60.0.0.0... Patching component oracle.org.bouncycastle.bcprov.jdk15on, 1.60.0.0.0... Patching component oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.60.0.0.0... Patching component oracle.org.bouncycastle.bcprov.ext.jdk15on, 1.60.0.0.0... Patching component oracle.org.bouncycastle.bcpkix.jdk15on, 1.60.0.0.0... Patching component oracle.org.bouncycastle.bcpkix.jdk15on, 1.60.0.0.0... Patch 30761841 successfully applied. Log file location: /u01/oracle/cfgtoollogs/opatch/opatch2020-06-01_10-56-13AM_1.log OPatch succeeded. Oracle Interim Patch Installer version 13.9.4.2.5 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/oracle Central Inventory : /u01/oracle/oraInventory from : /u01/oracle/oraInst.loc OPatch version : 13.9.4.2.5 OUI version : 13.9.4.0.0 Log file location : /u01/oracle/cfgtoollogs/opatch/opatch2020-06-01_10-57-19AM_1.log OPatch detects the Middleware Home as \u0026quot;/u01/oracle\u0026quot; Invoking utility \u0026quot;cleanup\u0026quot; OPatch will clean up 'restore.sh,make.txt' files and 'scratch,backup' directories. You will be still able to rollback patches after this cleanup. Do you want to proceed? [y|n] Y (auto-answered by -silent) User Responded with: Y Backup area for restore has been cleaned up. For a complete list of files/directories deleted, Please refer log file. OPatch succeeded. Removing intermediate container a79addca4d2f ---\u0026gt; 2ef2a67a685b Successfully built 2ef2a67a685b Successfully tagged soasuite:12.2.1.4-30761841 [INFO ] Build successful. Build time=112s. Image tag=soasuite:12.2.1.4-30761841 Click here to see the example Dockerfile generated by the WebLogic Image Tool with the \u0026#39;--dryRun\u0026#39; option: $ imagetool update --fromImage soasuite:12.2.1.4 --chown oracle:root --tag=soasuite:12.2.1.4-30761841 --patches=30761841_12.2.1.4.0 --opatchBugNumber=28186730_13.9.4.2.5 --dryRun [INFO ] Image Tool build ID: f9feea35-c52c-4974-b155-eb7f34d95892 [INFO ] Temporary directory used for docker build context: \u0026lt;work-directory\u0026gt;/wlstmp/wlsimgbuilder_temp1799120592903014749 [INFO ] Using patch 28186730_13.9.4.2.5 from cache: \u0026lt;downloaded-patches-location\u0026gt;/p28186730_139425_Generic.zip [WARNING] skipping patch conflict check, no support credentials provided [WARNING] No credentials provided, skipping validation of patches [INFO ] Using patch 30761841_12.2.1.4.0 from cache: \u0026lt;downloaded-patches-location\u0026gt;/p30761841_122140_Generic.zip [INFO ] docker cmd = docker build --force-rm=true --no-cache --tag soasuite:12.2.1.4-30761841 --build-arg http_proxy=http://www.yourcompany.proxy.com:80 --build-arg https_proxy=http://www.yourcompany.proxy.com:80 --build-arg no_proxy=10.250.109.251,localhost,127.0.0.1,/var/run/docker.sock \u0026lt;work-directory\u0026gt;/wlstmp/wlsimgbuilder_temp1799120592903014749 ########## BEGIN DOCKERFILE ########## # # Copyright (c) 2019, 2020, Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # FROM soasuite:12.2.1.4 as FINAL_BUILD USER root ENV OPATCH_NO_FUSER=true LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;f9feea35-c52c-4974-b155-eb7f34d95892\u0026quot; USER oracle COPY --chown=oracle:oracle patches/* /tmp/imagetool/patches/ RUN /u01/oracle/OPatch/opatch napply -silent -oh /u01/oracle -phBaseDir /tmp/imagetool/patches \\ \u0026amp;\u0026amp; /u01/oracle/OPatch/opatch util cleanup -silent -oh /u01/oracle \\ \u0026amp;\u0026amp; rm -rf /tmp/imagetool ########## END DOCKERFILE ########## Check the built image using the docker images command:\n$ docker images | grep soasuite soasuite 12.2.1.4-30761841 2ef2a67a685b About a minute ago 4.84GB $ Create an Oracle SOA Suite Docker image using Dockerfile For test and development purposes, you can create an Oracle SOA Suite image using the Dockerfile. Consult the README file for important prerequisite steps, such as building or pulling the Server JRE Docker image, Oracle FMW Infrastructure Docker image, and downloading the Oracle SOA Suite installer and bundle patch binaries.\nA prebuilt Oracle Fusion Middleware Infrastructure image, container-registry.oracle.com/middleware/fmw-infrastructure:12.2.1.4, is available at container-registry.oracle.com. We recommend that you pull and rename this image to build the Oracle SOA Suite image.\n$ docker pull container-registry.oracle.com/middleware/fmw-infrastructure:12.2.1.4 $ docker tag container-registry.oracle.com/middleware/fmw-infrastructure:12.2.1.4 oracle/fmw-infrastructure:12.2.1.4.0 Follow these steps to build an Oracle Fusion Middleware Infrastructure image, and then the Oracle SOA Suite image as a layer on top of that:\n Make a local clone of the sample repository:\n$ git clone https://github.com/oracle/docker-images Build the oracle/fmw-infrastructure:12.2.1.4 image:\n$ cd docker-images/OracleFMWInfrastructure/dockerfiles $ sh buildDockerImage.sh -v 12.2.1.4 -s This will produce an image named oracle/fmw-infrastructure:12.2.1.4.\n Tag the image as follows:\n$ docker tag oracle/fmw-infrastructure:12.2.1.4 oracle/fmw-infrastructure:12.2.1.4.0 Download the Oracle SOA Suite installer from the Oracle Technology Network or e-delivery.\n Note: Copy the installer binaries to the same location as the Dockerfile.\n To build the Oracle SOA Suite image with patches, you must download and drop the patch zip files (for example, p29928100_122140_Generic.zip) into the patches/ folder under the version that is required. For example, for 12.2.1.4.0 the folder is 12.2.1.4/patches. Similarly, to build the image by including the OPatch patch, download and drop the OPatch patch zip file (for e.g. p28186730_139424_Generic.zip) into the opatch_patch/ folder.\n Create the Oracle SOA Suite image by running the provided script:\n$ cd docker-images/OracleSOASuite/dockerfiles $ ./buildDockerImage.sh -v 12.2.1.4 -s The image produced will be named oracle/soasuite:12.2.1.4. The samples and instructions assume the Oracle SOA Suite image is named soasuite:12.2.1.4. You must rename your image to match this name, or update the samples to refer to the image you created.\n$ docker tag oracle/soasuite:12.2.1.4 soasuite:12.2.1.4 " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/create-or-update-image/", + "title": "Create or update an image", + "tags": [], + "description": "Create or update an Oracle WebCenter Sites Docker image used for deploying Oracle WebCenter Sites domains. An Oracle WebCenter Sites Docker image can be created using the WebLogic Image Tool or using the Dockerfile approach.", + "content": "If you have access to the My Oracle Support (MOS), and there is a need to build a new image with a patch (bundle or interim), it is recommended to use the WebLogic Image Tool to build an Oracle WebCenter Sites image for production deployments.\n Create or update an Oracle WebCenter Sites Docker image using the WebLogic Image Tool Set up the WebLogic Image Tool Create an image Update an image Create an Oracle WebCenter Sites Docker image using Dockerfile Create or update an Oracle WebCenter Sites Docker image using the WebLogic Image Tool Using the WebLogic Image Tool, you can create a new Oracle WebCenter Sites Docker image (can include patches as well) or update an existing image with one or more patches (bundle patch and interim patches).\n Recommendations:\n Use create for creating a new Oracle WebCenter Sites Docker image either: without any patches or, containing the Oracle WebCenter Sites binaries, bundle patch and interim patches. This is the recommended approach if you have access to the Oracle WebCenter Sites patches because it optimizes the size of the image. Use update for patching an existing Oracle WebCenter Sites Docker image with a single interim patch. Note that the patched image size may increase considerably due to additional image layers introduced by the patch application tool. Set up the WebLogic Image Tool Prerequisites Set up the WebLogic Image Tool Validate setup WebLogic Image Tool build directory WebLogic Image Tool cache Set up additional build scripts Prerequisites Verify that your environment meets the following prerequisites:\n Docker client and daemon on the build machine, with minimum Docker version 18.03.1.ce. Bash version 4.0 or later, to enable the command complete feature. JAVA_HOME environment variable set to the appropriate JDK location. Set up the WebLogic Image Tool To set up the WebLogic Image Tool:\n Create a working directory and change to it. In these steps, this directory is imagetool-setup.\n$ mkdir imagetool-setup $ cd imagetool-setup Download the latest version of the WebLogic Image Tool from the releases page.\n Unzip the release ZIP file to the imagetool-setup directory.\n Execute the following commands to set up the WebLogic Image Tool on a Linux environment:\n$ cd imagetool-setup/imagetool/bin $ source setup.sh Validate setup To validate the setup of the WebLogic Image Tool:\n Enter the following command to retrieve the version of the WebLogic Image Tool:\n$ imagetool --version Enter imagetool then press the Tab key to display the available imagetool commands:\n$ imagetool \u0026lt;TAB\u0026gt; cache create help rebase update WebLogic Image Tool build directory The WebLogic Image Tool creates a temporary Docker context directory, prefixed by wlsimgbuilder_temp, every time the tool runs. Under normal circumstances, this context directory will be deleted. However, if the process is aborted or the tool is unable to remove the directory, it is safe for you to delete it manually. By default, the WebLogic Image Tool creates the Docker context directory under the user\u0026rsquo;s home directory. If you prefer to use a different directory for the temporary context, set the environment variable WLSIMG_BLDDIR:\n$ export WLSIMG_BLDDIR=\u0026#34;/path/to/buid/dir\u0026#34; WebLogic Image Tool cache The WebLogic Image Tool maintains a local file cache store. This store is used to look up where the Java, WebLogic Server installers, and WebLogic Server patches reside in the local file system. By default, the cache store is located in the user\u0026rsquo;s $HOME/cache directory. Under this directory, the lookup information is stored in the .metadata file. All automatically downloaded patches also reside in this directory. You can change the default cache store location by setting the environment variable WLSIMG_CACHEDIR:\n$ export WLSIMG_CACHEDIR=\u0026#34;/path/to/cachedir\u0026#34; Set up additional build scripts Creating an Oracle WebCenter Sites Docker image using the WebLogic Image Tool requires additional container scripts for Oracle WebCenter Sites domains.\n Clone the docker-images repository to set up those scripts. In these steps, this directory is DOCKER_REPO:\n$ cd imagetool-setup $ git clone https://github.com/oracle/docker-images.git Copy the additional WebLogic Image Tool build files from the operator source repository to the imagetool-setup location:\n$ mkdir -p imagetool-setup/docker-images/OracleWebCenterSites/imagetool/12.2.1.4 $ cd imagetool-setup/docker-images/OracleWebCenterSites/imagetool/12.2.1.4 $ cp -rf ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/imagetool-scripts/* . Create an image After setting up the WebLogic Image Tool and required build scripts, follow these steps to use the WebLogic Image Tool to create a new Oracle WebCenter Sites Docker image.\nPreparing response files Add INSTALL_TYPE=\u0026quot;WebLogic Server\u0026rdquo; in %path-to-downloaded-docker-repo%/OracleFMWInfrastructure/dockerfiles/12.2.1.4/install.file Rename %path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/install.file to %path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/wcs.file Create a wcs-wls-docker-install installer $ cd %path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/wcs-wls-docker-install $ docker run --rm -u root -v ${PWD}:/wcs-wls-docker-install groovy:2.4.8-jdk8 /wcs-wls-docker-install/packagejar.sh Download the Oracle WebCenter Sites installation binaries and patches You must download the required Oracle WebCenter Sites installation binaries and patches as listed below from the Oracle Software Delivery Cloud and save them in a directory of your choice. In these steps, this directory is download location.\nFollowing is the list of installation binaries and patches required for 21.1.1 release:\n JDK:\n jdk-8u241-linux-x64.tar.gz Fusion MiddleWare Infrastructure installer:\n fmw_12.2.1.4.0_infrastructure.jar Fusion MiddleWare Infrastructure patches:\n p28186730_139424_Generic.zip (Opatch) p31537019_122140_Generic.zip (WLS) p30729380_122140_Generic.zip (COH) WCS installers:\n fmw_12.2.1.4.0_wcsites.jar WCS patches:\n p32315127_122140_Generic.zip (WCS) Update required build files The following files available in the code repository location ${WORKDIR}/weblogic-kubernetes-operator-3.0.1/kubernetes/samples/scripts/imagetool-scripts are used for creating the image.\n additionalBuildCmds.txt buildArgs In the buildArgs file, update all the occurrences of %DOCKER_REPO% with the repository location, which is the complete path of imagetool-setup.\nFor example, update:\n%DOCKER_REPO%/OracleWebCenterSites/kubernetes/imagetool-scripts/\n Similarly, update the placeholders %JDK_VERSION% and %BUILDTAG% with appropriate values.\n Create the image Add a JDK package to the WebLogic Image Tool cache:\n$ imagetool cache addInstaller --type jdk --version 8u241 --path \u0026lt;download location\u0026gt;/jdk-8u241-linux-x64.tar.gz Add the downloaded installation binaries to the WebLogic Image Tool cache:\n$ imagetool cache addInstaller --type fmw --version 12.2.1.4.0 --path \u0026lt;download location\u0026gt;/fmw_12.2.1.4.0_infrastructure.jar $ imagetool cache addInstaller --type wcs --version 12.2.1.4.0 --path \u0026lt;download location\u0026gt;/fmw_12.2.1.4.0_wcsites.jar Add the downloaded patches to the WebLogic Image Tool cache:\n Click here to see the commands to add patches in to the cache: ``` bash $ imagetool cache addEntry --key 28186730_13.9.4.2.4 --value \u0026lt;download location\u0026gt;/p28186730_139424_Generic.zip $ imagetool cache addEntry --key 31537019_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p31537019_122140_Generic.zip $ imagetool cache addEntry --key 30729380_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p30729380_122140_Generic.zip $ imagetool cache addEntry --key 32315127_12.2.1.4.0 --value \u0026lt;download location\u0026gt;/p32315127_122140_Generic.zip ``` Update the patches list to buildArgs.\nTo the create command in the buildArgs file, append the Oracle WebCenter Sites patches list using the --patches flag and Opatch patch using the --opatchBugNumber flag. Sample options for the list of patches above are:\n--patches 31537019_12.2.1.4.0,30729380_12.2.1.4.0,p32315127_12.2.1.4.0 --opatchBugNumber=28186730_13.9.4.2.4 Example buildArgs file after appending product\u0026rsquo;s list of patches and Opatch patch:\ncreate --jdkVersion=8u241 --type WCS --version=12.2.1.4 --tag=oracle/wcsites:12.2.1.4-21.1.1 --installerResponseFile %path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/wcs.file,%path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/install.file --additionalBuildCommands %path-to-downloaded-fmw-kubernetes%/OracleWebCenterSites/kubernetes/imagetool-scripts/addtionalBuildCmds.txt --additionalBuildFiles %path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/sites-container-scripts,%path-to-downloaded-docker-repo%/OracleWebCenterSites/dockerfiles/12.2.1.4/wcs-wls-docker-install --patches 31537019_12.2.1.4.0,30729380_12.2.1.4.0,32315127_12.2.1.4.0 --opatchBugNumber=28186730_13.9.4.2.4 Refer to this page for the complete list of options available with the WebLogic Image Tool create command.\n Enter the following command to create the Oracle WebCenter Sites image:\n$ imagetool @\u0026lt;absolute path to `buildargs` file\u0026gt;\u0026#34; Click here to see the sample Dockerfile generated with the imagetool command. ```bash ########## BEGIN DOCKERFILE ########## # # Copyright (c) 2019, 2020, Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # FROM oraclelinux:7-slim as OS_UPDATE LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;3b37c045-11c6-4eb8-b69c-f42256c1e082\u0026quot; USER root RUN yum -y --downloaddir= install gzip tar unzip libaio \\ \u0026amp;\u0026amp; yum -y --downloaddir= clean all \\ \u0026amp;\u0026amp; rm -rf /var/cache/yum/* \\ \u0026amp;\u0026amp; rm -rf ## Create user and group RUN if [ -z \u0026quot;$(getent group oracle)\u0026quot; ]; then hash groupadd \u0026amp;\u0026gt; /dev/null \u0026amp;\u0026amp; groupadd oracle || exit -1 ; fi \\ \u0026amp;\u0026amp; if [ -z \u0026quot;$(getent passwd oracle)\u0026quot; ]; then hash useradd \u0026amp;\u0026gt; /dev/null \u0026amp;\u0026amp; useradd -g oracle oracle || exit -1; fi \\ \u0026amp;\u0026amp; mkdir /u01 \\ \u0026amp;\u0026amp; chown oracle:oracle /u01 # Install Java FROM OS_UPDATE as JDK_BUILD LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;3b37c045-11c6-4eb8-b69c-f42256c1e082\u0026quot; ENV JAVA_HOME=/u01/jdk COPY --chown=oracle:oracle jdk-8u251-linux-x64.tar.gz /tmp/imagetool/ USER oracle RUN tar xzf /tmp/imagetool/jdk-8u251-linux-x64.tar.gz -C /u01 \\ \u0026amp;\u0026amp; mv /u01/jdk* /u01/jdk \\ \u0026amp;\u0026amp; rm -rf /tmp/imagetool # Install Middleware FROM OS_UPDATE as WLS_BUILD LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;3b37c045-11c6-4eb8-b69c-f42256c1e082\u0026quot; ENV JAVA_HOME=/u01/jdk \\ ORACLE_HOME=/u01/oracle \\ OPATCH_NO_FUSER=true RUN mkdir -p /u01/oracle \\ \u0026amp;\u0026amp; mkdir -p /u01/oracle/oraInventory \\ \u0026amp;\u0026amp; chown oracle:oracle /u01/oracle/oraInventory \\ \u0026amp;\u0026amp; chown oracle:oracle /u01/oracle COPY --from=JDK_BUILD --chown=oracle:oracle /u01/jdk /u01/jdk/ COPY --chown=oracle:oracle fmw_12.2.1.4.0_infrastructure.jar install.file /tmp/imagetool/ COPY --chown=oracle:oracle fmw_12.2.1.4.0_wcsites.jar wcs.file /tmp/imagetool/ COPY --chown=oracle:oracle oraInst.loc /u01/oracle/ COPY --chown=oracle:oracle p28186730_139422_Generic.zip /tmp/imagetool/opatch/ COPY --chown=oracle:oracle patches/* /tmp/imagetool/patches/ USER oracle RUN \\ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_infrastructure.jar -silent ORACLE_HOME=/u01/oracle \\ -responseFile /tmp/imagetool/install.file -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation RUN \\ /u01/jdk/bin/java -Xmx1024m -jar /tmp/imagetool/fmw_12.2.1.4.0_wcsites.jar -silent ORACLE_HOME=/u01/oracle \\ -responseFile /tmp/imagetool/wcs.file -invPtrLoc /u01/oracle/oraInst.loc -ignoreSysPrereqs -force -novalidation RUN cd /tmp/imagetool/opatch \\ \u0026amp;\u0026amp; /u01/jdk/bin/jar -xf /tmp/imagetool/opatch/p28186730_139422_Generic.zip \\ \u0026amp;\u0026amp; /u01/jdk/bin/java -jar /tmp/imagetool/opatch/6880880/opatch_generic.jar -silent -ignoreSysPrereqs -force -novalidation oracle_home=/u01/oracle RUN /u01/oracle/OPatch/opatch napply -silent -oh /u01/oracle -phBaseDir /tmp/imagetool/patches \\ \u0026amp;\u0026amp; /u01/oracle/OPatch/opatch util cleanup -silent -oh /u01/oracle FROM OS_UPDATE as FINAL_BUILD ARG ADMIN_NAME ARG ADMIN_HOST ARG ADMIN_PORT ARG MANAGED_SERVER_PORT ENV ORACLE_HOME=/u01/oracle \\ JAVA_HOME=/u01/jdk \\ LC_ALL=${DEFAULT_LOCALE:-en_US.UTF-8} \\ PATH=${PATH}:/u01/jdk/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;3b37c045-11c6-4eb8-b69c-f42256c1e082\u0026quot; COPY --from=JDK_BUILD --chown=oracle:oracle /u01/jdk /u01/jdk/ COPY --from=WLS_BUILD --chown=oracle:oracle /u01/oracle /u01/oracle/ USER oracle WORKDIR /u01/oracle #ENTRYPOINT /bin/bash USER root COPY --chown=oracle:oracle files/sites-container-scripts/overrides/oui/ /u01/oracle/wcsites/common/templates/wls/ USER oracle RUN cd /u01/oracle/wcsites/common/templates/wls \u0026amp;\u0026amp; \\ $JAVA_HOME/bin/jar uvf oracle.wcsites.base.template.jar startup-plan.xml file-definition.xml \u0026amp;\u0026amp; \\ rm /u01/oracle/wcsites/common/templates/wls/startup-plan.xml \u0026amp;\u0026amp; \\ rm /u01/oracle/wcsites/common/templates/wls/file-definition.xml # # Install the required packages # ----------------------------- USER root ENV SITES_CONTAINER_SCRIPTS=/u01/oracle/sites-container-scripts \\ SITES_INSTALLER_PKG=wcs-wls-docker-install \\ DOMAIN_ROOT=\u0026quot;${DOMAIN_ROOT:-/u01/oracle/user_projects/domains}\u0026quot; \\ ADMIN_PORT=7001 \\ WCSITES_PORT=7002 \\ ADMIN_SSL_PORT=9001 \\ WCSITES_SSL_PORT=9002 \\ PATH=$PATH:/u01/oracle/sites-container-scripts RUN yum install -y hostname \u0026amp;\u0026amp; \\ rm -rf /var/cache/yum RUN mkdir -p ${SITES_CONTAINER_SCRIPTS} \u0026amp;\u0026amp; \\ mkdir -p /u01/wcs-wls-docker-install COPY --chown=oracle:oracle files/sites-container-scripts/ ${SITES_CONTAINER_SCRIPTS}/ COPY --chown=oracle:oracle files/wcs-wls-docker-install/ /u01/wcs-wls-docker-install/ RUN chown oracle:oracle -R /u01/oracle/sites-container-scripts \u0026amp;\u0026amp; \\ chown oracle:oracle -R /u01/wcs-wls-docker-install \u0026amp;\u0026amp; \\ chmod a+xr /u01/oracle/sites-container-scripts/* \u0026amp;\u0026amp; \\ chmod a+xr /u01/wcs-wls-docker-install/*.sh # Expose all Ports # ------------------------------------------------------------- EXPOSE $ADMIN_PORT $ADMIN_SSL_PORT $WCSITES_PORT $WCSITES_SSL_PORT USER oracle WORKDIR ${ORACLE_HOME} # Define default command to start. # ------------------------------------------------------------- CMD [\u0026quot;/u01/oracle/sites-container-scripts/createOrStartSitesDomain.sh\u0026quot;] ########## END DOCKERFILE ########## ``` Check the created image using the Docker images command:\n$ docker images | grep wcsites Update an image After setting up the WebLogic Image Tool and required build scripts, use the WebLogic Image Tool to update an existing Oracle WebCenter Sites Docker image:\n Enter the following command for each patch to add the required patch(es) to the WebLogic Image Tool cache:\n$ cd \u0026lt;imagetool-setup\u0026gt; $ imagetool cache addEntry --key 32315127_12.2.1.4.0 --value \u0026lt; %path-to-downloaded-pathes%/patches/p32315127_122140_Generic.zip [INFO ] Added entry 32315127_12.2.1.4.0=\u0026lt; %path-to-downloaded-pathes%/patches/p32315127_122140_Generic.zip Provide the following arguments to the WebLogic Image Tool update command:\n –-fromImage - Identify the image that needs to be updated. In the example below, the image to be updated is oracle/wcsites:12.2.1.4-21.1.1. –-patches - Multiple patches can be specified as a comma-separated list. --tag - Specify the new tag to be applied for the image being built. Refer here for the complete list of options available with the WebLogic Image Tool update command.\n Note: The WebLogic Image Tool cache should have the latest OPatch zip. The WebLogic Image Tool will update the OPatch if it is not already updated in the image.\n Examples Click here to see the example `update` command: $ imagetool update --fromImage oracle/wcsites:12.2.1.4-21.1.1 --tag=oracle/wcsites:12.2.1.4-21.1.1-32315127 --patches=32315127_12.2.1.4.0 [INFO ] Image Tool build ID: 7c268a9a-723f-424e-a06e-cb615c783e6d [INFO ] Temporary directory used for docker build context: %path-to-temp-directory%/tmpBuild/wlsimgbuilder_temp8555048225669509 [INFO ] Using patch 28186730_13.9.4.2.4 from cache: %path-to-downloaded-pathes%/patches /p28186730_139424_Generic.zip [INFO ] OPatch will not be updated, fromImage has version 13.9.4.2.4, available version is 13.9.4.2.4 [WARNING] skipping patch conflict check, no support credentials provided [WARNING] No credentials provided, skipping validation of patches [INFO ] Using patch 32315127_12.2.1.4.0 from cache: %path-to-downloaded-pathes%/patches /p32315127_122140_Generic.zip [INFO ] docker cmd = docker build --no-cache --force-rm --tag oracle/wcsites:12.2.1.4-21.1.1 --build-arg http_proxy=http://www-proxy-your-company.com:80 --build-arg https_proxy=http://www-proxy-your-company.com:80 --build-arg no_proxy=localhost,127.0.0.0/8,/var/run/docker.sock %path-to-temp-directory%/tmpBuild/wlsimgbuilder_temp8555048225669509 Sending build context to Docker daemon 212.7MB Step 1/7 : FROM oracle/wcsites:12.2.1.4-21.1.1 as FINAL_BUILD ---\u0026gt; 480f1a31c02b Step 2/7 : USER root ---\u0026gt; Running in 9d5a81ad5bde Removing intermediate container 9d5a81ad5bde ---\u0026gt; 71b50b0b34dc Step 3/7 : ENV OPATCH_NO_FUSER=true ---\u0026gt; Running in c361884e8a71 Removing intermediate container c361884e8a71 ---\u0026gt; 2951de256951 Step 4/7 : LABEL com.oracle.weblogic.imagetool.buildid=\u0026quot;7c268a9a-723f-424e-a06e-cb615c783e6d\u0026quot; ---\u0026gt; Running in e2f485ac9039 Removing intermediate container e2f485ac9039 ---\u0026gt; 970f6552ef9a Step 5/7 : USER oracle ---\u0026gt; Running in e3c85228af4b Removing intermediate container e3c85228af4b ---\u0026gt; 4401fdb4ebbe Step 6/7 : COPY --chown=oracle:oracle patches/* /tmp/imagetool/patches/ ---\u0026gt; 978a48e1cc95 Step 7/7 : RUN /u01/oracle/OPatch/opatch napply -silent -oh /u01/oracle -phBaseDir /tmp/imagetool/patches \u0026amp;\u0026amp; /u01/oracle/OPatch/opatch util cleanup -silent -oh /u01/oracle \u0026amp;\u0026amp; rm -rf /tmp/imagetool ---\u0026gt; Running in 5039320b2f10 Oracle Interim Patch Installer version 13.9.4.2.4 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/oracle Central Inventory : /u01/oracle/oraInventory from : /u01/oracle/oraInst.loc OPatch version : 13.9.4.2.4 OUI version : 13.9.4.0.0 Log file location : /u01/oracle/cfgtoollogs/opatch/opatch2020-08-04_05-15-38AM_1.log OPatch detects the Middleware Home as \u0026quot;/u01/oracle\u0026quot; Verifying environment and performing prerequisite checks... OPatch continues with these patches: 32315127 Do you want to proceed? [y|n] Y (auto-answered by -silent) User Responded with: Y All checks passed. Please shutdown Oracle instances running out of this ORACLE_HOME on the local system. (Oracle Home = '/u01/oracle') Is the local system ready for patching? [y|n] Y (auto-answered by -silent) User Responded with: Y Backing up files... Applying interim patch '32315127' to OH '/u01/oracle' ApplySession: Optional component(s) [ oracle.wcsites.wccintegration, 12.2.1.4.0 ] , [ oracle.wcsites.wccintegration, 12.2.1.4.0 ] not present in the Oracle Home or a higher version is found. Patching component oracle.wcsites, 12.2.1.4.0... Patching component oracle.wcsites, 12.2.1.4.0... Patching component oracle.wcsites.visitorservices, 12.2.1.4.0... Patching component oracle.wcsites.visitorservices, 12.2.1.4.0... Patching component oracle.wcsites.examples, 12.2.1.4.0... Patching component oracle.wcsites.examples, 12.2.1.4.0... Patching component oracle.wcsites.developer.tools, 12.2.1.4.0... Patching component oracle.wcsites.developer.tools, 12.2.1.4.0... Patching component oracle.wcsites.satelliteserver, 12.2.1.4.0... Patching component oracle.wcsites.satelliteserver, 12.2.1.4.0... Patching component oracle.wcsites.sitecapture, 12.2.1.4.0... Patching component oracle.wcsites.sitecapture, 12.2.1.4.0... Patch 32315127 successfully applied. Log file location: /u01/oracle/cfgtoollogs/opatch/opatch2020-08-04_05-15-38AM_1.log OPatch succeeded. Oracle Interim Patch Installer version 13.9.4.2.4 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/oracle Central Inventory : /u01/oracle/oraInventory from : /u01/oracle/oraInst.loc OPatch version : 13.9.4.2.4 OUI version : 13.9.4.0.0 Log file location : /u01/oracle/cfgtoollogs/opatch/opatch2020-08-04_05-16-11AM_1.log OPatch detects the Middleware Home as \u0026quot;/u01/oracle\u0026quot; Invoking utility \u0026quot;cleanup\u0026quot; OPatch will clean up 'restore.sh,make.txt' files and 'scratch,backup' directories. You will be still able to rollback patches after this cleanup. Do you want to proceed? [y|n] Y (auto-answered by -silent) User Responded with: Y Backup area for restore has been cleaned up. For a complete list of files/directories deleted, Please refer log file. OPatch succeeded. Removing intermediate container 5039320b2f10 ---\u0026gt; 1be958e1e859 Successfully built 1be958e1e859 Successfully tagged oracle/wcsites:12.2.1.4-21.1.1-32315127 [INFO ] Build successful. Build time=73s. Image tag=oracle/wcsites:12.2.1.4-21.1.1-32315127 Click here to see the example Dockerfile generated by the WebLogic Image Tool with the `–-dryRun` option: $ imagetool update --fromImage oracle/wcsites:12.2.1.4-21.1.1 --tag=oracle/wcsites:12.2.1.4-21.1.1-32315127 --patches=32315127_12.2.1.4.0 --dryRun [INFO ] Image Tool build ID: a2fca032-7807-4bfb-b5a4-0ed90a710a56 [INFO ] Temporary directory used for docker build context: %path-to-temp-directory%/tmpBuild/wlsimgbuilder_temp4743247141639108603 [INFO ] Using patch 28186730_13.9.4.2.4 from cache: %path-to-downloaded-pathes%/patches /p28186730_139424_Generic.zip [INFO ] OPatch will not be updated, fromImage has version 13.9.4.2.4, available version is 13.9.4.2.4 [WARNING] skipping patch conflict check, no support credentials provided [WARNING] No credentials provided, skipping validation of patches [INFO ] Using patch 32315127_12.2.1.4.0 from cache: %path-to-downloaded-pathes%/patches /p32315127_122140_Generic.zip [INFO ] docker cmd = docker build --no-cache --force-rm --tag oracle/wcsites:12.2.1.4-21.1.1.1 --build-arg http_proxy=http://www-proxy-your-company.com:80 --build-arg https_proxy=http://www-proxy-your-company.com:80 --build-arg no_proxy=localhost,127.0.0.0/8,/var/run/docker.sock %path-to-temp-directory%/tmpBuild/wlsimgbuilder_temp4743247141639108603 ########## BEGIN DOCKERFILE ########## # # Copyright (c) 2019, 2020, Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # FROM oracle/wcsites:12.2.1.4-21.1.1 as FINAL_BUILD USER root ENV OPATCH_NO_FUSER=true LABEL com.oracle.weblogic.imagetool.buildid=\u0026#34;a2fca032-7807-4bfb-b5a4-0ed90a710a56\u0026#34; USER oracle COPY --chown=oracle:oracle patches/* /tmp/imagetool/patches/ RUN /u01/oracle/OPatch/opatch napply -silent -oh /u01/oracle -phBaseDir /tmp/imagetool/patches \\ \u0026amp;\u0026amp; /u01/oracle/OPatch/opatch util cleanup -silent -oh /u01/oracle \\ \u0026amp;\u0026amp; rm -rf /tmp/imagetool ########## END DOCKERFILE ########## [INFO ] Dry run complete. No image created. Check the built image using the Docker images command:\n$ docker images | grep wcsites oracle/wcsites 12.2.1.4-21.1.1-32315127 2ef2a67a685b About a minute ago 2.84GB oracle/wcsites 12.2.1.4-21.1.1 445b649a3459 4 days ago 3.2GB Create an Oracle WebCenter Sites Docker image using Dockerfile For test and development purposes, you can create an Oracle WebCenter Sites image using the Dockerfile. Consult the README file for important prerequisite steps, such as building or pulling the Server JRE Docker image, Oracle FMW Infrastructure Docker image, and downloading the Oracle WebCenter Sites installer and bundle patch binaries.\nA prebuilt Oracle Fusion Middleware Infrastructure image, container-registry.oracle.com/middleware/fmw-infrastructure:12.2.1.4, is available at container-registry.oracle.com. We recommend that you pull and rename this image to build the Oracle WebCenter Sites image.\n$ docker pull \u0026lt;path-to-container-registry\u0026gt;/fmw-infrastructure:12.2.1.4 $ docker tag \u0026lt;path-to-container-registry\u0026gt;/fmw-infrastructure:12.2.1.4 oracle/fmw-infrastructure:12.2.1.4 Follow these steps to build an Oracle Fusion Middleware Infrastructure image, and then the Oracle WebCenter Sites image as a layer on top of that:\n Make a local clone of the sample repository:\n$ git clone https://github.com/oracle/docker-images Build the oracle/fmw-infrastructure:12.2.1.4 image:\n$ cd docker-images/OracleFMWInfrastructure/dockerfiles $ sh buildDockerImage.sh -v 12.2.1.4 -s This will produce an image named oracle/fmw-infrastructure:12.2.1.4.\n Download the Oracle WebCenter Sites installer from the Oracle Technology Network or e-delivery.\n Note: Copy the installer binaries to the same location as the Dockerfile.\n To build the Oracle WebCenter Sites image with patches, you must download and drop the patch zip files (for example, p32315127_122140_Generic.zip) into the patches/ folder under the version that is required. For example, for 12.2.1.4 the folder is 12.2.1.4/patches.\n Create the Oracle WebCenter Sites image by running the provided script:\n$ cd docker-images/OracleWebCenterSites/dockerfiles $ ./buildDockerImage.sh -v 12.2.1.4 -s The image produced will be named oracle/wcsites:12.2.1.4. The samples and instructions assume the Oracle WebCenter Sites image is named wcsites:12.2.1.4. You must rename your image to match this name, or update the samples to refer to the image you created.\n$ docker tag oracle/wcsites:12.2.1.4 oracle/wcsites:12.2.1.4-21.1.1 " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/enablingt3/", + "title": "Expose the T3/T3S protocol", + "tags": [], + "description": "Create a T3/T3S channel and the corresponding Kubernetes service to expose the T3/T3S protocol for the Administration Server and Managed Servers in an Oracle SOA Suite domain.", + "content": " Oracle strongly recommends that you do not expose non-HTTPS traffic (T3/T3s/LDAP/IIOP/IIOPs) outside of the external firewall. You can control this access using a combination of network channels and firewalls.\n You can create T3/T3S channels and the corresponding Kubernetes service to expose the T3/T3S protocol for the Administration Server and Managed Servers in an Oracle SOA Suite domain.\nThe WebLogic Kubernetes Operator provides an option to expose a T3 channel for the Administration Server using the exposeAdminT3Channel setting during domain creation, then the matching T3 service can be used to connect. By default, when exposeAdminT3Channel is set, the WebLogic Kubernetes Operator environment exposes the NodePort for the T3 channel of the NetworkAccessPoint at 30012 (use t3ChannelPort to configure the port to a different value).\nIf you miss enabling exposeAdminT3Channel during domain creation, follow these steps to create a T3 channel for Administration Server manually.\nExpose a T3/T3S Channel for the Administration Server To create a custom T3/T3S channel for the Administration Server that has a listen port listen_port and a paired public port public_port:\n Create t3_admin_config.py with the following content:\nadmin_pod_name = sys.argv[1] admin_port = sys.argv[2] user_name = sys.argv[3] password = sys.argv[4] listen_port = sys.argv[5] public_port = sys.argv[6] public_address = sys.argv[7] AdminServerName = sys.argv[8] channelType = sys.argv[9] print(\u0026#39;custom admin_pod_name : [%s]\u0026#39; % admin_pod_name); print(\u0026#39;custom admin_port : [%s]\u0026#39; % admin_port); print(\u0026#39;custom user_name : [%s]\u0026#39; % user_name); print(\u0026#39;custom password : ********\u0026#39;); print(\u0026#39;public address : [%s]\u0026#39; % public_address); print(\u0026#39;channel listen port : [%s]\u0026#39; % listen_port); print(\u0026#39;channel public listen port : [%s]\u0026#39; % public_port); connect(user_name, password, \u0026#39;t3://\u0026#39; + admin_pod_name + \u0026#39;:\u0026#39; + admin_port) edit() startEdit() cd(\u0026#39;/\u0026#39;) cd(\u0026#39;Servers/%s/\u0026#39; % AdminServerName ) if channelType == \u0026#39;t3\u0026#39;: create(\u0026#39;T3Channel_AS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) cd(\u0026#39;NetworkAccessPoints/T3Channel_AS\u0026#39;) set(\u0026#39;Protocol\u0026#39;,\u0026#39;t3\u0026#39;) set(\u0026#39;ListenPort\u0026#39;,int(listen_port)) set(\u0026#39;PublicPort\u0026#39;,int(public_port)) set(\u0026#39;PublicAddress\u0026#39;, public_address) print(\u0026#39;Channel T3Channel_AS added\u0026#39;) elif channelType == \u0026#39;t3s\u0026#39;:\tcreate(\u0026#39;T3SChannel_AS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) cd(\u0026#39;NetworkAccessPoints/T3SChannel_AS\u0026#39;) set(\u0026#39;Protocol\u0026#39;,\u0026#39;t3s\u0026#39;) set(\u0026#39;ListenPort\u0026#39;,int(listen_port)) set(\u0026#39;PublicPort\u0026#39;,int(public_port)) set(\u0026#39;PublicAddress\u0026#39;, public_address) set(\u0026#39;HttpEnabledForThisProtocol\u0026#39;, true) set(\u0026#39;OutboundEnabled\u0026#39;, false) set(\u0026#39;Enabled\u0026#39;, true) set(\u0026#39;TwoWaySSLEnabled\u0026#39;, true) set(\u0026#39;ClientCertificateEnforced\u0026#39;, false) else: print(\u0026#39;channelType [%s] not supported\u0026#39;,channelType) activate() disconnect() Copy t3_admin_config.py into the domain home (for example, /u01/oracle/user_projects/domains/soainfra) of the Administration Server pod (for example, soainfra-adminserver in soans namespace).\n $ kubectl cp t3_admin_config.py soans/soainfra-adminserver:/u01/oracle/user_projects/domains/soainfra Run wlst.sh t3_admin_config.py by using exec into the Administration Server pod with the following parameters:\n admin_pod_name: soainfra-adminserver # Administration Server pod admin_port: 7001 user_name: weblogic password: Welcome1 # weblogic password listen_port: 30014 # New port for T3 Administration Server public_port: 30014 # Kubernetes NodePort which will be used to expose T3 port externally public_address: AdminServerName: AdminServer # Give administration Server name channelType: t3 # t3 or t3s protocol channel $ kubectl exec -it \u0026lt;Administration Server pod\u0026gt; -n \u0026lt;namespace\u0026gt; -- /u01/oracle/oracle_common/common/bin/wlst.sh \u0026lt;domain_home\u0026gt;/t3_admin_config.py \u0026lt;Administration Server pod\u0026gt; \u0026lt;Administration Server port\u0026gt; weblogic \u0026lt;password for weblogic\u0026gt; \u0026lt;t3 port on Administration Server\u0026gt; \u0026lt;t3 nodeport\u0026gt; \u0026lt;master_ip\u0026gt; \u0026lt;AdminServerName\u0026gt; \u0026lt;channelType t3 or t3s\u0026gt; For example:\n$ kubectl exec -it soainfra-adminserver -n soans -- /u01/oracle/oracle_common/common/bin/wlst.sh /u01/oracle/user_projects/domains/soainfra/t3_admin_config.py soainfra-adminserver 7001 weblogic Welcome1 30014 30014 xxx.xxx.xxx.xxx AdminServer t3 Create t3_admin_svc.yaml with the following contents to expose T3 at NodePort 30014 for domainName and domainUID as soainfra and domain deployed in soans namespace:\n Note: For T3S, replace NodePort 30014 with the appropriate value used with public_port while creating the T3S channel using wlst.sh in the previous step.\n apiVersion: v1 kind: Service metadata: name: soainfra-adminserver-t3-external namespace: soans labels: weblogic.serverName: AdminServer weblogic.domainName: soainfra weblogic.domainUID: soainfra spec: type: NodePort selector: weblogic.domainName: soainfra weblogic.domainUID: soainfra weblogic.serverName: AdminServer ports: - name: t3adminport protocol: TCP port: 30014 targetPort: 30014 nodePort: 30014 Create the NodePort service for port 30014:\n$ kubectl create -f t3_admin_svc.yaml Verify that you can access T3 for the Administration Server with the following URL:\nt3://\u0026lt;master_ip\u0026gt;:30014 Similarly, you can access T3S as follows:\na. First get the certificates from the Administration Server to be used for secured (T3S) connection from the client. You can export the certificate from the Administration Server with WLST commands. For example, to export the default demoidentity:\n Note: If you are using the custom SSL certificate, replace the steps accordingly.\n $ kubectl exec -it soainfra-adminserver -n soans -- bash $ /u01/oracle/oracle_common/common/bin/wlst.sh $ connect('weblogic','Welcome1','t3://soainfra-adminserver:7001') $ svc = getOpssService(name='KeyStoreService') $ svc.exportKeyStoreCertificate(appStripe='system', name='demoidentity', password='DemoIdentityKeyStorePassPhrase', alias='DemoIdetityKeyStorePassPhrase', type='Certificate', filepath='/tmp/cert.txt/') These steps download the certificate at /tmp/cert.txt.\nb. Use the same certificates from the client side and connect using t3s. For example:\n$ export JAVA_HOME=/u01/jdk $ keytool -import -v -trustcacerts -alias soadomain -file cert.txt -keystore $JAVA_HOME/jre/lib/security/cacerts -keypass changeit -storepass changeit $ export WLST_PROPERTIES=\u0026quot;-Dweblogic.security.SSL.ignoreHostnameVerification=true\u0026quot; $ cd $ORACLE_HOME/oracle_common/common/bin $ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands $ wls:/offline\u0026gt; connect('weblogic','Welcome1','t3s://\u0026lt;Master IP address\u0026gt;:30014') Expose T3/T3S for Managed Servers To create a custom T3/T3S channel for all Managed Servers, with a listen port listen_port and a paired public port public_port:\n Create t3_ms_config.py with the following content:\nadmin_pod_name = sys.argv[1] admin_port = sys.argv[2] user_name = sys.argv[3] password = sys.argv[4] listen_port = sys.argv[5] public_port = sys.argv[6] public_address = sys.argv[7] managedNameBase = sys.argv[8] ms_count = sys.argv[9] channelType = sys.argv[10] print(\u0026#39;custom host : [%s]\u0026#39; % admin_pod_name); print(\u0026#39;custom port : [%s]\u0026#39; % admin_port); print(\u0026#39;custom user_name : [%s]\u0026#39; % user_name); print(\u0026#39;custom password : ********\u0026#39;); print(\u0026#39;public address : [%s]\u0026#39; % public_address); print(\u0026#39;channel listen port : [%s]\u0026#39; % listen_port); print(\u0026#39;channel public listen port : [%s]\u0026#39; % public_port); connect(user_name, password, \u0026#39;t3://\u0026#39; + admin_pod_name + \u0026#39;:\u0026#39; + admin_port) edit() startEdit() for index in range(0, int(ms_count)): cd(\u0026#39;/\u0026#39;) msIndex = index+1 cd(\u0026#39;/\u0026#39;) name = \u0026#39;%s%s\u0026#39; % (managedNameBase, msIndex) cd(\u0026#39;Servers/%s/\u0026#39; % name ) if channelType == \u0026#39;t3\u0026#39;: create(\u0026#39;T3Channel_MS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) cd(\u0026#39;NetworkAccessPoints/T3Channel_MS\u0026#39;) set(\u0026#39;Protocol\u0026#39;,\u0026#39;t3\u0026#39;) set(\u0026#39;ListenPort\u0026#39;,int(listen_port)) set(\u0026#39;PublicPort\u0026#39;,int(public_port)) set(\u0026#39;PublicAddress\u0026#39;, public_address) print(\u0026#39;Channel T3Channel_MS added ...for \u0026#39; + name) elif channelType == \u0026#39;t3s\u0026#39;:\tcreate(\u0026#39;T3SChannel_MS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) cd(\u0026#39;NetworkAccessPoints/T3SChannel_MS\u0026#39;) set(\u0026#39;Protocol\u0026#39;,\u0026#39;t3s\u0026#39;) set(\u0026#39;ListenPort\u0026#39;,int(listen_port)) set(\u0026#39;PublicPort\u0026#39;,int(public_port)) set(\u0026#39;PublicAddress\u0026#39;, public_address) set(\u0026#39;HttpEnabledForThisProtocol\u0026#39;, true) set(\u0026#39;OutboundEnabled\u0026#39;, false) set(\u0026#39;Enabled\u0026#39;, true) set(\u0026#39;TwoWaySSLEnabled\u0026#39;, true) set(\u0026#39;ClientCertificateEnforced\u0026#39;, false) print(\u0026#39;Channel T3SChannel_MS added ...for \u0026#39; + name) else: print(\u0026#39;Protocol [%s] not supported\u0026#39; % channelType) activate() disconnect() Copy t3_ms_config.py into the domain home (for example, /u01/oracle/user_projects/domains/soainfra) of the Administration Server pod (for example, soainfra-adminserver in soans namespace).\n$ kubectl cp t3_ms_config.py soans/soainfra-adminserver:/u01/oracle/user_projects/domains/soainfra Run wlst.sh t3_ms_config.py by exec into the Administration Server pod with the following parameters:\n admin_pod_name: soainfra-adminserver # Administration Server pod admin_port: 7001 user_name: weblogic password: Welcome1 # weblogic password listen_port: 30016 # New port for T3 Managed Servers public_port: 30016 # Kubernetes NodePort which will be used to expose T3 port externally public_address: managedNameBase: soa_server # Give Managed Server base name. For osb_cluster this will be osb_server ms_count: 5 # Number of configured Managed Servers channelType: t3 # channelType is t3 or t3s $ kubectl exec -it \u0026lt;Administration Server pod\u0026gt; -n \u0026lt;namespace\u0026gt; -- /u01/oracle/oracle_common/common/bin/wlst.sh \u0026lt;domain_home\u0026gt;/t3_ms_config.py \u0026lt;Administration Server pod\u0026gt; \u0026lt;Administration Server port\u0026gt; weblogic \u0026lt;password for weblogic\u0026gt; \u0026lt;t3 port on Managed Server\u0026gt; \u0026lt;t3 nodeport\u0026gt; \u0026lt;master_ip\u0026gt; \u0026lt;managedNameBase\u0026gt; \u0026lt;ms_count\u0026gt; \u0026lt;channelType t3 or t3s\u0026gt; For example:\n$ kubectl exec -it soainfra-adminserver -n soans -- /u01/oracle/oracle_common/common/bin/wlst.sh /u01/oracle/user_projects/domains/soainfra/t3_ms_config.py soainfra-adminserver 7001 weblogic Welcome1 30016 30016 xxx.xxx.xxx.xxx soa_server 5 t3 Create t3_ms_svc.yaml with the following contents to expose T3 at Managed Server port 30016 for domainName, domainUID as soainfra, and clusterName as soa_cluster for the SOA cluster. Similarly, you can create the Kubernetes service with clusterName as osb_cluster for an Oracle Service Bus cluster:\n Note: For T3S, replace NodePort 30016 with the appropriate value used with public_port while creating the T3S channel using wlst.sh in the previous step.\n apiVersion: v1 kind: Service metadata: name: soainfra-soa-cluster-t3-external namespace: soans labels: weblogic.clusterName: soa_cluster weblogic.domainName: soainfra weblogic.domainUID: soainfra spec: type: NodePort selector: weblogic.domainName: soainfra weblogic.domainUID: soainfra weblogic.clusterName: soa_cluster ports: - name: t3soaport protocol: TCP port: 30016 targetPort: 30016 nodePort: 30016 Create the NodePort service for port 30016:\n$ kubectl create -f t3_ms_svc.yaml Verify that you can access T3 for the Managed Server with the following URL:\nt3://\u0026lt;master_ip\u0026gt;:30016 Similarly, you can access T3S as follows:\na. First get the certificates from the Administration Server to be used for secured (t3s) connection from client. You can export the certificate from the Administration Server with wlst commands. Sample commands to export the default demoidentity:\n Note: In case you are using the custom SSL certificate, replaces the steps accordingly\n $ kubectl exec -it soainfra-adminserver -n soans -- bash $ /u01/oracle/oracle_common/common/bin/wlst.sh $ connect('weblogic','Welcome1','t3://soainfra-adminserver:7001') $ svc = getOpssService(name='KeyStoreService') $ svc.exportKeyStoreCertificate(appStripe='system', name='demoidentity', password='DemoIdentityKeyStorePassPhrase', alias='DemoIdetityKeyStorePassPhrase', type='Certificate', filepath='/tmp/cert.txt/') The above steps download the certificate at /tmp/cert.txt.\nb. Use the same certificates from the client side and connect using t3s. For example:\n$ export JAVA_HOME=/u01/jdk $ keytool -import -v -trustcacerts -alias soadomain -file cert.txt -keystore $JAVA_HOME/jre/lib/security/cacerts -keypass changeit -storepass changeit $ export WLST_PROPERTIES=\u0026quot;-Dweblogic.security.SSL.ignoreHostnameVerification=true\u0026quot; $ cd $ORACLE_HOME/oracle_common/common/bin $ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands $ wls:/offline\u0026gt; connect('weblogic','Welcome1','t3s://\u0026lt;Master IP address\u0026gt;:30016') Remove T3/T3S configuration For Administration Server Create t3_admin_delete.py with the following content:\nadmin_pod_name = sys.argv[1] admin_port = sys.argv[2] user_name = sys.argv[3] password = sys.argv[4] AdminServerName = sys.argv[5] channelType = sys.argv[6] print(\u0026#39;custom admin_pod_name : [%s]\u0026#39; % admin_pod_name); print(\u0026#39;custom admin_port : [%s]\u0026#39; % admin_port); print(\u0026#39;custom user_name : [%s]\u0026#39; % user_name); print(\u0026#39;custom password : ********\u0026#39;); connect(user_name, password, \u0026#39;t3://\u0026#39; + admin_pod_name + \u0026#39;:\u0026#39; + admin_port) edit() startEdit() cd(\u0026#39;/\u0026#39;) cd(\u0026#39;Servers/%s/\u0026#39; % AdminServerName ) if channelType == \u0026#39;t3\u0026#39;: delete(\u0026#39;T3Channel_AS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) elif channelType == \u0026#39;t3s\u0026#39;: delete(\u0026#39;T3SChannel_AS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) else: print(\u0026#39;channelType [%s] not supported\u0026#39;,channelType) activate() disconnect() Copy t3_admin_delete.py into the domain home (for example, /u01/oracle/user_projects/domains/soainfra) of the Administration Server pod (for example, soainfra-adminserver in soans namespace).\n$ kubectl cp t3_admin_delete.py soans/soainfra-adminserver:/u01/oracle/user_projects/domains/soainfra Run wlst.sh t3_admin_delete.py by exec into the Administration Server pod with the following parameters:\n admin_pod_name: soainfra-adminserver # Administration Server pod admin_port: 7001 user_name: weblogic password: Welcome1 # weblogic password AdminServerName: AdminServer # Give administration Server name channelType: t3 # T3 channel $ kubectl exec -it \u0026lt;Administration Server pod\u0026gt; -n \u0026lt;namespace\u0026gt; -- /u01/oracle/oracle_common/common/bin/wlst.sh \u0026lt;domain_home\u0026gt;/t3_admin_delete.py \u0026lt;Administration Server pod\u0026gt; \u0026lt;Administration Server port\u0026gt; weblogic \u0026lt;password for weblogic\u0026gt; \u0026lt;AdminServerName\u0026gt; \u0026lt;protocol t3 or t3s\u0026gt; For example:\n$ kubectl exec -it soainfra-adminserver -n soans -- /u01/oracle/oracle_common/common/bin/wlst.sh /u01/oracle/user_projects/domains/soainfra/t3_admin_delete.py soainfra-adminserver 7001 weblogic Welcome1 AdminServer t3 Delete the NodePort service for port 30014:\n$ kubectl delete -f t3_admin_svc.yaml For Managed Servers These steps delete the custom T3/T3S channel created by Expose T3/T3S for Managed Servers for all Managed Servers.\n Create t3_ms_delete.py with the following content:\nadmin_pod_name = sys.argv[1] admin_port = sys.argv[2] user_name = sys.argv[3] password = sys.argv[4] managedNameBase = sys.argv[5] ms_count = sys.argv[6] channelType = sys.argv[7] print(\u0026#39;custom host : [%s]\u0026#39; % admin_pod_name); print(\u0026#39;custom port : [%s]\u0026#39; % admin_port); print(\u0026#39;custom user_name : [%s]\u0026#39; % user_name); print(\u0026#39;custom password : ********\u0026#39;); connect(user_name, password, \u0026#39;t3://\u0026#39; + admin_pod_name + \u0026#39;:\u0026#39; + admin_port) edit() startEdit() for index in range(0, int(ms_count)): cd(\u0026#39;/\u0026#39;) msIndex = index+1 cd(\u0026#39;/\u0026#39;) name = \u0026#39;%s%s\u0026#39; % (managedNameBase, msIndex) cd(\u0026#39;Servers/%s/\u0026#39; % name ) if channelType == \u0026#39;t3\u0026#39;: delete(\u0026#39;T3Channel_MS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) elif channelType == \u0026#39;t3s\u0026#39;: delete(\u0026#39;T3SChannel_MS\u0026#39;,\u0026#39;NetworkAccessPoint\u0026#39;) else: print(\u0026#39;Protocol [%s] not supported\u0026#39; % channelType) activate() disconnect() Copy t3_ms_delete.py into the domain home (for example, /u01/oracle/user_projects/domains/soainfra) of the Administration Server pod (for example, soainfra-adminserver in soans namespace).\n$ kubectl cp t3_ms_delete.py soans/soainfra-adminserver:/u01/oracle/user_projects/domains/soainfra Run wlst.sh t3_ms_delete.py by exec into the Administration Server pod with the following parameters:\n admin_pod_name: soainfra-adminserver # Administration Server pod admin_port: 7001 user_name: weblogic password: Welcome1 # weblogic password managedNameBase: soa_server # Give Managed Server base name. For osb_cluster this will be osb_server ms_count: 5 # Number of configured Managed Servers channelType: t3 # channelType is t3 or t3s $ kubectl exec -it \u0026lt;Administration Server pod\u0026gt; -n \u0026lt;namespace\u0026gt; -- /u01/oracle/oracle_common/common/bin/wlst.sh \u0026lt;domain_home\u0026gt;/t3_ms_delete.py \u0026lt;Administration Server pod\u0026gt; \u0026lt;Administration Server port\u0026gt; weblogic \u0026lt;password for weblogic\u0026gt; \u0026lt;t3 port on Managed Server\u0026gt; \u0026lt;t3 nodeport\u0026gt; \u0026lt;master_ip\u0026gt; \u0026lt;managedNameBase\u0026gt; \u0026lt;ms_count\u0026gt; \u0026lt;channelType t3 or t3s\u0026gt; For example:\n$ kubectl exec -it soainfra-adminserver -n soans -- /u01/oracle/oracle_common/common/bin/wlst.sh /u01/oracle/user_projects/domains/soainfra/t3_ms_delete.py soainfra-adminserver 7001 weblogic Welcome1 soa_server 5 t3 Delete the NodePort service for port 30016 (or the NodePort used while creating the Kubernetes service):\n$ kubectl delete -f t3_ms_svc.yaml " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/cleanup-domain-setup/", + "title": "Uninstall", + "tags": [], + "description": "Clean up the Oracle WebCenter Sites domain setup.", + "content": "Learn how to clean up the Oracle WebCenter Sites domain setup.\nStop all Administration and Managed server pods First stop the all pods related to a domain. This can be done by patching domain \u0026ldquo;serverStartPolicy\u0026rdquo; to \u0026ldquo;NEVER\u0026rdquo;. Here is the sample command for the same.\n$ kubectl patch domain wcsites-domain-name -n wcsites-namespace --type=\u0026#39;json\u0026#39; -p=\u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/serverStartPolicy\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;NEVER\u0026#34; }]\u0026#39; For example:\n$ kubectl patch domain wcsitesinfra -n wcsites-ns --type=\u0026#39;json\u0026#39; -p=\u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/serverStartPolicy\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;NEVER\u0026#34; }]\u0026#39; Drop the RCU schemas $ cd work-dir-name/weblogic-kubernetes-operator $ kubectl apply -f kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/delete-domain-job.yaml Check if the job has finished.\nRemove the domain Remove the domain\u0026rsquo;s ingress (for example, Traefik ingress) using Helm:\n$ helm uninstall wcsites-domain-ingress -n wcsites-namespace For example:\n$ helm uninstall wcsitesinfra-ingress -n wsites-ns Remove the domain resources by using the sample delete-weblogic-domain-resources.sh script present at ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/delete-domain:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/delete-domain $ ./delete-weblogic-domain-resources.sh -d sample-domain1 For example:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator/kubernetes/samples/scripts/delete-domain $ ./delete-weblogic-domain-resources.sh -d wcsites-ns Use kubectl to confirm that the server pods and domain resource are deleted:\n$ kubectl get pods -n sample-domain1-ns $ kubectl get domains -n sample-domain1-ns For example:\n$ kubectl get pods -n wcsites-ns $ kubectl get domains -n wcsites-ns Remove the domain namespace Configure the installed ingress load balancer (for example, Traefik) to stop managing the ingresses in the domain namespace:\n$ helm upgrade traefik-operator stable/traefik \\ --namespace traefik \\ --reuse-values \\ --set \u0026#34;kubernetes.namespaces={traefik}\u0026#34; \\ --wait Configure the operator to stop managing the domain:\n$ helm upgrade sample-weblogic-operator \\ kubernetes/charts/weblogic-operator \\ --namespace sample-weblogic-operator-ns \\ --reuse-values \\ --set \u0026#34;domainNamespaces={}\u0026#34; \\ --wait \\ For example:\n$ cd ${WORKDIR}/weblogic-kubernetes-operator $ helm upgrade weblogic-kubernetes-operator \\ kubernetes/charts/weblogic-operator \\ --namespace operator-ns \\ --reuse-values \\ --set \u0026#34;domainNamespaces={}\u0026#34; \\ --wait \\ Delete the domain namespace:\n$ kubectl delete namespace sample-domain1-ns For example:\n$ kubectl delete namespace wcsites-ns Remove the operator Remove the operator:\n$ helm uninstall sample-weblogic-operator -n sample-weblogic-operator-ns For example:\n$ helm uninstall weblogic-kubernetes-operator -n operator-ns Remove the operator\u0026rsquo;s namespace:\n$ kubectl delete namespace sample-weblogic-operator-ns For example:\n$ kubectl delete namespace operator-ns Remove the load balancer Remove the installed ingress based load balancer (for example, Traefik):\n$ helm uninstall traefik-operator -n traefik Remove the Traefik namespace:\n$ kubectl delete namespace traefik Delete the domain home To remove the domain home that is generated using the create-domain.sh script, with appropriate privileges manually delete the contents of the storage attached to the domain home persistent volume (PV).\nFor example, for the domain\u0026rsquo;s persistent volume of type host_path:\n$ rm -rf /scratch/K8SVolume/WCSites\r" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/", + "title": "Oracle Cloud Infrastructure", + "tags": [], + "description": "Setting up WebCenter Sites domains with WebLogic Kubernetes Operator", + "content": "This is a guide to run WebLogic Kubernetes Operator managed WebcenterSites domains on Oracle Cloud Infrastructure.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/", + "title": "Deploy composite applications", + "tags": [], + "description": "Deploy composite applications for Oracle SOA Suite and Oracle Service Bus domains.", + "content": "Learn how to deploy the composite applications for Oracle SOA Suite and Oracle Service Bus domains.\n Deploy using JDeveloper Deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper to Oracle SOA Suite in the WebLogic Kubernetes Operator environment.\n Deploy using Maven and Ant Deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite deployment.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/cleanup-domain-setup/", + "title": "Uninstall", + "tags": [], + "description": "Clean up the Oracle SOA Suite domain setup.", + "content": "Learn how to clean up the Oracle SOA Suite domain setup.\nRemove the domain Remove the domain\u0026rsquo;s ingress (for example, Traefik ingress) using Helm:\n$ helm uninstall soa-domain-ingress -n sample-domain1-ns For example:\n$ helm uninstall soainfra-traefik -n soans Remove the domain resources by using the sample delete-weblogic-domain-resources.sh script present at ${WORKDIR}/delete-domain:\n$ cd ${WORKDIR}/delete-domain $ ./delete-weblogic-domain-resources.sh -d sample-domain1 For example:\n$ cd ${WORKDIR}/delete-domain $ ./delete-weblogic-domain-resources.sh -d soainfra Use kubectl to confirm that the server pods and domain resource are deleted:\n$ kubectl get pods -n sample-domain1-ns $ kubectl get domains -n sample-domain1-ns For example:\n$ kubectl get pods -n soans $ kubectl get domains -n soans Drop the RCU schemas Follow these steps to drop the RCU schemas created for Oracle SOA Suite domains.\nRemove the domain namespace Configure the installed ingress load balancer (for example, Traefik) to stop managing the ingresses in the domain namespace:\n$ helm upgrade traefik traefik/traefik \\ --namespace traefik \\ --reuse-values \\ --set \u0026#34;kubernetes.namespaces={traefik}\u0026#34; \\ --wait Configure the operator to stop managing the domain:\n$ helm upgrade sample-weblogic-operator \\ charts/weblogic-operator \\ --namespace sample-weblogic-operator-ns \\ --reuse-values \\ --set \u0026#34;domainNamespaces={}\u0026#34; \\ --wait For example:\n$ cd ${WORKDIR} $ helm upgrade weblogic-kubernetes-operator \\ charts/weblogic-operator \\ --namespace opns \\ --reuse-values \\ --set \u0026#34;domainNamespaces={}\u0026#34; \\ --wait Delete the domain namespace:\n$ kubectl delete namespace sample-domain1-ns For example:\n$ kubectl delete namespace soans Remove the operator Remove the operator:\n$ helm uninstall sample-weblogic-operator -n sample-weblogic-operator-ns For example:\n$ helm uninstall weblogic-kubernetes-operator -n opns Remove the operator\u0026rsquo;s namespace:\n$ kubectl delete namespace sample-weblogic-operator-ns For example:\n$ kubectl delete namespace opns Remove the load balancer Remove the installed ingress based load balancer (for example, Traefik):\n$ helm uninstall traefik -n traefik Remove the Traefik namespace:\n$ kubectl delete namespace traefik Delete the domain home To remove the domain home that is generated using the create-domain.sh script, with appropriate privileges manually delete the contents of the storage attached to the domain home persistent volume (PV).\nFor example, for the domain\u0026rsquo;s persistent volume of type host_path:\n$ rm -rf /scratch/k8s_dir/SOA " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/faq/", + "title": "Frequently Asked Questions", + "tags": [], + "description": "This section describes known issues for Oracle SOA Suite domains deployment on Kubernetes. Also, provides answers to frequently asked questions.", + "content": "Overriding tuning parameters is not supported using configuration overrides The WebLogic Kubernetes Operator enables you to override some of the domain configuration using configuration overrides (also called situational configuration). See supported overrides. Overriding the tuning parameters such as MaxMessageSize and PAYLOAD, for Oracle SOA Suite domains is not supported using the configuration overrides feature. However, you can override them using the following steps:\n Specify the new value using the environment variable K8S_REFCONF_OVERRIDES in serverPod.env section in domain.yaml configuration file (example path: \u0026lt;domain-creation-output-directory\u0026gt;/weblogic-domains/soainfra/domain.yaml) based on the servers to which the changes are to be applied.\nFor example, to override the value at the Administration Server pod level:\nspec: adminServer: serverPod: env: - name: K8S_REFCONF_OVERRIDES value: \u0026#34;-Dweblogic.MaxMessageSize=78787878\u0026#34; - name: USER_MEM_ARGS value: \u0026#39;-Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx1024m \u0026#39; serverStartState: RUNNING For example, to override the value at a specific cluster level (soa_cluster or osb_cluster):\n- clusterName: soa_cluster serverService: precreateService: true serverStartState: \u0026#34;RUNNING\u0026#34; serverPod: env: - name: K8S_REFCONF_OVERRIDES value: \u0026#34;-Dsoa.payload.threshold.kb=102410\u0026#34; Note: When multiple system properties are specified for serverPod.env.value, make sure each system property is separated by a space.\n Apply the updated domain.yaml file:\n$ kubectl apply -f domain.yaml Note: The server pod(s) will be automatically restarted (rolling restart).\n Deployments in the WebLogic Server Administration Console may display unexpected error In an Oracle SOA Suite environment deployed using the operator, accessing Deployments from the WebLogic Server Administration Console home page may display the error message Unexpected error encountered while obtaining monitoring information for applications. This error does not have any functional impact and can be ignored. You can verify that the applications are in Active state from the Control tab in Summary of deployments page.\nEnterprise Manager Console may display ADF_FACES-30200 error In an Oracle SOA Suite environment deployed using the operator, the Enterprise Manager Console may intermittently display the following error when the domain servers are restarted:\nADF_FACES-30200: For more information, please see the server\u0026#39;s error log for an entry beginning with: The UIViewRoot is null. Fatal exception during PhaseId: RESTORE_VIEW 1. You can refresh the Enterprise Manager Console URL to successfully log in to the Console.\nConfigure the external URL access for Oracle SOA Suite composite applications For Oracle SOA Suite composite applications to access the external URLs over the internet (if your cluster is behind a http proxy server), you must configure the following proxy parameters for Administration Server and Managed Server pods.\n-Dhttp.proxyHost=www-your-proxy.com -Dhttp.proxyPort=proxy-port -Dhttps.proxyHost=www-your-proxy.com -Dhttps.proxyPort=proxy-port -Dhttp.nonProxyHosts=\u0026#34;localhost|soainfra-adminserver|soainfra-soa-server1|soainfra-osb-server1|...soainfra-soa-serverN|*.svc.cluster.local|*.your.domain.com|/var/run/docker.sock\u0026#34; To do this, edit the domain.yaml configuration file and append the proxy parameters to the spec.serverPod.env.JAVA_OPTIONS environment variable value.\nFor example:\nserverPod: env: - name: JAVA_OPTIONS value: -Dweblogic.StdoutDebugEnabled=false -Dweblogic.ssl.Enabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=true -Dhttp.proxyHost=www-your-proxy.com -Dhttp.proxyPort=proxy-port -Dhttps.proxyHost=www-your-proxy.com -Dhttps.proxyPort=proxy-port -Dhttp.nonProxyHosts=\u0026#34;localhost|soainfra-adminserver|soainfra-soa-server1|soainfra-osb-server1|...soainfra-soa-serverN|*.svc.cluster.local|*.your.domain.com|/var/run/docker.sock\u0026#34; - name: USER_MEM_ARGS value: \u0026#39;-Djava.security.egd=file:/dev/./urandom -Xms256m -Xmx1024m \u0026#39; volumeMounts: Note: The -Dhttp.nonProxyHosts parameter must have the pod names of the Administration Server and each Managed Server. For example: soainfra-adminserver, soainfra-soa-server1, soainfra-osb-server1, and so on.\n Apply the updated domain.yaml file:\n$ kubectl apply -f domain.yaml Note: The server pod(s) will be automatically restarted (rolling restart).\n Configure the external access for the Oracle Enterprise Scheduler WebServices WSDL URLs In an Oracle SOA Suite domain deployed including the Oracle Enterprise Scheduler (ESS) component, the following ESS WebServices WSDL URLs shown in the table format in the ess/essWebServicesWsdl.jsp page are not reachable outside the Kubernetes cluster.\nESSWebService EssAsyncCallbackService EssWsJobAsyncCallbackService Follow these steps to configure the external access for the Oracle Enterprise Scheduler WebServices WSDL URLs:\n Log in to the Administration Console URL of the domain.\nFor example: http://\u0026lt;LOADBALANCER-HOST\u0026gt;:\u0026lt;port\u0026gt;/console In the Home Page, click Clusters. Then click the soa_cluster. Click the HTTP tab and then click Lock \u0026amp; Edit in the Change Center panel. Update the following values: Frontend Host: host name of the load balancer. For example, domain1.example.com. Frontend HTTP Port: load balancer port. For example, 30305. Frontend HTTPS Port: load balancer https port. For example, 30443. Click Save. Click Activate Changes in the Change Center panel. Restart the servers in the SOA cluster. Note: Do not restart servers from the Administration Console.\n Missing gif images in Oracle Service Bus console pipeline configuration page In an Oracle SOA Suite domain environment upgraded to the release 21.1.2, some gif images are not rendered in the Oracle Serice Bus console pipeline configuration page, as their corresponding url paths are not exposed via the Ingress path rules in the earlier releases (for Non-SSL and SSL termination). To resolve this issue, perform the following steps to apply the latest ingress configuration:\n$ cd ${WORKDIR} $ helm upgrade \u0026lt;helm_release_for_ingress\u0026gt; \\ charts/ingress-per-domain \\ --namespace \u0026lt;domain_namespace\u0026gt; \\ --reuse-values Note: helm_release_for_ingress is the ingress name used in the corresponding helm install command for the ingress installation.\n For example, to upgrade the NGINX based ingress configuration:\n$ cd ${WORKDIR} $ helm upgrade soa-nginx-ingress \\ charts/ingress-per-domain \\ --namespace soans \\ --reuse-values WebLogic Kubernetes Operator FAQs See the general frequently asked questions for using the WebLogic Kubernetes Operator.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/faq/", + "title": "Frequently Asked Questions", + "tags": [], + "description": "This section describes known issues for Oracle WebCenter Sites domains deployment on Kubernetes. Also, provides answers to frequently asked questions.", + "content": "Configure the external URL access for Oracle WebCenter Sites composite applications For Oracle WebCenter Sites composite applications to access the external URLs over the internet (if your cluster is behind a http proxy server), you must configure the following proxy parameters for Administration Server and Managed Server pods.\n-Dhttp.proxyHost=www-your-proxy.com -Dhttp.proxyPort=proxy-port -Dhttps.proxyHost=www-your-proxy.com -Dhttps.proxyPort=proxy-port -Dhttp.nonProxyHosts=\u0026#34;localhost|wcsitesinfra-adminserver|wcsitesinfra-wcsites-server1|*.svc.cluster.local|*.your.domain.com|/var/run/docker.sock\u0026#34; To do this, edit the domain.yaml configuration file and append the proxy parameters to the spec.serverPod.env.JAVA_OPTIONS environment variable value.\nFor example:\nserverPod: env: - name: JAVA_OPTIONS value: -Dweblogic.StdoutDebugEnabled=false -Dweblogic.ssl.Enabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=true -Dhttp.proxyHost=www-your-proxy.com -Dhttp.proxyPort=proxy-port -Dhttps.proxyHost=www-your-proxy.com -Dhttps.proxyPort=proxy-port -Dhttp.nonProxyHosts=\u0026#34;localhost|wcsitesinfra-adminserver|wcsitesinfra-wcsites-server1|*.svc.cluster.local|*.your.domain.com|/var/run/docker.sock\u0026#34; - name: USER_MEM_ARGS value: \u0026#39;-Djava.security.egd=file:/dev/./urandom -Xms256m -Xmx1024m \u0026#39; volumeMounts: Note: The -Dhttp.nonProxyHosts parameter must have the pod names of the Administration Server and each Managed Server. For example: wcsitesinfra-adminserver, wcsitesinfra-wcsites-server1, and so on.\n Apply the updated domain.yaml file:\n$ kubectl apply -f domain.yaml Note: The server pod(s) will be automatically restarted (rolling restart).\n Oracle WebLogic Server Kubernetes Operator FAQs See the general frequently asked questions for using the Oracle WebLogic Server Kubernetes operator.\n" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/persisting-soa-adapters-customizations/", + "title": "Persist adapter customizations", + "tags": [], + "description": "Persist the customizations done for Oracle SOA Suite adapters.", + "content": "The lifetime for any customization done in a file on a server pod is up to the lifetime of that pod. The changes are not persisted once the pod goes down or is restarted.\nFor example, the following configuration updates DbAdapter.rar to create a new connection instance and creates data source CoffeeShop on the Administration Console for the same with jdbc/CoffeeShopDS.\nFile location: /u01/oracle/soa/soa/connectors/DbAdapter.rar\n\u0026lt;connection-instance\u0026gt; \u0026lt;jndi-name\u0026gt;eis/DB/CoffeeShop\u0026lt;/jndi-name\u0026gt; \u0026lt;connection-properties\u0026gt; \u0026lt;properties\u0026gt; \u0026lt;property\u0026gt; \u0026lt;name\u0026gt;XADataSourceName\u0026lt;/name\u0026gt; \u0026lt;value\u0026gt;jdbc/CoffeeShopDS\u0026lt;/value\u0026gt; \u0026lt;/property\u0026gt; \u0026lt;property\u0026gt; \u0026lt;name\u0026gt;DataSourceName\u0026lt;/name\u0026gt; \u0026lt;value\u0026gt;\u0026lt;/value\u0026gt; \u0026lt;/property\u0026gt; \u0026lt;property\u0026gt; \u0026lt;name\u0026gt;PlatformClassName\u0026lt;/name\u0026gt; \u0026lt;value\u0026gt;org.eclipse.persistence.platform.database.Oracle10Platform\u0026lt;/value\u0026gt; \u0026lt;/property\u0026gt; \u0026lt;/properties\u0026gt; \u0026lt;/connection-properties\u0026gt; \u0026lt;/connection-instance\u0026gt; If you need to persist the customizations for any of the adapter files under the SOA Oracle Home in the server pod, use one of the following methods.\nMethod 1: Customize the Adapter file using the WebLogic Administration Console: Log in to the WebLogic Administration Console, and go to Deployments \u0026gt; ABC.rar \u0026gt; Configuration \u0026gt; Outbound Connection Pools.\n Click New to create a new connection, then provide a new connection name, and click Finish.\n Go back to the new connection, update the properties as required, and save.\n Under Deployments, select ABC.rar, then Update.\nThis step asks for the Plan.xml location. This location by default will be in ${ORACLE_HOME}/soa/soa which is not under Persistent Volume (PV). Therefore, provide the domain\u0026rsquo;s PV location such as {DOMAIN_HOME}/soainfra/servers.\nNow the Plan.xml will be persisted under this location for each Managed Server.\n Method 2: Customize the Adapter file on the Worker Node: Copy ABC.rar from the server pod to a PV path:\n$ kubectl cp \u0026lt;namespace\u0026gt;/\u0026lt;SOA Managed Server pod name\u0026gt;:\u0026lt;full path of .rar file\u0026gt; \u0026lt;destination path inside PV\u0026gt; For example:\n$ kubectl cp soans/soainfra-soa-server1:/u01/oracle/soa/soa/connectors/ABC.rar ${DockerVolume}/domains/soainfra/servers/ABC.rar or do a normal file copy between these locations after entering (using kubectl exec) in to the Managed Server pod.\n Unrar ABC.rar.\n Update the new connection details in the weblogic-ra.xml file under META_INF.\n In the WebLogic Administration Console, under Deployments, select ABC.rar, then Update.\n Select the ABC.rar path as the new location, which is ${DOMAIN_HOME}/user_projects/domains/soainfra/servers/ABC.rar and click Update.\n Verify that the plan.xml or updated .rar should be persisted in the PV.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/appendix/", + "title": "Appendix", + "tags": [], + "description": "", + "content": "This section provides information on miscellaneous tasks related to Oracle SOA Suite domains deployment on Kubernetes.\n Domain resource sizing Describes the resourse sizing information for Oracle SOA Suite domains setup on Kubernetes cluster.\n Quick start deployment on-premise Describes how to quickly get an Oracle SOA Suite domain instance running (using the defaults, nothing special) for development and test purposes.\n Security hardening Review resources for the Docker and Kubernetes cluster hardening.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/appendix/", + "title": "Appendix", + "tags": [], + "description": "", + "content": "This section provides information on miscellaneous tasks related to Oracle WebCenter Sites domains deployment on Kubernetes.\n Domain resource sizing Describes the resourse sizing information for Oracle WebCenter Sites domains setup on Kubernetes cluster.\n Quick start deployment on-premise Describes how to quickly get an Oracle WebCenter Sites domain instance running (using the defaults, nothing special) for development and test purposes.\n Security hardening Review resources for the Docker and Kubernetes cluster hardening.\n " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/wcsites-domains/", + "title": "Oracle WebCenter Sites", + "tags": [], + "description": "The WebLogic Kubernetes Operator supports deployment of Oracle WebCenter Sites. Follow the instructions in this guide to set up Oracle WebCenter Sites domains on Kubernetes.", + "content": "In this release, Oracle WebCenter Sites domains are supported using the \u0026ldquo;domain on a persistent volume\u0026rdquo; model only, where the domain home is located in a persistent volume (PV).\nThe operator has several key features to assist you with deploying and managing Oracle WebCenter Sites domains in a Kubernetes environment. You can:\n Create Oracle WebCenter Sites instances in a Kubernetes persistent volume (PV). This PV can reside in an NFS file system or other Kubernetes volume types. Start servers based on declarative startup parameters and desired states. Expose the Oracle WebCenter Sites services and composites for external access. Scale Oracle WebCenter Sites domains by starting and stopping Managed Servers on demand, or by integrating with a REST API to initiate scaling based on WLDF, Prometheus, Grafana, or other rules. Publish operator and WebLogic Server logs to Elasticsearch and interact with them in Kibana. Monitor the Oracle WebCenter Sites instance using Prometheus and Grafana. Current production release The current supported production release of the Oracle WebLogic Server Kubernetes Operator, for Oracle WebCenter Sites domains deployment is 3.0.1\nRecent changes and known issues See the Release Notes for recent changes and known issues for Oracle WebCenter Sites domains deployment on Kubernetes.\nLimitations See here for limitations in this release.\nAbout this documentation This documentation includes sections targeted to different audiences. To help you find what you are looking for more easily, please consult this table of contents:\n Quick Start explains how to quickly get an Oracle WebCenter Sites domain instance running, using the defaults, nothing special. Note that this is only for development and test purposes.\n Install Guide and Administration Guide provide detailed information about all aspects of using the Kubernetes operator including:\n Installing and configuring the operator. Using the operator to create and manage Oracle WebCenter Sites domains. Configuring Kubernetes load balancers. Configuring Elasticsearch and Kibana to access the operator and WebLogic Server log files. Patching an Oracle WebCenter Sites Docker image. Removing/deleting domains. And much more! Additional reading Oracle WebCenter Sites domains deployment on Kubernetes leverages the Oracle WebLogic Server Kubernetes operator framework.\n To develop an understanding of the operator, including design, architecture, domain life cycle management, and configuration overrides, review the operator documentation. To learn more about the Oracle WebCenter Sites architecture and components, see Understanding Oracle WebCenter Sites. To understand the known issues and common questions for Oracle WebCenter Sites domains deployment on Kubernetes, see the frequently asked questions. " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/soa-domains/adminguide/performing-wlst-operations/", + "title": "Perform WLST operations", + "tags": [], + "description": "Perform WLST administration operations using a helper pod running in the same Kubernetes cluster as the Oracle SOA Suite domain.", + "content": "You can use the WebLogic Scripting Tool (WLST) to manage a domain running in a Kubernetes cluster. Some of the many ways to do this are provided here.\nIf the Administration Server was configured to expose a T3 channel using exposeAdminT3Channel when creating the domain, refer to Use WLST.\nIf you do not want to expose additional ports and perform WLST administration operations using the existing Kubernetes services created by the WebLogic Server Kubernetes operator, then follow this documentation. Here we will be creating and using a helper pod in the same Kubernetes cluster as the Oracle SOA Suite domain to perform WLST operations.\n Note: To avoid any misconfigurations, Oracle recommends that you do not use the Administration Server pod directly for WLST operations.\n Create a Kubernetes helper pod Perform WLST operations Sample WLST operations Create a Kubernetes helper pod Before creating a Kubernetes helper pod, make sure that the Oracle SOA Suite Docker image is available on the node, or you can create an image pull secret so that the pod can pull the Docker image on the host where it gets created.\n Create an image pull secret to pull image soasuite:12.2.1.4 by the helper pod.\nNote: Skip this step if you are not using an image pull secret.\n$ kubectl create secret docker-registry \u0026lt;secret-name\u0026gt; --namespace soans \\ --docker-server=\u0026lt;docker-registry-name\u0026gt; \\ --docker-username=\u0026lt;docker-user\u0026gt; \\ --docker-password=\u0026lt;docker-user\u0026gt; \\ --docker-email=\u0026lt;email-id\u0026gt; For example:\n$ kubectl create secret docker-registry image-secret --namespace soans \\ --docker-server=your-registry.com \\ --docker-username=xxxxxx \\ --docker-password=xxxxxxx \\ --docker-email=my@company.com Create a helper pod.\nFor Kubernetes 1.18.10+, and 1.19.7+:\n$ kubectl run helper \\ --image \u0026lt;image_name\u0026gt; \\ --namespace \u0026lt;domain_namespace\u0026gt; \\ --overrides='{ \u0026quot;apiVersion\u0026quot;: \u0026quot;v1\u0026quot;, \u0026quot;spec\u0026quot;: { \u0026quot;imagePullSecrets\u0026quot;: [{\u0026quot;name\u0026quot;: \u0026quot;\u0026lt;secret-name\u0026gt;\u0026quot;}] } }' \\ -- sleep infinity For Kubernetes 1.16.15+, and 1.17.13+:\n$ kubectl run helper --generator=run-pod/v1 \\ --image \u0026lt;image_name\u0026gt; \\ --namespace \u0026lt;domain_namespace\u0026gt; \\ --overrides='{ \u0026quot;apiVersion\u0026quot;: \u0026quot;v1\u0026quot;, \u0026quot;spec\u0026quot;: { \u0026quot;imagePullSecrets\u0026quot;: [{\u0026quot;name\u0026quot;: \u0026quot;\u0026lt;secret-name\u0026gt;\u0026quot;}] } }' \\ -- sleep infinity For example:\n$ kubectl run helper \\ --image soasuite:12.2.1.4 \\ --namespace soans \\ --overrides='{ \u0026quot;apiVersion\u0026quot;: \u0026quot;v1\u0026quot;, \u0026quot;spec\u0026quot;: { \u0026quot;imagePullSecrets\u0026quot;: [{\u0026quot;name\u0026quot;: \u0026quot;image-secret\u0026quot;}] } }' \\ -- sleep infinity Note: If you are not using the image pull secret, remove --overrides='{ \u0026quot;apiVersion\u0026quot;: \u0026quot;v1\u0026quot;, \u0026quot;spec\u0026quot;: { \u0026quot;imagePullSecrets\u0026quot;: [{\u0026quot;name\u0026quot;: \u0026quot;\u0026lt;secret-name\u0026gt;\u0026quot;}] } }' .\n Perform WLST operations Once the Kubernetes helper pod is deployed, you can exec into the pod, connect to servers using t3 or t3s and perform WLST operations. By default, t3s is not enabled for the Administration Server or Managed Servers. If you enabled SSL with sslEnabled when creating the domain, then you can use t3s to perform WLST operations.\nInteractive mode Start a bash shell in the helper pod:\n$ kubectl exec -it helper -n \u0026lt;domain_namespace\u0026gt; -- /bin/bash For example:\n$ kubectl exec -it helper -n soans -- /bin/bash This opens a bash shell in the running helper pod:\n[oracle@helper oracle]$ Invoke WLST:\n[oracle@helper oracle]$ cd $ORACLE_HOME/oracle_common/common/bin [oracle@helper bin]$ ./wlst.sh The output will look similar to the following:\n[oracle@helper bin]$ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Jython scans all the jar files it can find at first startup. Depending on the system, this process may take a few minutes to complete, and WLST may not return a prompt right away. Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands wls:/offline\u0026gt; Connect using t3:\na. To connect to the Administration Server or Managed Servers using t3, you can use the Kubernetes services created by the WebLogic Server Kubernetes operator:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://\u0026lt;domainUID\u0026gt;-\u0026lt;WebLogic Server Name\u0026gt;:\u0026lt;Server Port\u0026gt;') For example, if the domainUID is soainfra, Administration Server name is AdminServer, and Administration Server port is 7001, then you can connect to the Administration Server using t3:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://soainfra-adminserver:7001') The output will look similar to the following:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://soainfra-adminserver:7001') Connecting to t3://soainfra-adminserver:7001 with userid weblogic ... Successfully connected to Admin Server \u0026quot;AdminServer\u0026quot; that belongs to domain \u0026quot;soainfra\u0026quot;. Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/soainfra/serverConfig/\u0026gt; b. To connect a WebLogic Server cluster (SOA or Oracle Service Bus) using t3, you can use the Kubernetes services created by the WebLogic Server Kubernetes operator:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://\u0026lt;domainUID\u0026gt;-cluster-\u0026lt;Cluster name\u0026gt;:\u0026lt;Managed Server Port\u0026gt;') For example, if the domainUID is soainfra, SOA cluster name is soa-cluster, and SOA Managed Server port is 8001, then you can connect to SOA Cluster using t3:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://soainfra-cluster-soa-cluster:8001') The output will look similar to the following:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://soainfra-cluster-soa-cluster:8001') Connecting to t3://soainfra-cluster-soa-cluster:8001 with userid weblogic ... Successfully connected to Managed Server \u0026quot;soa_server1\u0026quot; that belongs to domain \u0026quot;soainfra\u0026quot;. Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/soainfra/serverConfig/\u0026gt; Connect using t3s.\nIf you enabled SSL with sslEnabled when creating the domain, then you can use t3s to perform WLST operations:\na. Obtain the certificate from the Administration Server to be used for a secured (t3s) connection from the client by exporting the certificate from the Administration Server using WLST commands. Sample commands to export the default demoidentity:\n[oracle@helper oracle]$ cd $ORACLE_HOME/oracle_common/common/bin [oracle@helper bin]$ ./wlst.sh . . wls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3://soainfra-adminserver:7001') . . wls:/soainfra/serverConfig/\u0026gt; svc = getOpssService(name='KeyStoreService') wls:/soainfra/serverConfig/\u0026gt; svc.exportKeyStoreCertificate(appStripe='system', name='demoidentity', password='DemoIdentityKeyStorePassPhrase', alias='DemoIdetityKeyStorePassPhrase', type='Certificate', filepath='/tmp/cert.txt/') These commands download the certificate for the default demoidentity certificate at /tmp/cert.txt.\nb. Import the certificate to the Java trust store:\n[oracle@helper oracle]$ export JAVA_HOME=/u01/jdk [oracle@helper oracle]$ keytool -import -v -trustcacerts -alias soadomain -file /tmp/cert.txt -keystore $JAVA_HOME/jre/lib/security/cacerts -keypass changeit -storepass changeit c. Connect to WLST and set the required environment variable before connecting using t3s:\n[oracle@helper oracle]$ export WLST_PROPERTIES=\u0026quot;-Dweblogic.security.SSL.ignoreHostnameVerification=true\u0026quot; [oracle@helper oracle]$ cd $ORACLE_HOME/oracle_common/common/bin [oracle@helper bin]$ ./wlst.sh d. Access t3s for the Administration Server.\nFor example, if the domainUID is soainfra, Administration Server name is AdminServer, and Administration Server SSL port is 7002, connect to the Administration Server as follows:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3s://soainfra-adminserver:7002') e. Access t3s for the SOA cluster.\nFor example, if the domainUID is soainfra, SOA cluster name is soa-cluster, and SOA Managed Server SSL port is 8002, connect to the SOA cluster as follows:\nwls:/offline\u0026gt; connect('weblogic','\u0026lt;password\u0026gt;','t3s://soainfra-cluster-soa-cluster:8002') Script mode In script mode, scripts contain WLST commands in a text file with a .py file extension (for example, mywlst.py). Before invoking WLST using the script file, you must copy the .py file into the helper pod.\nTo copy the .py file into the helper pod using WLST operations in script mode:\n Create a .py file containing all the WLST commands.\n Copy the .py file into the helper pod:\n$ kubectl cp \u0026lt;filename\u0026gt;.py \u0026lt;domain namespace\u0026gt;/helper:\u0026lt;directory\u0026gt; For example:\n$ kubectl cp mywlst.py soans/helper:/u01/oracle Run wlst.sh on the .py file by exec into the helper pod:\n$ kubectl exec -it helper -n \u0026lt;domain_namespace\u0026gt; -- /bin/bash [oracle@helper oracle]$ cd $ORACLE_HOME/oracle_common/common/bin [oracle@helper oracle]$ ./wlst.sh \u0026lt;directory\u0026gt;/\u0026lt;filename\u0026gt;.py Note: Refer to Interactive mode for details on how to connect using t3 or t3s.\nSample WLST operations For a full list of WLST operations, refer to WebLogic Server WLST Online and Offline Command Reference.\nDisplay servers $ kubectl exec -it helper -n soans -- /bin/bash [oracle@helper oracle]$ cd $ORACLE_HOME/oracle_common/common/bin [oracle@helper bin]$ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Jython scans all the jar files it can find at first startup. Depending on the system, this process may take a few minutes to complete, and WLST may not return a prompt right away. Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands wls:/offline\u0026gt; connect('weblogic','Welcome1','t3://soainfra-adminserver:7001') Connecting to t3://soainfra-adminserver:7001 with userid weblogic ... Successfully connected to Admin Server \u0026quot;AdminServer\u0026quot; that belongs to domain \u0026quot;soainfra\u0026quot;. Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/soainfra/serverConfig/\u0026gt; cd('/Servers') wls:/soainfra/serverConfig/Servers\u0026gt; ls() dr-- AdminServer dr-- osb_server1 dr-- osb_server2 dr-- osb_server3 dr-- osb_server4 dr-- osb_server5 dr-- soa_server1 dr-- soa_server2 dr-- soa_server3 dr-- soa_server4 dr-- soa_server5 wls:/soainfra/serverConfig/Servers\u0026gt; " +}, +{ + "uri": "/fmw-kubernetes/21.3.2/categories/", + "title": "Categories", + "tags": [], + "description": "", + "content": "" +}, +{ + "uri": "/fmw-kubernetes/21.3.2/tags/", + "title": "Tags", + "tags": [], + "description": "", + "content": "" +}] \ No newline at end of file diff --git a/docs/21.3.2/index.xml b/docs/21.3.2/index.xml new file mode 100644 index 000000000..6ed2302ee --- /dev/null +++ b/docs/21.3.2/index.xml @@ -0,0 +1,438 @@ + + + + Oracle Fusion Middleware on Kubernetes + /fmw-kubernetes/21.3.2/ + Recent content on Oracle Fusion Middleware on Kubernetes + Hugo -- gohugo.io + en-us + Thu, 18 Apr 2019 06:46:23 -0500 + + + + + + Patch a Oracle WebCenter Sites product Docker image + /fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/patch-an-image/patch-wcsites-product-image/ + Sat, 21 Sep 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/patch-an-image/patch-wcsites-product-image/ + These instructions describe how to upgrade a new release of Oracle WebCenter Sites product Docker image in a running Oracle WebCenter Sites Kubernetes environment. A rolling upgrade approach is used to upgrade managed server pods of the domain. +It is expecting a Zero down time as a rolling upgrade approach is used. + Prerequisites Make sure Oracle WebCenter Sites domain is created and all the admin and managed pods are up and running. + + + + Preparing an OKE environment + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/oke/ + Sat, 21 Sep 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/oke/ + Overview Create Public SSH Key to access all the Bastion/Worker nodes Create SSH key using ssh-keygen on linux terminal. Generating public/private rsa key pair. Your identification has been saved in &lt;path&gt;/id_rsa. Your public key has been saved in &lt;path&gt;/id_rsa.pub. The key fingerprint is: SHA256:xCi1gf1QFafbRwOM3WjUTgqEInwi6UklbuxbBeMzA6M demokey The key&#39;s randomart image is: +---[RSA 2048]----+ | +++oo..++*++ | | ++==+==. oo=.+ | |Eo+o*+++o .o +o | | oo * .. o.... | | . + + + + Release Notes + /fmw-kubernetes/21.3.2/soa-domains/release-notes/ + Fri, 15 Mar 2019 11:25:28 -0400 + + /fmw-kubernetes/21.3.2/soa-domains/release-notes/ + Review the latest changes and known issues for Oracle SOA Suite on Kubernetes. +Recent changes Date Version Change August 6, 2021 21.3.2 Supports Oracle SOA Suite 12.2.1.4 domains deployment using July 2021 PSU and known bug fixes. Oracle SOA Suite 12.2.1.4 Docker image for this release can be downloaded from My Oracle Support (MOS patch 33125465). May 31, 2021 21.2.2 Supports Oracle SOA Suite 12. + + + + Release Notes + /fmw-kubernetes/21.3.2/wcsites-domains/release-notes/ + Fri, 15 Mar 2019 11:25:28 -0400 + + /fmw-kubernetes/21.3.2/wcsites-domains/release-notes/ + Review the latest changes and known issues for Oracle WebCenter Sites on Kubernetes. +Recent changes Date Version Introduces backward incompatibilities Change Jan 15, 2021 21.1.1 no Certified Oracle WebLogic Kubernetes Operator version 3.0.1. Kubernetes 1.14.8+, 1.15.7+, 1.1.6.0+, 1.17.0+, and 1.18.0+ support. Flannel is the only supported CNI in this release. Only Webcenter Sites 12.2.1.4 is supported. Known issues Issue Description Publishing via LoadBalancer Endpoint Currenly publishing is only supported via NodePort as described in section For Publishing Setting in WebCenter Sites on page. + + + + Deploy using JDeveloper + /fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/supportjdev/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/supportjdev/ + Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper (running outside the Kubernetes network) to an Oracle SOA Suite instance in the WebLogic Kubernetes Operator environment. +Use JDeveloper for development and test environments only. For a production environment, you should deploy using Application Control and WLST methods. + Deploy Oracle SOA Suite and Oracle Service Bus composite applications to Oracle SOA Suite from JDeveloper To deploy Oracle SOA Suite and Oracle Service Bus composite applications from Oracle JDeveloper, the Administration Server must be configured to expose a T3 channel. + + + + Domain resource sizing + /fmw-kubernetes/21.3.2/soa-domains/appendix/soa-cluster-sizing-info/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/appendix/soa-cluster-sizing-info/ + Oracle SOA cluster sizing recommendations Oracle SOA Normal Usage Moderate Usage High Usage Administration Server No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB Number of Managed Servers 2 2 4 Configurations per Managed Server No of CPU core(s) : 2, Memory : 16GB No of CPU core(s) : 4, Memory : 16GB No of CPU core(s) : 6, Memory : 16-32GB PV Storage Minimum 250GB Minimum 250GB Minimum 500GB + + + + Domain resource sizing + /fmw-kubernetes/21.3.2/wcsites-domains/appendix/wcsites-cluster-sizing-info/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/appendix/wcsites-cluster-sizing-info/ + Oracle WebCenter Sites cluster sizing recommendations Oracle WebCenter Sites Normal Usage Moderate Usage High Usage Administration Server No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB No of CPU core(s) : 1, Memory : 4GB Managed Server No of Servers : 2, No of CPU core(s) : 2, Memory : 16GB No of Servers : 2, No of CPU core(s) : 4, Memory : 16GB No of Servers : 3, No of CPU core(s) : 6, Memory : 16-32GB PV Storage Minimum 250GB Minimum 250GB Minimum 500GB + + + + Patch an image + /fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/patch-an-image/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/patch-an-image/ + Oracle releases Oracle SOA Suite images regularly with the latest bundle and recommended interim patches in My Oracle Support (MOS). However, if you need to create images with new bundle and interim patches, you can build these images using the WebLogic Image Tool. +If you have access to the Oracle SOA Suite patches, you can patch an existing Oracle SOA Suite image with a bundle patch and interim patches. Oracle recommends that you use the WebLogic Image Tool to patch the Oracle SOA Suite image. + + + + Traefik + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/traefik/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/traefik/ + This section provides information about how to install and configure the ingress-based Traefik load balancer (version 2.2.1 or later for production deployments) to load balance Oracle SOA Suite domain clusters. You can configure Traefik for non-SSL, SSL termination, and end-to-end SSL access of the application URL. +Follow these steps to set up Traefik as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster: + Install the Traefik (ingress-based) load balancer Create an Ingress for the domain Verify domain application URL access Uninstall the Traefik ingress Uninstall Traefik Install the Traefik (ingress-based) load balancer Use Helm to install the Traefik (ingress-based) load balancer. + + + + Traefik + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/traefik/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/traefik/ + This section provides information about how to install and configure the ingress-based Traefik load balancer (version 2.2.1 or later for production deployments) to load balance Oracle WebCenter Sites domain clusters. You can configure Traefik for access of the application URL. +Follow these steps to set up Traefik as a load balancer for an Oracle WebCenter Sites domain in a Kubernetes cluster: +Setting Up Loadbalancer Traefik for the WebCenter Sites Domain on K8S Follow these steps to set up Traefik as a loadbalancer for the Oracle WebCenter Sites domain: + + + + Quick start deployment on-premise + /fmw-kubernetes/21.3.2/soa-domains/appendix/quickstart-deployment-on-prem/ + Thu, 18 Jun 2020 15:27:38 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/appendix/quickstart-deployment-on-prem/ + Use this Quick Start to create an Oracle SOA Suite domain deployment in a Kubernetes cluster (on-premise environments) with the WebLogic Kubernetes Operator. Note that this walkthrough is for demonstration purposes only, not for use in production. These instructions assume that you are already familiar with Kubernetes. If you need more detailed instructions, refer to the Install Guide. +Hardware requirements The Linux kernel supported for deploying and running Oracle SOA Suite domains with the operator is Oracle Linux 7 (UL6+) and Red Hat Enterprise Linux 7 (UL3+ only with standalone Kubernetes). + + + + Quick start deployment on-premise + /fmw-kubernetes/21.3.2/wcsites-domains/appendix/quickstart-deployment-on-prem/ + Thu, 18 Jun 2020 15:27:38 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/appendix/quickstart-deployment-on-prem/ + Use this Quick Start to create an Oracle WebCenter Sites domain deployment in a Kubernetes cluster (on-premise environments) with the Oracle WebLogic Server Kubernetes operator. Note that this walkthrough is for demonstration purposes only, not for use in production. These instructions assume that you are already familiar with Kubernetes. If you need more detailed instructions, refer to the Install Guide. +Hardware requirements Supported Linux kernel for deploying and running Oracle WebCenter Sites domains with the operator is Oracle Linux 7 UL6+ and Red Hat Enterprise Linux 7 (UL3+). + + + + Preparing the Bastion host + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/bastion/ + Sat, 21 Sep 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/bastion/ + STEP 1 : Create Public Security List Create Public Security List (bastion_public_sec_list) in same VCN as that of OKE Cluster for Bastion Node + Ingress Rules as: (where 10.0.22.0/24 is the CIDR planned to be used for bastion subnet) Egress as: STEP 2 : Create Private Security List Create Private Security List (bastion_private_sec_list) in same VCN as that of OKE Cluster which will be added into Worker Node subnet. + + + + Deploy using Maven and Ant + /fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/deploying-composites/deploy-using-maven-ant/ + Learn how to deploy Oracle SOA Suite and Oracle Service Bus composite applications using the Maven and Ant based approach in an Oracle SOA Suite in WebLogic Kubernetes Operator environment. +Before deploying composite applications, we need to create a Kubernetes pod in the same cluster where the Oracle SOA Suite domain is running, so that composite applications can be deployed using the internal Kubernetes Service for the Administration Server URL. + + + + Enable additional URL access + /fmw-kubernetes/21.3.2/soa-domains/adminguide/enable-additional-url-access/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/enable-additional-url-access/ + This section provides information about how to extend an existing ingress (Non-SSL and SSL termination) to enable additional application URL access for Oracle SOA Suite domains. +The ingress per domain created in the steps in Set up a load balancer exposes the application paths defined in template YAML files present at ${WORKDIR}/charts/ingress-per-domain/templates/. +To extend an existing ingress with additional application URL access: + Update the template YAML file at ${WORKDIR}/charts/ingress-per-domain/templates/ to define additional path rules. + + + + NGINX + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/nginx/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/nginx/ + This section provides information about how to install and configure the ingress-based NGINX load balancer to load balance Oracle SOA Suite domain clusters. You can configure NGINX for non-SSL, SSL termination, and end-to-end SSL access of the application URL. +Follow these steps to set up NGINX as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster: +See the official installation document for prerequisites. + Install the NGINX load balancer for non-SSL and SSL termination configuration Generate secret for SSL access Install NGINX load balancer for end-to-end SSL configuration Configure NGINX to manage ingresses Verify domain application URL access Uninstall NGINX ingress Uninstall NGINX To get repository information, enter the following Helm commands: + + + + NGINX + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/nginx/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/nginx/ + This section provides information about how to install and configure the ingress-based NGINX load balancer to load balance Oracle WebCenter Sites domain clusters. You can configure NGINX for access of the application URL. +Follow these steps to set up NGINX as a load balancer for an Oracle WebCenter Sites domain in a Kubernetes cluster: +See the official installation document for prerequisites. +Add the Helm repos (if not added) Add following Helm repos + + + + Upgrade an operator release + /fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/upgrade-operator-release/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/upgrade-operator-release/ + These instructions apply to upgrading operators within the 3.x release family as additional versions are released. +To upgrade the Kubernetes operator, use the helm upgrade command. Make sure that the weblogic-kubernetes-operator repository on your local machine is at the operator release to which you are upgrading. See the steps here to pull the image and set up the weblogic-kubernetes-operator repository. When upgrading the operator, the helm upgrade command requires that you supply a new Helm chart and image. + + + + Upgrade an operator release + /fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/upgrade-operator-release/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/upgrade-operator-release/ + These instructions apply to upgrading operators within the 3.x release family as additional versions are released. +To upgrade the Kubernetes operator, use the helm upgrade command. When upgrading the operator, the helm upgrade command requires that you supply a new Helm chart and image. For example: +$ helm upgrade \ --reuse-values \ --set image=oracle/weblogic-kubernetes-operator:3.0.2 \ --namespace weblogic-operator-namespace \ --wait \ weblogic-operator \ kubernetes/charts/weblogic-operator + + + + Preparing a file system + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/filesystem/ + Sat, 21 Sep 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/filesystem/ + Create Filesystem and security list for FSS Note: Make sure you create the filesystem and security list in the OKE created VCN + Login to OCI Console and go to File Storage and Click &ldquo;File System&rdquo; Click &ldquo;Create File System&rdquo; You can create File System and Mount Targets with the default values. But in case you want to rename the file System and mount targets, follow below steps. Note: Make Sure the Virtual Cloud Network in Mount Target refers to the one where your instances are created and you will be accessing this file system. + + + + Configure SSL certificates + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configuring-custom-ssl-certificates/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configuring-custom-ssl-certificates/ + Secure Socket Layer (SSL) provides a secured communication for data sent over unsecured networks. In an SSL termination scenario, you can configure SSL between the client browser and the load balancer in your Oracle SOA Suite instance to ensure that applications are accessed securely. In an SSL end-to-end scenario, an Oracle SOA Suite domain is configured to use a self-signed SSL certificate that was generated during domain creation. Clients will typically receive a message indicating that the signing CA for the certificate is unknown and not trusted. + + + + Monitor a domain and publish logs + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/monitoring-wcsites-domains/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/monitoring-wcsites-domains/ + After the Oracle WebCenter Sites domain is set up, you can: + Monitor the Oracle WebCenter Sites instance using Prometheus and Grafana Publish WebLogic Server logs into Elasticsearch Monitor the Oracle WebCenter Sites instance using Prometheus and Grafana Using the WebLogic Monitoring Exporter you can scrape runtime information from a running Oracle WebCenter Sites instance and monitor them using Prometheus and Grafana. +Prerequisites This document assumes that the Prometheus Operator is deployed on the Kubernetes cluster. + + + + Security hardening + /fmw-kubernetes/21.3.2/soa-domains/appendix/docker-k8s-hardening/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/appendix/docker-k8s-hardening/ + Securing a Kubernetes cluster involves hardening on multiple fronts - securing the API servers, etcd, nodes, container images, container run-time, and the cluster network. Apply principles of defense in depth, principle of least privilege, and minimize the attack surface. Use security tools such as Kube-Bench to verify the cluster&rsquo;s security posture. Since Kubernetes is evolving rapidly refer to Kubernetes Security Overview for the latest information on securing a Kubernetes cluster. Also ensure the deployed Docker containers follow the Docker Security guidance. + + + + Security hardening + /fmw-kubernetes/21.3.2/wcsites-domains/appendix/docker-k8s-hardening/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/appendix/docker-k8s-hardening/ + Securing a Kubernetes cluster involves hardening on multiple fronts - securing the API servers, etcd, nodes, container images, container run-time, and the cluster network. Apply principles of defense in depth, principle of least privilege, and minimize the attack surface. Use security tools such as Kube-Bench to verify the cluster&rsquo;s security posture. Since Kubernetes is evolving rapidly refer to Kubernetes Security Overview for the latest information on securing a Kubernetes cluster. Also ensure the deployed Docker containers follow the Docker Security guidance. + + + + Upgrade a Kubernetes cluster + /fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/upgrade-k8s-cluster/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/patch_and_upgrade/upgrade-k8s-cluster/ + These instructions describe how to upgrade a Kubernetes cluster created using kubeadm on which an Oracle SOA Suite domain is deployed. A rolling upgrade approach is used to upgrade nodes (master and worker) of the Kubernetes cluster. +It is expected that there will be a down time during the upgrade of the Kubernetes cluster as the nodes need to be drained as part of the upgrade process. + Prerequisites Review Prerequisites and ensure that your Kubernetes cluster is ready for upgrade. + + + + Upgrade a Kubernetes cluster + /fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/upgrade-k8s-cluster/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/patch-and-upgrade/upgrade-k8s-cluster/ + These instructions describe how to upgrade a Kubernetes cluster created using kubeadm on which an Oracle WebCenter Sites domain is deployed. A rolling upgrade approach is used to upgrade nodes (master and worker) of the Kubernetes cluster. +It is expected that there will be a down time during the upgrade of the Kubernetes cluster as the nodes need to be drained as part of the upgrade process. + Prerequisites Review Prerequisites and ensure that your Kubernetes cluster is ready for upgrade. + + + + Voyager + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/voyager/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/voyager/ + Voyager/HAProxy is a popular ingress-based load balancer for production environments. This section provides information about how to install and configure Voyager/HAProxy to load balance Oracle SOA Suite domain clusters. You can configure Voyager for non-SSL, SSL termination, and end-to-end SSL access of the application URL. +Follow these steps to set up Voyager as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster: + Install the Voyager load balancer Configure Voyager to manage ingresses Verify domain application URL access Uninstalling Voyager Ingress Uninstall Voyager Install the Voyager load balancer Add the AppsCode chart repository: + + + + Voyager + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/voyager/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/configure-load-balancer/voyager/ + Voyager/HAProxy is a popular ingress-based load balancer for production environments. This section provides information about how to install and configure Voyager/HAProxy to load balance Oracle WebCenter Sites domain clusters. You can configure Voyager for access of the application URL. +Follow these steps to set up Voyager as a load balancer for an Oracle WebCenter Sites domain in a Kubernetes cluster: + Install the Voyager Load Balancer Configure Voyager to Manage Ingresses Verify that You can Access the Domain URL Install the Voyager Load Balancer See the official installation document and follow step 1 and 2 here. + + + + Creating an OCIR + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/ocir/ + Sat, 21 Sep 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/oracle-cloud/ocir/ + Creation of OCIR Push all the required images to OCIR and use from OCIR. Follow the below steps before pushing the images to OCIR +Create an &ldquo;Auth token&rdquo; Create an &ldquo;Auth token&rdquo; which will be used as docker password to push/pull images from OCIR Login to Console and navigate to User Settings, which is in the drop down under your OCI username in the top nav On User Details page, select &ldquo;Auth Tokens&rdquo; in the left nav and then Click the &ldquo;Generate Token&rdquo; button: Enter a Name and Click &ldquo;Generate Token&rdquo; Token will get generated Copy the generated token. + + + + Apache web tier + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/apache/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/configure-load-balancer/apache/ + This section provides information about how to install and configure the Apache web tier to load balance Oracle SOA Suite domain clusters. You can configure Apache web tier for non-SSL and SSL termination access of the application URL. +Follow these steps to set up the Apache web tier as a load balancer for an Oracle SOA Suite domain in a Kubernetes cluster: + Build the Apache web tier image Create the Apache plugin configuration file Prepare the certificate and private key Install the Apache web tier Helm chart Verify domain application URL access Uninstall Apache web tier Build the Apache web tier image Refer to the sample, to build the Apache web tier Docker image. + + + + Elasticsearch integration for logs + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/elasticsearch-integration/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/elasticsearch-integration/ + 1. Integrate Elasticsearch to WebLogic Kubernetes Operator For reference information, see Elasticsearch integration for the WebLogic Kubernetes Operator. +To enable elasticsearch integration, you must edit file kubernetes/charts/weblogic-operator/values.yaml before deploying the WebLogic Kubernetes Operator. +# elkIntegrationEnabled specifies whether or not ELK integration is enabled. elkIntegrationEnabled: true # logStashImage specifies the Docker image containing logstash. # This parameter is ignored if 'elkIntegrationEnabled' is false. logStashImage: &quot;logstash:6.6.0&quot; # elasticSearchHost specifies the hostname of where Elasticsearch is running. + + + + Monitor a domain and publish logs + /fmw-kubernetes/21.3.2/soa-domains/adminguide/monitoring-soa-domains/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/monitoring-soa-domains/ + After the Oracle SOA Suite domain is set up, you can: + Monitor the Oracle SOA Suite instance using Prometheus and Grafana Publish WebLogic Server logs into Elasticsearch Publish SOA server diagnostics logs into Elasticsearch Monitor the Oracle SOA Suite instance using Prometheus and Grafana Using the WebLogic Monitoring Exporter you can scrape runtime information from a running Oracle SOA Suite instance and monitor them using Prometheus and Grafana. + + + + Publish logs to Elasticsearch + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/weblogic-logging-exporter-setup/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/adminguide/weblogic-logging-exporter-setup/ + The WebLogic Logging Exporter adds a log event handler to WebLogic Server. WebLogic Server logs can be pushed to Elasticsearch in Kubernetes directly by using the Elasticsearch REST API. For more details, see to the WebLogic Logging Exporter project. +This sample shows you how to publish WebLogic Server logs to Elasticsearch and view them in Kibana. For publishing operator logs, see this sample. +Prerequisites This document assumes that you have already set up Elasticsearch and Kibana for logs collection. + + + + Expose the T3/T3S protocol + /fmw-kubernetes/21.3.2/soa-domains/adminguide/enablingt3/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/enablingt3/ + Oracle strongly recommends that you do not expose non-HTTPS traffic (T3/T3s/LDAP/IIOP/IIOPs) outside of the external firewall. You can control this access using a combination of network channels and firewalls. + You can create T3/T3S channels and the corresponding Kubernetes service to expose the T3/T3S protocol for the Administration Server and Managed Servers in an Oracle SOA Suite domain. +The WebLogic Kubernetes Operator provides an option to expose a T3 channel for the Administration Server using the exposeAdminT3Channel setting during domain creation, then the matching T3 service can be used to connect. + + + + Uninstall + /fmw-kubernetes/21.3.2/wcsites-domains/cleanup-domain-setup/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/cleanup-domain-setup/ + Learn how to clean up the Oracle WebCenter Sites domain setup. +Stop all Administration and Managed server pods First stop the all pods related to a domain. This can be done by patching domain &ldquo;serverStartPolicy&rdquo; to &ldquo;NEVER&rdquo;. Here is the sample command for the same. +$ kubectl patch domain wcsites-domain-name -n wcsites-namespace --type=&#39;json&#39; -p=&#39;[{&#34;op&#34;: &#34;replace&#34;, &#34;path&#34;: &#34;/spec/serverStartPolicy&#34;, &#34;value&#34;: &#34;NEVER&#34; }]&#39; For example: +$ kubectl patch domain wcsitesinfra -n wcsites-ns --type=&#39;json&#39; -p=&#39;[{&#34;op&#34;: &#34;replace&#34;, &#34;path&#34;: &#34;/spec/serverStartPolicy&#34;, &#34;value&#34;: &#34;NEVER&#34; }]&#39; Drop the RCU schemas $ cd work-dir-name/weblogic-kubernetes-operator $ kubectl apply -f kubernetes/samples/scripts/create-wcsites-domain/output/weblogic-domains/wcsitesinfra/delete-domain-job. + + + + Uninstall + /fmw-kubernetes/21.3.2/soa-domains/cleanup-domain-setup/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/cleanup-domain-setup/ + Learn how to clean up the Oracle SOA Suite domain setup. +Remove the domain Remove the domain&rsquo;s ingress (for example, Traefik ingress) using Helm: +$ helm uninstall soa-domain-ingress -n sample-domain1-ns For example: +$ helm uninstall soainfra-traefik -n soans Remove the domain resources by using the sample delete-weblogic-domain-resources.sh script present at ${WORKDIR}/delete-domain: +$ cd ${WORKDIR}/delete-domain $ ./delete-weblogic-domain-resources.sh -d sample-domain1 For example: +$ cd ${WORKDIR}/delete-domain $ ./delete-weblogic-domain-resources.sh -d soainfra Use kubectl to confirm that the server pods and domain resource are deleted: + + + + Frequently Asked Questions + /fmw-kubernetes/21.3.2/soa-domains/faq/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/faq/ + Overriding tuning parameters is not supported using configuration overrides The WebLogic Kubernetes Operator enables you to override some of the domain configuration using configuration overrides (also called situational configuration). See supported overrides. Overriding the tuning parameters such as MaxMessageSize and PAYLOAD, for Oracle SOA Suite domains is not supported using the configuration overrides feature. However, you can override them using the following steps: + Specify the new value using the environment variable K8S_REFCONF_OVERRIDES in serverPod. + + + + Frequently Asked Questions + /fmw-kubernetes/21.3.2/wcsites-domains/faq/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/wcsites-domains/faq/ + Configure the external URL access for Oracle WebCenter Sites composite applications For Oracle WebCenter Sites composite applications to access the external URLs over the internet (if your cluster is behind a http proxy server), you must configure the following proxy parameters for Administration Server and Managed Server pods. +-Dhttp.proxyHost=www-your-proxy.com -Dhttp.proxyPort=proxy-port -Dhttps.proxyHost=www-your-proxy.com -Dhttps.proxyPort=proxy-port -Dhttp.nonProxyHosts=&#34;localhost|wcsitesinfra-adminserver|wcsitesinfra-wcsites-server1|*.svc.cluster.local|*.your.domain.com|/var/run/docker.sock&#34; To do this, edit the domain.yaml configuration file and append the proxy parameters to the spec.serverPod.env.JAVA_OPTIONS environment variable value. + + + + Persist adapter customizations + /fmw-kubernetes/21.3.2/soa-domains/adminguide/persisting-soa-adapters-customizations/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/persisting-soa-adapters-customizations/ + The lifetime for any customization done in a file on a server pod is up to the lifetime of that pod. The changes are not persisted once the pod goes down or is restarted. +For example, the following configuration updates DbAdapter.rar to create a new connection instance and creates data source CoffeeShop on the Administration Console for the same with jdbc/CoffeeShopDS. +File location: /u01/oracle/soa/soa/connectors/DbAdapter.rar +&lt;connection-instance&gt; &lt;jndi-name&gt;eis/DB/CoffeeShop&lt;/jndi-name&gt; &lt;connection-properties&gt; &lt;properties&gt; &lt;property&gt; &lt;name&gt;XADataSourceName&lt;/name&gt; &lt;value&gt;jdbc/CoffeeShopDS&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;DataSourceName&lt;/name&gt; &lt;value&gt;&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;PlatformClassName&lt;/name&gt; &lt;value&gt;org. + + + + Perform WLST operations + /fmw-kubernetes/21.3.2/soa-domains/adminguide/performing-wlst-operations/ + Fri, 22 Feb 2019 15:44:42 -0500 + + /fmw-kubernetes/21.3.2/soa-domains/adminguide/performing-wlst-operations/ + You can use the WebLogic Scripting Tool (WLST) to manage a domain running in a Kubernetes cluster. Some of the many ways to do this are provided here. +If the Administration Server was configured to expose a T3 channel using exposeAdminT3Channel when creating the domain, refer to Use WLST. +If you do not want to expose additional ports and perform WLST administration operations using the existing Kubernetes services created by the WebLogic Server Kubernetes operator, then follow this documentation. + + + + \ No newline at end of file diff --git a/docs/21.3.2/js/auto-complete.js b/docs/21.3.2/js/auto-complete.js new file mode 100644 index 000000000..7fbde995e --- /dev/null +++ b/docs/21.3.2/js/auto-complete.js @@ -0,0 +1,223 @@ +/* + JavaScript autoComplete v1.0.4 + Copyright (c) 2014 Simon Steinberger / Pixabay + GitHub: https://github.com/Pixabay/JavaScript-autoComplete + License: http://www.opensource.org/licenses/mit-license.php +*/ + +var autoComplete = (function(){ + // "use strict"; + function autoComplete(options){ + if (!document.querySelector) return; + + // helpers + function hasClass(el, className){ return el.classList ? el.classList.contains(className) : new RegExp('\\b'+ className+'\\b').test(el.className); } + + function addEvent(el, type, handler){ + if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler); + } + function removeEvent(el, type, handler){ + // if (el.removeEventListener) not working in IE11 + if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler); + } + function live(elClass, event, cb, context){ + addEvent(context || document, event, function(e){ + var found, el = e.target || e.srcElement; + while (el && !(found = hasClass(el, elClass))) el = el.parentElement; + if (found) cb.call(el, e); + }); + } + + var o = { + selector: 0, + source: 0, + minChars: 3, + delay: 150, + offsetLeft: 0, + offsetTop: 1, + cache: 1, + menuClass: '', + renderItem: function (item, search){ + // escape special characters + search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); + return '
' + item.replace(re, "$1") + '
'; + }, + onSelect: function(e, term, item){} + }; + for (var k in options) { if (options.hasOwnProperty(k)) o[k] = options[k]; } + + // init + var elems = typeof o.selector == 'object' ? [o.selector] : document.querySelectorAll(o.selector); + for (var i=0; i 0) + that.sc.scrollTop = selTop + that.sc.suggestionHeight + scrTop - that.sc.maxHeight; + else if (selTop < 0) + that.sc.scrollTop = selTop + scrTop; + } + } + } + addEvent(window, 'resize', that.updateSC); + document.body.appendChild(that.sc); + + live('autocomplete-suggestion', 'mouseleave', function(e){ + var sel = that.sc.querySelector('.autocomplete-suggestion.selected'); + if (sel) setTimeout(function(){ sel.className = sel.className.replace('selected', ''); }, 20); + }, that.sc); + + live('autocomplete-suggestion', 'mouseover', function(e){ + var sel = that.sc.querySelector('.autocomplete-suggestion.selected'); + if (sel) sel.className = sel.className.replace('selected', ''); + this.className += ' selected'; + }, that.sc); + + live('autocomplete-suggestion', 'mousedown', function(e){ + if (hasClass(this, 'autocomplete-suggestion')) { // else outside click + var v = this.getAttribute('data-val'); + that.value = v; + o.onSelect(e, v, this); + that.sc.style.display = 'none'; + } + }, that.sc); + + that.blurHandler = function(){ + try { var over_sb = document.querySelector('.autocomplete-suggestions:hover'); } catch(e){ var over_sb = 0; } + if (!over_sb) { + that.last_val = that.value; + that.sc.style.display = 'none'; + setTimeout(function(){ that.sc.style.display = 'none'; }, 350); // hide suggestions on fast input + } else if (that !== document.activeElement) setTimeout(function(){ that.focus(); }, 20); + }; + addEvent(that, 'blur', that.blurHandler); + + var suggest = function(data){ + var val = that.value; + that.cache[val] = data; + if (data.length && val.length >= o.minChars) { + var s = ''; + for (var i=0;i 40) && key != 13 && key != 27) { + var val = that.value; + if (val.length >= o.minChars) { + if (val != that.last_val) { + that.last_val = val; + clearTimeout(that.timer); + if (o.cache) { + if (val in that.cache) { suggest(that.cache[val]); return; } + // no requests if previous suggestions were empty + for (var i=1; i https://github.com/noelboss/featherlight/issues/317 +!function(u){"use strict";if(void 0!==u)if(u.fn.jquery.match(/-ajax/))"console"in window&&window.console.info("Featherlight needs regular jQuery, not the slim version.");else{var r=[],i=function(t){return r=u.grep(r,function(e){return e!==t&&0','
','",'
'+n.loading+"
","
",""].join("")),o="."+n.namespace+"-close"+(n.otherClose?","+n.otherClose:"");return n.$instance=i.clone().addClass(n.variant),n.$instance.on(n.closeTrigger+"."+n.namespace,function(e){if(!e.isDefaultPrevented()){var t=u(e.target);("background"===n.closeOnClick&&t.is("."+n.namespace)||"anywhere"===n.closeOnClick||t.closest(o).length)&&(n.close(e),e.preventDefault())}}),this},getContent:function(){if(!1!==this.persist&&this.$content)return this.$content;var t=this,e=this.constructor.contentFilters,n=function(e){return t.$currentTarget&&t.$currentTarget.attr(e)},r=n(t.targetAttr),i=t.target||r||"",o=e[t.type];if(!o&&i in e&&(o=e[i],i=t.target&&r),i=i||n("href")||"",!o)for(var a in e)t[a]&&(o=e[a],i=t[a]);if(!o){var s=i;if(i=null,u.each(t.contentFilters,function(){return(o=e[this]).test&&(i=o.test(s)),!i&&o.regex&&s.match&&s.match(o.regex)&&(i=s),!i}),!i)return"console"in window&&window.console.error("Featherlight: no content filter found "+(s?' for "'+s+'"':" (no target specified)")),!1}return o.process.call(t,i)},setContent:function(e){return this.$instance.removeClass(this.namespace+"-loading"),this.$instance.toggleClass(this.namespace+"-iframe",e.is("iframe")),this.$instance.find("."+this.namespace+"-inner").not(e).slice(1).remove().end().replaceWith(u.contains(this.$instance[0],e[0])?"":e),this.$content=e.addClass(this.namespace+"-inner"),this},open:function(t){var n=this;if(n.$instance.hide().appendTo(n.root),!(t&&t.isDefaultPrevented()||!1===n.beforeOpen(t))){t&&t.preventDefault();var e=n.getContent();if(e)return r.push(n),s(!0),n.$instance.fadeIn(n.openSpeed),n.beforeContent(t),u.when(e).always(function(e){n.setContent(e),n.afterContent(t)}).then(n.$instance.promise()).done(function(){n.afterOpen(t)})}return n.$instance.detach(),u.Deferred().reject().promise()},close:function(e){var t=this,n=u.Deferred();return!1===t.beforeClose(e)?n.reject():(0===i(t).length&&s(!1),t.$instance.fadeOut(t.closeSpeed,function(){t.$instance.detach(),t.afterClose(e),n.resolve()})),n.promise()},resize:function(e,t){if(e&&t&&(this.$content.css("width","").css("height",""),this.$content.parent().width()');return n.onload=function(){r.naturalWidth=n.width,r.naturalHeight=n.height,t.resolve(r)},n.onerror=function(){t.reject(r)},n.src=e,t.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(e){return u(e)}},ajax:{regex:/./,process:function(e){var n=u.Deferred(),r=u("
").load(e,function(e,t){"error"!==t&&n.resolve(r.contents()),n.fail()});return n.promise()}},iframe:{process:function(e){var t=new u.Deferred,n=u("