DevOps component of the Holberton school core curriculum, which covers shell scripts, networking, web stack architecture and debugging.
- Interpreter conditions:
- Ubuntu 14.04 LTS
- First line of executable scripts will be
#!/bin/bash
- Second line of all scripts should be a comment explaining its purpose
- Linter compliance (after project 0x04)
- ShellCheck 0.3.3 (
shellcheck 0.3.3-1~ubuntu14.04.1
)
- ShellCheck 0.3.3 (
- Interpreter conditions:
- Ubuntu 14.04 LTS
- python3 (version 3.4.3)
- First line of executable scripts will be
#!/usr/bin/python3
- Compliance with linter:
pep8
(version 1.7.*) (now known aspycodestyle
)
- Docstrings are expected to follow the Google style guide:
- Per module (
python3 -c 'print(__import__("my_module").__doc__)'
) - Per class (
python3 -c 'print(__import__("my_module").MyClass.__doc__)'
) - Per function
- both inside a class (
python3 -c 'print(__import__("my_module").MyClass.my_function.__doc__)'
) - and outside a class (
python3 -c 'print(__import__("my_module").my_function.__doc__)'
)
- both inside a class (
- Per module (
- Test scripts will typically not be in same directory as the task solutions, use
export PYTHONPATH='.'
before running test scripts from project directory to allow includes - Unit tests will be required on some projects:
- using the unittest module
- located in a
tests/
folder, with a file structure mimicing that of your project, but with atest_
prefix added to all file/directory names - tests should be capable of being run with
python3 -m unittest discover tests
, or individually per file withpython3 -m unittest <test file>
- Interpreter conditions:
- Ubuntu 14.04 LTS
- Puppet 3.4.3
- Puppet manifests must begin with a comment (
#
) explaining their intended use - Puppet manifests must end with the file extension
.pp
- Compliance with linter:
puppet-lint
version 2.1.1- to install
puppet-lint
:
- to install
$ apt-get install -y ruby
$ gem install puppet-lint -v 2.1.1
- Interpreter conditions:
- Ubuntu 14.04 LTS
- Ruby 1.9.3p484
- first line of all scripts should be exactly
#!/usr/bin/env ruby
- all regex patterns must be built for the Oniguruma library
Introduction to the Ubuntu Linux command line, and commonly used commands.
Introduction to users, groups and permissions in Ubuntu Linux, and the relevant commonly used commands.
Introducing Ubuntu Linux commands that are used in text manipulation and filtering; I/O redirection with special characters.
Introduction to shell variables and aliases, their expansion, variable arithmetic, init files like .bashrc
and /etc/profile
, and relevant Ubuntu Linux commmands.
Further exploration of Ubuntu Linux shell variable assignment and arithmetic; introduction of file test, control flow, and comparison operators.
Intrduction to processes and signals in Linux, and the relevant Ubuntu shell commmands.
Introduction to regular expressions, first in the context of Ruby scripts.
Introduction to networking basics: the OSI model, LAN/WAN, MAC and IP (IPv4/IPv6) addresses, and TCP versus UDP.
Further introduction to networking basics: localhost/127.0.0.1
, 0.0.0.0
, /etc/hosts
, and relevant Ubuntu Linux commands like ifconfig
, telnet
, and nc
.
Overview of web infrastructure basics: servers vs web servers, load balancers, firewalls, DNS record types, high availability clusters (active-active/active-passive,) and HTTPS. Drawing diagrams of the web stack built in previous projects in this track.
Introduction to configuration management, continuous integration/continuous deployment, and using Puppet.
Introduction to SSH basics: key pairs, authentication, and relevant Ubuntu Linux commands ssh
and ssh-keygen
.
Introduction to Nginx and futher exploration of processes, HTTP, and web servers. Creating scripts to automate setup of the servers which will host the AirBnB clone projects.
First of a series of projects that involve diagnosing and repairing a deliberately broken remote server/container.
Second of a series of projects that involve diagnosing and repairing a deliberately broken remote server/container.
Introduction to the use of load balancers to distribute traffic to redundant web servers.
Introduction to adding security to a web stack using HTTPS and SSL termination, in this case with HAProxy.
Practicing being able to describe the full web stack, in text and in diagrams.
Third of a series of projects that involve diagnosing and repairing a deliberately broken remote server/container.
Introduction to improving web stack security by adding firewalls, in this case ufw
.
Introduction to adding databases to a web stack, specifically pimary and replica MySQL instances to parallel web servers.
Determining when bash scripting is no longer appropriate, and instead using Python to create a REST API to serve both CSV and JSON.
Further practice querying APIs and parsing the JSON results.
Fourth of a series of projects that involve diagnosing and repairing a deliberately broken remote server/container.
Introduction to adding application and server monitoring to a web stack.
Practice in writing a proper report on the failure of a piece of software or web architecture.
Understanding the use of an application server versus a web server; adding an application server to a web stack using Gunicorn, Flask, and Nginx.
Fifth of a series of projects that involve diagnosing and repairing a deliberately broken remote server/container.
- Samuel Pomeroy - allelomorph