Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/prompts/new-section.prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ An HPA (Horizontal Pod Autoscaler) automatically scales resources like deploymen

1. Using Docker Desktop, install [Metrics Server](https://github.com/kubernetes-sigs/metrics-server#deployment).

2. Clone the [bootcamp repository](https://github.com/liatrio/devops-bootcamp.git) if you haven't already and apply the deployment and service for a cpu-intensive PHP image using the example from `examples/ch8/hpas/cpu-intense-deploy-svc.yaml`.
2. Clone the [bootcamp repository](https://github.com/liatrio/engineering-bootcamp.git) if you haven't already and apply the deployment and service for a cpu-intensive PHP image using the example from `examples/ch8/hpas/cpu-intense-deploy-svc.yaml`.

3. Create an HPA with the `kubectl autoscale deployment --help` command that will scale the PHP deployment between 1 and 5 pods when the average CPU usage across pods in the deployment exceeds 65%. The deployment will upgrade its replica set accordingly. It will take a few minutes to come up.

Expand Down
4 changes: 2 additions & 2 deletions catalog-info.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: devops-bootcamp
name: engineering-bootcamp
annotations:
github.com/project-slug: liatrio/devops-bootcamp
github.com/project-slug: liatrio/engineering-bootcamp
spec:
type: documentation
lifecycle: production
Expand Down
6 changes: 3 additions & 3 deletions docs/11-application-development/11.2.1-solid-principles.md
Original file line number Diff line number Diff line change
Expand Up @@ -832,7 +832,7 @@ Test your understanding of the SOLID principles:

This exercise provides a complete Python project with a monolithic `ReportGenerator` class that violates SRP by handling data validation, statistics calculation, HTML formatting, and file writing all in one class.

**Project Location**: [examples/ch11/solid-exercises/exercise-1-srp/](https://github.com/liatrio/devops-bootcamp/tree/master/examples/ch11/solid-exercises/exercise-1-srp/)
**Project Location**: [examples/ch11/solid-exercises/exercise-1-srp/](https://github.com/liatrio/engineering-bootcamp/tree/master/examples/ch11/solid-exercises/exercise-1-srp/)

1. Refactor the `ReportGenerator` class into multiple classes, each with a single responsibility.
2. Ensure that the behavior-based tests pass after refactoring.
Expand All @@ -842,7 +842,7 @@ This exercise provides a complete Python project with a monolithic `ReportGenera

This exercise provides a complete Python project with a `DiscountCalculator` class that violates OCP by using if/elif chains to handle different customer types. Each new customer type requires modifying the existing class.

**Project Location**: [examples/ch11/solid-exercises/exercise-2-ocp/](https://github.com/liatrio/devops-bootcamp/tree/master/examples/ch11/solid-exercises/exercise-2-ocp/)
**Project Location**: [examples/ch11/solid-exercises/exercise-2-ocp/](https://github.com/liatrio/engineering-bootcamp/tree/master/examples/ch11/solid-exercises/exercise-2-ocp/)

1) Refactor the `DiscountCalculator` to use polymorphism so new customer types can be added without modifying existing code.
2) Ensure that the behavior-based tests pass after refactoring.
Expand All @@ -852,7 +852,7 @@ This exercise provides a complete Python project with a `DiscountCalculator` cla

This exercise provides a complete Python project with a `NotificationService` class that violates DIP by directly instantiating its dependencies (`SMTPClient`, `TwilioClient`). This makes the class hard to test and impossible to configure with different implementations.

**Project Location**: [examples/ch11/solid-exercises/exercise-3-dip/](https://github.com/liatrio/devops-bootcamp/tree/master/examples/ch11/solid-exercises/exercise-3-dip/)
**Project Location**: [examples/ch11/solid-exercises/exercise-3-dip/](https://github.com/liatrio/engineering-bootcamp/tree/master/examples/ch11/solid-exercises/exercise-3-dip/)

1. Refactor the `NotificationService` to use dependency injection and depend on abstractions (e.g., `NotificationSender` protocol).
2. Create `SMTPNotificationSender` and `TwilioNotificationSender` classes that implement the `NotificationSender` protocol.
Expand Down
2 changes: 1 addition & 1 deletion docs/3-AI-Engineering/3.3.1-agentic-best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ The first stage of Spec-Driven Development transforms a high-level idea into a c

Use a conversational LLM to iteratively refine your idea through a question-based dialogue. The AI should ask one question at a time, building on your previous answers to extract every relevant detail.

**Example Spec Generation Prompt** (adapted for DevOps Bootcamp):
**Example Spec Generation Prompt** (adapted for Engineering Bootcamp):

```text
I need to create a specification for a DevOps automation project. Ask me one question at a time to develop a thorough, step-by-step spec.
Expand Down
2 changes: 1 addition & 1 deletion docs/5-cloud-computing/5.2.6-ecs.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ To get an understanding on how containers need to communicate with one another,

6. Configure your cluster to run the application. Refer to the `docker-compose.yaml` files in `dks-ui` and `dks-api` to get a sense for what each service needs.

?> I recommend standing up your microservices in the following order validating each piece as you go: dks-db, dks-api, then dks-ui. See this example [task definition for dks-db](https://github.com/liatrio/devops-bootcamp/blob/master/examples/ch5/aws/ecs/dks-db-task-definition.json) and the [db init script](https://github.com/liatrio/dks-api/blob/6ee4e6aa87b62e4387d613cbd442863b60d07657/db-resources/0_0_db.sh).
?> I recommend standing up your microservices in the following order validating each piece as you go: dks-db, dks-api, then dks-ui. See this example [task definition for dks-db](https://github.com/liatrio/engineering-bootcamp/blob/master/examples/ch5/aws/ecs/dks-db-task-definition.json) and the [db init script](https://github.com/liatrio/dks-api/blob/6ee4e6aa87b62e4387d613cbd442863b60d07657/db-resources/0_0_db.sh).

?> To interconnect services look into [AWS Service Discovery](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/interconnecting-services.html). Managing Service Discovery Namespaces and Services is simpler via the awscli. See the [following for reference](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html#create-service-discovery-namespace). The Service Discovery Namespace name and the Service Discovery Service name will control the resulting DNS record. This will also dictate what you set for DB_HOST environment variable for the dks-api.

Expand Down
8 changes: 4 additions & 4 deletions docs/6-software-development-practices/6.5.1-unit-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ func TestIndexGitHubRepositoriesByOrg_basic(t *testing.T) {
repos := []*GitHubRepository{
{
Organization: "liatrio",
Repository: "devops-bootcamp",
Url: "https://github.com/liatrio/devops-bootcamp",
Repository: "engineering-bootcamp",
Url: "https://github.com/liatrio/engineering-bootcamp",
License: "MIT",
},
}
Expand All @@ -113,8 +113,8 @@ func TestIndexGitHubRepositoriesByOrg_multiple(t *testing.T) {
repos := []*GitHubRepository{
{
Organization: "liatrio",
Repository: "devops-bootcamp",
Url: "https://github.com/liatrio/devops-bootcamp",
Repository: "engineering-bootcamp",
Url: "https://github.com/liatrio/engineering-bootcamp",
License: "MIT",
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ We will use Selenium and Python to run a couple functional tests on the bootcamp
?> If you are getting an error when trying to install the Selenium Python bindings, look into [installing the packages in a virtual environment](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/).

3. Use the starter code provided to test
* The link in the bottom right corner of the homepage takes you to [the bootcamp introduction](https://devops-bootcamp.liatr.io/#/1-introduction/1.0-overview)
* The link in the bottom right corner of the homepage takes you to [the bootcamp introduction](https://engineering-bootcamp.liatr.io/#/1-introduction/1.0-overview)
* The sidebar toggle button properly hides the sidebar

?> Note: the starter code has Firefox selected as the driver. Make sure to either change it or install geckodriver.
Expand Down
6 changes: 3 additions & 3 deletions docs/6-software-development-practices/6.5.4-code-coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ You will be using [Jest](https://jestjs.io/) to test the code coverage in the pr

The following code is a series of functions written in Javascript (simple.js):

[sampleCode](https://raw.githubusercontent.com/liatrio/devops-bootcamp/a6ac8f1c179725b8a889b9cdb47e3cc6baba05e1/examples/codeQuality/jest-simple/simple.js ':include :type=code javascript')
[sampleCode](https://raw.githubusercontent.com/liatrio/engineering-bootcamp/a6ac8f1c179725b8a889b9cdb47e3cc6baba05e1/examples/codeQuality/jest-simple/simple.js ':include :type=code javascript')

The following code contains the unit tests that will be testing the Javascript functions (simple.test.js):

[testCode](https://raw.githubusercontent.com/liatrio/devops-bootcamp/a6ac8f1c179725b8a889b9cdb47e3cc6baba05e1/examples/codeQuality/jest-simple/simple.test.js ':include :type=code javascript')
[testCode](https://raw.githubusercontent.com/liatrio/engineering-bootcamp/a6ac8f1c179725b8a889b9cdb47e3cc6baba05e1/examples/codeQuality/jest-simple/simple.test.js ':include :type=code javascript')

Please perform the following:

Expand All @@ -45,7 +45,7 @@ Try redoing the previous steps, but install the files as a developer dependency.

The provided Javascript package.json file will have everything you need in order to pass the Jest tests; however, you will need to add to the file in order to get Jest to check your coverage.

[package](https://raw.githubusercontent.com/liatrio/devops-bootcamp/a6ac8f1c179725b8a889b9cdb47e3cc6baba05e1/examples/codeQuality/jest-simple/package.json ':include :type=code json')
[package](https://raw.githubusercontent.com/liatrio/engineering-bootcamp/a6ac8f1c179725b8a889b9cdb47e3cc6baba05e1/examples/codeQuality/jest-simple/package.json ':include :type=code json')

Inside your package.json file under the “scripts” section, add a section called “coverage” and use the following command

Expand Down
2 changes: 1 addition & 1 deletion docs/7-release-management/7.2.2-maven-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ This section is designed to give you an introduction into how Maven interacts wi

## Tips

Use containerization for the following exercise, see [examples](https://github.com/liatrio/devops-bootcamp/tree/master/examples/ch7/Dev-Containers).
Use containerization for the following exercise, see [examples](https://github.com/liatrio/engineering-bootcamp/tree/master/examples/ch7/Dev-Containers).

1. Fork the following repos:
- [spring-petclinic](https://github.com/liatrio/spring-petclinic)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ Most of the time, you'll be able to find a Terraform provider for the platform y

?> Note that in our API, we can only directly update a resource, and not the resources within it. (eg. You can't update an engineer from its parent dev resource.). Additionally, in our API, when we delete a parent resource, we do not also delete its children.

Since this is a custom API the Ferrets have written, we will also need to make our own custom Terraform provider if we want to use Terraform to manage our resources. Knowing the structure of this API is crucial when attempting to write the provider. Before diving into creating the provider for this API, take some time looking over the [API ReadMe](https://github.com/liatrio/devops-bootcamp/tree/master/examples/ch8/devops-api), as well as the accompanying scripts. Try to run the API locally and add some resources until you think you have a good understanding of how it works.
Since this is a custom API the Ferrets have written, we will also need to make our own custom Terraform provider if we want to use Terraform to manage our resources. Knowing the structure of this API is crucial when attempting to write the provider. Before diving into creating the provider for this API, take some time looking over the [API ReadMe](https://github.com/liatrio/engineering-bootcamp/tree/master/examples/ch8/devops-api), as well as the accompanying scripts. Try to run the API locally and add some resources until you think you have a good understanding of how it works.

<div class="quizdown">
<div id="chapter-8/8.1.4/api-checkpoint.js" ></div>
Expand All @@ -133,13 +133,13 @@ Creating a Terraform provider is hard. To help mitigate some of the difficulty,
1. Create your own repo containing the Hashicorp provided boilerplate code from their template.
- To do this, navigate to the [terraform-provider-scaffolding](https://github.com/hashicorp/terraform-provider-scaffolding-framework) repo, click "Use this template", "Create a new repository", and fill in the required information (owner and repo name). If you're working as a group on this, make sure to also add each group member as a collaborator.

2. Clone your repo. Navigate to `main.go` and change the provider address from `registry.terraform.io/hashicorp/scaffolding` to `liatr.io/terraform/devops-bootcamp`.
2. Clone your repo. Navigate to `main.go` and change the provider address from `registry.terraform.io/hashicorp/scaffolding` to `liatr.io/terraform/engineering-bootcamp`.

<div class="quizdown">
<div id="chapter-8/8.1.4/provider-name-checkpoint.js" ></div>
</div>

3. Delete the provided `GNUmakefile` and replace it with [this updated Makefile](https://github.com/liatrio/devops-bootcamp/blob/master/examples/ch8/provider-setup/Makefile) and [helper script](https://github.com/liatrio/devops-bootcamp/blob/master/examples/ch8/provider-setup/.make-helper.sh). Run `make init` to initialize your repo.
3. Delete the provided `GNUmakefile` and replace it with [this updated Makefile](https://github.com/liatrio/engineering-bootcamp/blob/master/examples/ch8/provider-setup/Makefile) and [helper script](https://github.com/liatrio/engineering-bootcamp/blob/master/examples/ch8/provider-setup/.make-helper.sh). Run `make init` to initialize your repo.

4. Ensure that your provider executes correctly by running `go run main.go`. You should see the following output:
```bash
Expand All @@ -153,13 +153,13 @@ Creating a Terraform provider is hard. To help mitigate some of the difficulty,
```go
terraform {
required_providers {
devops-bootcamp = {
source = "liatr.io/terraform/devops-bootcamp"
engineering-bootcamp = {
source = "liatr.io/terraform/engineering-bootcamp"
}
}
}

provider "devops-bootcamp" {
provider "engineering-bootcamp" {
# example configuration here
}
```
Expand Down
2 changes: 1 addition & 1 deletion docs/9-kubernetes-container-orchestration/9.2-volumes.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ The high level lifecycle for PVs and PVCs can be broken into a few parts. We fir
In this exercise we will create a simple PV and PVC.

1. Stand up a local Kubernetes cluster with a tool like `k3d` or `KinD`.
2. Clone the [bootcamp repository](https://github.com/liatrio/devops-bootcamp.git) if you haven't already and apply the simple PV definition yaml example from `examples/ch9/volumes/pv-definition.yaml`
2. Clone the [bootcamp repository](https://github.com/liatrio/engineering-bootcamp.git) if you haven't already and apply the simple PV definition yaml example from `examples/ch9/volumes/pv-definition.yaml`

!> *This PV utilizes a `hostPath` field, which should not be used in production as it poses security risks. It is acceptable for demonstration purposes.*

Expand Down
2 changes: 1 addition & 1 deletion docs/9-kubernetes-container-orchestration/9.5-hpas.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ An HPA (Horizontal Pod Autoscaler) automatically scales resources like deploymen

1. Using Docker Desktop, install [Metrics Server](https://github.com/kubernetes-sigs/metrics-server#deployment).

2. Clone the [bootcamp repository](https://github.com/liatrio/devops-bootcamp.git) if you haven't already and apply the deployment and service for a cpu-intensive PHP image using the example from `examples/ch9/hpas/cpu-intense-deploy-svc.yaml`.
2. Clone the [bootcamp repository](https://github.com/liatrio/engineering-bootcamp.git) if you haven't already and apply the deployment and service for a cpu-intensive PHP image using the example from `examples/ch9/hpas/cpu-intense-deploy-svc.yaml`.

3. Create an HPA with the `kubectl autoscale deployment --help` command that will scale the PHP deployment between 1 and 5 pods when the average CPU usage across pods in the deployment exceeds 65%. The deployment will upgrade its replica set accordingly. It will take a few minutes to come up.

Expand Down
2 changes: 1 addition & 1 deletion docs/9-kubernetes-container-orchestration/9.7-webhooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Mutating and validating webhooks are used in conjunction to enforce policy. The
This project is for setting up a basic Kubernetes validating Admission
Controller using python.

1. Clone the [bootcamp repository](https://github.com/liatrio/devops-bootcamp.git) if you haven't already and navigate to the `examples/ch9/webhooks` folder for this exercise's files.
1. Clone the [bootcamp repository](https://github.com/liatrio/engineering-bootcamp.git) if you haven't already and navigate to the `examples/ch9/webhooks` folder for this exercise's files.

2. Deploy a KIND cluster with Admission Controller enabled

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ ___

1. In your k3d cluster, create a namespace to use for this exercise, i.e. `kubectl create namespace my-namespae`.

2. Clone the [bootcamp repository](https://github.com/liatrio/devops-bootcamp) if you haven't already, and navigate to the `examples/ch8/controllers` folder, where you will find a skeleton file for a custom controller.
2. Clone the [bootcamp repository](https://github.com/liatrio/engineering-bootcamp) if you haven't already, and navigate to the `examples/ch8/controllers` folder, where you will find a skeleton file for a custom controller.

3. Create a directory `pod-controller-module`.

Expand Down
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1746,8 +1746,8 @@ Use Docker to build and serve the content, but remember to rebuild the Docker im

#### Build and Run Docker Container

1. Execute `docker build . -t devops-bootcamp` from the project's root directory to generate a container image
2. Run `docker run -d -p 3000:3000 --name devops-bootcamp devops-bootcamp` to run a detached Docker container
1. Execute `docker build . -t engineering-bootcamp` from the project's root directory to generate a container image
2. Run `docker run -d -p 3000:3000 --name engineering-bootcamp engineering-bootcamp` to run a detached Docker container
3. Open <http://localhost:3000>

#### Docker Compose
Expand Down
2 changes: 1 addition & 1 deletion examples/ch11/data-patterns/active-record/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/liatrio/devops-bootcamp/examples/ch11/data-patterns/active-record
module github.com/liatrio/engineering-bootcamp/examples/ch11/data-patterns/active-record

go 1.21

Expand Down
2 changes: 1 addition & 1 deletion examples/ch11/data-patterns/concurrency/optimistic/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/liatrio/devops-bootcamp/examples/ch11/data-patterns/concurrency/optimistic
module github.com/liatrio/engineering-bootcamp/examples/ch11/data-patterns/concurrency/optimistic

go 1.21

Expand Down
2 changes: 1 addition & 1 deletion examples/ch11/data-patterns/concurrency/pessimistic/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/liatrio/devops-bootcamp/examples/ch11/data-patterns/concurrency/pessimistic
module github.com/liatrio/engineering-bootcamp/examples/ch11/data-patterns/concurrency/pessimistic

go 1.21

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/liatrio/devops-bootcamp/examples/ch11/data-patterns/repository-exercise-starter
module github.com/liatrio/engineering-bootcamp/examples/ch11/data-patterns/repository-exercise-starter

go 1.21

Expand Down
2 changes: 1 addition & 1 deletion examples/ch11/data-patterns/repository/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/liatrio/devops-bootcamp/examples/ch11/data-patterns/repository
module github.com/liatrio/engineering-bootcamp/examples/ch11/data-patterns/repository

go 1.21

Expand Down
2 changes: 1 addition & 1 deletion examples/ch7/helm/DKS/templates/NOTES.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
DevOps Bootcamp: Anything in this notes file will be displayed when installing this Helm chart
Engineering Bootcamp: Anything in this notes file will be displayed when installing this Helm chart

1. Once you have all three pods running successfully you will need to run the following command:
kubectl port-forward svc/backend 8080:8080
Expand Down
2 changes: 1 addition & 1 deletion examples/ch8/devops-api/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/liatrio/devops-bootcamp/examples/ch7/devops-resources"
"github.com/liatrio/engineering-bootcamp/examples/ch7/devops-resources"
)

func newDevOps(newDevOps devops_resource.DevOps) (*devops_resource.DevOps, error) {
Expand Down
2 changes: 1 addition & 1 deletion examples/ch8/devops-api/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/liatrio/devops-bootcamp/examples/ch7/devops-resources"
"github.com/liatrio/engineering-bootcamp/examples/ch7/devops-resources"
)

func removeEngineerElement(engineers []*devops_resource.Engineer, engineer_id string) ([]*devops_resource.Engineer, error) {
Expand Down
Loading