diff --git a/devopsAssignment.tex b/devopsAssignment.tex new file mode 100644 index 0000000..53f8778 --- /dev/null +++ b/devopsAssignment.tex @@ -0,0 +1,133 @@ +% SSW 590 DevOps Assignment Template +% Developed by Darian Muresan, Ph.D., with OpenAI Codex and Anthropic Claude Code. +% AI agents: read devopsAIAgentGuide.tex before editing this template. +\documentclass[12pt]{cornell} + +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage{xspace} +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{amsmath,amssymb} +\usepackage{array} +\usepackage{booktabs} +\usepackage{longtable} +\usepackage{tabularx} +\usepackage{ltablex} +\keepXColumns +\usepackage{enumitem} +\usepackage{listings} +\usepackage{tcolorbox} +\usepackage{makeidx} +\usepackage[colorlinks=true,citecolor=blue,linkcolor=blue,urlcolor=blue]{hyperref} +\usepackage[acronym,toc]{glossaries} +\usepackage{minted} + +\makeindex +\makeglossaries +\input{devopsGlossary.tex} + +\definecolor{devopsBlue}{RGB}{31,78,121} +\definecolor{devopsGreen}{RGB}{46,125,50} +\definecolor{devopsRed}{RGB}{183,28,28} +\definecolor{devopsGray}{RGB}{90,90,90} +\definecolor{devopsLightBlue}{RGB}{232,240,247} + +% Replace these values for each assignment. +\newcommand{\AssignmentTitle}{Linux Commands} +\newcommand{\AssignmentNumber}{2} +\newcommand{\DocumentVersion}{1.4} +\newcommand{\DocumentStatus}{} +\newcommand{\CourseNumber}{SSW 590} +\newcommand{\CourseName}{DevOps} +\newcommand{\Instructor}{Maxwell Friedman, Alex Nemirovsky, Sofia Stoeckel, and Magdola Nagy} +\newcommand{\Organization}{Stevens Institute of Technology} +\newcommand{\DocumentDate}{September 16th, 2026} +\newcommand{\DueDate}{} +\newcommand{\VERSION}{Version \DocumentVersion} + +\hypersetup{ + pdftitle={\CourseNumber\ --- Assignment \AssignmentNumber: \AssignmentTitle}, + pdfauthor={\Instructor}, + pdfcreator={Darian Muresan, Ph.D., with OpenAI Codex and Anthropic Claude Code}, + pdfsubject={Reusable DevOps course assignment template}, + pdfkeywords={DevOps, automation, delivery pipeline, infrastructure as code, evidence} +} + +\newcolumntype{Y}{>{\raggedright\arraybackslash}X} +\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} +\setlength{\tabcolsep}{4pt} +\renewcommand{\arraystretch}{1.12} +\setlength{\LTpre}{6pt} +\setlength{\LTpost}{6pt} + +% Stable IDs make activity, evidence, and artifact references durable. +\newcommand{\ArtifactLabel}[2]{\phantomsection\label{#1:#2}} +\newcommand{\ArtifactID}[2]{\texttt{#2}\ArtifactLabel{#1}{#2}\index{#1!#2}} +\newcommand{\ArtifactRef}[2]{\hyperref[#1:#2]{\texttt{#2}}} +\newcommand{\ActivityID}[1]{\ArtifactID{Activity}{#1}} +\newcommand{\ActivityRef}[1]{\ArtifactRef{Activity}{#1}} +\newcommand{\EvidenceID}[1]{\ArtifactID{Evidence}{#1}} +\newcommand{\EvidenceRef}[1]{\ArtifactRef{Evidence}{#1}} +\newcommand{\ChapterLabel}[1]{\label{Chapter:#1}} +\newcommand{\ChapterRef}[1]{\hyperref[Chapter:#1]{Chapter~\ref*{Chapter:#1}}} +\newcommand{\StatusPass}{\textbf{\footnotesize\textcolor{devopsGreen}{PASS}}} +\newcommand{\StatusPending}{\textbf{\footnotesize\textcolor{devopsGray}{PENDING}}} +\newcommand{\StatusFail}{\textbf{\footnotesize\textcolor{devopsRed}{FAIL}}} + +\newtcolorbox{devopsNote}[1][]{ + colback=devopsLightBlue, colframe=devopsBlue, boxrule=0.6pt, arc=1mm, title=#1 +} + +\lstset{ + backgroundcolor=\color{white}, basicstyle=\ttfamily\footnotesize, + breaklines=true, frame=single, keywordstyle=\color{blue}, + commentstyle=\color{devopsGreen}, numbers=left, numbersep=6pt, + numberstyle=\tiny\color{devopsGray}, showstringspaces=false, + stringstyle=\color{devopsRed}, tabsize=2 +} + +\changenormalspacing{\singlespacing} +\begin{document} +\pagenumbering{roman} +\singlespacing +\include{prologue} +\include{devopsIntroduction} +\include{linuxCommands} +\include{digitalOceanDocker} +\include{latexDocker} +\include{projectProposal} +\include{giteaStartup} + +\setcounter{page}{1} +\pagenumbering{arabic} +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\lhead{\small Assignment \AssignmentNumber} +\chead{\small\nouppercase{\leftmark}} +\rhead{\small\thepage} +\lfoot{\small\CourseNumber} +\cfoot{\small\copyright\ \Organization} +\rfoot{\small\VERSION} +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} + +\bibliographystyle{IEEEtran} +\bibliography{devopsReferences} + +\appendix +\include{devopsDocumentGuide} +\include{devopsAIAgentGuide} +\include{devopsAIPromptLog} + +\glsaddall +\printglossaries +\cleardoublepage +\phantomsection +\ChapterLabel{Index} +\addcontentsline{toc}{chapter}{Index} +\markboth{Index}{Index} +\printindex +\end{document} diff --git a/devopsDocumentGuide.tex b/devopsDocumentGuide.tex new file mode 100644 index 0000000..328c3be --- /dev/null +++ b/devopsDocumentGuide.tex @@ -0,0 +1,142 @@ +\chapter{Document Authoring Guide} +\ChapterLabel{DocumentGuide} +\index{LaTeX} +\index{document conventions} +\index{Appendix!Document Authoring Guide} + +\section{How to Use This Appendix} +Use this appendix to maintain the template's file conventions, build process, +and review rules. Update it when the document structure or toolchain changes. + +\section{Template Provenance} +This template was developed by \textbf{Darian Muresan, Ph.D.}, in conjunction +with \textbf{OpenAI Codex} and \textbf{Anthropic Claude Code}. Keep this +attribution distinct from the assignment-specific instructor metadata. + +\section{File Naming and Responsibilities} +Every chapter file shall use the \texttt{devops} prefix, a PascalCase chapter +name, and the \texttt{.tex} suffix. Each such file shall contain one complete +chapter, beginning with \texttt{\string\chapter\{...\}}, and all of its +sections and subsections. Do not split one chapter into section-level +\texttt{.tex} files. For example, all of Chapter~2 is contained in +\path{devopsExampleAssignment.tex}. Do not add requirements or +architecture-design chapters; this template records a DevOps learning activity +and its operational evidence. + +\section{Synonyms and Controlled Terms} +\index{synonyms} +Use one preferred term for each important concept. If an assignment uses +equivalent terms, record them here before release. For example, state whether +``continuous delivery'' refers to \gls{cd} generally or specifically excludes +automatic production deployment. Add important terms to +\texttt{devopsGlossary.tex} and index them where used. + +\section{Building the PDF} +The template requires a LaTeX distribution with \texttt{pdflatex}, +\texttt{bibtex}, \texttt{makeglossaries}, and \texttt{makeindex}. +Install the tools using the platform instructions below, then run one of the +following platform builds. + +\subsection{macOS and Linux Build} +\begin{verbatim} +make -f makefileMacLinux pdf +\end{verbatim} + +\subsection{Windows PowerShell Build} +\begin{verbatim} +.\makefilePowerShell.ps1 -Action pdf +\end{verbatim} +The completed build regenerates references, bibliography, glossary, and index. +Review the log and visually inspect affected PDF pages. Do not edit generated +auxiliary files or the PDF directly. + +\section{Install LaTeX Tools on macOS} +\index{macOS} +\index{MacTeX} +\subsection{Recommended Installation} +Install the current full \href{https://www.tug.org/mactex/}{MacTeX} +distribution. It includes TeX Live, \texttt{pdflatex}, \texttt{bibtex}, +\texttt{latexmk}, \texttt{makeglossaries}, \texttt{makeindex}, and useful +applications such as TeXShop and TeX Live Utility. The full distribution is the +least troublesome choice for this template because it includes the packages +used by the glossary, table, listing, color, and hyperlink features. + +Either download the signed installer from the MacTeX web site and complete the +macOS installation dialog, or, if Homebrew is already installed, run: +\begin{verbatim} +brew install --cask mactex +\end{verbatim} +Close and reopen Terminal after installation. If the TeX commands are not +found, add the MacTeX binary directory to the current shell session: +\begin{verbatim} +export PATH="/Library/TeX/texbin:$PATH" +\end{verbatim} +Do not place this command in a shell profile until it has been verified on the +local computer. + +\subsection{Verification and Compilation} +From the template directory, verify the tools: +\begin{verbatim} +command -v pdflatex bibtex latexmk makeglossaries makeindex +\end{verbatim} +Each command should print a path. Then create the PDF: +\begin{verbatim} +make -f makefileMacLinux pdf +\end{verbatim} +To remove generated intermediate files while keeping the PDF, run: +\begin{verbatim} +make -f makefileMacLinux clean +\end{verbatim} + +\section{Install LaTeX Tools on Windows} +\index{Windows} +\index{MiKTeX} +\subsection{Recommended Installation} +Install the current Basic MiKTeX distribution using the official +\href{https://miktex.org/howto/install-miktex}{MiKTeX Windows installation +guide}. During installation, choose a per-user installation when appropriate +and set missing-package installation to \emph{Ask me first} or \emph{Yes}. +The latter is convenient for a student machine with Internet access; the former +makes each package installation explicit. + +Open MiKTeX Console after installation, apply available updates, and install +the \texttt{latexmk} package if the verification command below cannot find it. +On an organization-managed computer, obtain approval before installing software +or changing execution policy. + +\subsection{Verification and Compilation} +Open a new PowerShell window in the template directory and verify: +\begin{verbatim} +Get-Command pdflatex,bibtex,latexmk,makeglossaries,makeindex +\end{verbatim} +Each command should display a command record. Build the PDF with: +\begin{verbatim} +.\makefilePowerShell.ps1 -Action pdf +\end{verbatim} +If PowerShell blocks the script under a managed execution policy, ask the +system administrator for the approved procedure. Do not bypass institutional +security policy. To remove intermediate build files, run: +\begin{verbatim} +.\makefilePowerShell.ps1 -Action clean +\end{verbatim} + +\section{Common Build Problems} +\begin{tabularx}{\linewidth}{L{3.0cm}Y} +\toprule \textbf{Symptom} & \textbf{Resolution}\\ \midrule +Command not found & Close and reopen the terminal. On macOS, verify the TeX +binary path; on Windows, verify MiKTeX completed installation and is on the user PATH.\\ +Missing LaTeX package & Use MiKTeX Console or its approved on-the-fly package +installation prompt on Windows. On macOS, install the full MacTeX distribution +or use TeX Live Utility to add the missing package.\\ +References or glossary incomplete & Run the supplied platform build instead of +a single \texttt{pdflatex} command; it runs BibTeX, the glossary tool, and the +index tool in the required order.\\ +Script is blocked & Follow the institution's approved PowerShell policy or run +the documented build commands with an approved administrator.\\ \bottomrule +\end{tabularx} + +\section{Authoring and Review Rules} +Replace bracketed placeholders with assignment facts. Keep operational examples +safe, bounded, and free of credentials. Link activities to evidence, retain +history, and state unknowns or instructor decisions explicitly. Rebuild after +structural, cross-reference, table, glossary, or index changes. diff --git a/devopsDocumentHistory.tex b/devopsDocumentHistory.tex new file mode 100644 index 0000000..b5073a3 --- /dev/null +++ b/devopsDocumentHistory.tex @@ -0,0 +1,22 @@ +\chapter*{Document History} +\addcontentsline{toc}{chapter}{Document History} +\index{document history} +\section*{How to Use This Chapter} +Add the newest approved change at the top. Retain every approved entry and +link each entry to the changed chapter, table, figure, or controlled artifact. + +\begin{tabularx}{\linewidth}{L{3.1cm}L{2.2cm}YL{2.0cm}} +\caption{Document Update History\label{Table:DocumentHistory}}\\ +\toprule \textbf{Date / Version} & \textbf{Author Initials} & \textbf{Change} & \textbf{Changed At}\\ \midrule +\endfirsthead +\multicolumn{4}{l}{\small\itshape Document Update History (continued)}\\ +\toprule \textbf{Date / Version} & \textbf{Author Initials} & \textbf{Change} & \textbf{Changed At}\\ \midrule +\endhead \bottomrule \endlastfoot +September 24, 2026 / 1.5 & MF, AN, SS, MN & Created the Digital Ocean Docker Deployment, LaTeX, and Project Proposal chapters. & \ChapterRef{DigitalOceanDocker}, \ChapterRef{LatexDocker}, \ChapterRef{ProjectProposal}\\ +September 16, 2026 / 1.4 & MF, AN, SS, MN & Created the Linux Commands chapter at \texttt{linuxCommands.tex}. & \ChapterRef{LinuxCommands}\\ +September 2, 2026 / 1.3 & DDM, CDX & Established the one-file-per-chapter convention, added it to the AI Agent Usage Guide, and consolidated the complete example assignment chapter into \texttt{devopsExampleAssignment.tex}. & \ChapterRef{ExampleAssignment}, \ChapterRef{AIAgentGuide}, \ChapterRef{DocumentGuide}\\ +September 2, 2026 / 1.2 & DDM, CDX & Added macOS MacTeX and Windows MiKTeX installation, verification, compilation, cleanup, and troubleshooting instructions to the Document Authoring Guide appendix. & \ChapterRef{DocumentGuide}\\ +September 2, 2026 / 1.1 & DDM, CDX & Reorganized the example assignment as one chapter with activity, workflow, evidence, retrospective, and submission sections so each homework can follow the same chapter pattern. & \ChapterRef{ExampleAssignment}\\ +September 2, 2026 / 1.0 & DDM, CDX & Created the reusable SSW 590 DevOps assignment template from the architecture template infrastructure; replaced requirements and design chapters with activity, workflow, evidence, retrospective, and submission chapters. & \ChapterRef{Introduction}, \ChapterRef{ExampleAssignment}, \ChapterRef{AIAgentGuide}\\ +\textit{[date / version]} & \textit{[initials]} & \textit{[approved change and rationale]} & \textit{[link]}\\ +\end{tabularx} diff --git a/devopsExampleAssignment.tex b/devopsExampleAssignment.tex new file mode 100644 index 0000000..1180e2f --- /dev/null +++ b/devopsExampleAssignment.tex @@ -0,0 +1,126 @@ +\chapter{Example Assignment} +\ChapterLabel{ExampleAssignment} +\index{activity brief} +\index{workflow} +\index{automation} +\index{infrastructure as code} +\index{evidence} +\index{observability} +\index{rollback} +\index{retrospective} +\index{continuous improvement} +\index{submission} +\index{cleanup} + +\section{Activity Brief} +\subsection{Scenario} +Describe the operational scenario and why it matters. Use a bounded, +non-production system. \textit{Example: A team must deploy a small service +reliably to a remote Linux host and recover from a failed release.} + +\subsection{Activities} +Assign stable IDs to each assessed activity. Add rows as needed. +\begin{tabularx}{\linewidth}{L{2.1cm}L{3.1cm}Y} +\caption{Activity Register\label{Table:ActivityRegister}}\\ +\toprule \textbf{ID} & \textbf{Activity} & \textbf{Completion criterion}\\ \midrule +\ActivityID{ACT-01} & \textit{[Prepare environment]} & \textit{[repeatable environment baseline is present]}\\ +\ActivityID{ACT-02} & \textit{[Automate workflow]} & \textit{[workflow runs from documented inputs]}\\ +\ActivityID{ACT-03} & \textit{[Observe and recover]} & \textit{[evidence shows monitoring and recovery]}\\ \bottomrule +\end{tabularx} + +\subsection{Success Criteria} +State observable outcomes, not implementation prescriptions. Include security, +cost, cleanup, and reproducibility criteria where applicable. + +\subsection{Assessment Rubric} +\begin{tabularx}{\linewidth}{L{3.2cm}L{2.0cm}Y} +\toprule \textbf{Criterion} & \textbf{Weight} & \textbf{Evidence expected}\\ \midrule +Reproducible workflow & \textit{[points]} & \textit{[automation and clean-run proof]}\\ +Operational quality & \textit{[points]} & \textit{[observability, rollback, security]}\\ +Evidence and explanation & \textit{[points]} & \textit{[commands, outputs, rationale]}\\ +Reflection & \textit{[points]} & \textit{[failure analysis and improvement]}\\ \bottomrule +\end{tabularx} + +\section{Workflow and Implementation} +\subsection{Environment Baseline} +Specify the authorized environment, prerequisites, access model, versioned +inputs, and teardown procedure. Record commands in a repository script or +infrastructure-as-code definition; do not rely on a sequence of undocumented +console clicks. + +\subsection{Procedure} +For each activity, state the goal, input, command or automation entry point, +expected result, and rollback or cleanup action. Link the corresponding +activity identifier and evidence identifier. + +\begin{lstlisting}[language=bash,caption={Replace with a safe, repeatable workflow entry point.}] +# ./scripts/provision.sh --environment sandbox +# ./scripts/deploy.sh --version +# ./scripts/destroy.sh --environment sandbox +\end{lstlisting} + +\subsection{Operational Controls} +Describe least-privilege access, secret handling, logging, monitoring, change +control, budget guardrails, backup or rollback, and resource cleanup. A secret +shall be referenced by its approved storage location, never pasted into this +document or committed to the repository. + +\subsection{Failure Exercise} +Define one safe failure or degradation scenario. State the trigger, expected +signal, diagnosis path, recovery action, and evidence required. Never direct +students to disrupt shared or production infrastructure. + +\section{Evidence Register} +\subsection{How to Use This Section} +Evidence demonstrates an actual execution; an expected result is not evidence. +Use sanitized command output, logs, screenshots, links to versioned files, or +recorded metrics. Redact secrets and personal information. + +\begin{tabularx}{\linewidth}{L{1.7cm}L{2.2cm}L{2.6cm}Y} +\caption{Evidence Register\label{Table:EvidenceRegister}}\\ +\toprule \textbf{ID} & \textbf{Activity} & \textbf{Evidence type} & \textbf{Location and interpretation}\\ \midrule +\EvidenceID{EVD-01} & \ActivityRef{ACT-01} & \textit{[log / script / image]} & \textit{[repository path or sanitized URL; what it demonstrates]}\\ +\EvidenceID{EVD-02} & \ActivityRef{ACT-02} & \textit{[pipeline output]} & \textit{[location; result and relevant timestamp]}\\ +\EvidenceID{EVD-03} & \ActivityRef{ACT-03} & \textit{[monitoring / recovery output]} & \textit{[location; failure signal and recovery result]}\\ \bottomrule +\end{tabularx} + +\subsection{Evidence Quality Checks} +Evidence should identify the executed version, environment, time, command or +automation entry point, outcome, and any deviation from the expected result. +State failures plainly; they are valuable inputs to the retrospective. + +\section{Retrospective} +\subsection{Outcome} +Summarize what happened, including completed work, gaps, and unexpected +behavior. Distinguish facts from interpretation. + +\subsection{Flow and Feedback} +Identify queues, handoffs, manual steps, slow feedback, and sources of rework. +Explain which changes improved delivery flow or made failures visible sooner. +This emphasis on flow, feedback, and continual learning is consistent with the +DevOps framing introduced in \cite{PhoenixProject}. + +\subsection{Improvement Experiments} +Propose one or more small, testable improvements. State the hypothesis, change, +measurement, expected result, and risk. Do not represent a proposal as an +approved production change. + +\subsection{Team Contributions} +For team assignments, concisely identify each member's meaningful contribution +and any collaboration constraints. + +\section{Submission and Cleanup} +\subsection{Submission Checklist} +\begin{itemize} +\item Versioned automation, configuration, and runbook are committed. +\item Evidence links resolve and contain no secrets or personal data. +\item The retrospective is complete and distinguishes results from proposals. +\item Remote resources have been destroyed or explicitly transferred as directed. +\item The repository identifies the final commit or release tag. +\end{itemize} + +\subsection{Academic Integrity and Responsible Use} +Follow the course policy for collaboration and AI assistance. Cite external +code, tutorials, and AI-generated material as required by the instructor. +Students remain responsible for understanding, testing, and explaining all +submitted work. diff --git a/devopsGlossary.tex b/devopsGlossary.tex new file mode 100644 index 0000000..186607f --- /dev/null +++ b/devopsGlossary.tex @@ -0,0 +1,13 @@ +\newacronym{ai}{AI}{artificial intelligence} +\newacronym{ci}{CI}{continuous integration} +\newacronym{cd}{CD}{continuous delivery or continuous deployment} +\newacronym{iac}{IaC}{infrastructure as code} +\newacronym{slo}{SLO}{service-level objective} +\newglossaryentry{automation}{name={automation},description={A repeatable, version-controlled procedure executed by software rather than undocumented manual steps}} +\newglossaryentry{deployment}{name={deployment},description={The controlled delivery of a versioned change to an environment}} +\newglossaryentry{evidence}{name={evidence},description={A retained record of an actual execution, observation, or review}} +\newglossaryentry{observability}{name={observability},description={The ability to infer system behavior from signals such as logs, metrics, traces, and health checks}} +\newglossaryentry{pipeline}{name={pipeline},description={An automated sequence that builds, tests, packages, and/or deploys a change}} +\newglossaryentry{rollback}{name={rollback},description={A controlled return to a known acceptable version or state after a failed or harmful change}} +\newglossaryentry{runbook}{name={runbook},description={A documented operational procedure for a repeatable task or incident response}} +\newglossaryentry{synonyms}{name={synonyms},description={Equivalent terms used in this assignment; record preferred terms to avoid ambiguity in instructions and evidence}}