- Distributed Workflows
- Contributing to a Project
- Maintaining a Project
- Gitlab
- Account Setup and Configuration
- Contributing to a Project
- Maintaining a Project
- Managing an organization
- Gitlab Runners and Pipelines
- What is a golden image?
- Why Packer?
- Define Packer template
- Build Packer image
- What is a private cloud?
- Play with a Private Cloud solution (trainers will choose one of the following: OpenStack, OpenNebula, CloudStack, etc. depending on the preferences)
- Create a VirtualMachine using a golden image
- Why Terraform?
- Setting up Terraform
- Terraform concepts:
- Resources
- Providers
- Variables / Inputs
- Outputs
- Provisioners
- Modules
- State / backend
- CLI
- First Terraform file
- Project structure
- Terraform best practices
- Your first Terraform module
- Re-using Terraform modules
- Managing changes to Terraform modules
- CI/CD strategies for managing Terraform environments
- Why Docker?
- Proper Docker setup
- Your first containers
- Official images
- Building images interactively
- Building images with Dockerfiles
- CMD and ENTRYPOINT
- COPY and multistage builds
- Publishing to Docker Hub
- Docker networking
- Network drivers and basics
- Naming and inspecting
- Service discovery with DNS
- Legacy links
- Why Consul?
- Consul capabilities
- What is a KeyValue store
- Other functionalities(DNS, Services, Healthchecks, ACLs, etc.)
- How it integrates with other Hashicorp tools
- Setup
- Recommended hierarchy for Consul KV
- CLI
- Debugging Consul
- Consul-template
- What is a templating language
- Basics of Consul-template
- Best practices when writing templates
- What/why orchestrators?
- Why Nomad?
- Nomad vs Docker Swarm?
- Basic Nomad concepts:
- Job
- Group
- Task
- Resources
- Drivers
- Region
- Agents/Servers/Deployment
- Nomad CLI
- First nomad job file
- Services and health checks
- What is an allocation?
- Debugging nomad allocations
- Deployment strategies
- Why Vault?
- Vault vs other solutions?
- Backends
- Secrets
- What is a PKI
- Other functionalities
- Setup of Vault
- Vault CLI
- Best practices for integrating Vault with other applications
- Vault and Consul-template
At this point all of the participants should be able to run any of the following binaries locally: Packer, Terraform, Consul, Consul-Template, Nomad, Vault, Docker. The project should encompass a full blown cloud environment configured and orchestrated with the Hashicorp stack. Final project should have the following points covered:
- Packer images uploaded in a private cloud environment (for example OpenStack, OpenNebula, CloudStack etc)
- Infrastructure defined as code in a couple of git repos
- All the actions automated using Gitlab Pipelines
- VMs created with Terraform in the cloud environment
- A high-available cluster for Nomad, Consul and Vault
- Docker images deployed and orchestrated with Nomad
- Health checks for the docker images which are available in Consul
- Applications talking via SSL with certificates generated by consul-template from Vault which self-renew