feat: add 'What is it?' slides for Terraform, Ansible, Puppet

- Slide 13: Terraform — HashiCorp, 2014, Go, BSL license
- Slide 22: Ansible — Michael DeHaan/Red Hat, 2012, Python, Apache 2.0
- Slide 30: Puppet — Luke Kanies/Perforce, 2005, Ruby/Clojure

Renumber slides 1-39.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-04-14 02:19:39 +02:00
parent 9dd6d89c43
commit 6a482c0445

View File

@@ -544,7 +544,19 @@
<p>Start here. Before you configure a server, you need to have one.</p>
</section>
<!-- ─── SLIDE 13 : Terraform concepts ───────────────────────────── -->
<!-- ─── SLIDE 13 : What is Terraform ────────────────────────────── -->
<section class="s-tf">
<h2>What is Terraform?</h2>
<ul>
<li><strong>Infrastructure as Code</strong> tool for provisioning cloud resources</li>
<li>Created by <strong>HashiCorp</strong> in 2014</li>
<li>Written in <strong>Go</strong></li>
<li>BSL license since 2023 (was MPL)</li>
</ul>
</section>
<!-- ─── SLIDE 14 : Terraform concepts ───────────────────────────── -->
<section class="s-tf">
<h2>HCL: HashiCorp Configuration Language</h2>
<p>Declarative, human-readable — pure JSON works too.</p>
@@ -604,7 +616,7 @@
</svg>
</section>
<!-- ─── SLIDE 14 : Terraform state ──────────────────────────────── -->
<!-- ─── SLIDE 15 : Terraform state ──────────────────────────────── -->
<section class="s-tf">
<h2>Terraform remembers what it built.</h2>
<ul>
@@ -675,7 +687,7 @@
</svg>
</section>
<!-- ─── SLIDE 15 : Terraform providers ──────────────────────────── -->
<!-- ─── SLIDE 16 : Terraform providers ──────────────────────────── -->
<section class="s-tf">
<h2>One tool. Every API.</h2>
<ul>
@@ -685,7 +697,7 @@
<p><em>If it has an API, there's a Terraform provider for it.</em></p>
</section>
<!-- ─── SLIDE 16 : Terraform code ───────────────────────────────── -->
<!-- ─── SLIDE 17 : Terraform code ───────────────────────────────── -->
<section class="s-tf">
<p class="filename"># main.tf</p>
<pre><code class="language-hcl" data-trim>
@@ -712,7 +724,7 @@ resource "ovh_domain_zone_record" "web" {
</code></pre>
</section>
<!-- ─── SLIDE 17 : Terraform CLI ────────────────────────────────── -->
<!-- ─── SLIDE 18 : Terraform CLI ────────────────────────────────── -->
<section class="s-tf">
<p class="filename">$ terminal</p>
<pre><code class="language-bash" data-trim data-noescape>
@@ -738,7 +750,7 @@ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
</code></pre>
</section>
<!-- ─── SLIDE 18 : OpenTofu ─────────────────────────────────────── -->
<!-- ─── SLIDE 19 : OpenTofu ─────────────────────────────────────── -->
<section class="s-tf">
<h2>HashiCorp changed Terraform's license.</h2>
<ul>
@@ -748,7 +760,7 @@ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
<p><em>Drop-in replacement. Fully compatible. Community-driven.</em></p>
</section>
<!-- ─── SLIDE 19 : Terraform platforms ──────────────────────────── -->
<!-- ─── SLIDE 20 : Terraform platforms ──────────────────────────── -->
<section class="s-tf">
<h2>Terraform at scale needs a platform.</h2>
<ul>
@@ -759,13 +771,25 @@ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
</ul>
</section>
<!-- ─── SLIDE 20 : Ansible intro ────────────────────────────────── -->
<!-- ─── SLIDE 21 : Ansible intro ────────────────────────────────── -->
<section class="s-ansible">
<h2><span class="ansible-col">Ansible</span></h2>
<p>Your servers are provisioned. Now make them do something.</p>
</section>
<!-- ─── SLIDE 21 : Ansible concepts ─────────────────────────────── -->
<!-- ─── SLIDE 22 : What is Ansible ──────────────────────────────── -->
<section class="s-ansible">
<h2>What is Ansible?</h2>
<ul>
<li><strong>Agentless automation</strong> tool for configuration and orchestration</li>
<li>Created by <strong>Michael DeHaan</strong> in 2012</li>
<li>Acquired by <strong>Red Hat</strong> in 2015</li>
<li>Written in <strong>Python</strong> — Apache 2.0 license</li>
</ul>
</section>
<!-- ─── SLIDE 23 : Ansible concepts ─────────────────────────────── -->
<section class="s-ansible">
<h2>Push, not pull. SSH, not agents.</h2>
<ul>
@@ -810,7 +834,7 @@ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
</svg>
</section>
<!-- ─── SLIDE 22 : Ansible code ─────────────────────────────────── -->
<!-- ─── SLIDE 24 : Ansible code ─────────────────────────────────── -->
<section class="s-ansible">
<p class="filename"># playbook/webserver.yml</p>
<pre><code class="language-yaml" data-trim>
@@ -838,7 +862,7 @@ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
</code></pre>
</section>
<!-- ─── SLIDE 23 : Ansible CLI ──────────────────────────────────── -->
<!-- ─── SLIDE 25 : Ansible CLI ──────────────────────────────────── -->
<section class="s-ansible">
<p class="filename">$ terminal</p>
<pre><code class="language-bash" data-trim data-noescape>
@@ -863,7 +887,7 @@ finistdevs-web : ok=4 changed=3 unreachable=0 failed=0 skipped=0
</code></pre>
</section>
<!-- ─── SLIDE 24 : Ansible operations ───────────────────────────── -->
<!-- ─── SLIDE 26 : Ansible operations ───────────────────────────── -->
<section class="s-ansible">
<h2>Not just configuration. Operations.</h2>
<ul>
@@ -874,7 +898,7 @@ finistdevs-web : ok=4 changed=3 unreachable=0 failed=0 skipped=0
<p><em>The go-to tool for one-off tasks and recurring operations.</em></p>
</section>
<!-- ─── SLIDE 25 : Ansible Galaxy ───────────────────────────────── -->
<!-- ─── SLIDE 27 : Ansible Galaxy ───────────────────────────────── -->
<section class="s-ansible">
<h2>The community does the heavy lifting.</h2>
<ul>
@@ -884,7 +908,7 @@ finistdevs-web : ok=4 changed=3 unreachable=0 failed=0 skipped=0
<p><em>Just <code>ansible-galaxy install geerlingguy.docker</code>.</em></p>
</section>
<!-- ─── SLIDE 26 : Ansible platforms ────────────────────────────── -->
<!-- ─── SLIDE 28 : Ansible platforms ────────────────────────────── -->
<section class="s-ansible">
<h2>Ansible at scale: open-source vs enterprise.</h2>
<ul>
@@ -895,13 +919,25 @@ finistdevs-web : ok=4 changed=3 unreachable=0 failed=0 skipped=0
<p><em>Core engine remains Apache 2.0 — truly open-source.</em></p>
</section>
<!-- ─── SLIDE 27 : Puppet intro ─────────────────────────────────── -->
<!-- ─── SLIDE 29 : Puppet intro ─────────────────────────────────── -->
<section class="s-puppet">
<h2><span class="puppet-col">Puppet</span></h2>
<p>Your servers are configured. Now keep them that way.</p>
</section>
<!-- ─── SLIDE 28 : Puppet concepts ──────────────────────────────── -->
<!-- ─── SLIDE 30 : What is Puppet ───────────────────────────────── -->
<section class="s-puppet">
<h2>What is Puppet?</h2>
<ul>
<li><strong>Configuration management</strong> tool for enforcing system state</li>
<li>Created by <strong>Luke Kanies</strong> in 2005</li>
<li>Puppet Inc. acquired by <strong>Perforce</strong> in 2022</li>
<li>Written in <strong>Ruby</strong> and <strong>Clojure</strong></li>
</ul>
</section>
<!-- ─── SLIDE 31 : Puppet concepts ──────────────────────────────── -->
<section class="s-puppet">
<h2>Pull, not push. Agents, not SSH.</h2>
<ul>
@@ -945,7 +981,7 @@ finistdevs-web : ok=4 changed=3 unreachable=0 failed=0 skipped=0
</svg>
</section>
<!-- ─── SLIDE 29 : Puppet code ──────────────────────────────────── -->
<!-- ─── SLIDE 32 : Puppet code ──────────────────────────────────── -->
<section class="s-puppet">
<p class="filename"># manifests/webserver.pp</p>
<pre><code class="language-puppet" data-trim>
@@ -968,7 +1004,7 @@ class webserver {
</code></pre>
</section>
<!-- ─── SLIDE 30 : Puppet CLI ───────────────────────────────────── -->
<!-- ─── SLIDE 33 : Puppet CLI ───────────────────────────────────── -->
<section class="s-puppet">
<p class="filename">$ terminal</p>
<pre><code class="language-bash" data-trim data-noescape>
@@ -988,7 +1024,7 @@ Notice: Applied catalog in 12.34 seconds
</code></pre>
</section>
<!-- ─── SLIDE 31 : Puppet drift detection ───────────────────────── -->
<!-- ─── SLIDE 34 : Puppet drift detection ───────────────────────── -->
<section class="s-puppet">
<h2>Someone SSH'd in and changed something.</h2>
<ul>
@@ -1029,7 +1065,7 @@ Notice: Applied catalog in 12.34 seconds
</svg>
</section>
<!-- ─── SLIDE 32 : Puppet platforms ─────────────────────────────── -->
<!-- ─── SLIDE 35 : Puppet platforms ─────────────────────────────── -->
<section class="s-puppet">
<h2>Puppet: large fleets, zero drift.</h2>
<ul>
@@ -1040,7 +1076,7 @@ Notice: Applied catalog in 12.34 seconds
<p><em>Puppet Enterprise and Foreman are self-hosted. No managed cloud offering.</em></p>
</section>
<!-- ─── SLIDE 33 : Puppet community ─────────────────────────────── -->
<!-- ─── SLIDE 36 : Puppet community ─────────────────────────────── -->
<section class="s-puppet">
<h2>The ecosystem outlives the company.</h2>
<ul>
@@ -1050,7 +1086,7 @@ Notice: Applied catalog in 12.34 seconds
<p><em>The community is strong, with or without Puppet Inc.</em></p>
</section>
<!-- ─── SLIDE 34 : They're complementary ────────────────────────── -->
<!-- ─── SLIDE 37 : They're complementary ────────────────────────── -->
<section>
<h2>They're not competing. They're complementary.</h2>
<p>Each solves a different layer of the same problem.</p>
@@ -1087,7 +1123,7 @@ Notice: Applied catalog in 12.34 seconds
</svg>
</section>
<!-- ─── SLIDE 35 : Real-world stack ─────────────────────────────── -->
<!-- ─── SLIDE 38 : Real-world stack ─────────────────────────────── -->
<section>
<h2>A common production setup:</h2>
<ol>
@@ -1097,7 +1133,7 @@ Notice: Applied catalog in 12.34 seconds
</ol>
</section>
<!-- ─── SLIDE 36 : Closing ──────────────────────────────────────── -->
<!-- ─── SLIDE 39 : Closing ──────────────────────────────────────── -->
<section class="title-slide">
<h1>Questions?</h1>
<p class="subtitle">Thank you!</p>