From 662d9be948696fd6a81cd55ac10ba1392f593b11 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 01:56:45 -0400 Subject: [PATCH 01/15] maybe works --- labapp/app/app.py | 14 +++++++------- labapp/app/markdown/portability.md | 16 ++++++++++++---- labapp/app/static/helpers.js | 23 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/labapp/app/app.py b/labapp/app/app.py index 050b1ff..5baa928 100644 --- a/labapp/app/app.py +++ b/labapp/app/app.py @@ -359,16 +359,16 @@ def manip3(): except (LabException, requests.RequestException, ValueError) as e: return jsonify(status='fail', error=str(e)) -@app.route('/_port1') -def port1(): - """Azure LB test""" +@app.route('/_port2', methods=['POST']) +def port2(): + """Friend test""" try: s = requests.Session() s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"}) - ns = eph_ns() - if not ns: - raise LabException("Ephemeral NS not set") - url = f"https://{ns}.{app.config['base_url']}/" + data = request.get_json() + print(data) + eph_ns = data['userInput'] + url = f"https://{eph_ns}.{app.config['base_url']}/" data = cloudapp_fetch(s, url, 7, 'info', {"method": "GET", "path": "/"}) return jsonify(status='success', data=data) except (LabException, requests.RequestException, ValueError) as e: diff --git a/labapp/app/markdown/portability.md b/labapp/app/markdown/portability.md index eb4beb7..c079848 100644 --- a/labapp/app/markdown/portability.md +++ b/labapp/app/markdown/portability.md @@ -87,13 +87,21 @@ Host: eph-ns.mcn-lab.f5demos.com } ``` -
- +
+
+
+
+ + +
+
+
+
-
diff --git a/labapp/app/static/helpers.js b/labapp/app/static/helpers.js index a388e31..e39aac5 100644 --- a/labapp/app/static/helpers.js +++ b/labapp/app/static/helpers.js @@ -39,3 +39,26 @@ async function makeHttpRequest(buttonId, requestUrl, resultDivId) { resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } } + +async function makePostRequest(buttonId, requestUrl, resultDivId, inputDataId) { + const button = document.getElementById(buttonId); + const resultDiv = document.getElementById(resultDivId); + const inputData = document.getElementById(inputDataId).value; + button.disabled = true; + + try { + const response = await axios.post(requestUrl, { userInput: inputData }); + if (response.data.status === 'success') { + const prettyJson = JSON.stringify(response.data.data, null, 4); + resultDiv.innerHTML = `
Request Succeeded:
${prettyJson}
`; + } else { + const errJson = JSON.stringify(response.data.error, null, 4); + resultDiv.innerHTML = `
Request Failed:
${errJson}
`; + } + } catch (error) { + resultDiv.innerHTML = `
Error: ${error.message}
`; + } finally { + button.disabled = false; + resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); + } +} From a98cc2e702ec171a55c4aa8b6c389e7475426358 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 02:06:42 -0400 Subject: [PATCH 02/15] close to publish? --- labapp/app/markdown/portability.md | 7 ++----- labapp/app/markdown/route.md | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/labapp/app/markdown/portability.md b/labapp/app/markdown/portability.md index c079848..0a6e0d3 100644 --- a/labapp/app/markdown/portability.md +++ b/labapp/app/markdown/portability.md @@ -68,7 +68,7 @@ document.getElementById('requestBtn1').addEventListener('click', () => { ### **Exercise 2: Find a Friend** Do you have a friend working on the lab? -Ask them their ephemeral namespace and test that their load balancer is being advertised from your site. +Ask them their ephemeral namespace to test advertisement from the UDF site (or test with the value already populated).
@@ -107,7 +107,4 @@ document.getElementById('requestBtn2').addEventListener('click', () => { -🚀 Nice 🚀! -
- - +Congratulations on completing the App Connect exercises. Move on to the first Network Connect exercise on virtual networks. \ No newline at end of file diff --git a/labapp/app/markdown/route.md b/labapp/app/markdown/route.md index a9feade..d7a43b7 100644 --- a/labapp/app/markdown/route.md +++ b/labapp/app/markdown/route.md @@ -123,4 +123,4 @@ document.getElementById('requestBtn2').addEventListener('click', () => { -Once you've completed the exercises, move on to the manipulation exercise. \ No newline at end of file +Once you've completed the exercises, move on to the manipulation exercise. \ No newline at end of file From a47dc976541b30505c44b03250dd1db97a567354 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 09:21:06 -0400 Subject: [PATCH 03/15] walkthrough --- labapp/app/app.py | 23 ++- labapp/app/markdown/lb.md | 14 +- labapp/app/markdown/manipulation.md | 8 +- labapp/app/markdown/overview.md | 52 +++++-- labapp/app/markdown/portability.md | 10 +- labapp/app/markdown/route.md | 8 +- labapp/app/markdown/setup.md | 5 +- labapp/app/markdown/welcome.md | 28 ++-- labapp/app/templates/header.html | 9 -- labapp/app/templates/lb.html | 19 --- labapp/app/templates/netpolicy.html | 9 -- labapp/app/templates/orig-base.html | 221 ---------------------------- labapp/app/templates/path.html | 9 -- labapp/app/templates/setup.html | 33 +++-- labapp/app/templates/vnet.html | 9 -- 15 files changed, 132 insertions(+), 325 deletions(-) delete mode 100644 labapp/app/templates/header.html delete mode 100644 labapp/app/templates/lb.html delete mode 100644 labapp/app/templates/netpolicy.html delete mode 100644 labapp/app/templates/orig-base.html delete mode 100644 labapp/app/templates/path.html delete mode 100644 labapp/app/templates/vnet.html diff --git a/labapp/app/app.py b/labapp/app/app.py index 5baa928..eff6173 100644 --- a/labapp/app/app.py +++ b/labapp/app/app.py @@ -87,16 +87,16 @@ def setup(): if action == 'save': this_eph_ns = request.form['eph_ns'].strip() if not validate_eph_ns(this_eph_ns): - flash("Invalid ephemeral NS.", "danger") + flash("Invalid ephemeral namespace.", "danger") return redirect(url_for('setup')) response = make_response(redirect('/setup')) response.set_cookie('eph_ns', this_eph_ns, max_age=60*60*24) - flash('Ephemeral NS successfully set.', "success") + flash('Ephemeral namespace successfully set.', "success") return response if action == 'clear': response = make_response(redirect('/setup')) response.set_cookie('eph_ns', '', expires=0) - flash("Ephemeral NS cleared.", "info") + flash("Ephemeral namespace cleared.", "info") return response html = render_md("markdown/setup.md") return render_template('setup.html', @@ -358,7 +358,22 @@ def manip3(): return jsonify(status='success', data=data) except (LabException, requests.RequestException, ValueError) as e: return jsonify(status='fail', error=str(e)) - + +@app.route('/_port1') +def port1(): + """Friend test""" + try: + s = requests.Session() + s.headers.update({"User-Agent": "MCN-Lab-Runner/1.0"}) + ns = eph_ns() + if not ns: + raise LabException("Ephemeral NS not set") + url = f"https://{ns}.{app.config['base_url']}/" + data = cloudapp_fetch(s, url, 7, 'info', {"method": "GET", "path": "/"}) + return jsonify(status='success', data=data) + except (LabException, requests.RequestException, ValueError) as e: + return jsonify(status='fail', error=str(e)) + @app.route('/_port2', methods=['POST']) def port2(): """Friend test""" diff --git a/labapp/app/markdown/lb.md b/labapp/app/markdown/lb.md index c5315b4..403faab 100644 --- a/labapp/app/markdown/lb.md +++ b/labapp/app/markdown/lb.md @@ -1,5 +1,5 @@ # **Load Balancing** @@ -32,6 +32,10 @@ Build an origin pool and load balancer based on the exercise requirements. The cloud app is TLS only.
  • +     + The load balancer domain is {{ ns }}.mcn-lab.f5demos.com. +
  • +
  •     Use the wildcard cert provided in the shared NS, mcn-lab-wildcard, to enable TLS on the LB.
  • @@ -146,5 +150,11 @@ document.getElementById('requestBtn2').addEventListener('click', () => { -After completing both exercises, move on to the routing exercise. + diff --git a/labapp/app/markdown/manipulation.md b/labapp/app/markdown/manipulation.md index cf140fe..d15513d 100644 --- a/labapp/app/markdown/manipulation.md +++ b/labapp/app/markdown/manipulation.md @@ -174,5 +174,11 @@ document.getElementById('requestBtn3').addEventListener('click', () => { -Finish off App Connect with an exercise on load balancer portability. + diff --git a/labapp/app/markdown/overview.md b/labapp/app/markdown/overview.md index b0c8525..23772b9 100644 --- a/labapp/app/markdown/overview.md +++ b/labapp/app/markdown/overview.md @@ -6,7 +6,7 @@ -The lab environment, the application endpoints, and how you interact with the load balancer have been simplified in an effort to focus on concepts. +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.
    @@ -19,15 +19,15 @@ The lab environment contains three distributed sites meshed using the F5 Distrib
    • -    +     student-awsnet in Amazon Web Services
    • -     +     student-azurenet in Microsoft Azure
    • -        +     Lab CE in UDF
    @@ -40,7 +40,7 @@ The lab environment contains three distributed sites meshed using the F5 Distrib 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, the test results are displaying the headers and info **from the request received by the app**. +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. @@ -52,21 +52,37 @@ 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. -To complete a lab exercise, you will run a test against the load balancer advertised from the Customer Edge in your UDF site. -Tests are integrated in this lab app. +Exercise requirements are listed in a table along with an object type indicator. + +
      +
    • +     + Load Balancer +
    • +
    • +     + Origin Pool +
    • +
    • +     + Route +
    • +
    #### **Test Criteria** -Exercises will specify thier success criteria along with the test. +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 prior to the button. Here are some examples to try. @@ -131,13 +147,25 @@ ubuntu@ubuntu:~$ curl -s https://foo.mcn-lab.f5demos.com/ | jq "info": "bar" } ``` + + +
    +## **Issues** -Note that responses displayed in exercise tests are truncated for readibility. +Use the lab repository issue tracker to report bugs, typos, or lab enhancements. -Next, visit the setup page before starting the exercises. + diff --git a/labapp/app/markdown/portability.md b/labapp/app/markdown/portability.md index 0a6e0d3..af61565 100644 --- a/labapp/app/markdown/portability.md +++ b/labapp/app/markdown/portability.md @@ -46,7 +46,7 @@ Host: eph-ns.mcn-lab.f5demos.com
    @@ -107,4 +107,10 @@ document.getElementById('requestBtn2').addEventListener('click', () => { -Congratulations on completing the App Connect exercises. Move on to the first Network Connect exercise on virtual networks. \ No newline at end of file + \ No newline at end of file diff --git a/labapp/app/markdown/route.md b/labapp/app/markdown/route.md index d7a43b7..29830a3 100644 --- a/labapp/app/markdown/route.md +++ b/labapp/app/markdown/route.md @@ -123,4 +123,10 @@ document.getElementById('requestBtn2').addEventListener('click', () => { -Once you've completed the exercises, move on to the manipulation exercise. \ No newline at end of file + \ No newline at end of file diff --git a/labapp/app/markdown/setup.md b/labapp/app/markdown/setup.md index c2ea7e2..a5c6466 100644 --- a/labapp/app/markdown/setup.md +++ b/labapp/app/markdown/setup.md @@ -6,7 +6,7 @@ -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. +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. eph-ns @@ -18,7 +18,7 @@ The ephemeral namespace will be used to derive a unique URL for the load balance
    - + + diff --git a/labapp/app/markdown/welcome.md b/labapp/app/markdown/welcome.md index 6d9f36a..d59d750 100644 --- a/labapp/app/markdown/welcome.md +++ b/labapp/app/markdown/welcome.md @@ -7,9 +7,9 @@ -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") concepts. -Once configured, you'll be asked to **test** your configuration using this web application. +This lab is a practical training activity. +Each exercise will ask you to configureF5 Distributed Cloud ("XC") objects to reinforce core XC Multi-Cloud Networking ("MCN") concepts. +Once configured, you will test the configuration using this web application.
    @@ -22,18 +22,17 @@ When your UDF deployment launched, two automated processes started - Customer Ed ### **Customer Edge** The CE in the UDF deployment will registered with the lab tenant. -CEs on first launch update software and, often, their OS. This can be very time consuming ~20 min from when the CE is booted. - -This lab app includes an indicator of the CE's status along with the site name in the navigation pane. -The **site name** is needed when configuring the load balancer advertise policy. +CEs on first launch update software and, often, their OS. This can take ~20 min from when the CE is booted. +This lab app includes an indicator of the CE's site name and status in the navigation pane (👀 look to the left). +The **site name** is needed when 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 to the lab tenant. -Update your password and log into the tenant. +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.

    @@ -59,7 +58,7 @@ Here's a few things you can do while waiting for the CE to be registered and pro

  •     - Check for the tenant "welcome" email. + Check for the tenant welcome email.
  •     @@ -70,6 +69,13 @@ Here's a few things you can do while waiting for the CE to be registered and pro -Welcome to the lab! Next, read an overview that explains the lab environment, tools, and exercises. + + diff --git a/labapp/app/templates/header.html b/labapp/app/templates/header.html deleted file mode 100644 index 597c8a7..0000000 --- a/labapp/app/templates/header.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} - -{% block title %}MCN Practical: Header Manipulation{% endblock %} - -{% block content %} -
    - {{ content|safe }} -
    -{% endblock %} \ No newline at end of file diff --git a/labapp/app/templates/lb.html b/labapp/app/templates/lb.html deleted file mode 100644 index 9a65b1b..0000000 --- a/labapp/app/templates/lb.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} - -{% block title %}MCN Practical: Load Balancer{% endblock %} - -{% with messages = get_flashed_messages(with_categories=true) %} -{% if messages %} -
    - {% for category, message in messages %} -
    {{ message }}
    - {% endfor %} -
    -{% endif %} -{% endwith %} - -{% block content %} -
    - {{ content|safe }} -
    -{% endblock %} \ No newline at end of file diff --git a/labapp/app/templates/netpolicy.html b/labapp/app/templates/netpolicy.html deleted file mode 100644 index 6123842..0000000 --- a/labapp/app/templates/netpolicy.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} - -{% block title %}MCN Practical: Network Policy{% endblock %} - -{% block content %} -
    - {{ content|safe }} -
    -{% endblock %} \ No newline at end of file diff --git a/labapp/app/templates/orig-base.html b/labapp/app/templates/orig-base.html deleted file mode 100644 index 712e3a0..0000000 --- a/labapp/app/templates/orig-base.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - {% block title %}{{ title }}{% endblock %} - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - {% block content %} - {% endblock %} -
    -
    -
    - - - - diff --git a/labapp/app/templates/path.html b/labapp/app/templates/path.html deleted file mode 100644 index 8ed974f..0000000 --- a/labapp/app/templates/path.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} - -{% block title %}MCN Practical: Path Routing{% endblock %} - -{% block content %} -
    - {{ content|safe }} -
    -{% endblock %} \ No newline at end of file diff --git a/labapp/app/templates/setup.html b/labapp/app/templates/setup.html index 89805ef..b97651d 100644 --- a/labapp/app/templates/setup.html +++ b/labapp/app/templates/setup.html @@ -5,23 +5,28 @@ {% block content %}
    {{ content|safe }} -
    -
    - {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} -
    - {% for category, message in messages %} -
    {{ message }}
    - {% endfor %} -
    -
    - When ready, start the exercises. -
    - {% endif %} - {% endwith %} +
    + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
    + {% for category, message in messages %} +
    {{ message }}
    + {% endfor %} +
    + {% endif %} + {% endwith %} +
    + + {% endblock %} diff --git a/labapp/app/templates/vnet.html b/labapp/app/templates/vnet.html deleted file mode 100644 index 44a9666..0000000 --- a/labapp/app/templates/vnet.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} - -{% block title %}MCN Practical: Virtual Networks{% endblock %} - -{% block content %} -
    - {{ content|safe }} -
    -{% endblock %} \ No newline at end of file From 1b78b9865dad5638574a590e4c007154bd873311 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 09:46:34 -0400 Subject: [PATCH 04/15] can do better later --- labapp/app/app.py | 1 + labapp/app/markdown/lb.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/labapp/app/app.py b/labapp/app/app.py index eff6173..1455130 100644 --- a/labapp/app/app.py +++ b/labapp/app/app.py @@ -56,6 +56,7 @@ def return_err(err): @app.after_request def cache_control(response): + """cache control""" if request.path.startswith("/static/") and request.path.endswith(".png"): response.headers['Cache-Control'] = 'public, max-age=3600' return response diff --git a/labapp/app/markdown/lb.md b/labapp/app/markdown/lb.md index 403faab..69164cb 100644 --- a/labapp/app/markdown/lb.md +++ b/labapp/app/markdown/lb.md @@ -33,7 +33,7 @@ Build an origin pool and load balancer based on the exercise requirements.
  •     - The load balancer domain is {{ ns }}.mcn-lab.f5demos.com. + The load balancer domain is your-ephemeral-namespace.mcn-lab.f5demos.com.
  •     From 6474fd711d016c9a8db2055aa0b8fb0e792a40c8 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 09:56:35 -0400 Subject: [PATCH 05/15] copy cleanup --- labapp/app/markdown/welcome.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/labapp/app/markdown/welcome.md b/labapp/app/markdown/welcome.md index d59d750..8a574a6 100644 --- a/labapp/app/markdown/welcome.md +++ b/labapp/app/markdown/welcome.md @@ -8,7 +8,7 @@ This lab is a practical training activity. -Each exercise will ask you to configureF5 Distributed Cloud ("XC") objects to reinforce core XC Multi-Cloud Networking ("MCN") concepts. +Each exercise will ask you to configure F5 Distributed Cloud ("XC") objects to reinforce core XC Multi-Cloud Networking ("MCN") concepts. Once configured, you will test the configuration using this web application.
    @@ -21,11 +21,11 @@ When your UDF deployment launched, two automated processes started - Customer Ed ### **Customer Edge** -The CE in the UDF deployment will registered with the lab tenant. +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. -This lab app includes an indicator of the CE's site name and status in the navigation pane (👀 look to the left). -The **site name** is needed when configuring the load balancer's advertise policy. +When the CE is ready, the indicator in the navigation pane (👀 look to the left) will show green. +Use the indicator to find the CE site name needed for configuring the load balancer's advertise policy.
    From 43f7bf1cb01ec04b40323f01b917a42a05c5d29f Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:00:49 -0400 Subject: [PATCH 06/15] copy --- labapp/app/static/check.png | Bin 0 -> 2089 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 labapp/app/static/check.png diff --git a/labapp/app/static/check.png b/labapp/app/static/check.png new file mode 100644 index 0000000000000000000000000000000000000000..d74717706cdba46f4d85205539075796670d6b90 GIT binary patch literal 2089 zcmV+^2-f$BP)Px+<4Ht8RCr$9n|W*$RUF5^zu9f6^g;?0iX2Li7ON2Lu^>UBhzE#)1`Gxi!2`rA z9uOto8WS`I(EuJGf=EybB32ED8dPAn5L6JVB&bwM3k7%CvzGLA}S`COJ$~FNs_DV z0AdLMRX7@*IVABI05=#F90`mH1dM%7@-4H7Q%zU2oMruJ&3nBh<}Y1ged^+ zA>1wyh5-!SJF1JfzHS5{PqM?+BZYz%2!KBUu&$xTcj)kqd#a7BVF-W_f3CqhmKcu$ zoNHtwTjvt0!El3UofE!qjD&@50E0cbJsFM(%(y3}#QTv|5+!K4kt7)rKuc+3#{@7Q zvO2q4?HNWPL2jCJuUOd}A&0_eYYRF_T--YLX9zoUpZ3LzwbX7RC? z@C?L^;t7n!^|g&lLRAM%02hMz^PFfuF)ygAZTvzDLMs3w=_Pco8~y*4<+)hR_6D3l zow^&0`6Vv*=HO>r0m%Akct4ipCn2%O_!q_yeFE^Q6Y|T!JwgD03(NHb&#w6n@#aC7 zd!het0sv(09(E;UegUkMybEy@IZ2-F?*%OYI?CyHlH!pT*A+>QB-A$6;#hr!?t{|u zf))T-p4^eljyGaC@ufJDadq+#j7ZH#kNEER%X3IK8X2@U6F zf$^G=mD+Ny5Pw~l;kc{k9mq}`tZaS8cNU*l7U8Xb-c^3qGlIQ90TAo4uO(g;yZ`J# zEc|CFeyVos(cd(OP*`8xI8*cm3V>L4|8U}k?PYc4_^^C6KCbvoKLDVmFCgW%m*~BR zm=_yap)KY{5-)7nUHdZ@99e{YXAkH%iBL_9_YUT}=TfXTJ|f!>OUc8W-ZNTaK3HLm zuNG^MZ@`_$w0!V|vd!al^$UHEj~&w^!}J%JQ|w zPXGLBN*GY4J8v97OJnJ}duc*nJdiORw|BeMF7aaB3I@MTgFLR;u@wK^;?gjo+gMCZ zpQO}!Ew_*I&oDtvo-yCDdX#0$g!^d7;xWh=0;@+)h^H#bD4 z0puhP#k{_cv?@_XA?Oib*>DmYDvOk6=Xm`I>i{seng%c~?IyfF;6+Vi^tPvZ#EWuQ zbaFG6maVW>ys$hP0ODfueE)gq6`$S;g2(|PPL~~974oL0x6!dA4C zrAGmh9Eq9`zCO7XOUjmO-q|xd55z;g@3XVfi5x0T0P>eZ`E!@?G4P_x@L=zmxVfu# z6DeL+tUs{{g(o%zKoHeqTKZ(%pK-UHjgAgM^kvk2fGC5{^m`lvhSms%&}NN}4*3ve zFxo~)xc~JRkHo#briF#DrlJr02t)Xdx}5{BFzo=dja8=w9%NI zF+(#cif2W6^wjLZkfbX@-tJ2NJ%o3TzHeQl6UJx)s+h2pGI!+{K*BOGQlo(&l43#k z+c2^FZ6P6qTVK@rRTZD&y|Ry@F+=~ejD7#V8+uWAKn{Uk1t30difWjJU|XXTMhyc$ zFgc!}>|OckKB9-Cxe)p96RA7~+hl8_6Ye;PSC`~@rqX3wu1SqgiMtELFGm{&>VBdk z%w|IZ|7dE#1Y0M5U z5F3c3cw^U5xF&fh;wet)2ezF0-kLW$CgRoq^aB9c`2`YWvg2*IZx0Kl$X zV8A}xrv{&XD*$$Tf$a*zY@l`etpGHY#GGtdcFZNhc&qw?_7vVMvWh`p$s{clncv?Y z&9B7lN{Hkw|9h@`qt=2UKa^DR zL2BG&W`34{K2}-N#_N=Wv8cr54*B6n*iU7%J-K}v*)fyBGddask@NssVGr%TfHuC zIs}3rRK0-+qZzoWjX@~FLA;w7n|(gVHoY!y831*mHU?ptaMgZYRX|Vk;tv9hzD($1 zkyi-O;&b;ZD^A>U56}vYMmTa==Ds9h1ToSXNC%;Z&ZK!>FryR_S1{wC1e8YO>Xs%! zJs#nAr^u2eWJ!!HCT{+hc}jrz7y5vDL|%|w&5RlVM}^= Date: Thu, 2 May 2024 10:01:51 -0400 Subject: [PATCH 07/15] copy --- labapp/app/markdown/welcome.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labapp/app/markdown/welcome.md b/labapp/app/markdown/welcome.md index 8a574a6..1f0f237 100644 --- a/labapp/app/markdown/welcome.md +++ b/labapp/app/markdown/welcome.md @@ -24,7 +24,7 @@ When your UDF deployment launched, two automated processes started - Customer Ed 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 indicator in the navigation pane (👀 look to the left) will show green. +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.
    From 2d7a98eb1fd2f72af39fa068e893b7e0d435d860 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:34:20 -0400 Subject: [PATCH 08/15] copy --- labapp/app/markdown/manipulation.md | 15 +++++++-------- labapp/app/markdown/overview.md | 2 +- labapp/app/markdown/portability.md | 11 ++++++++--- labapp/app/markdown/route.md | 12 ++++++------ 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/labapp/app/markdown/manipulation.md b/labapp/app/markdown/manipulation.md index d15513d..521f91d 100644 --- a/labapp/app/markdown/manipulation.md +++ b/labapp/app/markdown/manipulation.md @@ -6,12 +6,11 @@ -Since web traffic has been traversing proxies, engineers have needed to alter HTTP content for increased observability ([XFF](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)), performance ([cache-control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)), or other reasons ([JWT](https://en.wikipedia.org/wiki/JSON_Web_Token)). +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** @@ -55,7 +54,7 @@ document.getElementById('requestBtn1').addEventListener('click', () => { }); -Since questions on this functionality are often asked on F5 DevCentral, a hint might be warranted. +Questions on this functionality are often asked on F5 DevCentral. Here's a hint.

    @@ -86,11 +85,11 @@ Use the

  •     - Insert a request header named X-MCN-src-site to identifies the UDF CE to the origin. Do not use a static value. + 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 identifies the ephemeral namespace 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.
  • @@ -139,9 +138,9 @@ document.getElementById('requestBtn2').addEventListener('click', () => { #### **Test Criteria** -
    - -This test will evaluate response headers. + ```http GET https://eph-ns.mcn-lab.f5demos.com/aws HTTP/1.1 diff --git a/labapp/app/markdown/overview.md b/labapp/app/markdown/overview.md index 23772b9..4fdc7ec 100644 --- a/labapp/app/markdown/overview.md +++ b/labapp/app/markdown/overview.md @@ -82,7 +82,7 @@ To complete lab exercises, you will run tests against the load balancer advertis 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 prior to the button. +Each test will specify success criteria immediately before to the button. Here are some examples to try. diff --git a/labapp/app/markdown/portability.md b/labapp/app/markdown/portability.md index af61565..965b172 100644 --- a/labapp/app/markdown/portability.md +++ b/labapp/app/markdown/portability.md @@ -11,7 +11,7 @@ The configuration built so far handles load balancing, routing, and content mani 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 seperate XC from traditional ADCs is the flexibility of defining where the object is advertised. +What seperates XC from traditional ADCs is flexibility in defining where a load balancer is advertised.
    @@ -67,9 +67,14 @@ document.getElementById('requestBtn1').addEventListener('click', () => { ### **Exercise 2: Find a Friend** -Do you have a friend working on the lab? -Ask them their ephemeral namespace to test advertisement from the UDF site (or test with the value already populated). +Do you have a friend working on the lab? Find thier ephemeral namespace (or use the one provided). +
    diff --git a/labapp/app/markdown/route.md b/labapp/app/markdown/route.md index 29830a3..65545c9 100644 --- a/labapp/app/markdown/route.md +++ b/labapp/app/markdown/route.md @@ -8,7 +8,7 @@ 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 provide intelligent routing, visibility, and strategic points of control. +F5 XC App Connect is a distributed L7 proxy that provides intelligent routing, visibility, and strategic points of control.
    @@ -19,15 +19,15 @@ Build routing rules and configure your load balancer to route traffic between th @@ -77,11 +77,11 @@ Build rules to route traffic between the two cloud apps based on an arbitrary HT From 17a978b33f807501fc08793f4fe7253bdc907147 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:35:25 -0400 Subject: [PATCH 09/15] ship --- labapp/app/markdown/overview.md | 6 ++---- labapp/app/markdown/welcome.md | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/labapp/app/markdown/overview.md b/labapp/app/markdown/overview.md index 23772b9..77a2ca4 100644 --- a/labapp/app/markdown/overview.md +++ b/labapp/app/markdown/overview.md @@ -15,15 +15,13 @@ Understanding the environment, it's topology, and the rudimentary functionality 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
    • diff --git a/labapp/app/markdown/welcome.md b/labapp/app/markdown/welcome.md index 1f0f237..35dfecc 100644 --- a/labapp/app/markdown/welcome.md +++ b/labapp/app/markdown/welcome.md @@ -52,14 +52,14 @@ Here's a few things you can do while waiting for the CE to be registered and pro     Read the lab overview.
    • -
    • -     - Configure lab settings after logging into the tenant. -
    •     Check for the tenant welcome email.
    • +
    • +     + Configure lab settings after logging into the tenant. +
    •     Get a cup of coffee. From 668521bdc75f91be17c33bf15097eb01ba37153b Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:36:24 -0400 Subject: [PATCH 10/15] ? --- labapp/app/markdown/portability.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labapp/app/markdown/portability.md b/labapp/app/markdown/portability.md index 965b172..71b6eec 100644 --- a/labapp/app/markdown/portability.md +++ b/labapp/app/markdown/portability.md @@ -115,7 +115,7 @@ document.getElementById('requestBtn2').addEventListener('click', () => { \ No newline at end of file From 26c94eb8cd151c838080188c8d44736bf53e7004 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:37:28 -0400 Subject: [PATCH 11/15] copy --- labapp/app/markdown/portability.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/labapp/app/markdown/portability.md b/labapp/app/markdown/portability.md index 71b6eec..192769b 100644 --- a/labapp/app/markdown/portability.md +++ b/labapp/app/markdown/portability.md @@ -81,8 +81,8 @@ Do you have a friend working on the lab? Find thier ephemeral namespace< #### **Test Criteria** ```http -GET https://eph-ns.mcn-lab.f5demos.com/ HTTP/1.1 -Host: eph-ns.mcn-lab.f5demos.com +GET https://friend-eph-ns.mcn-lab.f5demos.com/ HTTP/1.1 +Host: friend-eph-ns.mcn-lab.f5demos.com { "info": { From 076b40c33b496b0bc1d60ab6643d65bf0f7a2bce Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:47:08 -0400 Subject: [PATCH 12/15] need to align --- labapp/app/templates/base.html | 17 +-- labapp/app/templates/future_base.html | 151 ++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 labapp/app/templates/future_base.html diff --git a/labapp/app/templates/base.html b/labapp/app/templates/base.html index e0b9a83..59c56dc 100644 --- a/labapp/app/templates/base.html +++ b/labapp/app/templates/base.html @@ -27,7 +27,7 @@
      Logo - MCN Practical + App Connect
      • @@ -44,7 +44,7 @@
        • @@ -55,17 +55,6 @@
      • -
      • - - -
      • diff --git a/labapp/app/templates/future_base.html b/labapp/app/templates/future_base.html new file mode 100644 index 0000000..e0b9a83 --- /dev/null +++ b/labapp/app/templates/future_base.html @@ -0,0 +1,151 @@ + + + + + {% block title %}{{ title }}{% endblock %} + + + + + + + + + + + + + + + + + +
        +
        + + + + +
        + {% block content %} + {% endblock %} +
        +
        +
        + + + + From 69c0c3cedf369eb2deba3bc792e20f43611a5c03 Mon Sep 17 00:00:00 2001 From: Kevin Reynolds Date: Thu, 2 May 2024 10:59:23 -0400 Subject: [PATCH 13/15] good enough --- labapp/app/markdown/welcome.md | 2 +- labapp/app/static/custom.css | 8 ++++++++ labapp/app/templates/base.html | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/labapp/app/markdown/welcome.md b/labapp/app/markdown/welcome.md index 35dfecc..40fdde0 100644 --- a/labapp/app/markdown/welcome.md +++ b/labapp/app/markdown/welcome.md @@ -8,7 +8,7 @@ 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") concepts. +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.
        diff --git a/labapp/app/static/custom.css b/labapp/app/static/custom.css index 26f70eb..6d11d83 100644 --- a/labapp/app/static/custom.css +++ b/labapp/app/static/custom.css @@ -30,6 +30,14 @@ main { margin-top: auto; } +.logo-box { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: auto; +} + .markdown-body { padding: 50px; diff --git a/labapp/app/templates/base.html b/labapp/app/templates/base.html index 59c56dc..243f5e6 100644 --- a/labapp/app/templates/base.html +++ b/labapp/app/templates/base.html @@ -25,9 +25,9 @@