From 02e17a158db126d6d5eb42c755e8038f6dfb2c91 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Thu, 2 May 2024 21:59:25 -0400 Subject: [PATCH 001/162] Flushes out track metadata --- instruqt/delivering-as-an-appliance/track.yml | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index 706372941..262291914 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -2,27 +2,30 @@ slug: delivering-as-an-appliance id: pbzwbwd3m2aw title: Delivering Your Application as a Kubernetes Appliance teaser: |- - A template track for sharing the shell environment across - challenges -description: |- - This track is a template track to build any lab that requires - maintaining the shell and it's environment between challenges. + Package your application as a Kubernetes appliance to simplify + installation and operation. +description: |2- - To use it, run: + The Replicated Embeded Cluster lets you distribute your application + without a dependency on the customer's Kubernetes environment. + Customers install the application like any other Linux services + then follow a guided process to complete the application. The + cluster and application are tightly coupled and share an + adminstration console to simplify Day Two operations. - ``` - instruqt track create --title [NEW TRACK TITLE] \ - --from shared-env-template - ``` + This lab explores the Replicated Embedded Cluster and the + appliance-like experience it provides for you customers. You'll + learn how to: - The track provides both a shell and a single-node cluster, and - the learner runs their commands as the user `replicant`. - - Another advantage of this template is that you can check what - the learner has typed into their shell by capturing the `tmux` - pane content and running a grep against it, see the sample - check script in the first challenge for an example. -icon: https://storage.googleapis.com/instruqt-frontend/img/tracks/default.png + * Configure the details of the Kubernetes cluster + * Customize the install and Admin Console experience for you + application + * Simplify configuration with a form to collect essential + values + * Specify which customer can use the Embedded Cluster + * Install the appliance to understand your customer's experience + * Expand the installed cluster +icon: https://storage.googleapis.com/shared-lab-assets/icons/red/server.png tags: - premium-plans owner: replicated @@ -37,4 +40,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "9086843298939670498" +checksum: "5710628610459581128" From a2bac1bab8bdcd7d17a706eecfca22674d8ab105 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Thu, 2 May 2024 22:00:00 -0400 Subject: [PATCH 002/162] Adds tags to track --- instruqt/delivering-as-an-appliance/track.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index 262291914..02850f1d5 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -27,7 +27,9 @@ description: |2- * Expand the installed cluster icon: https://storage.googleapis.com/shared-lab-assets/icons/red/server.png tags: +- embedded-cluster - premium-plans +- install owner: replicated developers: - chuck@replicated.com From 673a627ebbe1e91cc4aaa41ef1255f510846bfd8 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Fri, 3 May 2024 10:38:02 -0400 Subject: [PATCH 003/162] Fixes grammar error --- .../01-specifying-the-cluster/assignment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index 599b4a70c..d1818144c 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -23,4 +23,4 @@ You can release you application as a Kubernetes applicance by specifying a few extra configuration files as part of your Replicated release. The first of these files is the configuration for the Embedded Cluster itself. This configuration can be very simple. All -it's required to provide is the version of the cluster to use. +it requires is the version of the cluster to use. From 79c6de4ea776a852f9d34fd97c37af47a7f9bc74 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Fri, 3 May 2024 10:38:17 -0400 Subject: [PATCH 004/162] Specifies what comes next --- .../track_scripts/setup-shell | 413 ++++++++++++++++++ 1 file changed, 413 insertions(+) diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell index 22d75eae1..2edd28b70 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell @@ -32,3 +32,416 @@ agent variable set USERNAME $(get_username) agent variable set PASSWORD $(get_password) agent variable set REPLICATED_API_TOKEN ${access_token} agent variable set REPLICATED_APP ${app_slug} + +## release the application with the Replicated SDK +cd ${HOME_DIR} +mkdir ${HOME_DIR}/release + +get_slackernews +yq -i '.version = "0.2.0"' slackernews/Chart.yaml +replicated_sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') +yq -i ".dependencies = []" slackernews/Chart.yaml +yq -i ".dependencies += { \"name\": \"replicated\", \"repository\": \"oci://registry.replicated.com/library\", \"version\": \"${replicated_sdk_version#?}\"}" slackernews/Chart.yaml + +# update dependencies +helm dependency update slackernews + +# re-package the chart +helm package slackernews --destination release + +## release and promote the app with the SDK added + +# release to the `Unstable` channel +replicated release create --promote Unstable --chart ${HOME_DIR}/release/slackernews-0.2.0.tgz --version 0.2.0 \ + --release-notes "Prepares for distribution with Replicated by incorporating the Replicated SDK" \ + --app ${app_slug} --token ${api_token} + +# get the sequence number for the release to promote +release_sequence=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Unstable" ) | .releaseSequence') + +# promote to the `Beta` channel +replicated release promote ${release_sequence} Beta --version 0.2.0 \ + --release-notes "Prepares for distribution with Replicated by incorporating the Replicated SDK" \ + --app ${app_slug} --token ${api_token} + +# promote to the `Stable` channel +replicated release promote ${release_sequence} Stable --version 0.2.0 \ + --release-notes "Prepares for distribution with Replicated by incorporating the Replicated SDK" \ + --app ${app_slug} --token ${api_token} + +# create LTS channel from the "distributing" lab so things look consistent +replicated channel create --name LTS --description "Releases with long-term support available" \ + --app ${app_slug} --token ${api_token} + +# remove the helm chart we used to create the release +rm ${HOME_DIR}/release/slackernews-0.2.0.tgz + +# add preflight checks to the Helm chart +mkdir ${HOME_DIR}/slackernews/templates/troubleshoot +cat < ${HOME_DIR}/slackernews/templates/troubleshoot/preflights.yaml +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "slackernews.name" . }}-preflight + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "slackernews.labels" . | nindent 4 }} + app.kubernetes.io/component: preflight + troubleshoot.sh/kind: preflight +type: Opaque +stringData: + preflight.yaml: | + apiVersion: troubleshoot.sh/v1beta2 + kind: Preflight + metadata: + name: slackernews-preflight-checks + spec: + analyzers: + - clusterVersion: + outcomes: + - fail: + when: "<= 1.26.x" + message: |- + Your Kubernets cluster is running a version of Kubernetes that is no longer supported by the Kubernetes + community and unable to be supported by Slackernews. Changes in Kubernetse since your current version mean + that you installation will likely not succeed. Please upgrade your cluster or install to a different + cluster running at least Kubernetes 1.26, ideally version 1.28.0 or later. + + If you are receiving extended support from your Kubernetes provider you may be able to ignore + this warning. If not, we recomend that you upgrade your cluster to at least version 1.28.0. + + uri: https://kubernetes.io + - warn: + when: "< 1.27.0" + message: |- + Your Kubernetes cluster is running a version of Kubernetes that will go out of support active support in + less than six months. We recommend that you upgrade your Kubernetes cluster to assure continued success with + your Slackernews implementation. + uri: https://kubernetes.io + - pass: + message: Your cluster is running a version of Kubernetes that is supported by the Slackernews container registry. + - nodeResources: + checkName: Cluster CPU resources are sufficient to install and run Slackernews + outcomes: + - fail: + when: "sum(cpuAllocatable) < 2" + message: |- + Slackernews requires a minimum of 2 CPU cores in order to run, and runs best with + at least 4 cores. Your current cluster has less than 2 CPU cores available to Kubernetes + workloads. Please increase cluster capacity or install into a different cluster. + - warn: + when: "sum(cpuAllocatable) < 4" + message: |- + Slackernews runs best with a minimum of 4 CPU cores. Your current cluster has less + than 4 CPU cores available to run workloads. For the best experience, consider + increasing cluster capacity or installing into a different cluster. + - pass: + message: Your cluster has sufficient CPU resources available to run Slackernews + - nodeResources: + checkName: Cluster memory is sufficient to install and run Slackernews + outcomes: + - fail: + when: "sum(memoryAllocatable) < 4G" + message: |- + Slackernews requires a minimum of 4 GB of memory in order to run, and runs best with + at least 8 GB. Your current cluster has less than 4 GB available to Kubernetes + workloads. Please increase cluster capacity or install into a different cluster. + - warn: + when: "sum(memoryAllocatable) < 8Gi" + message: |- + Slackernews runs best with a minimum of 8 GB of memory. Your current cluster has less + than 8 GB of memory available to run workloads. For the best experience, consider + increasing cluster capacity or installing into a different cluster. + - pass: + message: Your cluster has sufficient memory available to run Slackernews +SLACKERNEWS_PREFLIGHTS + +# bump the version +yq -i '.version = "0.3.0"' ${HOME_DIR}/slackernews/Chart.yaml +helm package ${HOME_DIR}/slackernews --destination ${HOME_DIR}/release +chown -R replicant ${HOME_DIR}/slackernews ${HOME_DIR}/release + +## release and promote the preflight checks added + +# release to the `Unstable` channel +replicated release create --promote Unstable --chart ${HOME_DIR}/release/slackernews-0.3.0.tgz --version 0.3.0 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# get the sequence number for the release to promote +release_sequence=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Unstable" ) | .releaseSequence') + +# promote to the `Beta` channel +replicated release promote ${release_sequence} Beta --version 0.3.0 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# promote to the `Stable` channel +replicated release promote ${release_sequence} Stable --version 0.3.0 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# remove the helm chart we used to create the release +rm ${HOME_DIR}/release/slackernews-0.3.0.tgz + +## create the customer from the preflights lab + +# provide an email address for the new customer +customer_email="${INSTRUQT_PARTICIPANT_ID}@geeglo.io" + +# create the new customer and keep track of the ID +customer_id=$(replicated customer create --name "Geeglo" --email ${customer_email} --channel Stable --expires-in 720h --kots-install=false --output json --app ${app_slug} --token ${api_token} | jq -r .id) + +# make sure the customer has a trial license +updated_customer=$(curl --header 'Accept: application/json' --header "Authorization: ${api_token}" "https://api.replicated.com/vendor/v3/app/${app_id}/customer/${customer_id}" | \ + jq -c --arg appId "${app_id}" '.customer | {"app_id": $appId, "name": .name, "email": .email, "channel_id": .channels[0].id, "expires_at": .expiresAt, "type": "trial", "is_airgap_enabled": .airgap, "is_gitops_supported": .isGitopsSupported, "is_identity_service_supported": .isIdentityServiceSupported, "is_geoaxis_supported": .isGeoaxisSupported, "is_snapshot_supported": .isSnapshotSupported, "is_support_bundle_upload_enabled": .isSupportBundleUploadEnabled, "entitlementValues":[]}') + +## add the initial support bundle + +cat < /home/replicant/slackernews/templates/troubleshoot/support-bundle.yaml +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "slackernews.name" . }}-support-bundle + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "slackernews.labels" . | nindent 4 }} + app.kubernetes.io/component: troubleshoot + troubleshoot.sh/kind: support-bundle +type: Opaque +stringData: + support-bundle-spec: | + apiVersion: troubleshoot.sh/v1beta2 + kind: SupportBundle + metadata: + name: slackernews-support-bundle + spec: + collectors: + - logs: + name: /app/slackernews/logs + selector: + - app=slackernews + - logs: + name: /app/slackernews/logs + selectors: + - app=slackernews-nginx + - logs: + name: /app/slackernews/logs + selectors: + - app=postgres + - logs: + name: /app/slackernews/logs + selectors: + - app.kubernetes.io/name=replicated + - configMap: + name: slackernews-nginx + namespace: slackernews + key: default.conf + includeValue: true + - secret: + name: slackernews-nginx + namespace: slackernews + key: tls.crt + includeValue: true + - secret: + name: slackernews-nginx + key: tls.key + includeVale: true + - secret: + name: slackernews-postgres + namespace: slackernews + key: password + - secret: + name: slackernews-postgres + namespace: slackernews + key: uri + - secret: + name: slackernews-slack + namespace: slackernews + key: clientId + - secret: + name: slackernews-slack + namespace: slackernews + key: clientSecret + - secret: + name: slackernews-slack + namespace: slackernews + key: botToken + - secret: + name: slackernews-slack + namespace: slackernews + key: userToken + analyzers: + - clusterVersion: + outcomes: + - fail: + when: "<= 1.26.x" + message: |- + Your Kubernets cluster is running a version of Kubernetes that is no longer supported by the Kubernetes + community and unable to be supported by Slackernews. Changes in Kubernetse since your current version mean + that you installation will likely not succeed. Please upgrade your cluster or install to a different + cluster running at least Kubernetes 1.26, ideally version 1.28.0 or later. + + If you are receiving extended support from your Kubernetes provider you may be able to ignore + this warning. If not, we recomend that you upgrade your cluster to at least version 1.28.0. + + uri: https://kubernetes.io + - warn: + when: "< 1.27.0" + message: |- + Your Kubernetes cluster is running a version of Kubernetes that will go out of support active support in + less than six months. We recommend that you upgrade your Kubernetes cluster to assure continued success with + your Slackernews implementation. + uri: https://kubernetes.io + - pass: + message: Your cluster is running a version of Kubernetes that is supported by Slackernews. + - nodeResources: + checkName: Cluster CPU resources are sufficient to install and run Slackernews + outcomes: + - fail: + when: "sum(cpuAllocatable) < 2" + message: |- + Slackernews requires a minimum of 2 CPU cores in order to run, and runs best with + at least 4 cores. Your current cluster has less than 2 CPU cores available to Kubernetes + workloads. Please increase cluster capacity or install into a different cluster. + - warn: + when: "sum(cpuAllocatable) < 4" + message: |- + Slackernews runs best with a minimum of 4 CPU cores. Your current cluster has less + than 4 CPU cores available to run workloads. For the best experience, consider + increasing cluster capacity or installing into a different cluster. + - pass: + message: Your cluster has sufficient CPU resources available to run Slackernews + - nodeResources: + checkName: Cluster memory is sufficient to install and run Slackernews + outcomes: + - fail: + when: "sum(memoryAllocatable) < 4G" + message: |- + Slackernews requires a minimum of 4 GB of memory in order to run, and runs best with + at least 8 GB. Your current cluster has less than 4 GB available to Kubernetes + workloads. Please increase cluster capacity or install into a different cluster. + - warn: + when: "sum(memoryAllocatable) < 8Gi" + message: |- + Slackernews runs best with a minimum of 8 GB of memory. Your current cluster has less + than 8 GB of memory available to run workloads. For the best experience, consider + increasing cluster capacity or installing into a different cluster. + - pass: + message: Your cluster has sufficient memory available to run Slackernews + - deploymentStatus: + name: slackernews-frontend + namespace: slackernews + outcomes: + - fail: + when: "absent" + message: | + The Slackernews core component has not been deployed to this cluster. Please be sure to install the Slackernews + application using its Helm chart. + - fail: + when: "< 1" + message: | + The Slackernews application is not currently running on this cluster. Please review the logs in this support + bundle to locate any errors. + - pass: + message: | + Ther Slackernews application is running on this cluster and ready for use. + - deploymentStatus: + name: slackernews-nginx + namespace: slackernews + outcomes: + - fail: + when: "absent" + message: | + The Slackernews web server has not been deployed to this cluster. Please sure to install the Slackernews g application using its Helm chart. + - fail: + when: "< 1" + message: | + The Slackernews web server is not currently running on this cluster. Please review the logs in this support bundle to locate any errors. + - pass: + message: | + Ther Slackernews web server is running on this cluster and ready for use. + - statefulsetStatus: + name: postgres + namespace: slackernews + outcomes: + - fail: + when: "absent" + message: | + The Slackernews database has not been deployed to this cluster. Please sure to install the Slackernews application using its Helm chart. + - fail: + when: "< 1" + message: | + The Slackernews database is not currently running on this cluster. Please review the logs in this support bundle to locate any errors. + - pass: + message: | + Ther Slackernews database is running on this cluster and ready for use. +SLACKERNEWS_SUPPORT_BUNDLE + +## release and promote with support bundle added +# bump the version +yq -i '.version = "0.4.0"' ${HOME_DIR}/slackernews/Chart.yaml +helm package ${HOME_DIR}/slackernews --destination ${HOME_DIR}/release +chown -R replicant ${HOME_DIR}/slackernews ${HOME_DIR}/release + +## release and promote with support bundle added + +# release to the `Unstable` channel +replicated release create --promote Unstable --chart ${HOME_DIR}/release/slackernews-0.4.0.tgz --version 0.4.0 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# get the sequence number for the release to promote +release_sequence=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Unstable" ) | .releaseSequence') + +# promote to the `Beta` channel +replicated release promote ${release_sequence} Beta --version 0.4.0 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# promote to the `Stable` channel +replicated release promote ${release_sequence} Stable --version 0.4.0 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# remove the helm chart we used to create the release +rm ${HOME_DIR}/release/slackernews-0.4.0.tgz + +## update the support bundle with the URI field +sed -i '17i\ uri: https://storage.googleapis.com/shared-lab-assets/closing-the-information-gap/slackernews/support-bundle.yaml' /home/replicant/slackernews/templates/troubleshoot/support-bundle.yaml + +## release and promote with support bundle with URI field +# bump the version +yq -i '.version = "0.4.1"' ${HOME_DIR}/slackernews/Chart.yaml +helm package ${HOME_DIR}/slackernews --destination ${HOME_DIR}/release +chown -R replicant ${HOME_DIR}/slackernews ${HOME_DIR}/release + +## release and promote the preflight checks added + +# release to the `Unstable` channel +replicated release create --promote Unstable --chart ${HOME_DIR}/release/slackernews-0.4.1.tgz --version 0.4.1 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# get the sequence number for the release to promote +release_sequence=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Unstable" ) | .releaseSequence') + +# promote to the `Beta` channel +replicated release promote ${release_sequence} Beta --version 0.4.1 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# promote to the `Stable` channel +replicated release promote ${release_sequence} Stable --version 0.4.1 \ + --release-notes "Adds preflight checks to enable customers to validate cluster prerequisites before installing" \ + --app ${app_slug} --token ${api_token} + +# remove the helm chart we used to create the release +rm ${HOME_DIR}/release/slackernews-0.4.1.tgz + +# add the Netflix trial customer + +# configure the chart for trial vs. production licenses and +# release it to all three channels + +# add the member count license entitlement + + From a43c6acd37ff78cc608bcf84eb6faa351cf3cb97 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Fri, 3 May 2024 10:38:42 -0400 Subject: [PATCH 005/162] Resyncs track checksum --- instruqt/delivering-as-an-appliance/track.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index 02850f1d5..9bd2ede7c 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -27,8 +27,8 @@ description: |2- * Expand the installed cluster icon: https://storage.googleapis.com/shared-lab-assets/icons/red/server.png tags: -- embedded-cluster - premium-plans +- embedded-cluster - install owner: replicated developers: @@ -42,4 +42,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "5710628610459581128" +checksum: "2812472972966974569" From 235ec8d8d78ab81d0a54edc9cb4cc7e1776bf0c3 Mon Sep 17 00:00:00 2001 From: crdant Date: Fri, 3 May 2024 15:18:34 +0000 Subject: [PATCH 006/162] Creating dev version of delivering-as-an-appliance --- .../assignment.md | 17 ++++++++--------- .../01-specifying-the-cluster/assignment.md | 2 +- .../02-using-the-template/assignment.md | 11 +++++------ .../02-customize-for-your-app/assignment.md | 2 +- .../03-collecting-configuration/assignment.md | 2 +- .../04-entitling-a-customer/assignment.md | 2 +- .../05-your-customers-install/assignment.md | 2 +- .../06-expanding-the-cluster/assignment.md | 2 +- instruqt/delivering-as-an-appliance/track.yml | 12 ++++++------ 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md index 45d5630a1..6b02066f8 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md @@ -1,19 +1,18 @@ --- slug: getting-to-know-the-template -id: bvpn5mxammoz type: challenge title: Getting to Know the Template teaser: Some tips and tricks for using this template notes: -- type: text - contents: Let's learn about this template + - type: text + contents: Let's learn about this template tabs: -- title: Shell - type: terminal - hostname: shell -- title: Cluster - type: terminal - hostname: cluster + - title: Shell + type: terminal + hostname: shell + - title: Cluster + type: terminal + hostname: cluster difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index d1818144c..94a7f9361 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -1,6 +1,6 @@ --- slug: specifying-the-cluster -id: bvpn5mxammoz +id: rsxl9h79cen1 type: challenge title: Configuring the Embedded Cluster teaser: Enable and configure the embedded cluster diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md index c509a70c3..dd1e5d0cf 100755 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md +++ b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md @@ -1,16 +1,15 @@ --- slug: using-the-template -id: ntcxaanufkcb type: challenge title: Using the Template teaser: Some guidance on using the template notes: -- type: text - contents: How and Why to Use This Template + - type: text + contents: How and Why to Use This Template tabs: -- title: Shell - type: terminal - hostname: shell + - title: Shell + type: terminal + hostname: shell difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md index 8ef14931f..2849ddc76 100755 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md +++ b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md @@ -1,6 +1,6 @@ --- slug: customize-for-your-app -id: nk3jmszcvy6l +id: pit6xmw6mftl type: challenge title: Customizing the Appliance for Your Application teaser: Make the Kubernetes appliance experience your own diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md b/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md index 1b2216039..eafe22a0d 100755 --- a/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md +++ b/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md @@ -1,6 +1,6 @@ --- slug: collecting-configuration -id: aykml3s7uuzs +id: gx0mrlxjywou type: challenge title: Collecting Application Configuration teaser: | diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md index feb4058c6..d609168e3 100755 --- a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md +++ b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md @@ -1,6 +1,6 @@ --- slug: entitling-a-customer -id: mgbxkjqyjxoz +id: n8juiythxhxt type: challenge title: Enable a Customer to Use the Appliance teaser: | diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md b/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md index b09ca5f20..6755ff167 100755 --- a/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md +++ b/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md @@ -1,6 +1,6 @@ --- slug: your-customers-install -id: ln0wiikehigz +id: nchvbvdhe1bn type: challenge title: Your Customer's Installation Experience teaser: | diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md index 06cafae50..f63422fb7 100755 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md @@ -1,6 +1,6 @@ --- slug: expanding-the-cluster -id: nrhuwrqrnjvn +id: eiyviocvnrbs type: challenge title: Expanding the Embedded Cluster Instance teaser: | diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index 9bd2ede7c..f8711ede4 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -1,11 +1,10 @@ -slug: delivering-as-an-appliance -id: pbzwbwd3m2aw -title: Delivering Your Application as a Kubernetes Appliance +slug: delivering-as-an-appliance-dev +id: mjcgvsqqbxud +title: DEV - Delivering Your Application as a Kubernetes Appliance teaser: |- Package your application as a Kubernetes appliance to simplify installation and operation. -description: |2- - +description: |- The Replicated Embeded Cluster lets you distribute your application without a dependency on the customer's Kubernetes environment. Customers install the application like any other Linux services @@ -28,6 +27,7 @@ description: |2- icon: https://storage.googleapis.com/shared-lab-assets/icons/red/server.png tags: - premium-plans +- dev - embedded-cluster - install owner: replicated @@ -42,4 +42,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "2812472972966974569" +checksum: "15749947422028595666" From 000d1c0be5de6a9887a2e78ffef845671a7e40b0 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Fri, 3 May 2024 10:53:35 -0400 Subject: [PATCH 007/162] Adds Nitflex to the setup --- .../track_scripts/setup-shell | 10 ++++++++++ libs/header.sh | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell index 2edd28b70..bf287be64 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell @@ -27,6 +27,7 @@ chown -R replicant ${HOME_DIR}/.kube # there's only one app created by the automation, so just grab the first in the list access_token=$(get_api_token) app_slug=$(get_app_slug) +app_id=$(get_app_id) agent variable set USERNAME $(get_username) agent variable set PASSWORD $(get_password) @@ -438,7 +439,16 @@ replicated release promote ${release_sequence} Stable --version 0.4.1 \ rm ${HOME_DIR}/release/slackernews-0.4.1.tgz # add the Netflix trial customer +# provide an email address for the new customer +customer_email="${INSTRUQT_PARTICIPANT_ID}@nitflex.tv" + +# create the new customer and keep track of the ID +customer_id=$(replicated customer create --name "Nitflex" --email ${customer_email} --channel Stable --expires-in 1460h --type trial --kots-install=false --output json --app ${app_slug} --token ${api_token} | jq -r .id) +# make sure the customer has a trial license +updated_customer=$(curl --header 'Accept: application/json' --header "Authorization: ${api_token}" "https://api.replicated.com/vendor/v3/app/${app_id}/customer/${customer_id}" | \ + jq -c --arg appId "${app_id}" '.customer | {"app_id": $appId, "name": .name, "email": .email, "channel_id": .channels[0].id, "expires_at": .expiresAt, "type": "trial", "is_airgap_enabled": .airgap, "is_gitops_supported": .isGitopsSupported, "is_identity_service_supported": .isIdentityServiceSupported, "is_geoaxis_supported": .isGeoaxisSupported, "is_snapshot_supported": .isSnapshotSupported, "is_support_bundle_upload_enabled": .isSupportBundleUploadEnabled, "entitlementValues":[]}') + # # configure the chart for trial vs. production licenses and # release it to all three channels diff --git a/libs/header.sh b/libs/header.sh index 05d1459a5..46c8f6c63 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -111,3 +111,10 @@ get_slackernews() { yq -i 'del(.replicated)' slackernews/values.yaml yq -i 'del(.global.replicated)' slackernews/values.yaml } + +get_app_id () { + application=${1:-"Slackernews"} + access_token=$(get_api_token) + app_id=$(curl --header 'Accept: application/json' --header "Authorization: ${access_token}" https://api.replicated.com/vendor/v3/apps | jq -r --arg application ${application} '.apps[] | select( .name | startswith( $application )) | .id') + echo ${app_id} +} From 07cd956bdebb57113470e452be306b56211487c9 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Fri, 3 May 2024 16:18:05 -0400 Subject: [PATCH 008/162] Incorporates Slackernews changes --- libs/header.sh | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/libs/header.sh b/libs/header.sh index 46c8f6c63..5203c9f3b 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -118,3 +118,65 @@ get_app_id () { app_id=$(curl --header 'Accept: application/json' --header "Authorization: ${access_token}" https://api.replicated.com/vendor/v3/apps | jq -r --arg application ${application} '.apps[] | select( .name | startswith( $application )) | .id') echo ${app_id} } + +get_slackernews_domain() { + echo cluster-30443-${INSTRUQT_PARTICIPANT_ID}.env.play.instruqt.com +} + +get_slackernews() { + # get the access token to use for fetching the app slug + access_token=$(get_api_token) + # get the app slug, since there's only one app created by the automation, just grab the first in the list + app_slug=$(curl --header 'Accept: application/json' --header "Authorization: ${access_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].slug') + + # grab the sources for the Helm chart using a community license + helm registry login chart.slackernews.io --username marc@replicated.com --password 2ViYIi8SDFubA8XwQRhJtcrwn4C + helm pull --untar oci://chart.slackernews.io/slackernews/slackernews + + # specify the nodeport for NGINX so we get a consistent and addressable endpoint + # TODO: Update upstream to take this as a value + sed -i '17 a\ nodePort: 30443' slackernews/templates/nginx-service.yaml + + # remove the Replicated SDK dependency, if we add more dependencies to + # Slackernews this will need to be revised + yq -i 'del(.dependencies)' slackernews/Chart.yaml + + # start version numbers over to simplify the lab text + yq -i '.version = "0.1.0"' slackernews/Chart.yaml + + # get rid of troubleshoot files since leaners will create their own + rm -rf slackernews/troubleshoot slackernews/templates/preflights.yaml slackernews/templates/support-bundle.yaml + + # set the values file ot use the right proxy image URI + web_image=$(yq .images.slackernews.repository slackernews/values.yaml) + rewritten_web_image=${web_image//images.slackernews.io/proxy.replicated.com} + rewritten_web_image=${rewritten_web_image//proxy\/slackernews/proxy\/${app_slug}} + yq -i ".images.slackernews.repository = \"${rewritten_web_image}\"" slackernews/values.yaml + + nginx_image=$(yq .images.nginx.repository slackernews/values.yaml) + rewritten_nginx_image=${nginx_image//images.slackernews.io/proxy.replicated.com} + rewritten_nginx_image=${rewritten_nginx_image//proxy\/slackernews/proxy\/${app_slug}} + yq -i ".images.nginx.repository = \"${rewritten_nginx_image}\"" slackernews/values.yaml + + # add some optional components to make the application a bit more representative + yq -i '.nginx.enabled = true' slackernews/values.yaml + yq -i '.postgres.deploy_postgres = true' slackernews/values.yaml + yq -i '.postgres.enabled = true' slackernews/values.yaml + yq -i '.postgres.password = "thisisasecret"' slackernews/values.yaml + + # address awkward scenario where a TLS cert is required even if TLS isn't enabled + # TODO: Fix upstream to not require TLS certs uneless TLS is enabled + openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout server.key -out server.crt -subj "/CN=Slackernews" -addext "subjectAltName = DNS:$(get_slackernews_domain)" \ + && yq -i ".service.tls.key = \"$(cat server.key)\"" slackernews/values.yaml \ + && rm server.key \ + && yq -i ".service.tls.cert = \"$(cat server.crt)\"" slackernews/values.yaml \ + && rm server.crt + + # since we have the certs anyway, let's enable TLS + yq -i '.service.tls.enabled = true' slackernews/values.yaml + + # let's also deelte the values injected by Replicated so users can release + # the chart without any sort of double injection + yq -i 'del(.replicated)' slackernews/values.yaml + yq -i 'del(.global.replicated)' slackernews/values.yaml +} From d08f8e7f141e2b938516f56780fda401099b6a63 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Mon, 13 May 2024 16:46:31 -0400 Subject: [PATCH 009/162] Switches to a single sandbox called `node` --- .../assignment.md | 2 +- .../check-cluster | 8 -- .../cleanup-cluster | 8 -- .../setup-cluster | 8 -- .../solve-cluster | 8 -- .../01-specifying-the-cluster/assignment.md | 4 +- .../01-specifying-the-cluster/check-cluster | 8 -- .../{check-shell => check-node} | 0 .../01-specifying-the-cluster/cleanup-cluster | 8 -- .../{cleanup-shell => cleanup-node} | 0 .../01-specifying-the-cluster/setup-cluster | 8 -- .../{setup-shell => setup-node} | 0 .../01-specifying-the-cluster/solve-cluster | 8 -- .../{solve-shell => solve-node} | 0 .../02-using-the-template/assignment.md | 82 ------------------- .../02-using-the-template/check-cluster | 8 -- .../02-using-the-template/check-shell | 17 ---- .../02-using-the-template/cleanup-cluster | 8 -- .../02-using-the-template/setup-cluster | 8 -- .../02-using-the-template/solve-cluster | 8 -- .../02-using-the-template/solve-shell | 9 -- .../02-customize-for-your-app/assignment.md | 2 +- .../02-customize-for-your-app/check-cluster | 8 -- .../{check-shell => check-node} | 0 .../02-customize-for-your-app/cleanup-cluster | 8 -- .../{cleanup-shell => cleanup-node} | 0 .../02-customize-for-your-app/setup-cluster | 8 -- .../setup-shell => setup-node} | 0 .../02-customize-for-your-app/solve-cluster | 8 -- .../{solve-shell => solve-node} | 0 .../03-collecting-configuration/assignment.md | 2 +- .../03-collecting-configuration/check-cluster | 8 -- .../{check-shell => check-node} | 0 .../cleanup-cluster | 8 -- .../{cleanup-shell => cleanup-node} | 0 .../03-collecting-configuration/setup-cluster | 8 -- .../setup-node} | 0 .../03-collecting-configuration/solve-cluster | 8 -- .../{solve-shell => solve-node} | 0 .../04-entitling-a-customer/assignment.md | 2 +- .../04-entitling-a-customer/check-cluster | 8 -- .../{check-shell => check-node} | 0 .../04-entitling-a-customer/cleanup-cluster | 8 -- .../cleanup-node} | 0 .../04-entitling-a-customer/setup-cluster | 8 -- .../setup-node} | 0 .../04-entitling-a-customer/solve-cluster | 8 -- .../{solve-shell => solve-node} | 0 .../05-your-customers-install/assignment.md | 2 +- .../05-your-customers-install/check-cluster | 8 -- .../{check-shell => check-node} | 0 .../05-your-customers-install/cleanup-cluster | 8 -- .../cleanup-node} | 0 .../05-your-customers-install/setup-cluster | 8 -- .../setup-node} | 0 .../05-your-customers-install/solve-cluster | 8 -- .../{solve-shell => solve-node} | 0 .../06-expanding-the-cluster/assignment.md | 2 +- .../06-expanding-the-cluster/check-cluster | 8 -- .../{check-shell => check-node} | 0 .../06-expanding-the-cluster/cleanup-cluster | 8 -- .../cleanup-node} | 0 .../06-expanding-the-cluster/cleanup-shell | 11 --- .../06-expanding-the-cluster/setup-cluster | 8 -- .../setup-node} | 0 .../06-expanding-the-cluster/setup-shell | 19 ----- .../06-expanding-the-cluster/solve-cluster | 8 -- .../{solve-shell => solve-node} | 0 .../delivering-as-an-appliance/config.yml | 8 -- instruqt/delivering-as-an-appliance/track.yml | 3 +- .../track_scripts/setup-cluster | 30 ------- .../track_scripts/{setup-shell => setup-node} | 21 +---- 72 files changed, 13 insertions(+), 459 deletions(-) delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-cluster delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-cluster delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-cluster delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-cluster delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-cluster rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{check-shell => check-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-cluster rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{cleanup-shell => cleanup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-cluster rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{setup-shell => setup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-cluster rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{solve-shell => solve-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-cluster delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-shell delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/cleanup-cluster delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/setup-cluster delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-cluster delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-shell delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-cluster rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{check-shell => check-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-cluster rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{cleanup-shell => cleanup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-cluster rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{02-using-the-template/setup-shell => setup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-cluster rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{solve-shell => solve-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/03-collecting-configuration/check-cluster rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{check-shell => check-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-cluster rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{cleanup-shell => cleanup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-cluster rename instruqt/delivering-as-an-appliance/{02-customize-for-your-app/setup-shell => 03-collecting-configuration/setup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-cluster rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{solve-shell => solve-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-cluster rename instruqt/delivering-as-an-appliance/04-entitling-a-customer/{check-shell => check-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-cluster rename instruqt/delivering-as-an-appliance/{02-customize-for-your-app/02-using-the-template/cleanup-shell => 04-entitling-a-customer/cleanup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-cluster rename instruqt/delivering-as-an-appliance/{03-collecting-configuration/setup-shell => 04-entitling-a-customer/setup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-cluster rename instruqt/delivering-as-an-appliance/04-entitling-a-customer/{solve-shell => solve-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/05-your-customers-install/check-cluster rename instruqt/delivering-as-an-appliance/05-your-customers-install/{check-shell => check-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-cluster rename instruqt/delivering-as-an-appliance/{04-entitling-a-customer/cleanup-shell => 05-your-customers-install/cleanup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/05-your-customers-install/setup-cluster rename instruqt/delivering-as-an-appliance/{04-entitling-a-customer/setup-shell => 05-your-customers-install/setup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/05-your-customers-install/solve-cluster rename instruqt/delivering-as-an-appliance/05-your-customers-install/{solve-shell => solve-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-cluster rename instruqt/delivering-as-an-appliance/06-expanding-the-cluster/{check-shell => check-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-cluster rename instruqt/delivering-as-an-appliance/{05-your-customers-install/cleanup-shell => 06-expanding-the-cluster/cleanup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-shell delete mode 100755 instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-cluster rename instruqt/delivering-as-an-appliance/{05-your-customers-install/setup-shell => 06-expanding-the-cluster/setup-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-shell delete mode 100755 instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-cluster rename instruqt/delivering-as-an-appliance/06-expanding-the-cluster/{solve-shell => solve-node} (100%) delete mode 100755 instruqt/delivering-as-an-appliance/track_scripts/setup-cluster rename instruqt/delivering-as-an-appliance/track_scripts/{setup-shell => setup-node} (98%) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md index 6b02066f8..afb7ba800 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md @@ -9,7 +9,7 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node - title: Cluster type: terminal hostname: cluster diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-cluster deleted file mode 100755 index 3a001e8d3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -# source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index 94a7f9361..133ba3117 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -10,10 +10,10 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node - title: Release Editor type: code - hostname: shell + hostname: node path: /home/replicant difficulty: basic timelimit: 300 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-shell rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-node diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-cluster deleted file mode 100755 index 3a001e8d3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -# source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-shell rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-cluster b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-shell rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md deleted file mode 100755 index dd1e5d0cf..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/assignment.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -slug: using-the-template -type: challenge -title: Using the Template -teaser: Some guidance on using the template -notes: - - type: text - contents: How and Why to Use This Template -tabs: - - title: Shell - type: terminal - hostname: shell -difficulty: basic -timelimit: 300 ---- - -✨ Uses -======= - -## Environment Variables - -Only one shell runs across all challenges. This means the values of -environment variables persist from challenge to challenge without the -user setting them into their `.bashrc`. - -## Long Running Commands - -If a challenge needs to end with long running command (for example -downloading an airgap bundle or starting a kURL install), tell the user -they can click **Check** and leave the comamnd running. When the next -challenge starts then their shell will look the same and the command -will still be running (unless it happened to finish during the Cleanup -and Check scripts). - -🔄 Lifecycle Scripts -==================== - -Lifecycle scripts can take advantage of `tmux` to read and write from -the learner's session. This is useful in Check scripts, for example, -to read what the user has typed and what the output was from those -commands. It also means that Setup, Cleanup, and Solve scripts can -type into the users shell to run commands. - -Here are a couple of `tmux` commands to be aware of to interact with -the session: - -`tmux capture-pane` -: This command the history of what's been done in the learner's -shell so you can intertact with it, for example to test whether -they typed the commands you expected - -`tmux save-buffer` -: After you've captured what the learner has done, you can use the -`save-buffer` command to access it. The combination of the two is -useful in Check scripts - -`tmux send-keys` -: Allows you to send keystrokes to the learner's shell. You have to -be explicit about charaters like `SPACE` and `ENTER` so that they -are sent to. This can be great for Solve scripts. - -`tmux clear-histry` -: Clears the scrollback history (not the shell history) to keep -what's captured by `capture-pane` nice and fresh. - -🧪 Did It Work? -=============== - -Remember that variable we set in the last step? Let's make sure it -stuck around like we expected. - -``` -echo $THIS -``` - -It should have, so you should see - -```text -replicant@shell:~$ echo $THIS -the way -replicant@shell:~$ -``` diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-shell b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-shell deleted file mode 100755 index 809350463..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/check-shell +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -# save the entire session to check user inputs and outputs -tmux capture-pane -t shell -S - -SESSION=$(tmux save-buffer -) - -# check that the variable has been set -if ! grep -qE 'echo' <(echo ${SESSION}) ; then - fail-message 'Please make sure you can still access `$THIS`' - exit 1 -fi - diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/cleanup-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/setup-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/setup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-shell b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-shell deleted file mode 100755 index bd5980381..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/solve-shell +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -# show the variable in the shell -tmux send-keys -t shell echo SPACE '$THIS' ENTER diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md index 2849ddc76..5cee8865c 100755 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md +++ b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/assignment.md @@ -10,7 +10,7 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-shell b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-node similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-shell rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-node diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-shell b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-shell rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-node diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/setup-shell b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/setup-shell rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-node diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-cluster b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-shell b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-node similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-shell rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-node diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md b/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md index eafe22a0d..6438fb6c1 100755 --- a/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md +++ b/instruqt/delivering-as-an-appliance/03-collecting-configuration/assignment.md @@ -13,7 +13,7 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-cluster b/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-shell b/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-node similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/check-shell rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/check-node diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-cluster b/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-shell b/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-shell rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-node diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-cluster b/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-shell b/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-shell rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-node diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-cluster b/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-shell b/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-node similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-shell rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-node diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md index d609168e3..e704481b0 100755 --- a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md +++ b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/assignment.md @@ -12,7 +12,7 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-cluster b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-shell b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-node similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-shell rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-node diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-cluster b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/cleanup-shell b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/02-using-the-template/cleanup-shell rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-node diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-cluster b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-shell b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-shell rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-node diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-cluster b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-shell b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-node similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-shell rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-node diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md b/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md index 6755ff167..63740ee4f 100755 --- a/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md +++ b/instruqt/delivering-as-an-appliance/05-your-customers-install/assignment.md @@ -12,7 +12,7 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/check-cluster b/instruqt/delivering-as-an-appliance/05-your-customers-install/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/05-your-customers-install/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/check-shell b/instruqt/delivering-as-an-appliance/05-your-customers-install/check-node similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/check-shell rename to instruqt/delivering-as-an-appliance/05-your-customers-install/check-node diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-cluster b/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-shell b/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-shell rename to instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-node diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-cluster b/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-shell b/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-shell rename to instruqt/delivering-as-an-appliance/05-your-customers-install/setup-node diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-cluster b/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-shell b/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-node similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/solve-shell rename to instruqt/delivering-as-an-appliance/05-your-customers-install/solve-node diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md index f63422fb7..e13c07bba 100755 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/assignment.md @@ -11,7 +11,7 @@ notes: tabs: - title: Shell type: terminal - hostname: shell + hostname: node difficulty: basic timelimit: 300 --- diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-cluster b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-shell b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-node similarity index 100% rename from instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-shell rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-node diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-cluster b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-shell b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-shell rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-node diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-shell b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-shell deleted file mode 100755 index 1ae57e550..000000000 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-shell +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -# -# clear the tmux pane and scrollback to look like a fresh shell -tmux clear-history -t shell -tmux send-keys -t shell clear ENTER - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-cluster b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-shell b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-node similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/setup-shell rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-node diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-shell b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-shell deleted file mode 100755 index b4254922c..000000000 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-shell +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -### Assure the tmux session exists -# -# In a test scenario Instuqt does not run the user shell for the -# challenge, which means the tmux session is never established. We -# need to session for the solve scripts for other challenges to -# succeed, so let's create it here. -# -if ! tmux has-session -t shell ; then - tmux new-session -d -s shell su - replicant -fi - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-cluster b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-cluster deleted file mode 100755 index 810c3d0f3..000000000 --- a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-cluster +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -source /etc/profile.d/header.sh -export KUBECONFIG=/etc/rancher/k3s/k3s.yaml - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-shell b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-node similarity index 100% rename from instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-shell rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-node diff --git a/instruqt/delivering-as-an-appliance/config.yml b/instruqt/delivering-as-an-appliance/config.yml index 525565ce9..e3cad5bdf 100644 --- a/instruqt/delivering-as-an-appliance/config.yml +++ b/instruqt/delivering-as-an-appliance/config.yml @@ -1,13 +1,5 @@ version: "3" -containers: -- name: shell - image: gcr.io/kots-field-labs/shell virtualmachines: - name: node image: kots-field-labs/future-cluster-node shell: tmux new-session -A -s shell su - replicant -virtualmachines: -- name: cluster - image: instruqt/k3s-v1-29-0 - shell: /bin/bash - machine_type: n1-standard-1 diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index f8711ede4..ad859919c 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -33,7 +33,6 @@ tags: owner: replicated developers: - chuck@replicated.com -maintenance: true idle_timeout: 300 timelimit: 1200 lab_config: @@ -42,4 +41,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "15749947422028595666" +checksum: "3761629999190261422" diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster b/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster deleted file mode 100755 index 4f6e55efc..000000000 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail - -# use our shared libary in setup scripts -curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/replicated-field-labs/main/libs/header.sh -source /etc/profile.d/header.sh - -# simple SSH client setup so we can SSH to/from the shell -cat <> "$HOME/.ssh/config" -Host * - StrictHostKeyChecking no - UserKnownHostsFile /dev/null - PubkeyAcceptedKeyTypes +ssh-rsa -EOF - -while ! ssh shell true; do - echo "Waiting for container SSH to be available..." - sleep 1 -done - -ssh shell "mkdir /home/replicant/.kube" - -while ! [[ -f /etc/rancher/k3s/k3s.yaml ]]; do - echo "Waiting for Rancher kubernetes configuration to be available..." - sleep 1 -done - -scp /etc/rancher/k3s/k3s.yaml shell:/home/replicant/.kube/config diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell b/instruqt/delivering-as-an-appliance/track_scripts/setup-node similarity index 98% rename from instruqt/delivering-as-an-appliance/track_scripts/setup-shell rename to instruqt/delivering-as-an-appliance/track_scripts/setup-node index bf287be64..fc772777f 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-node @@ -5,33 +5,20 @@ set -euxo pipefail HOME_DIR=/home/replicant # use our shared libary in setup scripts -curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/replicated-field-labs/main/libs/header.sh +# TO DO: Change to `main` when preparing to merge +curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/replicated-field-labs/feature/crdant/delivering-as-an-appliance/libs/header.sh source /etc/profile.d/header.sh -# simple SSH client setup so we can SSH to/from the shell -cat <> "$HOME/.ssh/config" -Host * - StrictHostKeyChecking no - UserKnownHostsFile /dev/null -EOF - -# assure an RSA key for Dropbear -ssh-keygen -t rsa -f /etc/dropbear/dropbear_rsa_host_key -N '' - -# change the cluster URI -yq -i '.clusters[0].cluster.server = "https://cluster:6443"' ${HOME_DIR}/.kube/config -chown -R replicant ${HOME_DIR}/.kube - # set up some variables that are needed in most labs # there's only one app created by the automation, so just grab the first in the list -access_token=$(get_api_token) +api_token=$(get_api_token) app_slug=$(get_app_slug) app_id=$(get_app_id) agent variable set USERNAME $(get_username) agent variable set PASSWORD $(get_password) -agent variable set REPLICATED_API_TOKEN ${access_token} +agent variable set REPLICATED_API_TOKEN ${api_token} agent variable set REPLICATED_APP ${app_slug} ## release the application with the Replicated SDK From f5cd6535c8996329f77a072289804dafd33af8db Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Mon, 13 May 2024 16:46:59 -0400 Subject: [PATCH 010/162] Resolves header mis-merge --- libs/header.sh | 66 +------------------------------------------------- 1 file changed, 1 insertion(+), 65 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index 5203c9f3b..13b68e580 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -50,68 +50,6 @@ get_app_slug () { echo ${app_slug} } -get_slackernews_domain() { - echo cluster-30443-${INSTRUQT_PARTICIPANT_ID}.env.play.instruqt.com -} - -get_slackernews() { - # get the access token to use for fetching the app slug - access_token=$(get_api_token) - # get the app slug, since there's only one app created by the automation, just grab the first in the list - app_slug=$(curl --header 'Accept: application/json' --header "Authorization: ${access_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].slug') - - # grab the sources for the Helm chart using a community license - helm registry login chart.slackernews.io --username marc@replicated.com --password 2ViYIi8SDFubA8XwQRhJtcrwn4C - helm pull --untar oci://chart.slackernews.io/slackernews/slackernews - - # specify the nodeport for NGINX so we get a consistent and addressable endpoint - # TODO: Update upstream to take this as a value - sed -i '17 a\ nodePort: 30443' slackernews/templates/nginx-service.yaml - - # remove the Replicated SDK dependency, if we add more dependencies to - # Slackernews this will need to be revised - yq -i 'del(.dependencies)' slackernews/Chart.yaml - - # start version numbers over to simplify the lab text - yq -i '.version = "0.1.0"' slackernews/Chart.yaml - - # get rid of troubleshoot files since leaners will create their own - rm -rf slackernews/troubleshoot slackernews/templates/preflights.yaml slackernews/templates/support-bundle.yaml - - # set the values file ot use the right proxy image URI - web_image=$(yq .images.slackernews.repository slackernews/values.yaml) - rewritten_web_image=${web_image//images.slackernews.io/proxy.replicated.com} - rewritten_web_image=${rewritten_web_image//proxy\/slackernews/proxy\/${app_slug}} - yq -i ".images.slackernews.repository = \"${rewritten_web_image}\"" slackernews/values.yaml - - nginx_image=$(yq .images.nginx.repository slackernews/values.yaml) - rewritten_nginx_image=${nginx_image//images.slackernews.io/proxy.replicated.com} - rewritten_nginx_image=${rewritten_nginx_image//proxy\/slackernews/proxy\/${app_slug}} - yq -i ".images.nginx.repository = \"${rewritten_nginx_image}\"" slackernews/values.yaml - - # add some optional components to make the application a bit more representative - yq -i '.nginx.enabled = true' slackernews/values.yaml - yq -i '.postgres.deploy_postgres = true' slackernews/values.yaml - yq -i '.postgres.enabled = true' slackernews/values.yaml - yq -i '.postgres.password = "thisisasecret"' slackernews/values.yaml - - # address awkward scenario where a TLS cert is required even if TLS isn't enabled - # TODO: Fix upstream to not require TLS certs uneless TLS is enabled - openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout server.key -out server.crt -subj "/CN=Slackernews" -addext "subjectAltName = DNS:$(get_slackernews_domain)" \ - && yq -i ".service.tls.key = \"$(cat server.key)\"" slackernews/values.yaml \ - && rm server.key \ - && yq -i ".service.tls.cert = \"$(cat server.crt)\"" slackernews/values.yaml \ - && rm server.crt - - # since we have the certs anyway, let's enable TLS - yq -i '.service.tls.enabled = true' slackernews/values.yaml - - # let's also deelte the values injected by Replicated so users can release - # the chart without any sort of double injection - yq -i 'del(.replicated)' slackernews/values.yaml - yq -i 'del(.global.replicated)' slackernews/values.yaml -} - get_app_id () { application=${1:-"Slackernews"} access_token=$(get_api_token) @@ -124,10 +62,8 @@ get_slackernews_domain() { } get_slackernews() { - # get the access token to use for fetching the app slug - access_token=$(get_api_token) # get the app slug, since there's only one app created by the automation, just grab the first in the list - app_slug=$(curl --header 'Accept: application/json' --header "Authorization: ${access_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].slug') + app_slug=$(get_app_slug) # grab the sources for the Helm chart using a community license helm registry login chart.slackernews.io --username marc@replicated.com --password 2ViYIi8SDFubA8XwQRhJtcrwn4C From 88684c6caed4a2d1f343f189a4cddd232b16bbe2 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 09:50:24 -0400 Subject: [PATCH 011/162] Retry login on empty token --- libs/header.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index 13b68e580..2469a0b9e 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -25,9 +25,8 @@ get_api_token () { token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail - i=0 - while [[ "$token" == "null" && $i -lt 20 ]] + while [[ ( -z "$token" || "$token" == "null" ) && $i -lt 20 ]] do sleep 2 set +e pipefail From 1181656730f3b87c403e4bf561be5d1a0610f973 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 10:37:40 -0400 Subject: [PATCH 012/162] Some debug output to understand bad `stat` --- libs/header.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/header.sh b/libs/header.sh index 2469a0b9e..b7f92fc9d 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -70,6 +70,7 @@ get_slackernews() { # specify the nodeport for NGINX so we get a consistent and addressable endpoint # TODO: Update upstream to take this as a value + find slackernews sed -i '17 a\ nodePort: 30443' slackernews/templates/nginx-service.yaml # remove the Replicated SDK dependency, if we add more dependencies to From 8217f9d52d1dd575269653e55d88dabcd697ef44 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 10:39:48 -0400 Subject: [PATCH 013/162] Show more with debug access --- libs/header.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/header.sh b/libs/header.sh index b7f92fc9d..56952daea 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -70,7 +70,7 @@ get_slackernews() { # specify the nodeport for NGINX so we get a consistent and addressable endpoint # TODO: Update upstream to take this as a value - find slackernews + find slackernews -ls sed -i '17 a\ nodePort: 30443' slackernews/templates/nginx-service.yaml # remove the Replicated SDK dependency, if we add more dependencies to From f2854df1e8c0ce9e2669abc4fb2b7e6cd3e232c6 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 10:55:34 -0400 Subject: [PATCH 014/162] Provides more debug output --- libs/header.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/header.sh b/libs/header.sh index 56952daea..1d7eef2f5 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -22,6 +22,7 @@ get_api_token () { password=$(get_password) login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) set +e pipefail + curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail From f36dbb74c06897ae2d43fbbb615d536a68429d54 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 10:57:48 -0400 Subject: [PATCH 015/162] Runs curl without pipe for debug every try --- libs/header.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/header.sh b/libs/header.sh index 1d7eef2f5..811f94f0e 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -31,6 +31,7 @@ get_api_token () { do sleep 2 set +e pipefail + curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail i=$((i+1)) From cf103934cb65f7df3cd4c537e8bf2bf8b8282f0a Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 11:04:22 -0400 Subject: [PATCH 016/162] Verbose output from `curl` debug call --- libs/header.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index 811f94f0e..fe320587b 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -22,7 +22,7 @@ get_api_token () { password=$(get_password) login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) set +e pipefail - curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login + curl -v -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail @@ -31,7 +31,7 @@ get_api_token () { do sleep 2 set +e pipefail - curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login + curl -v -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail i=$((i+1)) From 92fd14df70ae6b717aaf568aadbb80c4ec201b4c Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 11:13:53 -0400 Subject: [PATCH 017/162] Removes debug output and adds incremental backoff --- libs/header.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index fe320587b..648045bc4 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -22,7 +22,6 @@ get_api_token () { password=$(get_password) login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) set +e pipefail - curl -v -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail @@ -31,10 +30,10 @@ get_api_token () { do sleep 2 set +e pipefail - curl -v -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -e pipefail i=$((i+1)) + sleep i*3 done UUID=$(cat /proc/sys/kernel/random/uuid) From df4b4d3057c04f7915f8d3b68d17f4855a6efdb4 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 11:53:10 -0400 Subject: [PATCH 018/162] Uses agent variable as cache for token --- libs/header.sh | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index 648045bc4..def7ecf82 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -19,27 +19,37 @@ get_password () { } get_api_token () { - password=$(get_password) - login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) - set +e pipefail - token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") - set -e pipefail - - i=0 - while [[ ( -z "$token" || "$token" == "null" ) && $i -lt 20 ]] - do - sleep 2 - set +e pipefail - token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") - set -e pipefail - i=$((i+1)) - sleep i*3 - done - - UUID=$(cat /proc/sys/kernel/random/uuid) - apiToken=$( jq -n -c --arg name "instruqt-${UUID}" --argjson read_only false '$ARGS.named' ) - access_token=$(curl -s -H "Content-Type: application/json" -H "Authorization: $token" --request POST -d "$apiToken" https://api.replicated.com/vendor/v1/user/token | jq -r ".access_token") + set +e + access_token=$(agent variable get REPLICATED_API_TOKEN) + set -e + # if we don't already have a token, fetch one + if [[ -z "$token" ]]; then + token=$(fetch_api_token) + + password=$(get_password) + login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) + set +e pipefail + token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") + set -e pipefail + + i=0 + while [[ ( -z "$token" || "$token" == "null" ) && $i -lt 20 ]] + do + sleep 2 + set +e pipefail + token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") + set -e pipefail + i=$((i+1)) + sleep i*3 + done + + UUID=$(cat /proc/sys/kernel/random/uuid) + apiToken=$( jq -n -c --arg name "instruqt-${UUID}" --argjson read_only false '$ARGS.named' ) + access_token=$(curl -s -H "Content-Type: application/json" -H "Authorization: $token" --request POST -d "$apiToken" https://api.replicated.com/vendor/v1/user/token | jq -r ".access_token") + + agent variable set REPLICATED_API_TOKEN $access_token + fi echo ${access_token} } From e6bd7e653e347d25f13fb90d8f7c65792215d522 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 13:33:33 -0400 Subject: [PATCH 019/162] Adjusts bash flags for expected empty vars --- libs/header.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index def7ecf82..5a6d7f2ce 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -19,29 +19,28 @@ get_password () { } get_api_token () { - set +e + set +eu access_token=$(agent variable get REPLICATED_API_TOKEN) - set -e + set -eu # if we don't already have a token, fetch one if [[ -z "$token" ]]; then - token=$(fetch_api_token) - + sleep 5 password=$(get_password) login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) - set +e pipefail + set +eu pipefail token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") - set -e pipefail + set -eu pipefail i=0 while [[ ( -z "$token" || "$token" == "null" ) && $i -lt 20 ]] do sleep 2 - set +e pipefail + set +eu pipefail token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") - set -e pipefail + set -eu pipefail i=$((i+1)) - sleep i*3 + sleep i*5 done UUID=$(cat /proc/sys/kernel/random/uuid) From 1f6ac4901d50d8591536f30a512d87c85d3ed5f3 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 13:36:39 -0400 Subject: [PATCH 020/162] Checks correct variable --- libs/header.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/header.sh b/libs/header.sh index 5a6d7f2ce..256e3a4ff 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -24,7 +24,7 @@ get_api_token () { set -eu # if we don't already have a token, fetch one - if [[ -z "$token" ]]; then + if [[ -z "$access_token" ]]; then sleep 5 password=$(get_password) login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) From bae57057798e86e9d523a9deddb102f111c45e32 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 13:39:27 -0400 Subject: [PATCH 021/162] Turns error exists back on at the right places --- libs/header.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/header.sh b/libs/header.sh index 256e3a4ff..dfa3aa8a2 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -21,10 +21,10 @@ get_password () { get_api_token () { set +eu access_token=$(agent variable get REPLICATED_API_TOKEN) - set -eu # if we don't already have a token, fetch one if [[ -z "$access_token" ]]; then + set -eu sleep 5 password=$(get_password) login=$( jq -n -c --arg email "${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com" --arg password "${password}" '$ARGS.named' ) @@ -49,6 +49,7 @@ get_api_token () { agent variable set REPLICATED_API_TOKEN $access_token fi + set -eu echo ${access_token} } From 1f0a1913010659839de7b63cde4bcc833b6e110b Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 13:42:56 -0400 Subject: [PATCH 022/162] Fixes syntax for backoff --- libs/header.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/header.sh b/libs/header.sh index dfa3aa8a2..3ab477738 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -40,7 +40,7 @@ get_api_token () { token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -eu pipefail i=$((i+1)) - sleep i*5 + sleep $((i*5)) done UUID=$(cat /proc/sys/kernel/random/uuid) From 4be43bb1bde10fe3e346edb1a4a34754a4f8dd2d Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 14:02:56 -0400 Subject: [PATCH 023/162] Makes debug output more specific --- libs/header.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/header.sh b/libs/header.sh index 3ab477738..485eddea5 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -81,11 +81,11 @@ get_slackernews() { # specify the nodeport for NGINX so we get a consistent and addressable endpoint # TODO: Update upstream to take this as a value - find slackernews -ls sed -i '17 a\ nodePort: 30443' slackernews/templates/nginx-service.yaml # remove the Replicated SDK dependency, if we add more dependencies to # Slackernews this will need to be revised + stat slackernews/Chart.yaml yq -i 'del(.dependencies)' slackernews/Chart.yaml # start version numbers over to simplify the lab text From 06c9c261ad61282783a7570a7aa9f7112baa370a Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 14:11:33 -0400 Subject: [PATCH 024/162] Broadens focussed debug logging --- libs/header.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libs/header.sh b/libs/header.sh index 485eddea5..94c0e386f 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -85,8 +85,17 @@ get_slackernews() { # remove the Replicated SDK dependency, if we add more dependencies to # Slackernews this will need to be revised + whoami + ls -l slackernews/Chart.yaml stat slackernews/Chart.yaml + set +e + whoami yq -i 'del(.dependencies)' slackernews/Chart.yaml + set -e + stat slackernews/Chart.yaml + ls -l slackernews/Chart.yaml + whoami + tail -20 /var/log/kern.log # start version numbers over to simplify the lab text yq -i '.version = "0.1.0"' slackernews/Chart.yaml From 4ced94f90372b3b64cf79d6540f1602f2c0b3088 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 14:18:43 -0400 Subject: [PATCH 025/162] Updates jumpbox to install `yq` without Snap --- packer/jumpbox/user-data.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packer/jumpbox/user-data.yaml b/packer/jumpbox/user-data.yaml index 2b4be1bef..37ccbfed1 100644 --- a/packer/jumpbox/user-data.yaml +++ b/packer/jumpbox/user-data.yaml @@ -39,13 +39,14 @@ packages: # install snaps on first boot snap: commands: - - snap install yq - snap install git-ubuntu --classic - snap install kubectl --classic - snap install helm --classic - snap install google-cloud-cli --classic runcmd: +- wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && \ + chmod +x /usr/bin/yq - chsh -s /usr/bin/bash replicant - curl https://kots.io/install | bash - | From 3827374792b5383b3c6b3b2030282cc68d9193b8 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 14:30:42 -0400 Subject: [PATCH 026/162] Switches "Delivering..." lab to use a new image --- packer/jumpbox/user-data.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packer/jumpbox/user-data.yaml b/packer/jumpbox/user-data.yaml index 37ccbfed1..2b4be1bef 100644 --- a/packer/jumpbox/user-data.yaml +++ b/packer/jumpbox/user-data.yaml @@ -39,14 +39,13 @@ packages: # install snaps on first boot snap: commands: + - snap install yq - snap install git-ubuntu --classic - snap install kubectl --classic - snap install helm --classic - snap install google-cloud-cli --classic runcmd: -- wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && \ - chmod +x /usr/bin/yq - chsh -s /usr/bin/bash replicant - curl https://kots.io/install | bash - | From 2fa311769c91dcffa629c33315d17ce4ef8cc82b Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 14:31:50 -0400 Subject: [PATCH 027/162] Iterates on setup for node --- instruqt/delivering-as-an-appliance/track.yml | 2 +- .../delivering-as-an-appliance/track_scripts/setup-node | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index ad859919c..3837d4191 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -41,4 +41,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "3761629999190261422" +checksum: "18065656847433200160" diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-node b/instruqt/delivering-as-an-appliance/track_scripts/setup-node index fc772777f..51f67054a 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-node +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-node @@ -4,13 +4,17 @@ set -euxo pipefail HOME_DIR=/home/replicant +while [ ! -f /opt/instruqt/bootstrap/host-bootstrap-completed ] +do + echo "Waiting for Instruqt to finish booting the virtual machine" + sleep 1 +done + # use our shared libary in setup scripts # TO DO: Change to `main` when preparing to merge curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/replicated-field-labs/feature/crdant/delivering-as-an-appliance/libs/header.sh source /etc/profile.d/header.sh -# set up some variables that are needed in most labs - # there's only one app created by the automation, so just grab the first in the list api_token=$(get_api_token) app_slug=$(get_app_slug) From 59110f579377c537970d5cbed752a1331a594a9e Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 15:53:07 -0400 Subject: [PATCH 028/162] Switches to common function for SDK version --- .../avoiding-installation-pitfalls/track_scripts/setup-shell | 2 +- instruqt/closing-information-gap/track_scripts/setup-shell | 2 +- .../02-enabling-the-sdk/setup-shell | 4 ++-- instruqt/protecting-your-assets/track_scripts/setup-shell | 2 +- libs/header.sh | 4 ++++ 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/instruqt/avoiding-installation-pitfalls/track_scripts/setup-shell b/instruqt/avoiding-installation-pitfalls/track_scripts/setup-shell index 43890327b..c68006042 100755 --- a/instruqt/avoiding-installation-pitfalls/track_scripts/setup-shell +++ b/instruqt/avoiding-installation-pitfalls/track_scripts/setup-shell @@ -33,7 +33,7 @@ cd /home/replicant mkdir /home/replicant/release get_slackernews yq -i '.version = "0.2.0"' slackernews/Chart.yaml -replicated_sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') +replicated_sdk_version=$(get_replicated_sdk_version) yq -i ".dependencies += []" slackernews/Chart.yaml yq -i ".dependencies += { \"name\": \"replicated\", \"repository\": \"oci://registry.replicated.com/library\", \"version\": \"${replicated_sdk_version#?}\"}" slackernews/Chart.yaml diff --git a/instruqt/closing-information-gap/track_scripts/setup-shell b/instruqt/closing-information-gap/track_scripts/setup-shell index 0438490fc..db430e0a8 100755 --- a/instruqt/closing-information-gap/track_scripts/setup-shell +++ b/instruqt/closing-information-gap/track_scripts/setup-shell @@ -38,7 +38,7 @@ mkdir ${HOME_DIR}/release get_slackernews yq -i '.version = "0.2.0"' slackernews/Chart.yaml -replicated_sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') +replicated_sdk_version=$(get_replicated_sdk_version) yq -i ".dependencies = []" slackernews/Chart.yaml yq -i ".dependencies += { \"name\": \"replicated\", \"repository\": \"oci://registry.replicated.com/library\", \"version\": \"${replicated_sdk_version#?}\"}" slackernews/Chart.yaml diff --git a/instruqt/distributing-with-replicated/02-enabling-the-sdk/setup-shell b/instruqt/distributing-with-replicated/02-enabling-the-sdk/setup-shell index 94d10696d..f6b19818d 100755 --- a/instruqt/distributing-with-replicated/02-enabling-the-sdk/setup-shell +++ b/instruqt/distributing-with-replicated/02-enabling-the-sdk/setup-shell @@ -9,5 +9,5 @@ chown replicant:replicant /home/replicant/release chmod 755 /home/replicant/release # get the current SDK version -sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') -agent variable set REPLICATED_SDK_VERSION ${sdk_version#?} +replicated_sdk_version=$(get_replicated_sdk_version) +agent variable set REPLICATED_SDK_VERSION ${replicated_sdk_version#?} diff --git a/instruqt/protecting-your-assets/track_scripts/setup-shell b/instruqt/protecting-your-assets/track_scripts/setup-shell index 1294c49a1..35bf1f3a8 100755 --- a/instruqt/protecting-your-assets/track_scripts/setup-shell +++ b/instruqt/protecting-your-assets/track_scripts/setup-shell @@ -39,7 +39,7 @@ mkdir ${HOME_DIR}/release get_slackernews yq -i '.version = "0.2.0"' slackernews/Chart.yaml -replicated_sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') +replicated_sdk_version=$(get_replicated_sdk_version) yq -i ".dependencies = []" slackernews/Chart.yaml yq -i ".dependencies += { \"name\": \"replicated\", \"repository\": \"oci://registry.replicated.com/library\", \"version\": \"${replicated_sdk_version#?}\"}" slackernews/Chart.yaml diff --git a/libs/header.sh b/libs/header.sh index 94c0e386f..ac893011b 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -9,6 +9,10 @@ show_credentials () { echo -e "${GREEN}Password: ${CYAN}${password}${NC}" } +get_replicated_sdk_version () { + echo $(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') +} + get_username () { echo ${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com } From 1030bbfbcf6f2c9a320c349e7eee62a9cbcb61af Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 15:53:51 -0400 Subject: [PATCH 029/162] Adds embedded cluster and sdk version variables --- instruqt/delivering-as-an-appliance/track_scripts/setup-node | 5 ++++- libs/header.sh | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-node b/instruqt/delivering-as-an-appliance/track_scripts/setup-node index 51f67054a..5d9531e9a 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-node +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-node @@ -19,11 +19,15 @@ source /etc/profile.d/header.sh api_token=$(get_api_token) app_slug=$(get_app_slug) app_id=$(get_app_id) +replicated_sdk_version=$(get_replicated_sdk_version) +embedded_cluster_version=$(get_embedded_cluster_version) agent variable set USERNAME $(get_username) agent variable set PASSWORD $(get_password) agent variable set REPLICATED_API_TOKEN ${api_token} agent variable set REPLICATED_APP ${app_slug} +agent variable set REPLICATED_SDK_VERSION ${replicated_sdk_version#?} +agent variable set EMBEDDED_CLUSTER_VERSION ${embedded_cluster_version#?} ## release the application with the Replicated SDK cd ${HOME_DIR} @@ -31,7 +35,6 @@ mkdir ${HOME_DIR}/release get_slackernews yq -i '.version = "0.2.0"' slackernews/Chart.yaml -replicated_sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') yq -i ".dependencies = []" slackernews/Chart.yaml yq -i ".dependencies += { \"name\": \"replicated\", \"repository\": \"oci://registry.replicated.com/library\", \"version\": \"${replicated_sdk_version#?}\"}" slackernews/Chart.yaml diff --git a/libs/header.sh b/libs/header.sh index ac893011b..ea3fdc8c5 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -13,6 +13,10 @@ get_replicated_sdk_version () { echo $(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') } +get_embedded_cluster_version () { + echo $(curl -qsfL https://api.github.com/repos/replicatedhq/embedded-cluster/tags | jq -r '.[0] | .name') +} + get_username () { echo ${INSTRUQT_PARTICIPANT_ID}@replicated-labs.com } From 90924fcdc4d76dc5f3a90d0e407e63d0dd8a532f Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 15:54:54 -0400 Subject: [PATCH 030/162] Cleans up some debug output --- libs/header.sh | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index ea3fdc8c5..54b251239 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -93,17 +93,7 @@ get_slackernews() { # remove the Replicated SDK dependency, if we add more dependencies to # Slackernews this will need to be revised - whoami - ls -l slackernews/Chart.yaml - stat slackernews/Chart.yaml - set +e - whoami yq -i 'del(.dependencies)' slackernews/Chart.yaml - set -e - stat slackernews/Chart.yaml - ls -l slackernews/Chart.yaml - whoami - tail -20 /var/log/kern.log # start version numbers over to simplify the lab text yq -i '.version = "0.1.0"' slackernews/Chart.yaml From 132e9751175c33fffa173efce247a56ac5ef92c1 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 16:08:16 -0400 Subject: [PATCH 031/162] Removes lingering files from old structure --- .../assignment.md | 71 ------------------- .../check-shell | 17 ----- .../cleanup-shell | 12 ---- .../setup-shell | 24 ------- .../solve-shell | 9 --- 5 files changed, 133 deletions(-) delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-shell delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-shell delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-shell delete mode 100755 instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-shell diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md deleted file mode 100755 index afb7ba800..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/assignment.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -slug: getting-to-know-the-template -type: challenge -title: Getting to Know the Template -teaser: Some tips and tricks for using this template -notes: - - type: text - contents: Let's learn about this template -tabs: - - title: Shell - type: terminal - hostname: node - - title: Cluster - type: terminal - hostname: cluster -difficulty: basic -timelimit: 300 ---- - -👋 Introduction -=============== - -This template is a baseline for labs that need to persist their shell -environment across challenges. This may be because you as the learner -to set some environment variables, or because they've started a long -running process, or just to make it feel more like the real world -where they're doing everything in the same shell session. - -As a cool side-effect, you can also use this template if you want -to interact with the contents of the learner's shell session. The -track uses `tmux` to persist the shell, and with that comes the -opportunity to read the content of the entire `tmux` pane. That -content includes the commands the learner types and the output of -those commands. This can come in very handy in lifecycle scripts, as -can `tmux`'s ability to send keystrokes into the session. - - -🔤 Basics -========= - -You don't really have to do anything special to use this template. -It's configured to start a shell container and a single node Kubernetes -cluster. The shell uses our Instruqt shell image, and runs a `tmux` -session named `shell`. In that sesion it starts a login shell as the -user `replicant` using `su`. - -The first challenge will create the session, and additional challenges -will connect to the existing session. This is enabled by following -command which is the `shell` specified in `config.yml` for the `Shell` -sandbox. - -```yaml -- name: shell - image: gcr.io/kots-field-labs/shell:instruqt-feature-tmux-template - shell: tmux new-session -A -s shell su - replicant -``` - -This one command will either create a new session named `shell` running -`su - replicant`, or join an existing session named `shell`. The existing -session will continue with whatever command it was running in the prior -challenge which may just be `replicant`'s shell. - -🧪 Try It -========= - -Let's set an environment variable in this challenge so we can take -advantage of it in the next one. - -```shell -export THIS="the way" -``` diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-shell deleted file mode 100755 index 51729454d..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/check-shell +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -# save the entire session to check user inputs and outputs -tmux capture-pane -t shell -S - -SESSION=$(tmux save-buffer -) - -# check for disconnection -if ! grep -qE 'THIS=[A-Za-z "]+' <(echo ${SESSION}) ; then - fail-message 'Please try it out by setting the environment variable `$THIS`' - exit 1 -fi - diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-shell deleted file mode 100755 index 0e8a7867a..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/cleanup-shell +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -# clear the tmux pane and scrollback to look like a fresh shell -tmux clear-history -t shell -tmux send-keys -t shell clear ENTER - -exit 0 diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-shell deleted file mode 100755 index b38967550..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/setup-shell +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -### Assure the tmux session exists -# -# In a test scenario Instuqt does not run the user shell for the -# challenge, which means the tmux session is never established. We -# need to session for the solve scripts for other challenges to -# succeed, so let's create it here. -# -if ! tmux has-session -t shell ; then - tmux new-session -d -s shell su - replicant -fi - -# Wait for Instruqt bootstrap to be complete -while [ ! -f /opt/instruqt/bootstrap/host-bootstrap-completed ] -do - echo "Waiting for Instruqt to finish booting the VM" - sleep 1 -done diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-shell deleted file mode 100755 index d49103b2f..000000000 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/01-getting-to-know-the-template/solve-shell +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -# This set line ensures that all failures will cause the script to error and exit -set -euxo pipefail -HOME_DIR=/home/replicant -source /etc/profile.d/header.sh - -# set the variable into the shell -tmux send-keys -t shell export SPACE 'THIS="the way"' ENTER From 4d8173f871a8f14d4ba5043b5c6c61cf974854a1 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 16:49:40 -0400 Subject: [PATCH 032/162] Uses releases instead of tags to find EC version --- libs/header.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/header.sh b/libs/header.sh index 54b251239..02d605e26 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -14,7 +14,7 @@ get_replicated_sdk_version () { } get_embedded_cluster_version () { - echo $(curl -qsfL https://api.github.com/repos/replicatedhq/embedded-cluster/tags | jq -r '.[0] | .name') + echo $(curl -s "https://api.github.com/repos/replicatedhq/embedded-cluster/releases/latest" | jq -r .tag_name) } get_username () { @@ -43,12 +43,11 @@ get_api_token () { i=0 while [[ ( -z "$token" || "$token" == "null" ) && $i -lt 20 ]] do - sleep 2 + sleep $((i*5)) set +eu pipefail token=$(curl -s -H "Content-Type: application/json" --request POST -d "$login" https://id.replicated.com/v1/login | jq -r ".token") set -eu pipefail i=$((i+1)) - sleep $((i*5)) done UUID=$(cat /proc/sys/kernel/random/uuid) From 2e3c6b7780f8fcf3b01febc3368cdfe0bb7103fb Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 18:32:07 -0400 Subject: [PATCH 033/162] Adds some caching for github rate limiting --- .../01-specifying-the-cluster/assignment.md | 32 ++++++++++++++++--- .../delivering-as-an-appliance/config.yml | 3 +- instruqt/delivering-as-an-appliance/track.yml | 2 +- libs/header.sh | 25 +++++++++++++-- 4 files changed, 52 insertions(+), 10 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index 133ba3117..0ac8bbe40 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -19,8 +19,30 @@ difficulty: basic timelimit: 300 --- -You can release you application as a Kubernetes applicance by -specifying a few extra configuration files as part of your Replicated -release. The first of these files is the configuration for the -Embedded Cluster itself. This configuration can be very simple. All -it requires is the version of the cluster to use. +A virtual Kubernetes appliance consists of your application, an embedded +Kubernetes cluster, and a console that you customer uses to install your +application and manage the appliance. You release your application as a +Kubernetes applicance by specifying a few configuration files. These files are +included as part of your Replicated release. + +The first file is the configuration for the Embedded Cluster itself, which can +very simple. All it requires is the version of the cluster to use. + +``` +apiVersion: embeddedcluster.replicated.com/v1beta1 +kind: Config +spec: + version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="node" ]] +``` + +The Replicated Release +====================== + +The Replicated Platform distributes your software to your customers. To do +this, it needs to know about your application, it's customers, and the files +you're shipping to them. Each release is built around a Helm chart, and that's +all it needs to include. If you've completed the [Distributing Your Software +with Replicated](https://play.instruqt.com/replicated/tracks/distributing-with-replicated) +lab, you built a release around a Helm chart and installed it using Helm tools. + +For the Emnbe diff --git a/instruqt/delivering-as-an-appliance/config.yml b/instruqt/delivering-as-an-appliance/config.yml index e3cad5bdf..c602530b5 100644 --- a/instruqt/delivering-as-an-appliance/config.yml +++ b/instruqt/delivering-as-an-appliance/config.yml @@ -1,5 +1,6 @@ version: "3" virtualmachines: - name: node - image: kots-field-labs/future-cluster-node + image: kots-field-labs/future-node shell: tmux new-session -A -s shell su - replicant + machine_type: n1-standard-2 diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index 3837d4191..ecef85e83 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -41,4 +41,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "18065656847433200160" +checksum: "14403555178981365042" diff --git a/libs/header.sh b/libs/header.sh index 02d605e26..850a396da 100644 --- a/libs/header.sh +++ b/libs/header.sh @@ -10,11 +10,30 @@ show_credentials () { } get_replicated_sdk_version () { - echo $(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') + set +eu pipefail + replicated_sdk_version=$(agent variable get REPLICATED_SDK_VERSION) + + # if we don't already have a token, fetch one + if [[ -z "$replicated_sdk_version" ]]; then + set -eu pipefail + replicated_sdk_version=$(curl -qsfL https://api.github.com/repos/replicatedhq/replicated-sdk/tags | jq -r '.[0] | .name') + fi + + set -eu + echo ${replicated_sdk_version} } get_embedded_cluster_version () { - echo $(curl -s "https://api.github.com/repos/replicatedhq/embedded-cluster/releases/latest" | jq -r .tag_name) + set +eu pipefail + replicated_sdk_version=$(agent variable get REPLICATED_SDK_VERSION) + + # if we don't already have a token, fetch one + if [[ -z "$replicated_sdk_version" ]]; then + embedded_cluster_version=$(curl -s "https://api.github.com/repos/replicatedhq/embedded-cluster/releases/latest" | jq -r .tag_name) + fi + + set -eu pipefail + echo ${embedded_cluster_version} } get_username () { @@ -56,7 +75,7 @@ get_api_token () { agent variable set REPLICATED_API_TOKEN $access_token fi - set -eu + set +eu echo ${access_token} } From 2beeeb6eb0cd7f5f3ba37c06e5537d3e3bcab342 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 18:59:58 -0400 Subject: [PATCH 034/162] Starts fleshing out the first lesson --- .../01-specifying-the-cluster/assignment.md | 109 ++++++++++++++++-- .../01-specifying-the-cluster/check-node | 53 ++++++++- .../01-specifying-the-cluster/setup-node | 4 + .../01-specifying-the-cluster/solve-node | 52 ++++++++- instruqt/delivering-as-an-appliance/track.yml | 2 +- 5 files changed, 205 insertions(+), 15 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index 0ac8bbe40..88d18a956 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -2,11 +2,11 @@ slug: specifying-the-cluster id: rsxl9h79cen1 type: challenge -title: Configuring the Embedded Cluster +title: Starting Your Appliance Configuration teaser: Enable and configure the embedded cluster notes: - type: text - contents: Let's enable the embedded cluster + contents: Let's build a Kubernetes appliance tabs: - title: Shell type: terminal @@ -19,13 +19,16 @@ difficulty: basic timelimit: 300 --- -A virtual Kubernetes appliance consists of your application, an embedded -Kubernetes cluster, and a console that you customer uses to install your -application and manage the appliance. You release your application as a -Kubernetes applicance by specifying a few configuration files. These files are -included as part of your Replicated release. +A virtual Kubernetes appliance consists of your application, a Kubernetes +cluster, and a console that you customer uses to install your application and +manage the appliance. We refer to the Kubernetes cluster that's included as the +Embedded Cluster since it's "embedded" with your application. The console to +isntall and manage your application is called the Admin Console. Under the +hood, the Admin Console uses Helm to install and upgrade your application. -The first file is the configuration for the Embedded Cluster itself, which can +You release your application as a Kubernetes applicance by releasing a Helm +chart and some additional configuration on the Replicated Vendor Portal. The +moost important file is the configuration for the Embedded Cluster, which can very simple. All it requires is the version of the cluster to use. ``` @@ -35,14 +38,96 @@ spec: version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="node" ]] ``` +That specification lets the Replicated Vendor Portal know which version of +Kubernetes to embed. There are [more options for the configuration] +(https://docs.replicated.com/reference/embedded-config), but that's all you +need to get started. + The Replicated Release ====================== The Replicated Platform distributes your software to your customers. To do this, it needs to know about your application, it's customers, and the files -you're shipping to them. Each release is built around a Helm chart, and that's -all it needs to include. If you've completed the [Distributing Your Software -with Replicated](https://play.instruqt.com/replicated/tracks/distributing-with-replicated) +you're shipping to them. We talk about those files as a release. + +Every release is built around a Helm chart, and that's all it needs. If you've +completed the [Distributing Your Software with +Replicated](https://play.instruqt.com/replicated/tracks/distributing-with-replicated) lab, you built a release around a Helm chart and installed it using Helm tools. +In this lab, we'll add the cluster configuration and a few other files to the +release to enable the appliance experience. + +Your Initial Appliance +====================== + +Let's create a simple Kubernetes appliance for Slackernews and release it with +the Platform. We're going to add our Helm chart and two configuration files to +the `release` directory. These are the bare minimum set of files we need to +create the appliance. + +### Adding a Helm Chart to a Release + +To prepare the release, we first need to make sure our Helm chart is configured +as part of it. This lab uses the application +[Slackernews](https://slackernews.io) and the Helm sources for it are in the +`slackernews` directory. Let's package the chart and include it in the +`release` directory, where we'll also add the additional files we need. + +``` +helm package -u slackernews -d release --version 0.6.0 +``` + +We're then going to add a file that lets the Admin Console know about the Helm +chart. It uses this file to identify which chart to install and pass the +appropriate values. We'll look at the passing values in a later section of the +lab when we set up the configuration screen for our application. + +Go to the "Release Editor" tab to add a file to your release. + +![Creating a manifest file describing your Helm +chart](../assets/creating-the-helmchart-object.png) + +The editor may not open your new file automatically. If it doesn't, click on it +to open it. Add the following content to the file. Note that it looks like a +Kubernetes custom resource, but it's really not. Instead, it's processed by the +Admin Console to avoid the complexity of creating a CRD and the relevant +controllers. + +``` +apiVersion: kots.io/v1beta2 +kind: HelmChart +metadata: + name: slackernews +spec: + # chart identifies a matching chart from a .tgz + chart: + name: slackernews + chartVersion: 0.6.0 + + # values are used in the customer environment, as a pre-render step + # these values will be supplied to helm template + values: {} +``` + +The name and version in this file need to match the metadata for our +Slackernews Helm chart to identify it correctly. You're not limited to only one +Helm chart as part of your application. Including multiple `HelmChart` objects +let's the Admin Console know it has to install multiple Helm charts. For +Slackernews, we have only a single chart. + +### Including the Embedded Cluster + +We showed a simple Embedded Cluster configuration earlier in the lab. We're +going to use that basic configuration for Slackernews. Create another file in +the `release` folder named `embedded-cluster.yaml` and copy the contents of the +configuration into it. + +``` +apiVersion: embeddedcluster.replicated.com/v1beta1 +kind: Config +spec: + version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="node" ]] +``` -For the Emnbe +Releasing Your Appliance +======================== diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node index e4c7cee03..4cbf0e2f4 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node @@ -5,4 +5,55 @@ set -euxo pipefail HOME_DIR=/home/replicant source /etc/profile.d/header.sh -exit 0 +export REPLICATED_API_TOKEN=$(agent variable get REPLICATED_API_TOKEN) +export REPLICATED_APP=$(agent variable get REPLICATED_APP) +app_slug=${REPLICATED_APP} +api_token=${REPLICATED_API_TOKEN} + +result=0 + +# check that the embedded cluster and Helm configs are part of the release +if [[ ! -f ${HOME_DIR}/release/embedded-cluster.yaml ]]; then + fail-message 'Please add the Embedded Cluster configuration to the Slackernews release' + let "result = result + 1" +fi + +if [[ ! -f ${HOME_DIR}/release/slackernews-chart.yaml ]]; then + fail-message 'Please add the Slackernews Helm chart configuration to the Slackernews release' + let "result = result + 1" +fi + +# check that the Helm chart has been packaged into the release directory +if [[ ! -f ${HOME_DIR}/release/slackernews-0.6.0.tgz ]]; then + fail-message 'Please be sure to build the Helm chart into the release directory:' + let "result = result + 1" +fi + +# check for an updated version number +if [[ ! "$(yq .version ${HOME_DIR}/slackernews/Chart.yaml)" == "0.6.0" ]] ; then + fail-message 'Please be sure to update the version of the Slackernews Helm chart to reflect your new release' + let "result = result + 1" +fi + +# check for release to Unstable +unstable_version=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Unstable" ) | .currentVersion') +if [[ ! "${unstable_version}" == "0.6.0" ]] ; then + fail-message $'Please be sure to release the applicaton to the \`Unstable\` channel with version \`0.6.0\`' + let "result = result + 1" +fi + +# check for promotion to Beta +beta_version=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Beta" ) | .currentVersion') +if [[ ! "${beta_version}" == "0.6.0" ]] ; then + fail-message $'Please be sure to promote the applicaton to the \`Beta\` channel with version \`0.6.0\`' + let "result = result + 1" +fi + +# check for promotion to Stable +stable_version=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Stable" ) | .currentVersion') +if [[ ! "${stable_version}" == "0.6.0" ]] ; then + fail-message $'Please be sure to promote the applicaton to the \`Stable\` channel with version \`0.6.0\`' + let "result = result + 1" +fi + +exit ${result} diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node index b38967550..21f801a82 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node @@ -22,3 +22,7 @@ do echo "Waiting for Instruqt to finish booting the VM" sleep 1 done + +mkdir -p ${HOME_DIR}/release +chown replicant:replicant ${HOME_DIR}/release +chmod 755 ${HOME_DIR}/release diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node index e4c7cee03..e2ecafd65 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node @@ -5,4 +5,54 @@ set -euxo pipefail HOME_DIR=/home/replicant source /etc/profile.d/header.sh -exit 0 +# update the Helm chart minor version to match the Replicated release version +yq -i '.version = "0.6.0"' ${HOME_DIR}/slackernews/Chart.yaml + +# Package the slackernews Helm chart into the release directory +helm package ${HOME_DIR}/slackernews --destination ${HOME_DIR}/release + +# add the embedded cluster configuration file +cat < ${HOME_DIR}/release/embedded-cluster.yaml +apiVersion: embeddedcluster.replicated.com/v1beta1 +kind: Config +spec: + version: $(agent variable get EMBEDDED_CLUSTER_VERSION) +MANIFEST + +# add the Helm chart configuration file +cat < ${HOME_DIR}/release/slackernews-chart.yaml +apiVersion: kots.io/v1beta2 +kind: HelmChart +metadata: + name: slackernews +spec: + # chart identifies a matching chart from a .tgz + chart: + name: slackernews + chartVersion: 0.6.0 + + # values are used in the customer environment, as a pre-render step + # these values will be supplied to helm template + values: {} +MANIFEST + +# make sure all files in the release directory are owned by the replicant user +chown -R replicant:replicant ${HOME_DIR}/release + +# configure the required environment variables for the Replicated CLI +export REPLICATED_API_TOKEN=$(agent variable get REPLICATED_API_TOKEN) +export REPLICATED_APP=$(agent variable get REPLICATED_APP) + +# release the app to the Unstable channel +replicated release create --promote Unstable --chart ${HOME_DIR}/release/slackernews-0.6.0.tgz --version 0.6.0 \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" \ + --app ${REPLICATED_APP} --token ${REPLICATED_API_TOKEN} + +# promote the release to the Beta and Stable channels +release_sequence=$(curl --header "Accept: application/json" --header "Authorization: ${REPLICATED_API_TOKEN}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[] | select( .slug == "'${REPLICATED_APP}'" ) | .channels[] | select( .name == "Unstable" ) | .releaseSequence') +replicated release promote ${release_sequence} Beta --version 0.6.0 \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" \ + --app ${REPLICATED_APP} --token ${REPLICATED_API_TOKEN} +replicated release promote ${release_sequence} Stable --version 0.6.0 \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" \ + --app ${REPLICATED_APP} --token ${REPLICATED_API_TOKEN} diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index ecef85e83..71efd879b 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -41,4 +41,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "14403555178981365042" +checksum: "15952009531457506693" From a8761dffbe3774f390315e99b5f23b0cd792ca45 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 20:42:05 -0400 Subject: [PATCH 035/162] Goes back to two machines for dev vs. cluster --- .../01-specifying-the-cluster/{check-node => check-shell} | 0 .../{cleanup-node => cleanup-shell} | 0 .../01-specifying-the-cluster/{setup-node => setup-shell} | 0 .../01-specifying-the-cluster/{solve-node => solve-shell} | 0 .../02-customize-for-your-app/{check-node => check-shell} | 0 .../{cleanup-node => cleanup-shell} | 0 .../02-customize-for-your-app/{setup-node => setup-shell} | 0 .../02-customize-for-your-app/{solve-node => solve-shell} | 0 .../03-collecting-configuration/{check-node => check-shell} | 0 .../{cleanup-node => cleanup-shell} | 0 .../03-collecting-configuration/{setup-node => setup-shell} | 0 .../03-collecting-configuration/{solve-node => solve-shell} | 0 .../04-entitling-a-customer/{check-node => check-shell} | 0 .../04-entitling-a-customer/{cleanup-node => cleanup-shell} | 0 .../04-entitling-a-customer/{setup-node => setup-shell} | 0 .../04-entitling-a-customer/{solve-node => solve-shell} | 0 .../05-your-customers-install/{check-node => check-shell} | 0 .../{cleanup-node => cleanup-shell} | 0 .../05-your-customers-install/{setup-node => setup-shell} | 0 .../05-your-customers-install/{solve-node => solve-shell} | 0 .../06-expanding-the-cluster/{check-node => check-shell} | 0 .../06-expanding-the-cluster/{cleanup-node => cleanup-shell} | 0 .../06-expanding-the-cluster/{setup-node => setup-shell} | 0 .../06-expanding-the-cluster/{solve-node => solve-shell} | 0 instruqt/delivering-as-an-appliance/config.yml | 5 ++++- .../track_scripts/{setup-node => setup-shell} | 0 26 files changed, 4 insertions(+), 1 deletion(-) rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{check-node => check-shell} (100%) rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{cleanup-node => cleanup-shell} (100%) rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{setup-node => setup-shell} (100%) rename instruqt/delivering-as-an-appliance/01-specifying-the-cluster/{solve-node => solve-shell} (100%) rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{check-node => check-shell} (100%) rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{cleanup-node => cleanup-shell} (100%) rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{setup-node => setup-shell} (100%) rename instruqt/delivering-as-an-appliance/02-customize-for-your-app/{solve-node => solve-shell} (100%) rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{check-node => check-shell} (100%) rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{cleanup-node => cleanup-shell} (100%) rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{setup-node => setup-shell} (100%) rename instruqt/delivering-as-an-appliance/03-collecting-configuration/{solve-node => solve-shell} (100%) rename instruqt/delivering-as-an-appliance/04-entitling-a-customer/{check-node => check-shell} (100%) rename instruqt/delivering-as-an-appliance/04-entitling-a-customer/{cleanup-node => cleanup-shell} (100%) rename instruqt/delivering-as-an-appliance/04-entitling-a-customer/{setup-node => setup-shell} (100%) rename instruqt/delivering-as-an-appliance/04-entitling-a-customer/{solve-node => solve-shell} (100%) rename instruqt/delivering-as-an-appliance/05-your-customers-install/{check-node => check-shell} (100%) rename instruqt/delivering-as-an-appliance/05-your-customers-install/{cleanup-node => cleanup-shell} (100%) rename instruqt/delivering-as-an-appliance/05-your-customers-install/{setup-node => setup-shell} (100%) rename instruqt/delivering-as-an-appliance/05-your-customers-install/{solve-node => solve-shell} (100%) rename instruqt/delivering-as-an-appliance/06-expanding-the-cluster/{check-node => check-shell} (100%) rename instruqt/delivering-as-an-appliance/06-expanding-the-cluster/{cleanup-node => cleanup-shell} (100%) rename instruqt/delivering-as-an-appliance/06-expanding-the-cluster/{setup-node => setup-shell} (100%) rename instruqt/delivering-as-an-appliance/06-expanding-the-cluster/{solve-node => solve-shell} (100%) rename instruqt/delivering-as-an-appliance/track_scripts/{setup-node => setup-shell} (100%) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-node rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-node rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/cleanup-shell diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-node rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/setup-shell diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-node rename to instruqt/delivering-as-an-appliance/01-specifying-the-cluster/solve-shell diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-node b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-node rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/check-shell diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-node b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-node rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/cleanup-shell diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-node b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-node rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/setup-shell diff --git a/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-node b/instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-node rename to instruqt/delivering-as-an-appliance/02-customize-for-your-app/solve-shell diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-node b/instruqt/delivering-as-an-appliance/03-collecting-configuration/check-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/check-node rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/check-shell diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-node b/instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-node rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/cleanup-shell diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-node b/instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-node rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/setup-shell diff --git a/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-node b/instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-node rename to instruqt/delivering-as-an-appliance/03-collecting-configuration/solve-shell diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-node b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-node rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/check-shell diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-node b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-node rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/cleanup-shell diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-node b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-node rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/setup-shell diff --git a/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-node b/instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-node rename to instruqt/delivering-as-an-appliance/04-entitling-a-customer/solve-shell diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/check-node b/instruqt/delivering-as-an-appliance/05-your-customers-install/check-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/check-node rename to instruqt/delivering-as-an-appliance/05-your-customers-install/check-shell diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-node b/instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-node rename to instruqt/delivering-as-an-appliance/05-your-customers-install/cleanup-shell diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-node b/instruqt/delivering-as-an-appliance/05-your-customers-install/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/setup-node rename to instruqt/delivering-as-an-appliance/05-your-customers-install/setup-shell diff --git a/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-node b/instruqt/delivering-as-an-appliance/05-your-customers-install/solve-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/05-your-customers-install/solve-node rename to instruqt/delivering-as-an-appliance/05-your-customers-install/solve-shell diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-node b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-node rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/check-shell diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-node b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-node rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/cleanup-shell diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-node b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-node rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/setup-shell diff --git a/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-node b/instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-node rename to instruqt/delivering-as-an-appliance/06-expanding-the-cluster/solve-shell diff --git a/instruqt/delivering-as-an-appliance/config.yml b/instruqt/delivering-as-an-appliance/config.yml index c602530b5..e8ada4445 100644 --- a/instruqt/delivering-as-an-appliance/config.yml +++ b/instruqt/delivering-as-an-appliance/config.yml @@ -1,6 +1,9 @@ version: "3" +- name: shell + image: gcr.io/kots-field-labs/shell:main + shell: tmux new-session -A -s shell su - replicant virtualmachines: - name: node image: kots-field-labs/future-node - shell: tmux new-session -A -s shell su - replicant + shell: /bin/bash machine_type: n1-standard-2 diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-node b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell similarity index 100% rename from instruqt/delivering-as-an-appliance/track_scripts/setup-node rename to instruqt/delivering-as-an-appliance/track_scripts/setup-shell From 68bb8ff7216c9401b93e5136e848d622be1f23d7 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 20:44:01 -0400 Subject: [PATCH 036/162] Adds SSH between machines --- .../track_scripts/setup-cluster | 31 +++++++++++++++++++ .../track_scripts/setup-shell | 11 +++++++ 2 files changed, 42 insertions(+) create mode 100755 instruqt/delivering-as-an-appliance/track_scripts/setup-cluster diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster b/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster new file mode 100755 index 000000000..c7f75a00f --- /dev/null +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# This set line ensures that all failures will cause the script to error and exit +set -euxo pipefail + +# simple SSH client setup so we can SSH to/from the shell + +cat <> "$HOME/.ssh/config" +Host * + StrictHostKeyChecking no + UserKnownHostsFile /dev/null + PubkeyAcceptedKeyTypes +ssh-rsa +EOF + +while ! ssh shell true; do + echo "Waiting for container SSH to be available..." + sleep 1 +done + +ssh shell "mkdir /home/replicant/.kube" + +while ! [[ -f /etc/rancher/k3s/k3s.yaml ]]; do + echo "Waiting for Rancher kubernetes configuration to be available..." + sleep 1 +done + +# use our shared libary in setup scripts +curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/kots-field-labs/main/libs/header.sh +source /etc/profile.d/header.sh + +scp /etc/rancher/k3s/k3s.yaml shell:/home/replicant/.kube/config diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell index 5d9531e9a..9a130f708 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell @@ -10,6 +10,17 @@ do sleep 1 done +# simple SSH client setup so we can SSH to/from the shell + +cat <> "$HOME/.ssh/config" +Host * + StrictHostKeyChecking no + UserKnownHostsFile /dev/null +EOF + +# assure an RSA key for Dropbear +ssh-keygen -t rsa -f /etc/dropbear/dropbear_rsa_host_key -N '' + # use our shared libary in setup scripts # TO DO: Change to `main` when preparing to merge curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/replicated-field-labs/feature/crdant/delivering-as-an-appliance/libs/header.sh From 3bb5eb7764a3a3861a9c1e597f5d1f145cdb486d Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Wed, 15 May 2024 21:41:29 -0400 Subject: [PATCH 037/162] Completes initial draft of first challenge --- .../01-specifying-the-cluster/assignment.md | 103 +++++++++++++++--- .../assets/creating-the-helmchart-object.png | Bin 0 -> 385431 bytes .../delivering-as-an-appliance/config.yml | 1 + instruqt/delivering-as-an-appliance/track.yml | 2 +- .../{setup-cluster => setup-node} | 8 -- 5 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 instruqt/delivering-as-an-appliance/assets/creating-the-helmchart-object.png rename instruqt/delivering-as-an-appliance/track_scripts/{setup-cluster => setup-node} (71%) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index 88d18a956..afbf7727c 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -10,10 +10,10 @@ notes: tabs: - title: Shell type: terminal - hostname: node + hostname: shell - title: Release Editor type: code - hostname: node + hostname: shell path: /home/replicant difficulty: basic timelimit: 300 @@ -27,9 +27,9 @@ isntall and manage your application is called the Admin Console. Under the hood, the Admin Console uses Helm to install and upgrade your application. You release your application as a Kubernetes applicance by releasing a Helm -chart and some additional configuration on the Replicated Vendor Portal. The -moost important file is the configuration for the Embedded Cluster, which can -very simple. All it requires is the version of the cluster to use. +chart and some additional configuration on the Replicated Platform. The moost +important file is the configuration for the Embedded Cluster, which can very +simple. All it requires is the version of the cluster to use. ``` apiVersion: embeddedcluster.replicated.com/v1beta1 @@ -51,14 +51,19 @@ this, it needs to know about your application, it's customers, and the files you're shipping to them. We talk about those files as a release. Every release is built around a Helm chart, and that's all it needs. If you've -completed the [Distributing Your Software with +completed the [Distributing Your Application with Replicated](https://play.instruqt.com/replicated/tracks/distributing-with-replicated) lab, you built a release around a Helm chart and installed it using Helm tools. -In this lab, we'll add the cluster configuration and a few other files to the -release to enable the appliance experience. +To use other installation methods supported by the Reoplicated Platform, like +the Kubernetes appliance model we're working on, you supplement the Helm chart +with configuration files like the one we saw above. -Your Initial Appliance -====================== +We need a minimum of two configuration files: the Embedded Cluster +configuration and a file that describes which Helm chart to install. We'll put +those in a directroy with the Helm chart and create a release from those files. + +Our Initial Appliance +===================== Let's create a simple Kubernetes appliance for Slackernews and release it with the Platform. We're going to add our Helm chart and two configuration files to @@ -84,8 +89,7 @@ lab when we set up the configuration screen for our application. Go to the "Release Editor" tab to add a file to your release. -![Creating a manifest file describing your Helm -chart](../assets/creating-the-helmchart-object.png) +![Creating a manifest file describing your Helm chart](../assets/creating-the-helmchart-object.png) The editor may not open your new file automatically. If it doesn't, click on it to open it. Add the following content to the file. Note that it looks like a @@ -117,10 +121,10 @@ Slackernews, we have only a single chart. ### Including the Embedded Cluster -We showed a simple Embedded Cluster configuration earlier in the lab. We're -going to use that basic configuration for Slackernews. Create another file in -the `release` folder named `embedded-cluster.yaml` and copy the contents of the -configuration into it. +We showed a simple Embedded Cluster configuration earlier in the lab. Let's use +that basic configuration for Slackernews. Create another file in the `release` +folder named `embedded-cluster.yaml` and copy the contents of the configuration +into it. ``` apiVersion: embeddedcluster.replicated.com/v1beta1 @@ -129,5 +133,70 @@ spec: version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="node" ]] ``` -Releasing Your Appliance +Releasing the Appliance ======================== + +With the three files we have, we can now release Slackernwes Kubernetes +appliance. We're going to use the `replicated` command-line tool for to create +the release. The first thing we'll do is set some environment variables to let +the command know who we are what application we're working with. Use the +"Shell" tab to set these variables: + +``` +export REPLICATED_API_TOKEN="[[ Instruqt-Var key="REPLICATED_API_TOKEN" hostname="shell" ]]" +export REPLICATED_APP="[[ Instruqt-Var key="REPLICATED_APP" hostname="shell" ]]" +``` + +We create a new release with the command `release create` subcommand for +`replicated`. If you've completed some of our other labs you may notice a +difference here, we're using a flag `--yaml-dir` instead of `--chart`. That's +because this release requires the additional configuration files we've created. + +``` +replicated release create --promote Unstable --yaml-dir ./release --version 0.6.0 \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" \ +``` + +This creates a release for version `0.6.0` of your Slackernews appliance and +publishes it to a release channel named `Unstable`. Release channels are used +by the Replicated Platform to assure customers get access to the release you +intend for them to get. The [Distributing Your Application with Replicated](https://play.instruqt.com/replicated/tracks/distributing-with-replicated) lab explains them in more detail. + +There are three default release channels: `Unstable` for internal builds, +`Beta` for your beta programs, and `Stable` for generally available releases. +We're going to use the `release promote` subcommand to make sure our release is +available on all three of them. + +``` +replicated release promote 6 Beta --version 0.6.0 \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" +``` + +and then + +``` +replicated release promote 6 Stable --version 0.6.0 \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" +``` + +You can see the that your release is on all three channels by listing your +available channels by running + +``` +replicated channel ls +``` + +which will show the current release and version on each channel. + +``` +ID NAME RELEASE VERSION +2gWopn8RA2fQyMEXSoO0WdtwxX3 Stable 6 0.6.0 +2gWopkEwUauoDmR2FaU4SMuL9wz Beta 6 0.6.0 +2gWopmvSXKiRRCDUXkAfP2p2Pcv Unstable 6 0.6.0 +2gWotHQsBB4bR5duhVhpQIAYWKs LTS +``` + +You'll notice there's an additional channel that doesn't have your release on +it. That's an example of an additional channel you might want to add for +"long-term support" releases, since some customers want to upgrade more slowly +and get longer support guarantees. diff --git a/instruqt/delivering-as-an-appliance/assets/creating-the-helmchart-object.png b/instruqt/delivering-as-an-appliance/assets/creating-the-helmchart-object.png new file mode 100644 index 0000000000000000000000000000000000000000..a0bf36eb1e6d27ff3cf5f9ce7a6c941894cabfb8 GIT binary patch literal 385431 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

