138 lines
5.6 KiB
HTML
138 lines
5.6 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Configuration as Code — Puppet vs Ansible vs Terraform</title>
|
|
|
|
<!-- Reveal.js CDN -->
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reset.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reveal.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/theme/moon.css">
|
|
|
|
<!-- Highlight.js for code blocks -->
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/plugin/highlight/monokai.css">
|
|
|
|
<style>
|
|
:root {
|
|
--puppet-color: #FFAE1A;
|
|
--ansible-color: #EE0000;
|
|
--terraform-color: #7B42BC;
|
|
}
|
|
|
|
.reveal .slides section {
|
|
text-align: left;
|
|
}
|
|
|
|
.reveal h1, .reveal h2 {
|
|
text-align: left;
|
|
}
|
|
|
|
.reveal h1 { font-size: 1.8em; }
|
|
.reveal h2 { font-size: 1.4em; line-height: 1.2; }
|
|
.reveal p, .reveal li { font-size: 0.85em; }
|
|
.reveal code { font-size: 0.7em; }
|
|
.reveal pre { width: 100%; }
|
|
|
|
.title-slide { text-align: center !important; }
|
|
.title-slide h1 { text-align: center; font-size: 2em; margin-bottom: 0.2em; }
|
|
.title-slide .subtitle { font-size: 1em; color: #aaa; }
|
|
.title-slide .meta { font-size: 0.7em; color: #888; margin-top: 1em; }
|
|
|
|
.puppet-col { color: var(--puppet-color); }
|
|
.ansible-col { color: var(--ansible-color); }
|
|
.tf-col { color: var(--terraform-color); }
|
|
|
|
.filename {
|
|
font-family: monospace;
|
|
font-size: 0.65em;
|
|
color: #888;
|
|
margin-bottom: 0.2em;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="reveal">
|
|
<div class="slides">
|
|
|
|
<!-- ─── SLIDE 1 : Title ─────────────────────────────────────────── -->
|
|
<section class="title-slide">
|
|
<h1>⚙️ Configuration as Code</h1>
|
|
<p class="subtitle">Puppet · Ansible · Terraform<br>— What's the difference and when to use what? —</p>
|
|
<p class="meta">FinistDevs · 2026</p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 2 : Speaker intro ────────────────────────────────── -->
|
|
<section>
|
|
<h2>Arnaud Prémel-Cabic</h2>
|
|
<p>Tech Lead @ OVHCloud</p>
|
|
<p style="color:#888; font-size:0.75em;">arnaud.premel-cabic@ovhcloud.com</p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 3 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>"It works on my server."</h2>
|
|
<p><em>Or: why doesn't it work here, when it works everywhere else?</em></p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 4 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>You have a server. It works.</h2>
|
|
<p><em>Great.</em></p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 5 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>You have 10 servers.</h2>
|
|
<p><em>Still manageable… but every small change means 10 SSH sessions, 10 vim edits, 10 chances to make a mistake.</em></p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 6 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>Now you have 100 servers.</h2>
|
|
<p><em>Some 2 years old. Some a couple of months. Some freshly provisioned.<br>None of them are exactly alike.</em></p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 7 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>Each one is unique. Unreproducible. Undocumented.</h2>
|
|
<p><em>Welcome to Snowflake Hell.</em></p>
|
|
<img src="https://media.giphy.com/media/QMHoU66sBXqqLqYvGO/giphy.gif"
|
|
alt="This is fine"
|
|
style="height:220px; margin-top:0.5em; border-radius:6px;">
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 8 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>Configuration drift is silent… until it isn't.</h2>
|
|
<p><em>Prod breaks on a Tuesday. You can't reproduce the bug locally. You can't scale reliably. You can't onboard a new server without fear.</em></p>
|
|
</section>
|
|
|
|
<!-- ─── SLIDE 9 ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<h2>What if your infrastructure was just… code?</h2>
|
|
<p><em>Yes, even your AI assistant can write it. But you still need to understand what it deploys.</em></p>
|
|
</section>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reveal.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/plugin/notes/notes.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/plugin/highlight/highlight.js"></script>
|
|
<script>
|
|
Reveal.initialize({
|
|
hash: true,
|
|
slideNumber: 'c/t',
|
|
transition: 'slide',
|
|
backgroundTransition: 'fade',
|
|
controls: true,
|
|
progress: true,
|
|
center: false,
|
|
plugins: [ RevealNotes, RevealHighlight ]
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|