two/main/exploitation/diagnostic.html
2026-09-09 22:07:27 +00:00

587 lines
No EOL
31 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="fr" data-content_root="../" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Diagnostic &#8212; Documentation two 0.1.0</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
</script>
<!--
this give us a css class that will be invisible only if js is disabled
-->
<noscript>
<style>
.pst-js-only { display: none !important; }
</style>
</noscript>
<!-- Loaded before other Sphinx assets -->
<link href="../_static/styles/theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link href="../_static/styles/pydata-sphinx-theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=8f2a1f02" />
<link rel="stylesheet" type="text/css" href="../_static/styles/sphinx-book-theme.css?v=3c74b3bc" />
<!-- So that users can add custom icons -->
<script src="../_static/scripts/fontawesome.js?digest=8878045cc6db502f8baf"></script>
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" />
<link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
<script src="../_static/documentation_options.js?v=57395fb6"></script>
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../_static/scripts/sphinx-book-theme.js?v=fab101a9"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'exploitation/diagnostic';</script>
<script>
DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
DOCUMENTATION_OPTIONS.theme_switcher_json_url = '../switcher.json';
DOCUMENTATION_OPTIONS.theme_switcher_version_match = 'main';
DOCUMENTATION_OPTIONS.show_version_warning_banner =
false;
</script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Concepts" href="../concepts/index.html" />
<link rel="prev" title="Observabilité" href="observabilite.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="fr"/>
<meta name="docsearch:version" content="0.1" />
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Passer au contenu principal</a></div>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>Haut de page</button>
<dialog id="pst-search-dialog">
<form class="bd-search d-flex align-items-center"
action="../search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
placeholder="Search..."
aria-label="Search..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form>
</dialog>
<div class="pst-async-banner-revealer d-none">
<aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Alerte de version"></aside>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<dialog id="pst-primary-sidebar-modal"></dialog>
<div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<a class="navbar-brand logo" href="../index.html">
<p class="title logo__title">Documentation two 0.1.0</p>
</a></div>
<div class="sidebar-primary-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://git.g3e.fr/syonad/two" title="Dépôt" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-solid fa-code-branch fa-lg" aria-hidden="true"></i>
<span class="sr-only">Dépôt</span></a>
</li>
</ul></div>
<div class="sidebar-primary-item">
<div class="version-switcher__container dropdown pst-js-only">
<button id="pst-version-switcher-button-2"
type="button"
class="version-switcher__button btn btn-sm dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-2"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-2"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-2">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div></div>
<div class="sidebar-primary-item">
<button class="btn search-button-field search-button__button pst-js-only" title="Recherche" aria-label="Recherche" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Recherche</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button></div>
<div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
<div class="bd-toc-item navbar-nav active">
<ul class="nav bd-sidenav bd-sidenav__home-link">
<li class="toctree-l1">
<a class="reference internal" href="../index.html">
two
</a>
</li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Mise en œuvre</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../demarrage/index.html">Démarrage</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../demarrage/installation.html">Installation d’un hyperviseur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../demarrage/premier-vpc.html">Premier VPC, premier subnet, première VM</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../deploiement/index.html">Déploiement d’un cluster</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../deploiement/architecture-cluster.html">Architecture du cluster</a></li>
<li class="toctree-l2"><a class="reference internal" href="../deploiement/image-qcow2.html">Construction de l’image qcow2</a></li>
<li class="toctree-l2"><a class="reference internal" href="../deploiement/routeurs.html">Routeurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../deploiement/premier-hyperviseur.html">Premier hyperviseur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../deploiement/route-reflector.html">VM route reflector</a></li>
</ul>
</details></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Exploitation</span></p>
<ul class="current nav bd-sidenav">
<li class="toctree-l1 current active has-children"><a class="reference internal" href="index.html">Exploitation</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html">Services systemd</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api-agent/index.html">API de l’agent</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="api-agent/asynchronisme.html">Modèle asynchrone et codes de retour</a></li>
<li class="toctree-l3"><a class="reference internal" href="api-agent/reference.html">Référence</a></li>
</ul>
</details></li>
<li class="toctree-l2"><a class="reference internal" href="observabilite.html">Observabilité</a></li>
<li class="toctree-l2 current active"><a class="current reference internal" href="#">Diagnostic</a></li>
</ul>
</details></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Interne</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../concepts/index.html">Concepts</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../concepts/vpc-subnet-vm.html">VPC, subnet et VM</a></li>
<li class="toctree-l2"><a class="reference internal" href="../concepts/modes-reseau.html">Modes réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../concepts/cycle-de-vie.html">Cycle de vie des ressources</a></li>
<li class="toctree-l2"><a class="reference internal" href="../concepts/metadata-cloud-init.html">Metadata et cloud-init</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../architecture/index.html">Architecture</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../architecture/vue-densemble.html">Vue d’ensemble</a></li>
<li class="toctree-l2"><a class="reference internal" href="../architecture/stockage.html">Schéma des clés</a></li>
<li class="toctree-l2"><a class="reference internal" href="../architecture/contraintes.html">Invariants et pièges</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../versions/index.html">Versions</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../versions/0.2.0.html">Bael</a></li>
<li class="toctree-l2"><a class="reference internal" href="../versions/0.1.0.html">Michael</a></li>
</ul>
</details></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
<div class="sidebar-primary-item">
<div id="ethical-ad-placement"
class="flat"
data-ea-publisher="readthedocs"
data-ea-type="readthedocs-sidebar"
data-ea-manual="true">
</div></div>
</div>
</div>
<main id="main-content" class="bd-main" role="main">
<div class="sbt-scroll-pixel-helper"></div>
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article d-print-none">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-bars"></span>
</button></div>
</div>
<div class="header-article-items__end">
<div class="header-article-item">
<div class="article-header-buttons">
<button onclick="toggleFullScreen()"
class="btn btn-sm btn-fullscreen-button pst-navbar-icon"
title="Mode plein écran"
data-bs-placement="bottom" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-expand"></i>
</span>
</button>
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Thème" data-bs-title="Thème" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Clair"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Sombre"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="Paramètres système"></i>
</button>
<button class="btn btn-sm pst-navbar-icon search-button search-button__button pst-js-only" title="Recherche" aria-label="Recherche" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass fa-lg"></i>
</button>
<button class="sidebar-toggle secondary-toggle btn btn-sm pst-navbar-icon" title="Toggle secondary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-list"></span>
</button>
</div></div>
</div>
</div>
</div>
<div id="jb-print-docs-body" class="onlyprint">
<h1>Diagnostic</h1>
<!-- Table of contents -->
<div id="print-main-content">
<div id="jb-print-toc">
<div>
<h2> Contenu </h2>
</div>
<nav aria-label="Page">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-ressource-part-en-error-juste-apres-le-202">La ressource part en <code class="docutils literal notranslate"><span class="pre">error</span></code> juste après le 202</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-vm-demarre-mais-n-a-pas-d-adresse">La VM démarre mais n’a pas d’adresse</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-vm-a-une-adresse-mais-cloud-init-n-applique-rien">La VM a une adresse mais cloud-init n’applique rien</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#le-user-data-est-servi-vide">Le user-data est servi vide</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-vm-ne-demarre-pas-uefi">La VM ne démarre pas (UEFI)</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#le-delete-renvoie-409">Le <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> renvoie 409</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-base-et-le-systeme-ont-diverge">La base et le système ont divergé</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#l-agent-ne-redemarre-pas-apres-un-arret-brutal">L’agent ne redémarre pas après un arrêt brutal</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="diagnostic">
<h1>Diagnostic<a class="headerlink" href="#diagnostic" title="Lien vers cette rubrique">#</a></h1>
<p>Symptôme, cause probable, vérification. Les causes listées sont celles réellement rencontrées.</p>
<section id="la-ressource-part-en-error-juste-apres-le-202">
<h2>La ressource part en <code class="docutils literal notranslate"><span class="pre">error</span></code> juste après le 202<a class="headerlink" href="#la-ressource-part-en-error-juste-apres-le-202" title="Lien vers cette rubrique">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">Execute</span></code> a échoué : la cause est dans le journal de l’agent, pas dans la réponse HTTP.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>journalctl<span class="w"> </span>-u<span class="w"> </span>agent<span class="w"> </span>-n<span class="w"> </span><span class="m">100</span>
</pre></div>
</div>
<p>Cas fréquents :</p>
<ul class="simple">
<li><p>subnet en mode <code class="docutils literal notranslate"><span class="pre">public_ip</span></code> — la mise en place host n’est pas implémentée, l’échec est attendu ;</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">vxlan_id</span></code> déjà utilisé sur l’host ;</p></li>
<li><p>bridge cible absent : <code class="docutils literal notranslate"><span class="pre">iface_type</span></code> inconnu retombé sur <code class="docutils literal notranslate"><span class="pre">default_interface</span></code>, lui-même
inexistant.</p></li>
</ul>
<p>Avant toute recréation, émettre un <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> : il n’y a pas de rollback, les objets système
partiellement créés subsistent.</p>
</section>
<section id="la-vm-demarre-mais-n-a-pas-d-adresse">
<h2>La VM démarre mais n’a pas d’adresse<a class="headerlink" href="#la-vm-demarre-mais-n-a-pas-d-adresse" title="Lien vers cette rubrique">#</a></h2>
<p>Le DHCP est servi par une instance dédiée au subnet. Quelle unit selon <code class="docutils literal notranslate"><span class="pre">dhcp.backend</span></code> :</p>
<p><strong>Backend ``dnsmasq``</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>systemctl<span class="w"> </span>status<span class="w"> </span><span class="s1">'dnsmasq@&lt;netns&gt;_&lt;bridge&gt;'</span>
tail<span class="w"> </span>-50<span class="w"> </span>/var/log/dnsmasq-&lt;netns&gt;_&lt;bridge&gt;.log
cat<span class="w"> </span>/run/dnsmasq-&lt;netns&gt;_&lt;bridge&gt;.leases
cat<span class="w"> </span>/etc/dnsmasq.d/&lt;netns&gt;_&lt;bridge&gt;.conf
</pre></div>
</div>
<p><strong>Backend ``two``</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>systemctl<span class="w"> </span>status<span class="w"> </span><span class="s1">'dhcp@&lt;netns&gt;_&lt;bridge&gt;'</span>
journalctl<span class="w"> </span>-u<span class="w"> </span><span class="s1">'dhcp@&lt;netns&gt;_&lt;bridge&gt;'</span><span class="w"> </span>-n<span class="w"> </span><span class="m">50</span>
<span class="c1"># Ce que le serveur a réellement en mémoire</span>
<span class="nb">echo</span><span class="w"> </span><span class="s1">'{"verb":"get-state"}'</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span><span class="p">|</span><span class="w"> </span>socat<span class="w"> </span>-<span class="w"> </span>UNIX-CONNECT:/run/two/dhcp/&lt;netns&gt;_&lt;bridge&gt;.sock<span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>.
<span class="c1"># Ce qu'il enverrait à une MAC donnée, sans effet de bord</span>
<span class="nb">echo</span><span class="w"> </span><span class="s1">'{"verb":"probe","mac":"00:22:33:00:00:0A"}'</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span><span class="p">|</span><span class="w"> </span>socat<span class="w"> </span>-<span class="w"> </span>UNIX-CONNECT:/run/two/dhcp/&lt;netns&gt;_&lt;bridge&gt;.sock<span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>.lease
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">probe</span></code> est le point de départ le plus rapide : il montre l’adresse, le masque, le routeur, les
DNS et les routes classless tels qu’ils partiraient. Une réponse <code class="docutils literal notranslate"><span class="pre">&quot;served&quot;:</span> <span class="pre">false</span></code> signifie que
la MAC n’est pas réservée — l’ordre <code class="docutils literal notranslate"><span class="pre">set-host</span></code> n’a jamais atteint le serveur, ou la VM n’a pas
été créée par cet agent.</p>
<p>Le watchdog signale ces écarts de lui-même, à chaque tick, en comparant l’état servi à la base :
<code class="docutils literal notranslate"><span class="pre">dhcp</span> <span class="pre">reservation</span> <span class="pre">missing</span> <span class="pre">on</span> <span class="pre">the</span> <span class="pre">server</span></code>, <code class="docutils literal notranslate"><span class="pre">stale</span> <span class="pre">dhcp</span> <span class="pre">reservation</span></code>, <code class="docutils literal notranslate"><span class="pre">dhcp</span> <span class="pre">reservation</span>
<span class="pre">diverges</span></code>. Regarder ses notifications avant de sonder à la main.</p>
<p>Si le serveur ne voit passer aucune requête, le problème est en amont : tap absent, bridge non
raccordé, VM dans le mauvais netns.</p>
</section>
<section id="la-vm-a-une-adresse-mais-cloud-init-n-applique-rien">
<h2>La VM a une adresse mais cloud-init n’applique rien<a class="headerlink" href="#la-vm-a-une-adresse-mais-cloud-init-n-applique-rien" title="Lien vers cette rubrique">#</a></h2>
<p>Deux causes distinctes, à écarter dans cet ordre.</p>
<p><strong>1. La VM porte déjà cet ``instance-id``.</strong> <code class="docutils literal notranslate"><span class="pre">instance-id</span></code> vaut le nom de la VM : sur un disque
déjà provisionné sous le même nom, cloud-init considère l’instance connue et ne rejoue pas le
user-data. Vérification dans le guest :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>cloud-init<span class="w"> </span>query<span class="w"> </span>instance-id
ls<span class="w"> </span>/var/lib/cloud/instances/
</pre></div>
</div>
<p><strong>2. Le serveur de metadata est injoignable.</strong> Depuis le guest :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ip<span class="w"> </span>route
curl<span class="w"> </span>-s<span class="w"> </span>http://169.254.169.254/latest/meta-data/
</pre></div>
</div>
<p>La route <code class="docutils literal notranslate"><span class="pre">169.254.169.254/32</span></code> doit être présente, avec l”<code class="docutils literal notranslate"><span class="pre">interface_ip</span></code> du subnet comme
next-hop. Si elle est absente ou pointe ailleurs, la DNAT posée en <code class="docutils literal notranslate"><span class="pre">PREROUTING</span></code> dans le netns
n’est jamais traversée : la trame est commutée en L2 et le serveur reste injoignable. Voir
<a class="reference internal" href="../concepts/modes-reseau.html"><span class="doc">Modes réseau</span></a>.</p>
<p>Depuis l’host, l’instance correspondante :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>systemctl<span class="w"> </span>status<span class="w"> </span><span class="s1">'metadata@&lt;vm&gt;'</span>
ls<span class="w"> </span>-l<span class="w"> </span>/run/two/metadata/&lt;vm&gt;/
</pre></div>
</div>
</section>
<section id="le-user-data-est-servi-vide">
<h2>Le user-data est servi vide<a class="headerlink" href="#le-user-data-est-servi-vide" title="Lien vers cette rubrique">#</a></h2>
<p>Un document fourni explicitement vide est servi vide — ce n’est pas la même chose qu’un document
absent, qui retombe sur le template. Vérifier le contenu réellement écrit :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>cat<span class="w"> </span>/run/two/metadata/&lt;vm&gt;/user-data
</pre></div>
</div>
<p>Un base64 invalide, lui, aurait été rejeté en 400 à la création.</p>
</section>
<section id="la-vm-ne-demarre-pas-uefi">
<h2>La VM ne démarre pas (UEFI)<a class="headerlink" href="#la-vm-ne-demarre-pas-uefi" title="Lien vers cette rubrique">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">uefi:</span> <span class="pre">true</span></code> exige les fichiers OVMF déclarés dans la configuration :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ls<span class="w"> </span>-l<span class="w"> </span>/usr/share/OVMF/OVMF_CODE.fd<span class="w"> </span>/usr/share/OVMF/OVMF_VARS.fd
ls<span class="w"> </span>-l<span class="w"> </span>/run/two/vms/efi/
</pre></div>
</div>
<p>Sur Debian et Ubuntu, le paquet est <code class="docutils literal notranslate"><span class="pre">ovmf</span></code>.</p>
</section>
<section id="le-delete-renvoie-409">
<h2>Le <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> renvoie 409<a class="headerlink" href="#le-delete-renvoie-409" title="Lien vers cette rubrique">#</a></h2>
<p>La suppression n’est autorisée que depuis <code class="docutils literal notranslate"><span class="pre">running</span></code> ou <code class="docutils literal notranslate"><span class="pre">error</span></code>. Depuis <code class="docutils literal notranslate"><span class="pre">creating</span></code> ou
<code class="docutils literal notranslate"><span class="pre">deleting</span></code>, attendre l’état stable. Pour un VPC, tous les subnets doivent être supprimés
d’abord.</p>
</section>
<section id="la-base-et-le-systeme-ont-diverge">
<h2>La base et le système ont divergé<a class="headerlink" href="#la-base-et-le-systeme-ont-diverge" title="Lien vers cette rubrique">#</a></h2>
<p>Le watchdog signale une ressource <code class="docutils literal notranslate"><span class="pre">running</span></code> absente du système. Il ne répare rien : la
correction est un <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> explicite suivi d’une recréation. Après un redémarrage de l’agent,
les ressources restées transitoires sont basculées en <code class="docutils literal notranslate"><span class="pre">error</span></code> par la migration de démarrage —
elles n’ont pas forcément échoué, elles ont été interrompues.</p>
</section>
<section id="l-agent-ne-redemarre-pas-apres-un-arret-brutal">
<h2>L’agent ne redémarre pas après un arrêt brutal<a class="headerlink" href="#l-agent-ne-redemarre-pas-apres-un-arret-brutal" title="Lien vers cette rubrique">#</a></h2>
<p>Badger rejoue son journal au démarrage : c’est normal et attendu, notamment si le budget d’arrêt
précédent a été dépassé et que la base n’a pas été fermée. Si le démarrage échoue vraiment, le
message se trouve dans <code class="docutils literal notranslate"><span class="pre">journalctl</span> <span class="pre">-u</span> <span class="pre">agent</span></code>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Les VM ne sont pas réattachées au redémarrage de l’agent : un processus QEMU survivant à
l’agent n’est plus piloté par lui.</p>
</div>
</section>
</section>
</article>
<footer class="prev-next-footer d-print-none">
<div class="prev-next-area">
<a class="left-prev"
href="observabilite.html"
title="page précédente">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">précédent</p>
<p class="prev-next-title">Observabilité</p>
</div>
</a>
<a class="right-next"
href="../concepts/index.html"
title="page suivante">
<div class="prev-next-info">
<p class="prev-next-subtitle">suivant</p>
<p class="prev-next-title">Concepts</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<dialog id="pst-secondary-sidebar-modal"></dialog>
<div id="pst-secondary-sidebar" class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item"><div
id="pst-page-navigation-heading-2"
class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> Contenu
</div>
<nav id="pst-page-toc-nav" class="page-toc" aria-labelledby="pst-page-navigation-heading-2">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-ressource-part-en-error-juste-apres-le-202">La ressource part en <code class="docutils literal notranslate"><span class="pre">error</span></code> juste après le 202</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-vm-demarre-mais-n-a-pas-d-adresse">La VM démarre mais n’a pas d’adresse</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-vm-a-une-adresse-mais-cloud-init-n-applique-rien">La VM a une adresse mais cloud-init n’applique rien</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#le-user-data-est-servi-vide">Le user-data est servi vide</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-vm-ne-demarre-pas-uefi">La VM ne démarre pas (UEFI)</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#le-delete-renvoie-409">Le <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> renvoie 409</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#la-base-et-le-systeme-ont-diverge">La base et le système ont divergé</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#l-agent-ne-redemarre-pas-apres-un-arret-brutal">L’agent ne redémarre pas après un arrêt brutal</a></li>
</ul>
</nav></div>
</div></div>
</div>
<footer class="bd-footer-content">
<div class="bd-footer-content__inner container">
<div class="footer-item">
<p class="component-author">
Par Nicolas Boufidjeline
</p>
</div>
<div class="footer-item">
<p class="copyright">
© Copyright 2026, Nicolas Boufidjeline.
<br/>
</p>
</div>
<div class="footer-item">
</div>
<div class="footer-item">
</div>
</div>
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script defer src="../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf"></script>
<script defer src="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf"></script>
<footer class="bd-footer">
</footer>
</body>
</html>