Add files via upload
This commit is contained in:
+2365
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
This assignment guides students through a reproducible DevOps activity. It
|
||||
defines the learning objectives, environment boundary, workflow, evidence,
|
||||
reflection, and submission criteria. Replace bracketed text with assignment-
|
||||
specific facts before release. Students should be able to recreate the work
|
||||
from the submitted automation and runbook rather than from undocumented manual steps.
|
||||
+367
@@ -0,0 +1,367 @@
|
||||
%%
|
||||
%% This is file `cornell.cls',
|
||||
%% generated with the docstrip utility.
|
||||
%%
|
||||
%% The original source files were:
|
||||
%%
|
||||
%% cornell.dtx (with options: `class')
|
||||
%%
|
||||
%% IMPORTANT NOTICE:
|
||||
%%
|
||||
%% For the copyright see the source file.
|
||||
%%
|
||||
%% Any modified versions of this file must be renamed
|
||||
%% with new filenames distinct from cornell.cls.
|
||||
%%
|
||||
%% For distribution of the original source see the terms
|
||||
%% for copying and modification in the file cornell.dtx.
|
||||
%%
|
||||
%% This generated file may be distributed as long as the
|
||||
%% original source files, as listed above, are part of the
|
||||
%% same distribution. (The sources need not necessarily be
|
||||
%% in the same archive or directory.)
|
||||
%% Document class `cornell' to use with LaTeX 2e.
|
||||
%% Based on `crnlphd' class. The following is from the file `crnlphd.dtx':
|
||||
%% Based loosely on old cuphdthesis style file.
|
||||
%% Found to give good results, according to the thesis secretary.
|
||||
%% File: crnlphd.dtx Copyright (C) 1994 Sergio Gelato
|
||||
%% Made available without any warranty, express or implied.
|
||||
%% Modifications
|
||||
%% 03/26/98 Mike Heisler
|
||||
%% Conform to Eric's final version. Margins are subject to
|
||||
%% The whim of the printer.
|
||||
%% 10/10/97 Mike Heisler and Eric Dahl
|
||||
%% Altered footnotesize and changed the Acknowledgement and
|
||||
%% Biographical titles per thesis secretary guideline that
|
||||
%% they must match the rest of the document, i.e. flush left
|
||||
%% and capitalized rather than all caps
|
||||
%% 05/21/97 Mike Heisler
|
||||
%% Added a 'papers' option to handle bibliographis as sections
|
||||
%% at the end of each chapter. Reduced top margin.
|
||||
%%
|
||||
%% $Id$
|
||||
%% \CharacterTable
|
||||
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
|
||||
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
|
||||
%% Digits \0\1\2\3\4\5\6\7\8\9
|
||||
%% Exclamation \! Double quote \" Hash (number) \#
|
||||
%% Dollar \$ Percent \% Ampersand \&
|
||||
%% Acute accent \' Left paren \( Right paren \)
|
||||
%% Asterisk \* Plus \+ Comma \,
|
||||
%% Minus \- Point \. Solidus \/
|
||||
%% Colon \: Semicolon \; Less than \<
|
||||
%% Equals \= Greater than \> Question mark \?
|
||||
%% Commercial at \@ Left bracket \[ Backslash \\
|
||||
%% Right bracket \] Circumflex \^ Underscore \_
|
||||
%% Grave accent \` Left brace \{ Vertical bar \|
|
||||
%% Right brace \} Tilde \~}
|
||||
%%
|
||||
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
||||
\ProvidesClass{cornell}
|
||||
[1998/03/26 v2.0
|
||||
Cornell University thesis class]
|
||||
\newif\ifphd
|
||||
\DeclareOption{phd}{\phdtrue}
|
||||
\DeclareOption{master}{\phdfalse}
|
||||
\ExecuteOptions{phd}
|
||||
\newif\ifpapers
|
||||
\DeclareOption{papers}{\paperstrue}
|
||||
\DeclareOption{10pt}{%
|
||||
\OptionNotUsed%
|
||||
\ClassWarningNoLine{cornell}{Font size 10pt not allowed; using 12pt}%
|
||||
}
|
||||
\DeclareOption{11pt}{%
|
||||
\OptionNotUsed%
|
||||
\ClassWarningNoLine{cornell}{Font size 11pt not allowed; using 12pt}%
|
||||
}
|
||||
\newcommand{\prelim@contents}[1]{}
|
||||
\DeclareOption{tocprelim}{%
|
||||
\renewcommand{\prelim@contents}[1]{\addcontentsline{toc}{section}{#1}}
|
||||
}
|
||||
\DeclareOption*{%
|
||||
\PassOptionsToClass{\CurrentOption}{report}%
|
||||
}
|
||||
\ProcessOptions
|
||||
|
||||
\LoadClass[12pt]{report}[1994/06/01]
|
||||
\renewcommand{\defaultscriptratio}{.75}
|
||||
\renewcommand{\defaultscriptscriptratio}{.6}
|
||||
\setlength\headsep{25\p@}
|
||||
\if@twocolumn
|
||||
\else
|
||||
\setlength\oddsidemargin{0in}
|
||||
\setlength\evensidemargin{0in}
|
||||
\setlength\textwidth{6.5in}
|
||||
\setlength\topmargin{-0.5in}
|
||||
\setlength\headheight{0.2in}
|
||||
\setlength\headsep{0.35in}
|
||||
\setlength\textheight{8.85in}
|
||||
\setlength\footskip{0.5in}
|
||||
\setlength\marginparwidth{0.85in}
|
||||
\setlength\marginparsep{0.125in}
|
||||
\fi
|
||||
\if@compatibility
|
||||
\setlength\topmargin{0\p@}
|
||||
\else
|
||||
\fi
|
||||
\newcommand{\ps@cornell}{%
|
||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
||||
\def\@oddfoot{}%
|
||||
\def\@evenhead{\thepage\hfil{\slshape\leftmark}}%
|
||||
\def\@evenfoot{}%
|
||||
\def\chaptermark##1{}%
|
||||
\def\sectionmark##1{}%
|
||||
}
|
||||
\newcommand{\ps@cornellc}{%
|
||||
\def\@oddhead{\hfil\thepage\hfil}%
|
||||
\def\@oddfoot{}%
|
||||
\def\@evenhead{\@oddhead}%
|
||||
\def\@evenfoot{}%
|
||||
\def\chaptermark##1{}%
|
||||
\def\sectionmark##1{}%
|
||||
}
|
||||
\raggedbottom
|
||||
\newcommand{\@prolformat}[1]{{\begin{flushleft} \Huge #1 \end{flushleft}} }
|
||||
\newcommand{\ackname}{\@prolformat{Acknowledgements}}
|
||||
\newcommand{\bioname}{\@prolformat{Biographical Sketch}}
|
||||
\renewcommand{\contentsname}{\@prolformat{Table of Contents}}
|
||||
\renewcommand{\listtablename}{\@prolformat{List of Tables}}
|
||||
\renewcommand{\listfigurename}{\@prolformat{List of Figures}}
|
||||
\renewcommand{\l@figure}{\@dottedtocline{1}{1.5em}{2.6em}}
|
||||
\let\l@table\l@figure
|
||||
|
||||
\renewenvironment{thebibliography}[1]
|
||||
{\ifpapers \clearpage \section*{\bibname%
|
||||
\@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}}%
|
||||
\else%
|
||||
\chapter*{\bibname%
|
||||
\@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}}%
|
||||
\fi%
|
||||
\list{\@biblabel{\arabic{enumiv}}}%
|
||||
{\settowidth\labelwidth{\@biblabel{#1}}%
|
||||
\leftmargin\labelwidth
|
||||
\advance\leftmargin\labelsep
|
||||
\@openbib@code
|
||||
\usecounter{enumiv}%
|
||||
\let\p@enumiv\@empty
|
||||
\renewcommand\theenumiv{\arabic{enumiv}}}%
|
||||
\sloppy\clubpenalty4000\widowpenalty4000%
|
||||
\sfcode`\.\@m\relax
|
||||
\ifpapers%
|
||||
\addcontentsline{toc}{section}{\bibname}%
|
||||
\else%
|
||||
\addcontentsline{toc}{chapter}{\bibname}%
|
||||
\fi
|
||||
\singlespacing}
|
||||
{\def\@noitemerr
|
||||
{\@latex@warning{Empty `thebibliography' environment}}%
|
||||
\normalspacing
|
||||
\endlist}
|
||||
|
||||
\newcommand{\@titlesize}{\Large}
|
||||
\newcommand{\@subtitlesize}{\large}
|
||||
\newcommand{\@authorsize}{\normalsize} % No Pharaoh he.
|
||||
\newcommand{\@conferralmonth}{January}
|
||||
\newcommand{\@conferralyear}{}
|
||||
|
||||
\newcommand{\titlesize}[1]{\renewcommand{\@titlesize}{#1}}
|
||||
\newcommand{\subtitlesize}[1]{\renewcommand{\@subtitlesize}{#1}}
|
||||
\newcommand{\authorsize}[1]{\renewcommand{\@authorsize}{#1}}
|
||||
\newcommand{\conferraldate}[2]{%
|
||||
\renewcommand{\@conferralmonth}{#1}
|
||||
\renewcommand{\@conferralyear}{#2}
|
||||
}
|
||||
\newcommand{\@degreefield}{Master of Science} %CHANGED
|
||||
\newcommand{\degreefield}[1]{\renewcommand{\@degreefield}{#1}} %CHANGED
|
||||
|
||||
\renewcommand{\maketitle}{%
|
||||
\begin{titlepage}%
|
||||
\vspace*{-0.24in}
|
||||
\begin{center}%
|
||||
\@titlesize \@title
|
||||
\end{center}
|
||||
\vfill
|
||||
%\begin{center}
|
||||
%\@subtitlesize
|
||||
%A \ifphd Dissertation \else Thesis \fi \\ %CHANGED
|
||||
%Presented to the Faculty of the Graduate School \\
|
||||
%of Cornell University \\
|
||||
%in Partial Fulfillment of the Requirements for the Degree of \\
|
||||
%\ifphd Doctor of Philosophy \else \@degreefield \fi %CHANGED
|
||||
%\end{center}
|
||||
\vfill
|
||||
\begin{center}
|
||||
\@authorsize
|
||||
by \\
|
||||
\@author \\
|
||||
\@conferralmonth\ \@conferralyear
|
||||
\end{center}
|
||||
\vspace*{0.26in}
|
||||
\end{titlepage}
|
||||
}
|
||||
|
||||
\renewenvironment{titlepage}{%
|
||||
\typeout{Title page}
|
||||
\pagestyle{empty}
|
||||
\doublespacing
|
||||
}{%
|
||||
\normalspacing\clearpage
|
||||
}
|
||||
|
||||
|
||||
\newenvironment{copyrightpage}{%
|
||||
\typeout{Copyleft page}
|
||||
\pagestyle{empty}
|
||||
\null\vfil
|
||||
\begin{center}
|
||||
}{%
|
||||
\end{center}
|
||||
\vfil\null
|
||||
\clearpage
|
||||
}
|
||||
|
||||
\newcommand{\makecopyright}{%
|
||||
\begin{copyrightpage}
|
||||
\copyright\ \@copyrightholder\ \@copyrightyear \\
|
||||
ALL RIGHTS RESERVED \\[.5in]
|
||||
\end{copyrightpage}
|
||||
}
|
||||
\newcommand{\@copyrightholder}{\@author}
|
||||
\newcommand{\@copyrightyear}{\@conferralyear}
|
||||
|
||||
\newcommand{\copyrightholder}[1]{\renewcommand{\@copyrightholder}{#1}}
|
||||
\newcommand{\copyrightyear}[1]{\renewcommand{\@copyrightyear}{#1}}
|
||||
|
||||
|
||||
\newlength{\@abhdskip}
|
||||
\renewenvironment{abstract}{%
|
||||
\typeout{Abstract}
|
||||
\singlespacing
|
||||
\ifphd %CHANGED
|
||||
\setlength{\@abhdskip}{.25in}
|
||||
\addtolength{\@abhdskip}{-\topmargin}
|
||||
\vspace*{\@abhdskip}
|
||||
\begin{center}
|
||||
\@abstracttitle \\
|
||||
\ \\
|
||||
\@author \\
|
||||
\@conferralyear
|
||||
\end{center}
|
||||
\vspace{.25in}
|
||||
\else %CHANGED
|
||||
\chapter*{%
|
||||
\begin{center}
|
||||
\normalsize
|
||||
ABSTRACT
|
||||
\end{center}
|
||||
}
|
||||
\par
|
||||
\fi %CHANGED
|
||||
\pagestyle{empty}
|
||||
\thispagestyle{empty}
|
||||
}{%
|
||||
\clearpage
|
||||
}
|
||||
|
||||
\newcommand{\@abstracttitle}{\@title}
|
||||
\newcommand{\abstracttitle}[1]{\renewcommand{\@abstracttitle}{#1}}
|
||||
|
||||
|
||||
\newenvironment{biosketch}{%
|
||||
\typeout{Vita}
|
||||
\pagestyle{plain}
|
||||
\pagenumbering{roman}
|
||||
\setcounter{page}{3}
|
||||
\prelim@contents{Biographical Sketch}
|
||||
\chapter*{%
|
||||
\bioname
|
||||
}
|
||||
\par
|
||||
}{%
|
||||
\clearpage
|
||||
}
|
||||
|
||||
\newenvironment{dedication}{%
|
||||
\prelim@contents{Dedication}
|
||||
\null\vfil
|
||||
\begin{center}
|
||||
}{
|
||||
\end{center}
|
||||
\vfil\null
|
||||
\clearpage
|
||||
}
|
||||
|
||||
\newenvironment{acknowledgements}{%
|
||||
\prelim@contents{Acknowledgments}
|
||||
\chapter*{%
|
||||
\ackname
|
||||
}
|
||||
\par
|
||||
}{%
|
||||
\cleardoublepage
|
||||
}
|
||||
|
||||
\newcommand{\contentspage}{%
|
||||
\singlespacing
|
||||
\label{toc}
|
||||
\prelim@contents{\contentsname}
|
||||
\tableofcontents
|
||||
\normalspacing
|
||||
\clearpage
|
||||
}
|
||||
|
||||
\newcommand{\tablelistpage}{%
|
||||
\singlespacing
|
||||
\label{lot}
|
||||
\prelim@contents{\listtablename}
|
||||
\listoftables
|
||||
\normalspacing
|
||||
\clearpage
|
||||
}
|
||||
|
||||
\newcommand{\figurelistpage}{%
|
||||
\singlespacing
|
||||
\label{lof}
|
||||
\prelim@contents{\listfigurename}
|
||||
\listoffigures
|
||||
\normalspacing
|
||||
\clearpage
|
||||
}
|
||||
\newcommand{\abbrlist}{%
|
||||
\singlespacing
|
||||
\prelim@contents{List of Abbreviations}
|
||||
\chapter*{List of Abbreviations}
|
||||
}
|
||||
|
||||
\newcommand{\symlist}{%
|
||||
\singlespacing
|
||||
\prelim@contents{List of Symbols}
|
||||
\chapter*{List of Symbols}
|
||||
}
|
||||
|
||||
\newcommand{\preface}{%
|
||||
\singlespacing
|
||||
\prelim@contents{Preface}
|
||||
\chapter*{Preface}
|
||||
}
|
||||
|
||||
\newcommand{\singlespacing}{%
|
||||
\let\CS=\@currsize\renewcommand{\baselinestretch}{1.0}\tiny\CS}
|
||||
\newcommand{\singlespacingplus}{%
|
||||
\let\CS=\@currsize\renewcommand{\baselinestretch}{1.25}\tiny\CS}
|
||||
\newcommand{\doublespacing}{%
|
||||
\let\CS=\@currsize\renewcommand{\baselinestretch}{1.75}\tiny\CS}
|
||||
\newcommand{\realdoublespacing}{%
|
||||
\let\CS=\@currsize\renewcommand{\baselinestretch}{2}\tiny\CS}
|
||||
\newcommand{\normalspacing}{\doublespacing}
|
||||
\newcommand{\footnotespacing}{\singlespacing}
|
||||
\newcommand{\changespacing}[2]{%
|
||||
\renewcommand{#1}{%
|
||||
\let\CS=\@currsize\renewcommand{\baselinestretch}{#2}\tiny\CS}%
|
||||
}
|
||||
\newcommand{\changenormalspacing}[1]{\renewcommand{\normalspacing}{#1}}
|
||||
\normalspacing
|
||||
|
||||
\endinput
|
||||
%%
|
||||
%% End of file `cornell.cls'.
|
||||
@@ -0,0 +1,107 @@
|
||||
\chapter{AI Agent Usage Guide}
|
||||
\ChapterLabel{AIAgentGuide}
|
||||
\index{AI agent}
|
||||
\index{AI agent!DevOps workflow}
|
||||
\index{Appendix!AI Agent Usage Guide}
|
||||
|
||||
\section{How to Use This Appendix}
|
||||
An AI agent that creates, reviews, or maintains an assignment shall read this
|
||||
file first. It shall identify the task in the routing table, read the minimum
|
||||
authoritative sources, and expand context only for a discovered dependency or
|
||||
inconsistency. This guide is maintained in LaTeX so it is visible, versioned,
|
||||
and reviewable with the assignment.
|
||||
|
||||
\section{Governing Principles}
|
||||
The authored LaTeX files, versioned automation, and approved assignment
|
||||
materials are authoritative. The PDF is a review artifact and shall not be
|
||||
edited directly. AI may draft, explain, analyze, check consistency, and assist
|
||||
with builds. It shall not invent completion, evidence, access, costs, grades,
|
||||
approvals, command output, security posture, or operational results.
|
||||
|
||||
\section{Chapter File Convention}
|
||||
\index{AI agent!chapter file convention}
|
||||
Every assignment chapter shall be stored in exactly one file named with the
|
||||
\texttt{devops} prefix, a PascalCase chapter name, and the \texttt{.tex}
|
||||
suffix. For example, Chapter~2 is fully contained in
|
||||
\path{devopsExampleAssignment.tex}. A chapter file shall begin with its
|
||||
\texttt{\string\chapter\{...\}} command and contain all of that chapter's
|
||||
sections and subsections. Do not split one chapter across files, create
|
||||
section-only \texttt{.tex} files, or use \texttt{\string\input} or
|
||||
\texttt{\string\include} to assemble a chapter from smaller fragments.
|
||||
|
||||
Supporting non-chapter files may use a different name only when they are not
|
||||
chapter content: \texttt{prologue.tex}, \texttt{abstract.tex},
|
||||
\texttt{devopsGlossary.tex}, and \texttt{devopsReferences.bib} are examples.
|
||||
Appendix chapters follow the same chapter-file convention.
|
||||
|
||||
\section{AI Quick Start}
|
||||
\begin{enumerate}
|
||||
\item Read this guide and identify the requested outcome.
|
||||
\item Select the closest task below and load only its listed sources.
|
||||
\item Inspect supplied facts and report consequential gaps or assumptions.
|
||||
\item Make narrowly scoped changes; preserve stable IDs, glossary terms, and history.
|
||||
\item Never request, print, store, or commit credentials, tokens, personal data, or production data.
|
||||
\item Build the complete PDF, inspect the log, visually inspect affected pages, and record material AI use in \ChapterRef{AIPromptLog}.
|
||||
\end{enumerate}
|
||||
|
||||
\section{Task Routing}
|
||||
\small
|
||||
\begin{tabularx}{\linewidth}{L{4.0cm}Y}
|
||||
\caption{AI Task-Routing Table\label{Table:AITaskRouting}}\\
|
||||
\toprule \textbf{Task} & \textbf{Minimum authoritative sources}\\ \midrule
|
||||
Initialize an assignment & \texttt{devopsAssignment.tex}, \texttt{prologue.tex}, \texttt{devopsIntroduction.tex}, \texttt{devopsExampleAssignment.tex}, and the instructor's assignment facts.\\
|
||||
Develop a workflow & \texttt{devopsExampleAssignment.tex}, source repository materials, and authorized environment constraints.\\
|
||||
Define evidence & \texttt{devopsExampleAssignment.tex} and controlled execution outputs.\\
|
||||
Review a retrospective & \texttt{devopsExampleAssignment.tex} and the submitted workflow or runbook.\\
|
||||
Edit AI guidance & \texttt{devopsAIAgentGuide.tex}, \texttt{devopsAIPromptLog.tex}, \texttt{devopsDocumentGuide.tex}, and \texttt{devopsAssignment.tex}.\\
|
||||
Compile or troubleshoot & \texttt{devopsAssignment.tex}, \texttt{devopsDocumentGuide.tex}, the affected chapter, and the build log.\\ \bottomrule
|
||||
\end{tabularx}
|
||||
\normalsize
|
||||
|
||||
\section{DevOps-Specific Rules}
|
||||
\begin{enumerate}
|
||||
\item Prefer versioned, repeatable automation over undocumented manual steps.
|
||||
\item Treat deployment output, monitoring data, and screenshots as evidence only when they reflect an actual execution.
|
||||
\item Design failure exercises to be isolated, reversible, and authorized.
|
||||
\item Apply least privilege and never place secrets in LaTeX, source control, prompts, screenshots, or logs.
|
||||
\item State expected cloud cost, cleanup action, and resource ownership for each remote-environment activity.
|
||||
\item Identify whether a recommendation is a proposal, an instructor directive, or demonstrated evidence.
|
||||
\end{enumerate}
|
||||
|
||||
\section{Example AI Requests}
|
||||
\subsection{Create an Assignment Brief}
|
||||
\begin{verbatim}
|
||||
Read devopsAIAgentGuide.tex and use the Initialize an Assignment context.
|
||||
From the supplied SSW 590 objective and constraints, fill only supported
|
||||
placeholders in the introduction and activity brief. Propose clear, observable
|
||||
completion criteria, a safe cleanup action, and a rubric. Do not invent cloud
|
||||
access, due dates, policy, costs, or approved tools. Update history, compile,
|
||||
and report instructor decisions still needed.
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Review a Student Workflow}
|
||||
\begin{verbatim}
|
||||
Read devopsAIAgentGuide.tex and the workflow, evidence, and retrospective
|
||||
chapters. Review the supplied repository and sanitized evidence for
|
||||
reproducibility, least privilege, observability, rollback, and cleanup.
|
||||
Separate verified facts from gaps and recommendations. Do not claim that an
|
||||
unexecuted command passed, and do not request credentials or operate resources.
|
||||
\end{verbatim}
|
||||
|
||||
\section{Human Decisions and Information Boundaries}
|
||||
The instructor retains authority over assignment scope, grading, due dates,
|
||||
approved tooling, access, budgets, security posture, exceptions, and policy.
|
||||
An AI agent shall surface alternatives and evidence, not represent a decision
|
||||
as approved. Record material prompts, assumptions, corrections, and unresolved
|
||||
issues in \ChapterRef{AIPromptLog}.
|
||||
|
||||
\section{Completion Checklist}
|
||||
\begin{itemize}
|
||||
\item Scope, deliverables, environment, constraints, and cleanup are clear.
|
||||
\item Activity identifiers and evidence references are valid and unique.
|
||||
\item Examples contain no secrets, personal data, or unsafe production actions.
|
||||
\item New controlled terms are added to the glossary and indexed.
|
||||
\item The newest approved change is recorded in document history.
|
||||
\item The complete build succeeds with no unresolved references or missing files.
|
||||
\item A human reviews all decisions requiring instructional or operational authority.
|
||||
\end{itemize}
|
||||
@@ -0,0 +1,14 @@
|
||||
\chapter{AI Prompt Log}
|
||||
\ChapterLabel{AIPromptLog}
|
||||
\index{AI prompt log}
|
||||
\section{How to Use This Appendix}
|
||||
Use this log when AI assistance materially affects assignment wording,
|
||||
automation, evidence interpretation, troubleshooting, or feedback. Record
|
||||
enough context for an instructor or reviewer to understand the input, output,
|
||||
assumptions, and human corrections. Do not record credentials or personal data.
|
||||
|
||||
\section{Example Record}
|
||||
Date: \textit{[timestamp]}; Tool and model: \textit{[name]}; Task:
|
||||
\textit{[requested outcome]}; Inputs: \textit{[sanitized constraints and
|
||||
evidence]}; Output used: \textit{[summary]}; Human review and corrections:
|
||||
\textit{[summary]}; Unresolved assumptions: \textit{[list or none]}.
|
||||
@@ -0,0 +1,132 @@
|
||||
% 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}
|
||||
|
||||
\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{devopsExampleAssignment}
|
||||
\include{linuxCommands}
|
||||
\include{digitalOceanDocker}
|
||||
\include{latexDocker}
|
||||
\include{projectProposal}
|
||||
|
||||
\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}
|
||||
@@ -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.
|
||||
@@ -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}
|
||||
@@ -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 <tag>
|
||||
# ./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.
|
||||
@@ -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}}
|
||||
@@ -0,0 +1,47 @@
|
||||
\chapter{Introduction}
|
||||
\ChapterLabel{Introduction}
|
||||
\index{introduction}
|
||||
\index{DevOps}
|
||||
|
||||
\section{How to Use This Assignment}
|
||||
Replace bracketed text with approved assignment facts. Delete instructional
|
||||
examples before release, but retain the stable identifiers, history, glossary,
|
||||
index, appendices, and evidence structure. This document is an assignment
|
||||
brief and operational record, not a requirements or software-design document.
|
||||
|
||||
\section{Purpose and Learning Objectives}
|
||||
State the DevOps capability students will practice and the observable learning
|
||||
outcomes. \textit{Example: Students will provision a minimal Linux service,
|
||||
automate its deployment, collect operational evidence, and demonstrate a safe
|
||||
rollback.}
|
||||
|
||||
\section{Scope and Constraints}
|
||||
State the permitted cloud or local environment, team size, required tools,
|
||||
budget limits, source-control repository, timebox, and prohibited actions.
|
||||
Do not include credentials, access tokens, student records, or production data.
|
||||
|
||||
\section{Deliverables and Due Date}
|
||||
\begin{tabularx}{\linewidth}{L{3.2cm}Y}
|
||||
\toprule \textbf{Item} & \textbf{Expectation}\\ \midrule
|
||||
Due date & \DueDate\\
|
||||
Repository & \textit{[repository URL or LMS location]}\\
|
||||
Required deliverables & \textit{[automation, runbook, evidence, reflection]}\\
|
||||
Team policy & \textit{[individual or team; contribution expectations]}\\ \bottomrule
|
||||
\end{tabularx}
|
||||
|
||||
\section{Using This Template with AI Agents}
|
||||
\index{AI agent!DevOps workflow}
|
||||
AI may assist with explanation, drafting, troubleshooting, and reviewing
|
||||
automation. It does not replace student understanding or authorize an agent to
|
||||
operate accounts, approve work, invent results, or receive secrets. Before
|
||||
editing, an AI agent shall read \texttt{devopsAIAgentGuide.tex}, load only the
|
||||
relevant assignment files, identify assumptions, and preserve evidence
|
||||
boundaries. Record material AI assistance in \ChapterRef{AIPromptLog}.
|
||||
|
||||
\begin{verbatim}
|
||||
Read devopsAIAgentGuide.tex first. For this SSW 590 assignment, identify the
|
||||
requested task and read only the listed sources. Use supplied evidence only;
|
||||
do not invent commands, deployment results, approvals, credentials, or costs.
|
||||
Preserve stable IDs and history. Make the smallest appropriate change, build
|
||||
the PDF, and report assumptions, risks, and actions requiring human approval.
|
||||
\end{verbatim}
|
||||
@@ -0,0 +1,6 @@
|
||||
@book{PhoenixProject,
|
||||
author = {Kim, Gene and Behr, Kevin and Spafford, George},
|
||||
title = {The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win},
|
||||
publisher = {IT Revolution Press},
|
||||
year = {2018}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
\chapter{Digital Ocean Docker Deployment}
|
||||
\ChapterLabel{DigitalOceanDocker}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
\chapter{LaTeX Docker}
|
||||
\ChapterLabel{LatexDocker}
|
||||
|
||||
@@ -0,0 +1,338 @@
|
||||
\chapter{Linux Commands}
|
||||
\ChapterLabel{LinuxCommands}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{terminal.png}
|
||||
\caption{Linux terminal screenshot of the bash commands ran in Step 2.}
|
||||
\label{fig:linux_terminal}
|
||||
\end{figure}
|
||||
|
||||
\section{Navigation and File Ops}
|
||||
|
||||
|
||||
1. paris@paris-Precision-3581:~/lx-test
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image0.png}
|
||||
\caption{All entries in ~/lx-test.}
|
||||
\label{fig:img2}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image1.png}
|
||||
\caption{Copying txt to tmp.}
|
||||
\label{fig:img3}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image2.png}
|
||||
\caption{old.txt moved into archive/.}
|
||||
\label{fig:img4}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image3.png}
|
||||
\caption{New empty file notes.md created.}
|
||||
\label{fig:img5}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image4.png}
|
||||
\caption{Disk usage for the src directory.}
|
||||
\label{fig:img6}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Viewing and Searching}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image6.png}
|
||||
\caption{Line numbers printed in sys.log.}
|
||||
\label{fig:img7}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image7.png}
|
||||
\caption{sys.log lines filtered by ERROR.}
|
||||
\label{fig:img8}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image8.png}
|
||||
\caption{Distinctive words in words.txt counted.}
|
||||
\label{fig:img9}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image9.png}
|
||||
\caption{Lines starting with G in words.txt shown.}
|
||||
\label{fig:img10}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image10.png}
|
||||
\caption{First two lines of people.csv displayed.}
|
||||
\label{fig:img11}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image11.png}
|
||||
\caption{Last three lines of sys.log shown.}
|
||||
\label{fig:img12}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Text Processing}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image12.png}
|
||||
\caption{Name column of people.csv printed.}
|
||||
\label{fig:img13}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image13.png}
|
||||
\caption{words.txt sorted case-insensitively without duplicates.}
|
||||
\label{fig:img14}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image14.png}
|
||||
\label{fig:img15}
|
||||
\end{figure}
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/imaging.png}
|
||||
\caption{"three" replaced with 3 in src.txt with backups.}
|
||||
\label{fig:placeholder}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image15.png}
|
||||
\caption{Lines, words, and bytes printed for every *.txt file in src.}
|
||||
\label{fig:img16}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Permissions and Ownership}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image16.png}
|
||||
\caption{tmp/ made only read/write/searchable by the owner.}
|
||||
\label{fig:img17}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image17.png}
|
||||
\caption{src/lib given group execute permission recursively.}
|
||||
\label{fig:img18}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image18.png}
|
||||
\caption{Numeric permissions of src/file2.txt shown.}
|
||||
\label{fig:img19}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image19.png}
|
||||
\caption{notes.md made append-nly for the owner.}
|
||||
\label{fig:img20}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Links and Find}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image20.png}
|
||||
\caption{link-to-file1's target path.}
|
||||
\label{fig:img21}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image21.png}
|
||||
\caption{All regular files over 40 KiB under the current tree.}
|
||||
\label{fig:img22}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image22.png}
|
||||
\caption{Files modified in the last 10 minutes under tmp/.}
|
||||
\label{fig:img23}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Processes and Job Control}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image23.png}
|
||||
\label{fig:img24}
|
||||
\end{figure}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/imagest.png}
|
||||
\label{fig:placeholder}
|
||||
\end{figure}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/imageringest.png}
|
||||
\caption{Processes shown in tree view.}
|
||||
\label{fig:placeholder}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image24.png}
|
||||
\caption{sleep 120 started and its PID.}
|
||||
\label{fig:img25}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image25.png}
|
||||
\caption{TERM signal sent to all sleep processes.}
|
||||
\label{fig:img26}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image26.png}
|
||||
\caption{Top 5 processes by memory usage shown.}
|
||||
\label{fig:img27}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Archiving and Compression}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image27.png}
|
||||
\caption{src.tgz created from src/.}
|
||||
\label{fig:img28}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image28.png}
|
||||
\caption{Contents of src.tgz listed.}
|
||||
\label{fig:img29}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image29.png}
|
||||
\caption{file2.txt extracted from src.tgz into tmp/.}
|
||||
\label{fig:img30}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Networking and System Info}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image30.png}
|
||||
\caption{All listening TCP sockets with PIDs shown.}
|
||||
\label{fig:img31}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image31.png}
|
||||
\caption{Default route concisely printed.}
|
||||
\label{fig:img32}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image32.png}
|
||||
\caption{Kernel name, release, and machine architecture displayed.}
|
||||
\label{fig:img33}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image33.png}
|
||||
\caption{Last five successful logins shown.}
|
||||
\label{fig:img34}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Package and Services (Ubuntu)}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image34.png}
|
||||
\caption{Installed version of the coreutils package shown.}
|
||||
\label{fig:img35}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image35.png}
|
||||
\caption{Available packages with names containing "ripgrep".}
|
||||
\label{fig:img36}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image36.png}
|
||||
\caption{Status line of cron service.}
|
||||
\label{fig:img37}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Bash and Scripting}
|
||||
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image37.png}
|
||||
\caption{One-liner that loops over *.txt in src.}
|
||||
\label{fig:img38}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image38.png}
|
||||
\caption{Command that exports csv rows where dept == "CS" to cs.txt.}
|
||||
\label{fig:img39}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[hbt!]
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{linux/image39.png}
|
||||
\caption{Variable X with value 42 created, printed, and deleted.}
|
||||
\label{fig:img40}
|
||||
\end{figure}
|
||||
@@ -0,0 +1,3 @@
|
||||
\chapter{Project Proposal}
|
||||
\ChapterLabel{ProjectProposal}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
\title{\CourseNumber\ --- \CourseName\\[0.5em]\large Assignment \AssignmentNumber: \AssignmentTitle\\[1.5em]\normalsize\VERSION\\\DocumentStatus}
|
||||
\author{\Instructor\\\Organization}
|
||||
\conferraldate{}{\DocumentDate}
|
||||
\copyrightholder{\Organization}
|
||||
\copyrightyear{2026}
|
||||
\maketitle
|
||||
\makecopyright
|
||||
|
||||
\cleardoublepage
|
||||
\phantomsection
|
||||
\chapter*{Template Attribution}
|
||||
\ChapterLabel{TemplateAttribution}
|
||||
\addcontentsline{toc}{chapter}{Template Attribution}
|
||||
\markboth{Template Attribution}{Template Attribution}
|
||||
\index{template attribution}
|
||||
\index{Muresan, Darian}
|
||||
This DevOps assignment template was developed by \textbf{Darian Muresan, Ph.D.},
|
||||
in conjunction with \textbf{OpenAI Codex} and \textbf{Anthropic Claude Code}.
|
||||
|
||||
\clearpage
|
||||
\begin{abstract}\input{abstract.tex}\end{abstract}
|
||||
\input{devopsDocumentHistory.tex}
|
||||
\contentspage
|
||||
\tablelistpage
|
||||
\figurelistpage
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
Reference in New Issue
Block a user