-
-# **Load Balancing**
-
-
-
-Load balancing is the cornerstone of XC's App Connect functionality.
-L7 MCN requires discovering services at one site and making those services available to another.
-XC implements this functionality with origin pools and load balancers.
-More complicated configurations (underlay networking, security services, observability, etc.) are built on these primitives.
-
-
-
-### **Exercise 1: AWS Cloud App**
-
-For the initial exercise, make the cloud application running in AWS available to the UDF environment.
-Build an origin pool and load balancer based on the exercise requirements.
-
-
-
-
- The URL for the cloud app hosted in AWS is https://aws-cloud-app.mcn-lab.f5demos.com
-
-
-
- The cloud app is only reachable from the student-awsnet site.
-
-
-
- The cloud app is TLS only.
-
-
-
- The load balancer domain is your-ephemeral-namespace.mcn-lab.f5demos.com.
-
-
-
- Use the wildcard cert provided in the shared NS, mcn-lab-wildcard, to enable TLS on the LB.
-
-
-
-
-### **Exercise 2: Azure Cloud App**
-
-For the second exercise, make the cloud application running in Azure available to the UDF environment.
-Create a new origin pool for the Azure cloud app. Reuse your load balancer.
-
-
-
-
-
- The URL for the cloud app hosted in Azure is https://azure-cloud-app.mcn-lab.f5demos.com
-
-
-
- The cloud app is only reachable from the student-azurenet site.
-
-
-# **Manipulation**
-
-
-
-Since web traffic has been traversing proxies, engineers have needed to alter HTTP content for increased observability (XFF), performance (Cache-Control), or core functionality (JWT).
-"Proxy Pass" functionality has been part of web servers since the early Apache days.
-Adding, removing, and altering Headers are tablestakes for ADCs, CDNs, and software-based load balancers.
-F5 XC App Connect enables this functionality granularly on routes or broadly on the load balancer.
-
-
-
-### **Exercise 1: Path Rewrite**
-
-Configure a path prefix rewrite to remove part of the request path when routing to an origin.
-
-
-
-
- Keep your configuration from the previous exercise in place.
-
-
-
- Requests to https://eph-ns.mcn-lab.f5demos.com/aws/raw need to arrive at the origin with a path of /raw.
-
-
-
-
-### **Exercise 2: Request Header Shenanigans**
-
-While blind header insertion or deletion is useful in some use cases, this exercise focuses on context aware header manipulation.
-Use the XC Header Processing docs for reference.
-
-
-
-
-
-
- Insert a request header named X-MCN-src-site to identify the UDF CE to the origin. Do not use a static value.
-
-
-
- Insert a request header named X-MCN-namespace to identify the ephemeral namespace to the origin. Do not use a static value.
-
-
-# **Overview**
-
-
-
-The lab environment, the service endpoints, and how you interact with the load balancer have been simplified in an effort to focus on concepts.
-Understanding the environment, it's topology, and the rudimentary functionality of the cloud app will help in completing the exercises.
-
-
-
-## **Architecture**
-
-The lab environment contains three distributed sites meshed using the F5 Distributed Cloud Global Network.
-
-
-
-
- student-awsnet in Amazon Web Services
-
-
-
- student-azurenet in Microsoft Azure
-
-
-
- Lab CE in UDF
-
-
-
-
-
-
-
-## **Cloud App**
-
-An instance of the cloud app is hosted in each remote cloud environment.
-The cloud app is a simple application that echoes back an HTTP request.
-While working through the lab, unless otherwise noted, test results display headers and info **from the request received by the app**.
-
-For testing, you can access an endpoint of each cloud app from your browser.
-
-
-
-
-
-## **Lab Exercises**
-
-Lab exercises will ask you to create configuration in the lab tenant.
-Exercise requirements are listed in a table along with an object type indicator.
-
-
-
-
- Load Balancer
-
-
-
- Origin Pool
-
-
-
- Route
-
-
-
-
-
-#### **Test Criteria**
-
-To complete lab exercises, you will run tests against the load balancer advertised from the Customer Edge in your UDF site.
-You will build this load balancer in the first exercise.
-All tests will be run from this lab app.
-
-Each test will specify success criteria immediately before the button.
-
-Here are some examples to try.
-
-```http
-GET https://foo.mcn-lab.f5demos.com/ HTTP/1.1
-
-{
- "info": {
- "foo": True
- }
-}
-```
-
-
-
-
-
-
-
-The test made a request to https://foo.mcn-lab.f5demos.com.
-The test succeeded because the response contained the ``JSON`` string ``{ "info": { "foo": True }}``.
-
-
-
-```http
-GET https://bar.mcn-lab.f5demos.com/ HTTP/1.1
-
-{
- "info": {
- "bar": True
- }
-}
-```
-
-
-
-
-
-
-
-The test made a request to https://bar.mcn-lab.f5demos.com.
-The test failed because the response did not contain the ``JSON`` string ``{ "info": { "bar": True}}``.
-
-
-
-
-#### **Other Tools**
-
-``curl`` and ``jq`` are provided on the UDF Runner instance.
-
-```shell
-ubuntu@ubuntu:~$ curl -s https://foo.mcn-lab.f5demos.com/ | jq
-{
- "info": "bar"
-}
-```
-
- Responses displayed in exercise tests are truncated for readibility.
-
-
-# **Portability**
-
-
-
-
-The configuration built so far handles load balancing, routing, and content manipulation.
-XC refers to this object as a "load balancer" -- but it's really the holistic representation of an application whose service endpoints live across the distributed network.
-The object is simple -- it doesn't yet include configuration for WAAP, API protection, or a service policy.
-
-What seperates XC from traditional ADCs is flexibility in defining where a load balancer is advertised.
-
-
-
-### **Exercise 1: Advertise Policy**
-
-
-
-
- Configure the load balancer to be advertised on the virtual site shared/mcn-practical-udf-sites.
-
-
-
-
-### **Exercise 2: Find a Friend**
-
-Do you have a friend working on the lab?
-Have they updated their advertise policy to use the virtual site?
-Find thier ephemeral namespace (or use the one provided).
-
-
-
-
- Test if your friend's load balancer is being advertised to the UDF site.
-
-
-
-
-
-
\ No newline at end of file
diff --git a/labapp/app/markdown/reference.md b/labapp/app/markdown/reference.md
deleted file mode 100644
index e69de29..0000000
diff --git a/labapp/app/markdown/route.md b/labapp/app/markdown/route.md
deleted file mode 100644
index 5988e98..0000000
--- a/labapp/app/markdown/route.md
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
-# **HTTP Routing**
-
-
-
-Modern applications, and some classic ones, are often comprised of disparate services spread across sites.
-MCN solutions must be able to make routing decisions based on characterstics of an HTTP request.
-F5 XC App Connect is a distributed L7 proxy that provides intelligent routing, visibility, and strategic points of control.
-
-
-
-### **Exercise 1: Path Routing**
-
-Build routing rules and configure your load balancer to route traffic between the two cloud apps based on the request url.
-
-
-
-
- Reuse the origin pools from the previous exercise.
-
-
-
- Route requests to https://eph-ns.mcn-lab.f5demos.com/aws* to the AWS cloud app.
-
-
-
- Route requests to https://eph-ns.mcn-lab.f5demos.com/azure* to the Azure cloud app.
-
-
-
-
-
-
-### **Exercise 2: Header Routing**
-
-Build rules to route traffic between the two cloud apps based on an arbitrary HTTP request header.
-
-
-
-
-
- Route requests with an X-MCN-Lab: aws header to the AWS cloud app.
-
-
-
- Route requests with an X-MCN-Lab: azure header to the Azure cloud app.
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/labapp/app/markdown/score.md b/labapp/app/markdown/score.md
deleted file mode 100644
index e69de29..0000000
diff --git a/labapp/app/markdown/setup.md b/labapp/app/markdown/setup.md
deleted file mode 100644
index 58a0aaa..0000000
--- a/labapp/app/markdown/setup.md
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-# **Setup**
-
-
-
-Log in to the lab tenant and open any namespaced tile -- Multi-Cloud App Connect, Distributed Apps, etc. The ephemeral namespace is a randomly generated concatenation of adjective-animal in the navigation bar towards the top.
-
-
-
-
-The ephemeral namespace will be used to derive a unique URL for the load balancer used in the lab exercises.
-
- Cookies must be allowed for this site.
-
-
-
-
-
diff --git a/labapp/app/markdown/welcome.md b/labapp/app/markdown/welcome.md
deleted file mode 100644
index aa8ef9e..0000000
--- a/labapp/app/markdown/welcome.md
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-# **Welcome**
-
-
-
-This lab is a practical training activity.
-Each exercise will ask you to configure F5 Distributed Cloud ("XC") objects to reinforce core XC Multi-Cloud Networking ("MCN") App Connect concepts.
-Once configured, you will test the configuration using this web application.
-
-
-
-## **Getting Started**
-
-When your UDF deployment launched, two automated processes started - Customer Edge ("CE") registration and account provisioning in the lab tenant.
-
-
-
-### **Customer Edge**
-
-The CE in the UDF deployment will register with the lab tenant.
-CEs on first launch update software and, often, their OS. This can take ~20 min from when the CE is booted.
-
-When the CE is ready, the status indicator in the navigation pane (👀 look to the left) will show .
-Use the indicator to find the CE site name needed for configuring the load balancer's advertise policy.
-
-
-
-### **Account Provisioning**
-
-Check the email used to launch your UDF deployment for a welcome or password reset email from the lab tenant.
-Update your password to log into the tenant.
-
-
`;
- updateScoreCookie(requestUrl, 'fail');
- } finally {
- // Restore original button text
- button.innerHTML = buttonTxt;
- button.disabled = false;
- resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
- }
-}
-
- function updateScoreCookie_old(requestUrl, status) {
- // Get the current cookie, decode it, and parse it as JSON
- const currentCookie = decodeURIComponent(getScoreCookie('mcnp_scoreboard') || '%7B%7D'); // Ensure the default value is an encoded empty JSON object
- let progress = JSON.parse(currentCookie);
- progress[encodeURIComponent(requestUrl)] = status;
- document.cookie = `mcnp_scoreboard=${encodeURIComponent(JSON.stringify(progress))}; path=/; expires=${new Date(new Date().getTime() + 86400e3).toUTCString()};`;
- }
-
- function getScoreCookie(name) {
- let cookieArray = document.cookie.split(';');
- for(let i = 0; i < cookieArray.length; i++) {
- let cookiePair = cookieArray[i].split('=');
- if(name == cookiePair[0].trim()) {
- return cookiePair[1];
- }
- }
- return null;
- }
-
- function updateScoreCookie(requestUrl, status) {
- // Retrieve the existing score cookie or initialize it to an empty JSON object.
- // The cookie value retrieved is assumed to be URI-encoded since it was set as such.
- let currentCookie = getCookie('mcnp_scoreboard') || '{}';
-
- // Decode the retrieved cookie string to handle any URI-encoded characters.
- let decodedCookie = decodeURIComponent(currentCookie);
-
- // Parse the decoded cookie string into an object.
- let progress = JSON.parse(decodedCookie);
-
- // Update the progress object with the new status for the requestUrl.
- // Using encodeURIComponent to ensure the URL is safely encoded.
- progress[encodeURIComponent(requestUrl)] = status;
-
- // Serialize the progress object back into a JSON string.
- let jsonString = JSON.stringify(progress);
-
- // Encode the entire JSON string to ensure all special characters are URI-safe.
- let encodedJsonString = encodeURIComponent(jsonString);
-
- // Use the setCookie function to update the cookie with the URI-encoded JSON string.
- setCookie('mcnp_scoreboard', encodedJsonString, 1); // Set for 1 day expiration
-}
-
diff --git a/labapp/app/static/images/404-err.png b/labapp/app/static/images/banners/404-err.png
similarity index 100%
rename from labapp/app/static/images/404-err.png
rename to labapp/app/static/images/banners/404-err.png
diff --git a/labapp/app/static/images/500-err.png b/labapp/app/static/images/banners/500-err.png
similarity index 100%
rename from labapp/app/static/images/500-err.png
rename to labapp/app/static/images/banners/500-err.png
diff --git a/labapp/app/static/images/cookie-err.png b/labapp/app/static/images/banners/cookie-err.png
similarity index 100%
rename from labapp/app/static/images/cookie-err.png
rename to labapp/app/static/images/banners/cookie-err.png
diff --git a/labapp/app/static/images/lb-banner.png b/labapp/app/static/images/banners/lb-banner.png
similarity index 100%
rename from labapp/app/static/images/lb-banner.png
rename to labapp/app/static/images/banners/lb-banner.png
diff --git a/labapp/app/static/images/manip-banner.png b/labapp/app/static/images/banners/manip-banner.png
similarity index 100%
rename from labapp/app/static/images/manip-banner.png
rename to labapp/app/static/images/banners/manip-banner.png
diff --git a/labapp/app/static/images/overview-banner.png b/labapp/app/static/images/banners/overview-banner.png
similarity index 100%
rename from labapp/app/static/images/overview-banner.png
rename to labapp/app/static/images/banners/overview-banner.png
diff --git a/labapp/app/static/images/port-banner.png b/labapp/app/static/images/banners/port-banner.png
similarity index 100%
rename from labapp/app/static/images/port-banner.png
rename to labapp/app/static/images/banners/port-banner.png
diff --git a/labapp/app/static/images/practical.png b/labapp/app/static/images/banners/practical.png
similarity index 100%
rename from labapp/app/static/images/practical.png
rename to labapp/app/static/images/banners/practical.png
diff --git a/labapp/app/static/images/routing-banner.png b/labapp/app/static/images/banners/routing-banner.png
similarity index 100%
rename from labapp/app/static/images/routing-banner.png
rename to labapp/app/static/images/banners/routing-banner.png
diff --git a/labapp/app/static/images/score-banner.png b/labapp/app/static/images/banners/score-banner.png
similarity index 100%
rename from labapp/app/static/images/score-banner.png
rename to labapp/app/static/images/banners/score-banner.png
diff --git a/labapp/app/static/images/setup-banner.png b/labapp/app/static/images/banners/setup-banner.png
similarity index 100%
rename from labapp/app/static/images/setup-banner.png
rename to labapp/app/static/images/banners/setup-banner.png
diff --git a/labapp/app/static/bad.png b/labapp/app/static/images/common/bad.png
similarity index 100%
rename from labapp/app/static/bad.png
rename to labapp/app/static/images/common/bad.png
diff --git a/labapp/app/static/good.png b/labapp/app/static/images/common/good.png
similarity index 100%
rename from labapp/app/static/good.png
rename to labapp/app/static/images/common/good.png
diff --git a/labapp/app/static/lb-icon.png b/labapp/app/static/images/common/lb-icon.png
similarity index 100%
rename from labapp/app/static/lb-icon.png
rename to labapp/app/static/images/common/lb-icon.png
diff --git a/labapp/app/static/multi-cloud-app-connect.svg b/labapp/app/static/images/common/multi-cloud-app-connect.svg
similarity index 100%
rename from labapp/app/static/multi-cloud-app-connect.svg
rename to labapp/app/static/images/common/multi-cloud-app-connect.svg
diff --git a/labapp/app/static/origin-icon.png b/labapp/app/static/images/common/origin-icon.png
similarity index 100%
rename from labapp/app/static/origin-icon.png
rename to labapp/app/static/images/common/origin-icon.png
diff --git a/labapp/app/static/route-icon.png b/labapp/app/static/images/common/route-icon.png
similarity index 100%
rename from labapp/app/static/route-icon.png
rename to labapp/app/static/images/common/route-icon.png
diff --git a/labapp/app/static/unknown.png b/labapp/app/static/images/common/unknown.png
similarity index 100%
rename from labapp/app/static/unknown.png
rename to labapp/app/static/images/common/unknown.png
diff --git a/labapp/app/static/load-balancer1.png b/labapp/app/static/images/lb/load-balancer1.png
similarity index 100%
rename from labapp/app/static/load-balancer1.png
rename to labapp/app/static/images/lb/load-balancer1.png
diff --git a/labapp/app/static/load-balancer2.png b/labapp/app/static/images/lb/load-balancer2.png
similarity index 100%
rename from labapp/app/static/load-balancer2.png
rename to labapp/app/static/images/lb/load-balancer2.png
diff --git a/labapp/app/static/origin-pool.png b/labapp/app/static/images/lb/origin-pool.png
similarity index 100%
rename from labapp/app/static/origin-pool.png
rename to labapp/app/static/images/lb/origin-pool.png
diff --git a/labapp/app/static/origin-server.png b/labapp/app/static/images/lb/origin-server.png
similarity index 100%
rename from labapp/app/static/origin-server.png
rename to labapp/app/static/images/lb/origin-server.png
diff --git a/labapp/app/static/rewrite1.png b/labapp/app/static/images/manip/rewrite1.png
similarity index 100%
rename from labapp/app/static/rewrite1.png
rename to labapp/app/static/images/manip/rewrite1.png
diff --git a/labapp/app/static/rewrite2.png b/labapp/app/static/images/manip/rewrite2.png
similarity index 100%
rename from labapp/app/static/rewrite2.png
rename to labapp/app/static/images/manip/rewrite2.png
diff --git a/labapp/app/static/aws.png b/labapp/app/static/images/overview/aws.png
similarity index 100%
rename from labapp/app/static/aws.png
rename to labapp/app/static/images/overview/aws.png
diff --git a/labapp/app/static/azure.png b/labapp/app/static/images/overview/azure.png
similarity index 100%
rename from labapp/app/static/azure.png
rename to labapp/app/static/images/overview/azure.png
diff --git a/labapp/app/static/mcn-prac-arch-base.png b/labapp/app/static/images/overview/mcn-prac-arch-base.png
similarity index 100%
rename from labapp/app/static/mcn-prac-arch-base.png
rename to labapp/app/static/images/overview/mcn-prac-arch-base.png
diff --git a/labapp/app/static/mcnp-aws.png b/labapp/app/static/images/overview/mcnp-aws.png
similarity index 100%
rename from labapp/app/static/mcnp-aws.png
rename to labapp/app/static/images/overview/mcnp-aws.png
diff --git a/labapp/app/static/mcnp-azure.png b/labapp/app/static/images/overview/mcnp-azure.png
similarity index 100%
rename from labapp/app/static/mcnp-azure.png
rename to labapp/app/static/images/overview/mcnp-azure.png
diff --git a/labapp/app/static/mcnp-udf.png b/labapp/app/static/images/overview/mcnp-udf.png
similarity index 100%
rename from labapp/app/static/mcnp-udf.png
rename to labapp/app/static/images/overview/mcnp-udf.png
diff --git a/labapp/app/static/vsite.png b/labapp/app/static/images/port/vsite.png
similarity index 100%
rename from labapp/app/static/vsite.png
rename to labapp/app/static/images/port/vsite.png
diff --git a/labapp/app/static/vsite2.png b/labapp/app/static/images/port/vsite2.png
similarity index 100%
rename from labapp/app/static/vsite2.png
rename to labapp/app/static/images/port/vsite2.png
diff --git a/labapp/app/static/ms-forms.png b/labapp/app/static/images/score/ms-forms.png
similarity index 100%
rename from labapp/app/static/ms-forms.png
rename to labapp/app/static/images/score/ms-forms.png
diff --git a/labapp/app/static/eph-ns.png b/labapp/app/static/images/setup/eph-ns.png
similarity index 100%
rename from labapp/app/static/eph-ns.png
rename to labapp/app/static/images/setup/eph-ns.png
diff --git a/labapp/app/static/check.png b/labapp/app/static/images/welcome/check.png
similarity index 100%
rename from labapp/app/static/check.png
rename to labapp/app/static/images/welcome/check.png
diff --git a/labapp/app/static/email.png b/labapp/app/static/images/welcome/email.png
similarity index 100%
rename from labapp/app/static/email.png
rename to labapp/app/static/images/welcome/email.png
diff --git a/labapp/app/static/password.png b/labapp/app/static/images/welcome/password.png
similarity index 100%
rename from labapp/app/static/password.png
rename to labapp/app/static/images/welcome/password.png
diff --git a/labapp/app/templates/base.html b/labapp/app/templates/base.html
index e478ad4..bf17eb2 100644
--- a/labapp/app/templates/base.html
+++ b/labapp/app/templates/base.html
@@ -30,7 +30,7 @@
-{% endblock %}
\ No newline at end of file
diff --git a/labapp/app/templates/cookie.html b/labapp/app/templates/cookie.html
index 36a7c5c..3901cab 100644
--- a/labapp/app/templates/cookie.html
+++ b/labapp/app/templates/cookie.html
@@ -7,8 +7,8 @@
-
-
+
+
Verify cookies are enabled
Home
diff --git a/labapp/app/templates/error.html b/labapp/app/templates/error.html
index 472f608..9d75335 100644
--- a/labapp/app/templates/error.html
+++ b/labapp/app/templates/error.html
@@ -6,7 +6,7 @@
{% if code == 404 %}
{% endblock %}
\ No newline at end of file
diff --git a/labapp/app/templates/loadbalancing.html b/labapp/app/templates/loadbalancing.html
index 35c23a7..997850b 100644
--- a/labapp/app/templates/loadbalancing.html
+++ b/labapp/app/templates/loadbalancing.html
@@ -6,10 +6,18 @@
-
+
+
+
+ {% if not ns %}
+
+ Configure your ephemeral NS from the setup page before continuing.
+
+ {% endif %}
+
Load balancing is the cornerstone of XC's App Connect functionality.
@@ -29,27 +37,27 @@
Exercise 1: AWS Cloud App
-
+
The URL for the cloud app hosted in AWS is https://aws-cloud-app.mcn-lab.f5demos.com
-
+
The cloud app is only reachable from the student-awsnet site.
-
+
The cloud app is TLS only.
-
+
The load balancer domain is {{ ns or 'eph-ns' }}.mcn-lab.f5demos.com.
-
+
Use the mcn-lab-wildcard wildcard cert in the shared NS to enable TLS on the LB.
-
+
Do not advertise your load balancer to the internet.
{% if site %} Your site name is {{ site }}{% endif %}
@@ -102,23 +110,23 @@
Test Criteria
-
+
-
+
-
+
-
+
@@ -139,19 +147,19 @@
Exercise 2: Azure Cloud App
-
+
The URL for the cloud app hosted in Azure is https://azure-cloud-app.mcn-lab.f5demos.com
-
+
The cloud app is only reachable from the student-azurenet site.
+ Configure your ephemeral NS from the setup page before continuing.
+
+ {% endif %}
+
Since web traffic has been traversing proxies, engineers have needed to alter HTTP content for increased observability (XFF), performance (Cache-Control), or other core functionality (JWT).
@@ -29,11 +37,11 @@
Exercise 1: Path Rewrite
-
+
Keep your configuration from the previous exercise in place.
-
+
Requests to https://{{ ns or 'eph-ns' }}.mcn-lab.f5demos.com/aws/raw/ need to arrive at the origin with a path of /raw.
@@ -81,10 +89,10 @@
Test Criteria
-
+
-
+
@@ -103,11 +111,11 @@
Exercise 2: Request Header Shenanigans
-
+
Insert a request header named X-MCN-src-site to identify the UDF CE to the origin. Do not use a static value.
-
+
Insert a request header named X-MCN-namespace to identify the ephemeral NS to the origin. Do not use a static value.
@@ -155,7 +163,7 @@
Exercise 3: Response Header Shenanigans
-
+
Insert a response header named X-MCN-dest-site to determine which cloud CE processed the request.
+ Configure your ephemeral NS from the setup page before continuing.
+
+ {% endif %}
+
+
Modern applications, and some classic ones, are often comprised of disparate services spread across sites.
MCN solutions must be able to make routing decisions based on characterstics of an HTTP request.
@@ -28,15 +36,15 @@
Exercise 1: Path Routing
-
+
Reuse the origin pools from the previous exercise.
-
+
Route requests to https://{{ ns or 'eph-ns' }}.mcn-lab.f5demos.com/aws to the AWS cloud app.
-
+
Route requests to https://{{ ns or 'eph-ns' }}.mcn-lab.f5demos.com/azure to the Azure cloud app.
@@ -104,11 +112,11 @@
Exercise 2: Header Routing
-
+
Route requests with an X-MCN-Lab: aws header to the AWS cloud app.
-
+
Route requests with an X-MCN-Lab: azure header to the Azure cloud app.
@@ -30,7 +30,7 @@
The ephemeral namespace is a randomly generated concatenation of adjective-animal in the navigation bar towards the top.
-
+
The ephemeral namespace will be used to derive a unique URL for the load balancer used in the lab exercises.
diff --git a/labapp/app/templates/standard.html b/labapp/app/templates/standard.html
index 1b2d796..72b588a 100644
--- a/labapp/app/templates/standard.html
+++ b/labapp/app/templates/standard.html
@@ -3,7 +3,7 @@
{% block title %}{{ title }}{% endblock %}
{% block content %}
-
+
{{ content|safe }}
{% endblock %}
\ No newline at end of file
diff --git a/labapp/app/templates/welcome.html b/labapp/app/templates/welcome.html
index dc6d119..d283318 100644
--- a/labapp/app/templates/welcome.html
+++ b/labapp/app/templates/welcome.html
@@ -6,7 +6,7 @@
-
+
@@ -33,7 +33,7 @@
Customer Edge
- When the CE is ready, the status indicator in the navigation pane (👀 look to the left) will show .
+ When the CE is ready, the status indicator in the navigation pane (👀 look to the left) will show .
Use the indicator to find the CE site name needed for configuring the load balancer's advertise policy.