From a706c653296bc61df7b5d89ce55a78f8ab4856cf Mon Sep 17 00:00:00 2001 From: ministicraft Date: Mon, 13 Apr 2026 22:53:12 +0200 Subject: [PATCH] Sync: CSS cleanup + slides 1-3 from master Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- index.html | 371 +++-------------------------------------------------- 1 file changed, 17 insertions(+), 354 deletions(-) diff --git a/index.html b/index.html index 1085efb..03b8335 100644 --- a/index.html +++ b/index.html @@ -25,91 +25,30 @@ } .reveal h1, .reveal h2 { - text-align: center; + text-align: left; } .reveal h1 { font-size: 1.8em; } - .reveal h2 { font-size: 1.3em; } - .reveal p, .reveal li { font-size: 0.78em; } + .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 { font-size: 2em; margin-bottom: 0.2em; } + .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; } - .tag { - display: inline-block; - padding: 2px 10px; - border-radius: 4px; - font-size: 0.55em; - font-weight: bold; - vertical-align: middle; - margin-left: 8px; - } - .tag-puppet { background: var(--puppet-color); color: #000; } - .tag-ansible { background: var(--ansible-color); color: #fff; } - .tag-tf { background: var(--terraform-color);color: #fff; } - - .card-row { - display: flex; - gap: 1em; - margin-top: 0.5em; - } - .card { - flex: 1; - border-radius: 8px; - padding: 0.7em 1em; - font-size: 0.7em; - } - .card-puppet { border: 2px solid var(--puppet-color); background: rgba(255,174,26,0.08); } - .card-ansible { border: 2px solid var(--ansible-color); background: rgba(238,0,0,0.08); } - .card-tf { border: 2px solid var(--terraform-color);background: rgba(123,66,188,0.08); } - .card h3 { margin: 0 0 0.4em; font-size: 1.1em; } - .card ul { margin: 0; padding-left: 1.2em; } - - .comparison-table { - width: 100%; - border-collapse: collapse; - font-size: 0.62em; - margin-top: 0.5em; - } - .comparison-table th, .comparison-table td { - border: 1px solid rgba(255,255,255,0.2); - padding: 0.4em 0.6em; - text-align: center; - } - .comparison-table th { background: rgba(255,255,255,0.1); } - .comparison-table td:first-child { text-align: left; font-weight: bold; } .puppet-col { color: var(--puppet-color); } .ansible-col { color: var(--ansible-color); } .tf-col { color: var(--terraform-color); } - .highlight-box { - border-left: 4px solid #4CAF50; - background: rgba(76,175,80,0.1); - padding: 0.5em 1em; - margin: 0.5em 0; - border-radius: 0 6px 6px 0; - font-size: 0.75em; + .filename { + font-family: monospace; + font-size: 0.65em; + color: #888; + margin-bottom: 0.2em; } - - .agenda-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.5em; - margin-top: 0.5em; - } - .agenda-item { - background: rgba(255,255,255,0.07); - border-radius: 6px; - padding: 0.5em 0.8em; - font-size: 0.75em; - } - .agenda-item .num { font-size: 1.3em; font-weight: bold; color: #888; } - - .emoji { font-style: normal; } @@ -120,298 +59,22 @@

⚙️ Configuration as Code

Puppet · Ansible · Terraform
— What's the difference and when to use what? —

-

Finistère Dev Meetup · 2026

+

FinistDevs · 2026

- +
-

📋 Agenda

-
-
01
What is Configuration as Code?
-
02
The IaC landscape
-
03
Puppet — Declare your state
-
04
Ansible — Automate everything
-
05
Terraform — Provision infrastructure
-
06
Comparison & when to use what
-
+

Arnaud Prémel-Cabic

+

Tech Lead @ OVHCloud

+

arnaud.premel-cabic@ovhcloud.com

- +
-

🤔 What is Configuration as Code?

-
- Managing infrastructure and system configuration through machine-readable files stored in version control — just like application code. -
- +

You have a server. It works.

+

Great.

- -
-

🌍 The IaC Landscape

-

Three main problem spaces:

-
-
-

🐾 Configuration
Management

-
    -
  • Install / configure software
  • -
  • Enforce desired state on servers
  • -
  • Puppet, Chef, Salt
  • -
-
-
-

⚡ Orchestration &
Automation

-
    -
  • Run tasks across many hosts
  • -
  • Deploy apps, pipelines
  • -
  • Ansible, Fabric
  • -
-
-
-

🏗️ Infrastructure
Provisioning

-
    -
  • Create VMs, networks, DNS…
  • -
  • Cloud-agnostic
  • -
  • Terraform, Pulumi, OpenTofu
  • -
-
-
-
- - -
-

🐾 Puppet Configuration Management

- -
- 💡 Great for large fleets where continuous compliance and drift detection matter. -
-
- - -
-

🐾 Puppet — Example

-

-# manifests/webserver.pp
-class webserver {
-  package { 'nginx':
-    ensure => installed,
-  }
-
-  file { '/etc/nginx/nginx.conf':
-    ensure  => file,
-    content => template('webserver/nginx.conf.erb'),
-    notify  => Service['nginx'],
-  }
-
-  service { 'nginx':
-    ensure  => running,
-    enable  => true,
-  }
-}
-    
-

🔁 Run again → idempotent: only changes what diverged from the desired state

-
- - -
-

⚡ Ansible Automation & Orchestration

- -
- 💡 Great for ad-hoc tasks, app deployments, and quick automation without setup overhead. -
-
- - -
-

⚡ Ansible — Example

-

-# playbook/webserver.yml
-- name: Configure web server
-  hosts: webservers
-  become: true
-
-  tasks:
-    - name: Install nginx
-      ansible.builtin.package:
-        name: nginx
-        state: present
-
-    - name: Copy nginx config
-      ansible.builtin.template:
-        src: nginx.conf.j2
-        dest: /etc/nginx/nginx.conf
-      notify: Restart nginx
-
-    - name: Ensure nginx is running
-      ansible.builtin.service:
-        name: nginx
-        state: started
-        enabled: true
-
-  handlers:
-    - name: Restart nginx
-      ansible.builtin.service:
-        name: nginx
-        state: restarted
-    
-
- - -
-

🏗️ Terraform Infrastructure Provisioning

- -
- 💡 Great for creating and managing cloud resources — VMs, networks, DNS, databases… -
-
- - -
-

🏗️ Terraform — Example

-

-# main.tf
-terraform {
-  required_providers {
-    aws = { source = "hashicorp/aws", version = "~> 5.0" }
-  }
-}
-
-provider "aws" { region = "eu-west-3" }
-
-resource "aws_instance" "web" {
-  ami           = "ami-0c55b159cbfafe1f0"
-  instance_type = "t3.micro"
-
-  tags = { Name = "meetup-webserver" }
-}
-
-output "public_ip" {
-  value = aws_instance.web.public_ip
-}
-    
-

🗺️ terraform plan shows a diff · terraform apply creates resources · terraform destroy removes them

-
- - -
-

📊 Comparison at a Glance

- - - - - - - - - - - - - - - - - - - -
🐾 Puppet⚡ Ansible🏗️ Terraform
Primary focusConfig managementAutomation / OrchestrationInfrastructure provisioning
LanguagePuppet DSLYAMLHCL
ApproachDeclarativeProcedural + idempotentDeclarative
Push / PullPullPushPush (via API)
Agent neededYesNoNo
State fileCatalog (server)None (stateless)Yes (.tfstate)
Cloud resourcesLimitedYes (modules)Excellent
Learning curveHighLowMedium
-
- - -
-

🎯 When to Use What?

-
-
-

🐾 Use Puppet when…

-
    -
  • Large fleet (100s–1000s of servers)
  • -
  • Continuous compliance / drift detection
  • -
  • Enterprise, strict governance
  • -
  • Long-running servers (pets)
  • -
-
-
-

⚡ Use Ansible when…

-
    -
  • Agentless is a must
  • -
  • Quick automation or one-off tasks
  • -
  • App deployment & pipelines
  • -
  • Already using Red Hat / AWX
  • -
-
-
-

🏗️ Use Terraform when…

-
    -
  • Creating cloud infrastructure
  • -
  • Multi-cloud or hybrid environments
  • -
  • Preview changes before applying
  • -
  • Immutable infra (cattle, not pets)
  • -
-
-
-
- - -
-

🤝 They Work Together!

-
- These tools are complementary, not mutually exclusive. -
-

A common real-world stack:

-
    -
  1. Terraform provisions the VM on AWS/Azure/GCP
  2. -
  3. Ansible bootstraps the OS, installs base packages, deploys the app
  4. -
  5. Puppet continuously enforces compliance and manages config drift
  6. -
-

- → Right tool for the right layer of the stack -

-
- - -
-

💡 Key Takeaways

- -
- - -
-

🙋 Questions?

-

Thank you!

-

- Slides made with Reveal.js
- Finistère Dev Meetup · 2026 -

-