({Sw 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%0DlJv%&Py%%x^{?RDW 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 IJ8|W|02Q?5qyPW_ literal 0 HcmV?d00001 diff --git a/instruqt/delivering-as-an-appliance/config.yml b/instruqt/delivering-as-an-appliance/config.yml index e8ada4445..fe3ada433 100644 --- a/instruqt/delivering-as-an-appliance/config.yml +++ b/instruqt/delivering-as-an-appliance/config.yml @@ -1,4 +1,5 @@ version: "3" +containers: - name: shell image: gcr.io/kots-field-labs/shell:main shell: tmux new-session -A -s shell su - replicant diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index 71efd879b..a2286ef74 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -41,4 +41,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "15952009531457506693" +checksum: "9512029535600995694" diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster b/instruqt/delivering-as-an-appliance/track_scripts/setup-node similarity index 71% rename from instruqt/delivering-as-an-appliance/track_scripts/setup-cluster rename to instruqt/delivering-as-an-appliance/track_scripts/setup-node index c7f75a00f..a24a3ab0f 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-cluster +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-node @@ -17,15 +17,7 @@ while ! ssh shell true; do sleep 1 done -ssh shell "mkdir /home/replicant/.kube" - -while ! [[ -f /etc/rancher/k3s/k3s.yaml ]]; do - echo "Waiting for Rancher kubernetes configuration to be available..." - sleep 1 -done - # use our shared libary in setup scripts curl -s -o /etc/profile.d/header.sh https://raw.githubusercontent.com/replicatedhq/kots-field-labs/main/libs/header.sh source /etc/profile.d/header.sh -scp /etc/rancher/k3s/k3s.yaml shell:/home/replicant/.kube/config From 6660408c3ebb684bdf90807c2dfc3367ae4e46e4 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Thu, 16 May 2024 10:27:13 -0400 Subject: [PATCH 038/162] Revises first challenge based on walkthrough --- .../01-specifying-the-cluster/assignment.md | 42 ++++++++++++------- .../01-specifying-the-cluster/check-shell | 12 ++++-- instruqt/delivering-as-an-appliance/track.yml | 2 +- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md index afbf7727c..daf1d2d10 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/assignment.md @@ -35,13 +35,13 @@ simple. All it requires is the version of the cluster to use. apiVersion: embeddedcluster.replicated.com/v1beta1 kind: Config spec: - version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="node" ]] + version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="shell" ]] ``` That specification lets the Replicated Vendor Portal know which version of -Kubernetes to embed. There are [more options for the configuration] -(https://docs.replicated.com/reference/embedded-config), but that's all you -need to get started. +Kubernetes to embed. There are [more options for the +configuration](https://docs.replicated.com/reference/embedded-config), but +that's all you need to get started. The Replicated Release ====================== @@ -70,16 +70,28 @@ the Platform. We're going to add our Helm chart and two configuration files to the `release` directory. These are the bare minimum set of files we need to create the appliance. +### Bumping the Chart Version + +Strictly speaking, we don't have to bump the version of our Helm chart since we +haven't changed it. It's a good practice to increment it, though, since we want +to have consistent versions between the Helm release and the Replicated +release. That way, regardless of the install mechanism your uses choose the +versions will be consistent. + +This lab uses the application [Slackernews](https://slackernews.io) and the +Helm sources for it are in the `slackernews` directory. You can open +`slackernews/Chart.yaml` in the "Release Editor" tab and update the `version`. + +![Updating the version of the Helm chart to 0.6.0](../assets/updating-the-chart-version.png) + ### Adding a Helm Chart to a Release To prepare the release, we first need to make sure our Helm chart is configured -as part of it. This lab uses the application -[Slackernews](https://slackernews.io) and the Helm sources for it are in the -`slackernews` directory. Let's package the chart and include it in the +as part of it. Let's package the chart and include it in the `release` directory, where we'll also add the additional files we need. ``` -helm package -u slackernews -d release --version 0.6.0 +helm package -u slackernews -d release ``` We're then going to add a file that lets the Admin Console know about the Helm @@ -130,7 +142,7 @@ into it. apiVersion: embeddedcluster.replicated.com/v1beta1 kind: Config spec: - version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="node" ]] + version: [[ Instruqt-Var key="EMBEDDED_CLUSTER_VERSION" hostname="shell" ]] ``` Releasing the Appliance @@ -154,7 +166,7 @@ because this release requires the additional configuration files we've created. ``` replicated release create --promote Unstable --yaml-dir ./release --version 0.6.0 \ - --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" \ + --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" ``` This creates a release for version `0.6.0` of your Slackernews appliance and @@ -168,14 +180,14 @@ We're going to use the `release promote` subcommand to make sure our release is available on all three of them. ``` -replicated release promote 6 Beta --version 0.6.0 \ +replicated release promote 7 Beta --version 0.6.0 \ --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" ``` and then ``` -replicated release promote 6 Stable --version 0.6.0 \ +replicated release promote 7 Stable --version 0.6.0 \ --release-notes "Adds an embedded cluster configuration to facilitate an appliance experience" ``` @@ -190,9 +202,9 @@ which will show the current release and version on each channel. ``` ID NAME RELEASE VERSION -2gWopn8RA2fQyMEXSoO0WdtwxX3 Stable 6 0.6.0 -2gWopkEwUauoDmR2FaU4SMuL9wz Beta 6 0.6.0 -2gWopmvSXKiRRCDUXkAfP2p2Pcv Unstable 6 0.6.0 +2gWopn8RA2fQyMEXSoO0WdtwxX3 Stable 7 0.6.0 +2gWopkEwUauoDmR2FaU4SMuL9wz Beta 7 0.6.0 +2gWopmvSXKiRRCDUXkAfP2p2Pcv Unstable 7 0.6.0 2gWotHQsBB4bR5duhVhpQIAYWKs LTS ``` diff --git a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell index 4cbf0e2f4..651974f00 100755 --- a/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell +++ b/instruqt/delivering-as-an-appliance/01-specifying-the-cluster/check-shell @@ -12,9 +12,9 @@ api_token=${REPLICATED_API_TOKEN} result=0 -# check that the embedded cluster and Helm configs are part of the release -if [[ ! -f ${HOME_DIR}/release/embedded-cluster.yaml ]]; then - fail-message 'Please add the Embedded Cluster configuration to the Slackernews release' +# check the files in the release +if [[ ! -f ${HOME_DIR}/release/slackernews-0.6.0.tgz ]]; then + fail-message 'Please add the Slackenrews Helm chart to the release' let "result = result + 1" fi @@ -23,6 +23,12 @@ if [[ ! -f ${HOME_DIR}/release/slackernews-chart.yaml ]]; then let "result = result + 1" fi +# check that the embedded cluster and Helm configs are part of the release +if [[ ! -f ${HOME_DIR}/release/embedded-cluster.yaml ]]; then + fail-message 'Please add the Embedded Cluster configuration to the Slackernews release' + let "result = result + 1" +fi + # check that the Helm chart has been packaged into the release directory if [[ ! -f ${HOME_DIR}/release/slackernews-0.6.0.tgz ]]; then fail-message 'Please be sure to build the Helm chart into the release directory:' diff --git a/instruqt/delivering-as-an-appliance/track.yml b/instruqt/delivering-as-an-appliance/track.yml index a2286ef74..8b768d1bd 100755 --- a/instruqt/delivering-as-an-appliance/track.yml +++ b/instruqt/delivering-as-an-appliance/track.yml @@ -41,4 +41,4 @@ lab_config: position: right feedback_recap_enabled: true loadingMessages: true -checksum: "9512029535600995694" +checksum: "8856887976905542915" From 57c2503744ca0709272dac445a94b2afad8596de Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Thu, 16 May 2024 10:27:31 -0400 Subject: [PATCH 039/162] Assures activities from "Protecting..." are completed --- .../track_scripts/setup-shell | 84 ++++++++++++++++++- 1 file changed, 82 insertions(+), 2 deletions(-) diff --git a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell index 9a130f708..7ce3203e9 100755 --- a/instruqt/delivering-as-an-appliance/track_scripts/setup-shell +++ b/instruqt/delivering-as-an-appliance/track_scripts/setup-shell @@ -453,10 +453,90 @@ customer_id=$(replicated customer create --name "Nitflex" --email ${customer_ema # make sure the customer has a trial license updated_customer=$(curl --header 'Accept: application/json' --header "Authorization: ${api_token}" "https://api.replicated.com/vendor/v3/app/${app_id}/customer/${customer_id}" | \ jq -c --arg appId "${app_id}" '.customer | {"app_id": $appId, "name": .name, "email": .email, "channel_id": .channels[0].id, "expires_at": .expiresAt, "type": "trial", "is_airgap_enabled": .airgap, "is_gitops_supported": .isGitopsSupported, "is_identity_service_supported": .isIdentityServiceSupported, "is_geoaxis_supported": .isGeoaxisSupported, "is_snapshot_supported": .isSnapshotSupported, "is_support_bundle_upload_enabled": .isSupportBundleUploadEnabled, "entitlementValues":[]}') - # + +# this section is just to match the deployment history from the "Protecting..." lab +yq -i '.version = "0.5.0"' ${HOME_DIR}/slackernews/Chart.yaml +helm package ${HOME_DIR}/slackernews --destination ${HOME_DIR}/release +chown -R replicant ${HOME_DIR}/slackernews ${HOME_DIR}/release + +replicated release create --promote Unstable --chart ${HOME_DIR}/release/slackernews-0.5.0.tgz --version 0.5.0 \ + --release-notes "Uses the Replicated proxy registry to pull images" \ + --app ${app_slug} --token ${api_token} + +# get the sequence number for the release to promote +release_sequence=$(curl --header "Accept: application/json" --header "Authorization: ${api_token}" https://api.replicated.com/vendor/v3/apps | jq -r '.apps[0].channels[] | select( .name == "Unstable" ) | .releaseSequence') + +# promote to the `Beta` channel +replicated release promote ${release_sequence} Beta --version 0.5.0 \ + --release-notes "Uses the Replicated proxy registry to pull images" \ + --app ${app_slug} --token ${api_token} + + +# promote to the `Stable` channel +replicated release promote ${release_sequence} Stable --version 0.5.0 \ + --release-notes "Uses the Replicated proxy registry to pull images" \ + --app ${app_slug} --token ${api_token} + +rm ${HOME_DIR}/release/slackernews-0.5.0.tgz + # configure the chart for trial vs. production licenses and # release it to all three channels -# add the member count license entitlement +# add license check that we can re-use in multiple templates if needed +cat <