<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Florentin Dubois, Author at Clever Cloud</title>
	<atom:link href="https://stagingv6.cleverapps.io/fr/blog/author/florentin-duboisclever-cloud-com/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>From Code to Product</description>
	<lastBuildDate>Wed, 20 Dec 2023 15:06:05 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Florentin Dubois, Author at Clever Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Retrait de TLS 1.0 et 1.1 de nos load balancers le 30 juin</title>
		<link>https://stagingv6.cleverapps.io/fr/blog/entreprise/2022/05/03/retrait-de-tls-1-0-et-1-1-de-nos-load-balancers-le-30-juin/</link>
		
		<dc:creator><![CDATA[Florentin Dubois]]></dc:creator>
		<pubDate>Tue, 03 May 2022 08:24:47 +0000</pubDate>
				<category><![CDATA[Entreprise]]></category>
		<category><![CDATA[fonctionnalité]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=6285</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="tls" decoding="async" fetchpriority="high" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-1368x528.png 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>Lorsque vous accédez à un site ou une application en ligne, vous le faites le plus souvent de manière dite "sécurisée". C'est par exemple le fameux cadenas vert qui symbolise les connexions HTTPS dans votre navigateur, qui est devenu la norme depuis quelques années grâce à des initiatives comme <a href="https://stagingv6.cleverapps.io/blog/features/2019/01/15/automatic-lets-encrypt-certificates/" target="_blank" rel="noreferrer noopener">Let's Encrypt</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela signifie que les données transférées au serveur sont chiffrées, et que même si elles sont interceptées, elles sont illisibles par un tiers. Une protection assurée par le protocole TLS (<a href="https://fr.wikipedia.org/wiki/Transport_Layer_Security" target="_blank" rel="noreferrer noopener">Transport Layer Security</a>) depuis près de 20 ans, qu'il s'agisse d'un site personnel, de vente en ligne ou même d'accès aux services de votre banque.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À travers le temps, cette brique technique essentielle sur Internet a évolué pour renforcer le niveau de sécurité qu'elle offre. En août 2018, <a href="https://www.ietf.org/blog/tls13/" target="_blank" rel="noreferrer noopener">sa version 1.3</a> (la dernière en date) était publiée. Les versions 1.0 et 1.1 sont, elles, considérées comme n'offrant plus un niveau de protection suffisant. Elles <a href="https://datatracker.ietf.org/doc/html/rfc8996" target="_blank" rel="noreferrer noopener">sont ainsi dépréciées</a> par l'IETF (Internet Engineering Task Force) depuis mars 2021 et ont été progressivement retirées des navigateurs récents comme Firefox, Chrome et ses dérivés ou Safari.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6281,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/05/sans-titre.webp" alt="Clever Cloud Sōzu TLS Versions" class="wp-image-6281"/><figcaption class="wp-element-caption">TLS 1.3 représente plus de 90 % des requêtes quotidiennes</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous avons vu nos clients suivre ce mouvement et adopter peu à peu TLS 1.2 et 1.3. Sur nos load balancers, basés sur notre reverse proxy maison et open source <a href="https://www.sozu.io/" target="_blank" rel="noreferrer noopener">Sōzu</a>, la version la plus récente représente plus de 90 % des requêtes traitées chaque jour. TLS 1.2 compte pour un peu moins de 9 %. TLS 1.0 et 1.1 seulement quelques dizaines de milliers de requêtes par jour, moins de 0,1 % de notre trafic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si nous avons continué à gérer ces versions pour des questions de compatibilité, ce ne sera plus le cas à compter du 30 juin prochain. Nous allons bien entendu informer les clients concernés par cette démarche, et les inciter à passer sur des versions plus récentes, ce qui aura pour eux des avantages tant en termes de sécurité que de performance ou même de référencement.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Plusieurs rappels leur seront envoyés d'ici à la coupure définitive de TLS 1.0 et 1.1. En cas de questions à ce sujet, contactez notre support via <a href="https://console.clever-cloud.com/" target="_blank" rel="noreferrer noopener">la Console</a>.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="tls" decoding="async" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/banniere-tls-1368x528.png 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>Lorsque vous accédez à un site ou une application en ligne, vous le faites le plus souvent de manière dite "sécurisée". C'est par exemple le fameux cadenas vert qui symbolise les connexions HTTPS dans votre navigateur, qui est devenu la norme depuis quelques années grâce à des initiatives comme <a href="https://stagingv6.cleverapps.io/blog/features/2019/01/15/automatic-lets-encrypt-certificates/" target="_blank" rel="noreferrer noopener">Let's Encrypt</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela signifie que les données transférées au serveur sont chiffrées, et que même si elles sont interceptées, elles sont illisibles par un tiers. Une protection assurée par le protocole TLS (<a href="https://fr.wikipedia.org/wiki/Transport_Layer_Security" target="_blank" rel="noreferrer noopener">Transport Layer Security</a>) depuis près de 20 ans, qu'il s'agisse d'un site personnel, de vente en ligne ou même d'accès aux services de votre banque.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À travers le temps, cette brique technique essentielle sur Internet a évolué pour renforcer le niveau de sécurité qu'elle offre. En août 2018, <a href="https://www.ietf.org/blog/tls13/" target="_blank" rel="noreferrer noopener">sa version 1.3</a> (la dernière en date) était publiée. Les versions 1.0 et 1.1 sont, elles, considérées comme n'offrant plus un niveau de protection suffisant. Elles <a href="https://datatracker.ietf.org/doc/html/rfc8996" target="_blank" rel="noreferrer noopener">sont ainsi dépréciées</a> par l'IETF (Internet Engineering Task Force) depuis mars 2021 et ont été progressivement retirées des navigateurs récents comme Firefox, Chrome et ses dérivés ou Safari.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6281,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/05/sans-titre.webp" alt="Clever Cloud Sōzu TLS Versions" class="wp-image-6281"/><figcaption class="wp-element-caption">TLS 1.3 représente plus de 90 % des requêtes quotidiennes</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous avons vu nos clients suivre ce mouvement et adopter peu à peu TLS 1.2 et 1.3. Sur nos load balancers, basés sur notre reverse proxy maison et open source <a href="https://www.sozu.io/" target="_blank" rel="noreferrer noopener">Sōzu</a>, la version la plus récente représente plus de 90 % des requêtes traitées chaque jour. TLS 1.2 compte pour un peu moins de 9 %. TLS 1.0 et 1.1 seulement quelques dizaines de milliers de requêtes par jour, moins de 0,1 % de notre trafic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si nous avons continué à gérer ces versions pour des questions de compatibilité, ce ne sera plus le cas à compter du 30 juin prochain. Nous allons bien entendu informer les clients concernés par cette démarche, et les inciter à passer sur des versions plus récentes, ce qui aura pour eux des avantages tant en termes de sécurité que de performance ou même de référencement.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Plusieurs rappels leur seront envoyés d'ici à la coupure définitive de TLS 1.0 et 1.1. En cas de questions à ce sujet, contactez notre support via <a href="https://console.clever-cloud.com/" target="_blank" rel="noreferrer noopener">la Console</a>.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Annonce du Clever Cloud Rust SDK</title>
		<link>https://stagingv6.cleverapps.io/fr/blog/engineering-fr/2022/04/28/annonce-du-clever-cloud-rust-sdk/</link>
		
		<dc:creator><![CDATA[Florentin Dubois]]></dc:creator>
		<pubDate>Thu, 28 Apr 2022 08:41:43 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=6199</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="sdk Rust" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph {"dropCap":true} -->
<p class="has-drop-cap">Bonjour 🖖, amis humains et robots ! Notre équipe d'ingénieurs est fière d'annoncer un tout nouveau kit de développement logiciel (sdk) Rust, également connu sous le nom de "<a href="https://crates.io/crates/clevercloud-sdk" target="_blank" rel="noreferrer noopener">clevercloud-sdk</a>" sur <a href="https://crates.io/crates/clevercloud-sdk" target="_blank" rel="noreferrer noopener">crates.io</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Certains d'entre vous ont peut-être remarqué qu'il y a de nouveaux dépots sur notre organisation GitHub. Ces dépots sont nommés "<a href="https://github.com/CleverCloud/clevercloud-sdk-rust" target="_blank" rel="noreferrer noopener">clevercloud-sdk-rust</a>" et "<a href="https://github.com/CleverCloud/oauth10a-rust" target="_blank" rel="noreferrer noopener">oauth10a-rust</a>". Leur objectif est de fournir un moyen pratique d'interagir avec l'API de Clever Cloud avec des fonctionnalités intéressantes que nous allons vous faire découvrir dans ce blogpost!</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Conçu pour être asynchrone</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le kit de développement logiciel et le client oauth 1.0a sont principalement construits sur la base de deux crates bien connus de la communauté. Il s'agit de <a href="https://github.com/hyperium/hyper">hyper</a>, et du runtime asynchrone qui le propulse, nommé <a href="https://tokio.rs/" target="_blank" rel="noreferrer noopener">tokio</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'idée principale derrière l'utilisation de la crate hyper et par extension du runtime asynchrone tokio est de tirer parti de l'écosystème actuel qui gravite autour de ces crates et des efforts pour intégrer une nouvelle API du kernel appelée <a href="https://kernel.dk/io_uring.pdf" target="_blank" rel="noreferrer noopener">io_uring</a>. Une fois que cette nouvelle API kernel sera intégrée dans le runtime tokio, cela conduira à une amélioration significative de la performance, selon le <a href="https://tokio.rs/blog/2021-07-tokio-uring" target="_blank" rel="noreferrer noopener">billet de blog de l'annonce de tokio</a>. Nous attendons avec impatience cette amélioration qui nous permettra d'itérer plus rapidement ! 🚀</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">L'observabilité au cœur de l'outil</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ces crates sont développées avec l'idée d'être entièrement observables. Cela a été réalisé par d'autres crates bien connus comme <a href="https://crates.io/crates/log" target="_blank" rel="noreferrer noopener">log</a> et <a href="https://crates.io/crates/tracing" target="_blank" rel="noreferrer noopener">tracing</a>, ou en utilisant des initiatives communautaires comme le crate <a href="https://crates.io/crates/prometheus" target="_blank" rel="noreferrer noopener">prometheus</a>. Les intégrations de ces crates font partie du <a href="https://doc.rust-lang.org/cargo/reference/features.html">système de flags de fonctionnalités de compilateur</a> fourni par le <a href="https://doc.rust-lang.org/book/ch01-03-hello-cargo.html" target="_blank" rel="noreferrer noopener">dépot cargo</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Façade de logs standard</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Tout d'abord, vous devez savoir que la façade de logs standard est activée par défaut. Elle fournira des informations utiles sur les comportements internes des crates ci-dessus, en utilisant le logger standard s'il est défini. Elle vous aidera à comprendre comment les appels à l'API de Clever Cloud sont réalisés avec quelques informations de débogage, si vous en avez besoin.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-toml">clevercloud-sdk = { version = "^0.10.0", default-features = false }</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Si vous voulez le désactiver, vous devez désactiver les ensembles par défaut de fonctionnalités activées. Cela peut être réalisé en utilisant la syntaxe suivante pour le <code>crate clevercloud-sdk</code> dans votre fichier <code>Cargo.toml</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Orienté métriques</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous pensons que les métriques sont importantes. Elles aident à comprendre les systèmes en mettant en corrélation des choses qui ne semblent pas être liées au départ.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi nous avons lancé <a href="https://stagingv6.cleverapps.io/blog/features/2018/01/16/realtime-metrics/" target="_blank" rel="noreferrer noopener">Clever Cloud Metrics</a> assez rapidement, il y a quelques années. Nous l'avons récemment enrichi de nouvelles fonctionnalités en offrant plus de moyens d'interroger Clever Cloud Metrics, grâce à <a href="https://github.com/ovh/erlenmeyer" target="_blank" rel="noreferrer noopener">Erlenmeyer</a> qui est un proxy de langage d'interrogation de séries temporelles. Vous trouverez plus de détails sur la façon dont vous pouvez l'utiliser dans <a href="https://stagingv6.cleverapps.io/blog/engineering/2021/10/12/enabling-promql-queries-with-erlenmeyer/" target="_blank" rel="noreferrer noopener">cet article de blog</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enfin, nous avons annoncé le produit <a href="https://stagingv6.cleverapps.io/fr/blog/fonctionnalites/2021/11/23/annonce-dune-base-de-donnees-time-series-sur-clever-cloud-avec-tardis/">Tardis</a> qui vous permet de nous envoyer vos métriques et nous nous occupons du reste comme nous le faisons toujours et, plus récemment, nous avons intégré des tableaux de bord Grafana pré-construits pour vous aider à visualiser l'état de vos applications et add-ons, vous pouvez <a href="https://stagingv6.cleverapps.io/fr/blog/non-classifiee/2021/10/28/grafana-pour-des-metriques-d-applications/" target="_blank" rel="noreferrer noopener">en savoir plus ici</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Revenons à nos crates. Vous pouvez activer la collecte de métriques à l'aide du crate prometheus, en activant les flags de métriques au niveau du crate dans votre fichier <code>Cargo.toml</code>. Cela peut être réalisé en utilisant la syntaxe suivante.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
clevercloud-sdk = { version = "^0.10.0", features = ["metrics"] }
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Une fois cette fonctionnalité activée, il n'y a plus grand-chose à faire. Vous devrez exposer les métriques via un serveur HTTP ou les envoyer en utilisant la passerelle push de prometheus. Cette partie est décrite dans la <a href="https://docs.rs/prometheus" target="_blank" rel="noreferrer noopener">documentation du crate prometheus</a> ou dans ces <a href="https://github.com/tikv/rust-prometheus/tree/master/examples" target="_blank" rel="noreferrer noopener">exemples</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Capacités de traces</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le dernier pilier de l'observabilité, mais non le moindre, sont les traces. Selon l'initiative et la documentation d'OpenTelemetry, les traces sont définies comme suit :</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p>Les traces suivent la progression d'une demande unique, appelée <strong>trace</strong>, telle qu'elle est traitée par les services qui composent une application. La demande peut être initiée par un utilisateur ou une application. Les traces distribués sont une forme de trace qui traverse les frontières du processus, du réseau et de la sécurité. Chaque unité de travail dans une trace est appelée un <strong>span</strong> ; une trace est un arbre de spans. Les spans sont des objets qui représentent le travail effectué par les services ou les composants individuels impliqués dans une requête au fur et à mesure qu'elle circule dans un système. Un span contient un contexte de span, qui est un ensemble d'identifiants uniques au monde représentant la demande unique dont chaque span fait partie. Un span fournit des mesures de Demande, Erreur et Durée (RED) qui peuvent être utilisées pour déboguer les problèmes de disponibilité et de performance…</p>
<!-- /wp:paragraph --><cite>Documentation sur OpenTelemetry</cite></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Si vous souhaitez vous intéresser de plus près aux traces, même si elles ne sont pas en Rust, vous pouvez consulter l'organisation <a href="https://github.com/open-telemetry/" target="_blank" rel="noreferrer noopener">OpenTelemetry GitHub</a>. Il y a beaucoup de bibliothèques, de SDKs et de documentation pour vous aider à construire votre solution de traces ou à l'intégrer à une solution déjà existante. En outre, si vous utilisez le langage rust et peut-être le runtime tokio, vous pouvez consulter les articles de blog qui expliquent <a href="https://tokio.rs/blog/2019-08-tracing" target="_blank" rel="noreferrer noopener">comment les traces fonctionnent </a>dans le runtime asynchrone ci-dessus et comment les visualiser à l'aide de la <a href="https://tokio.rs/blog/2021-09-console-dev-diary-1" target="_blank" rel="noreferrer noopener">console</a> ou en utilisant le connecteur <a href="https://github.com/tokio-rs/tracing/tree/master/tracing-opentelemetry" target="_blank" rel="noreferrer noopener">OpenTelemetry</a> qui permet d'envoyer des traces à plus de puits, la liste est disponible sur le dépot rust GitHub d'OpenTelemetry.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Alors comment activer concrètement la fonctionnalité de traces à l'aide de clevercloud-sdk ? Comme mentionné ci-dessus, toutes les fonctionnalités sont pilotées par un flag de fonctionnalité, donc pour obtenir des capacités de traces, vous devez activer le flag de trace.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
clevercloud-sdk = { version = "^0.10.0", features = ["trace"] }
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Une fois que l'indicateur de fonctionnalité a été activé, vous devrez collecter et envoyer des traces en utilisant le connecteur et les sinks ci-dessus.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">À quoi ça ressemble ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Prenons un exemple concret pour illustrer ce à quoi ressemble le clevercloud-sdk. Mais avant de passer en revue l'utilisation de clevercloud-sdk, je vais vous présenter les dépendances et les exigences dont vous aurez besoin. La première chose à faire est de déclarer les crates dans le fichier <code>Cargo.toml</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
[dependencies]
tokio = { version = "^1.17.0", features = ["full"] }
clevercloud-sdk = { version = "^0.10.0", features = ["metrics", "tokio", "trace", "jsonschemas"] }
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Nous sommes maintenant capables d'écrire un logiciel à l'aide de clevercloud-sdk. Voici un exemple de la façon d'utiliser le SDK : </p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-rust">...
use clevercloud_sdk::{
    oauth10a::{
        proxy::{self, ProxyConnectorBuilder},
        Credentials,
    },
    v2::myself,
    Client,
};
...

// See the full code at:
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl/src/cmd/myself.rs
pub async fn get(config: Arc&lt;Configuration&gt;, output: &amp;Output) -&gt; Result&lt;(), Error&gt; {
    let credentials: Credentials = config.credentials.to_owned().into();
    let connector = ProxyConnectorBuilder::try_from_env().map_err(Error::ProxyConnector)?;
    let client = Client::builder()
        .with_credentials(credentials)
        .build(connector);

    let user = myself::get(&amp;client).await.map_err(Error::Get)?;

    println!(
        "{}",
        output
            .format(&amp;user)
            .map_err(|err| Error::FormatOutput(Box::new(err)))?
    );

    Ok(())
}</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Un autre exemple du sdk qui interagit avec les add-ons :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
...
use clevercloud_sdk::{
    oauth10a::{
        proxy::{self, ProxyConnectorBuilder},
        Credentials,
    },
    v2::addon,
    Client,
};
...

// See the full code at:
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl/src/cmd/addon/mod.rs 
pub async fn list(
    config: Arc<Configuration>,
    output: &Output,
    organisation_id: &str,
) -> Result<(), Error> {
    let credentials: Credentials = config.credentials.to_owned().into();
    let connector = ProxyConnectorBuilder::try_from_env().map_err(Error::ProxyConnector)?;
    let client = Client::builder()
        .with_credentials(credentials)
        .build(connector);

    let addons = addon::list(&client, organisation_id)
        .await
        .map_err(|err| Error::List(organisation_id.to_owned(), err))?;

    println!(
        "{}",
        output
            .format(&addons)
            .map_err(|err| Error::FormatOutput(Box::new(err)))?
    );
    Ok(())
}
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Vous pouvez trouver le code source complet de l'exemple d'interface de ligne de commande dans le dépot clevercloud-sdk dans le dépot d'exemples ou vous pouvez suivre <a href="https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cli" target="_blank" rel="noreferrer noopener">ce lien</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Quelles sont les prochaines étapes ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Jetons un coup d'œil aux fonctionnalités à venir qui seront intégrées dans ces crates.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Biscuit et token porteur oauth2</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous travaillons sur un nouveau token d'authentification et d'autorisation appelé Biscuit. Plus de détails à ce sujet dans le <a href="https://stagingv6.cleverapps.io/blog/engineering/2021/04/12/introduction-to-biscuit/">billet de blog d'introduction</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce nouveau token d'authentification et d'autorisation fonctionnera avec la norme OAuth 2.0. L'une des tâches du SDK et du client est de faciliter la transition de OAuth 1.0a à OAuth 2.0 en utilisant Biscuit.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Nouvelles fonctionnalités !</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le kit de développement logiciel va se développer pour prendre en charge l'ensemble de l'API. La prochaine fonctionnalité est l'intégration du bus d'événements afin de s'abonner aux événements qui se produisent sur la plateforme de Clever Cloud. Vous serez par exemple en mesure de recevoir des notifications sur le déploiement d'une application, etc.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En outre, ces caisses sont utilisées pour construire un autre logiciel que vous avez découvert dans <a href="https://stagingv6.cleverapps.io/fr/blog/fonctionnalites/2022/03/16/clever-operator/">un autre article du blog</a>. Il présente un opérateur Kubernetes que vous pouvez utiliser sur <a href="https://www.redhat.com/en/technologies/cloud-computing/openshift" target="_blank" rel="noreferrer noopener">OpenShift</a>, qui expose les add-ons de Clever Cloud comme des <a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/" target="_blank" rel="noreferrer noopener">custom ressources</a>.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="sdk Rust" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-sdk-rust-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph {"dropCap":true} -->
<p class="has-drop-cap">Bonjour 🖖, amis humains et robots ! Notre équipe d'ingénieurs est fière d'annoncer un tout nouveau kit de développement logiciel (sdk) Rust, également connu sous le nom de "<a href="https://crates.io/crates/clevercloud-sdk" target="_blank" rel="noreferrer noopener">clevercloud-sdk</a>" sur <a href="https://crates.io/crates/clevercloud-sdk" target="_blank" rel="noreferrer noopener">crates.io</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Certains d'entre vous ont peut-être remarqué qu'il y a de nouveaux dépots sur notre organisation GitHub. Ces dépots sont nommés "<a href="https://github.com/CleverCloud/clevercloud-sdk-rust" target="_blank" rel="noreferrer noopener">clevercloud-sdk-rust</a>" et "<a href="https://github.com/CleverCloud/oauth10a-rust" target="_blank" rel="noreferrer noopener">oauth10a-rust</a>". Leur objectif est de fournir un moyen pratique d'interagir avec l'API de Clever Cloud avec des fonctionnalités intéressantes que nous allons vous faire découvrir dans ce blogpost!</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Conçu pour être asynchrone</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le kit de développement logiciel et le client oauth 1.0a sont principalement construits sur la base de deux crates bien connus de la communauté. Il s'agit de <a href="https://github.com/hyperium/hyper">hyper</a>, et du runtime asynchrone qui le propulse, nommé <a href="https://tokio.rs/" target="_blank" rel="noreferrer noopener">tokio</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'idée principale derrière l'utilisation de la crate hyper et par extension du runtime asynchrone tokio est de tirer parti de l'écosystème actuel qui gravite autour de ces crates et des efforts pour intégrer une nouvelle API du kernel appelée <a href="https://kernel.dk/io_uring.pdf" target="_blank" rel="noreferrer noopener">io_uring</a>. Une fois que cette nouvelle API kernel sera intégrée dans le runtime tokio, cela conduira à une amélioration significative de la performance, selon le <a href="https://tokio.rs/blog/2021-07-tokio-uring" target="_blank" rel="noreferrer noopener">billet de blog de l'annonce de tokio</a>. Nous attendons avec impatience cette amélioration qui nous permettra d'itérer plus rapidement ! 🚀</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">L'observabilité au cœur de l'outil</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ces crates sont développées avec l'idée d'être entièrement observables. Cela a été réalisé par d'autres crates bien connus comme <a href="https://crates.io/crates/log" target="_blank" rel="noreferrer noopener">log</a> et <a href="https://crates.io/crates/tracing" target="_blank" rel="noreferrer noopener">tracing</a>, ou en utilisant des initiatives communautaires comme le crate <a href="https://crates.io/crates/prometheus" target="_blank" rel="noreferrer noopener">prometheus</a>. Les intégrations de ces crates font partie du <a href="https://doc.rust-lang.org/cargo/reference/features.html">système de flags de fonctionnalités de compilateur</a> fourni par le <a href="https://doc.rust-lang.org/book/ch01-03-hello-cargo.html" target="_blank" rel="noreferrer noopener">dépot cargo</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Façade de logs standard</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Tout d'abord, vous devez savoir que la façade de logs standard est activée par défaut. Elle fournira des informations utiles sur les comportements internes des crates ci-dessus, en utilisant le logger standard s'il est défini. Elle vous aidera à comprendre comment les appels à l'API de Clever Cloud sont réalisés avec quelques informations de débogage, si vous en avez besoin.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-toml">clevercloud-sdk = { version = "^0.10.0", default-features = false }</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Si vous voulez le désactiver, vous devez désactiver les ensembles par défaut de fonctionnalités activées. Cela peut être réalisé en utilisant la syntaxe suivante pour le <code>crate clevercloud-sdk</code> dans votre fichier <code>Cargo.toml</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Orienté métriques</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous pensons que les métriques sont importantes. Elles aident à comprendre les systèmes en mettant en corrélation des choses qui ne semblent pas être liées au départ.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi nous avons lancé <a href="https://stagingv6.cleverapps.io/blog/features/2018/01/16/realtime-metrics/" target="_blank" rel="noreferrer noopener">Clever Cloud Metrics</a> assez rapidement, il y a quelques années. Nous l'avons récemment enrichi de nouvelles fonctionnalités en offrant plus de moyens d'interroger Clever Cloud Metrics, grâce à <a href="https://github.com/ovh/erlenmeyer" target="_blank" rel="noreferrer noopener">Erlenmeyer</a> qui est un proxy de langage d'interrogation de séries temporelles. Vous trouverez plus de détails sur la façon dont vous pouvez l'utiliser dans <a href="https://stagingv6.cleverapps.io/blog/engineering/2021/10/12/enabling-promql-queries-with-erlenmeyer/" target="_blank" rel="noreferrer noopener">cet article de blog</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enfin, nous avons annoncé le produit <a href="https://stagingv6.cleverapps.io/fr/blog/fonctionnalites/2021/11/23/annonce-dune-base-de-donnees-time-series-sur-clever-cloud-avec-tardis/">Tardis</a> qui vous permet de nous envoyer vos métriques et nous nous occupons du reste comme nous le faisons toujours et, plus récemment, nous avons intégré des tableaux de bord Grafana pré-construits pour vous aider à visualiser l'état de vos applications et add-ons, vous pouvez <a href="https://stagingv6.cleverapps.io/fr/blog/non-classifiee/2021/10/28/grafana-pour-des-metriques-d-applications/" target="_blank" rel="noreferrer noopener">en savoir plus ici</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Revenons à nos crates. Vous pouvez activer la collecte de métriques à l'aide du crate prometheus, en activant les flags de métriques au niveau du crate dans votre fichier <code>Cargo.toml</code>. Cela peut être réalisé en utilisant la syntaxe suivante.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
clevercloud-sdk = { version = "^0.10.0", features = ["metrics"] }
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Une fois cette fonctionnalité activée, il n'y a plus grand-chose à faire. Vous devrez exposer les métriques via un serveur HTTP ou les envoyer en utilisant la passerelle push de prometheus. Cette partie est décrite dans la <a href="https://docs.rs/prometheus" target="_blank" rel="noreferrer noopener">documentation du crate prometheus</a> ou dans ces <a href="https://github.com/tikv/rust-prometheus/tree/master/examples" target="_blank" rel="noreferrer noopener">exemples</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Capacités de traces</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le dernier pilier de l'observabilité, mais non le moindre, sont les traces. Selon l'initiative et la documentation d'OpenTelemetry, les traces sont définies comme suit :</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p>Les traces suivent la progression d'une demande unique, appelée <strong>trace</strong>, telle qu'elle est traitée par les services qui composent une application. La demande peut être initiée par un utilisateur ou une application. Les traces distribués sont une forme de trace qui traverse les frontières du processus, du réseau et de la sécurité. Chaque unité de travail dans une trace est appelée un <strong>span</strong> ; une trace est un arbre de spans. Les spans sont des objets qui représentent le travail effectué par les services ou les composants individuels impliqués dans une requête au fur et à mesure qu'elle circule dans un système. Un span contient un contexte de span, qui est un ensemble d'identifiants uniques au monde représentant la demande unique dont chaque span fait partie. Un span fournit des mesures de Demande, Erreur et Durée (RED) qui peuvent être utilisées pour déboguer les problèmes de disponibilité et de performance…</p>
<!-- /wp:paragraph --><cite>Documentation sur OpenTelemetry</cite></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Si vous souhaitez vous intéresser de plus près aux traces, même si elles ne sont pas en Rust, vous pouvez consulter l'organisation <a href="https://github.com/open-telemetry/" target="_blank" rel="noreferrer noopener">OpenTelemetry GitHub</a>. Il y a beaucoup de bibliothèques, de SDKs et de documentation pour vous aider à construire votre solution de traces ou à l'intégrer à une solution déjà existante. En outre, si vous utilisez le langage rust et peut-être le runtime tokio, vous pouvez consulter les articles de blog qui expliquent <a href="https://tokio.rs/blog/2019-08-tracing" target="_blank" rel="noreferrer noopener">comment les traces fonctionnent </a>dans le runtime asynchrone ci-dessus et comment les visualiser à l'aide de la <a href="https://tokio.rs/blog/2021-09-console-dev-diary-1" target="_blank" rel="noreferrer noopener">console</a> ou en utilisant le connecteur <a href="https://github.com/tokio-rs/tracing/tree/master/tracing-opentelemetry" target="_blank" rel="noreferrer noopener">OpenTelemetry</a> qui permet d'envoyer des traces à plus de puits, la liste est disponible sur le dépot rust GitHub d'OpenTelemetry.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Alors comment activer concrètement la fonctionnalité de traces à l'aide de clevercloud-sdk ? Comme mentionné ci-dessus, toutes les fonctionnalités sont pilotées par un flag de fonctionnalité, donc pour obtenir des capacités de traces, vous devez activer le flag de trace.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
clevercloud-sdk = { version = "^0.10.0", features = ["trace"] }
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Une fois que l'indicateur de fonctionnalité a été activé, vous devrez collecter et envoyer des traces en utilisant le connecteur et les sinks ci-dessus.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">À quoi ça ressemble ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Prenons un exemple concret pour illustrer ce à quoi ressemble le clevercloud-sdk. Mais avant de passer en revue l'utilisation de clevercloud-sdk, je vais vous présenter les dépendances et les exigences dont vous aurez besoin. La première chose à faire est de déclarer les crates dans le fichier <code>Cargo.toml</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
[dependencies]
tokio = { version = "^1.17.0", features = ["full"] }
clevercloud-sdk = { version = "^0.10.0", features = ["metrics", "tokio", "trace", "jsonschemas"] }
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Nous sommes maintenant capables d'écrire un logiciel à l'aide de clevercloud-sdk. Voici un exemple de la façon d'utiliser le SDK : </p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-rust">...
use clevercloud_sdk::{
    oauth10a::{
        proxy::{self, ProxyConnectorBuilder},
        Credentials,
    },
    v2::myself,
    Client,
};
...

// See the full code at:
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl/src/cmd/myself.rs
pub async fn get(config: Arc&lt;Configuration&gt;, output: &amp;Output) -&gt; Result&lt;(), Error&gt; {
    let credentials: Credentials = config.credentials.to_owned().into();
    let connector = ProxyConnectorBuilder::try_from_env().map_err(Error::ProxyConnector)?;
    let client = Client::builder()
        .with_credentials(credentials)
        .build(connector);

    let user = myself::get(&amp;client).await.map_err(Error::Get)?;

    println!(
        "{}",
        output
            .format(&amp;user)
            .map_err(|err| Error::FormatOutput(Box::new(err)))?
    );

    Ok(())
}</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Un autre exemple du sdk qui interagit avec les add-ons :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
...
use clevercloud_sdk::{
    oauth10a::{
        proxy::{self, ProxyConnectorBuilder},
        Credentials,
    },
    v2::addon,
    Client,
};
...

// See the full code at:
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl
// - https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cleverctl/src/cmd/addon/mod.rs 
pub async fn list(
    config: Arc<Configuration>,
    output: &Output,
    organisation_id: &str,
) -> Result<(), Error> {
    let credentials: Credentials = config.credentials.to_owned().into();
    let connector = ProxyConnectorBuilder::try_from_env().map_err(Error::ProxyConnector)?;
    let client = Client::builder()
        .with_credentials(credentials)
        .build(connector);

    let addons = addon::list(&client, organisation_id)
        .await
        .map_err(|err| Error::List(organisation_id.to_owned(), err))?;

    println!(
        "{}",
        output
            .format(&addons)
            .map_err(|err| Error::FormatOutput(Box::new(err)))?
    );
    Ok(())
}
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Vous pouvez trouver le code source complet de l'exemple d'interface de ligne de commande dans le dépot clevercloud-sdk dans le dépot d'exemples ou vous pouvez suivre <a href="https://github.com/CleverCloud/clevercloud-sdk-rust/blob/main/examples/cli" target="_blank" rel="noreferrer noopener">ce lien</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Quelles sont les prochaines étapes ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Jetons un coup d'œil aux fonctionnalités à venir qui seront intégrées dans ces crates.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Biscuit et token porteur oauth2</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous travaillons sur un nouveau token d'authentification et d'autorisation appelé Biscuit. Plus de détails à ce sujet dans le <a href="https://stagingv6.cleverapps.io/blog/engineering/2021/04/12/introduction-to-biscuit/">billet de blog d'introduction</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce nouveau token d'authentification et d'autorisation fonctionnera avec la norme OAuth 2.0. L'une des tâches du SDK et du client est de faciliter la transition de OAuth 1.0a à OAuth 2.0 en utilisant Biscuit.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Nouvelles fonctionnalités !</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le kit de développement logiciel va se développer pour prendre en charge l'ensemble de l'API. La prochaine fonctionnalité est l'intégration du bus d'événements afin de s'abonner aux événements qui se produisent sur la plateforme de Clever Cloud. Vous serez par exemple en mesure de recevoir des notifications sur le déploiement d'une application, etc.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En outre, ces caisses sont utilisées pour construire un autre logiciel que vous avez découvert dans <a href="https://stagingv6.cleverapps.io/fr/blog/fonctionnalites/2022/03/16/clever-operator/">un autre article du blog</a>. Il présente un opérateur Kubernetes que vous pouvez utiliser sur <a href="https://www.redhat.com/en/technologies/cloud-computing/openshift" target="_blank" rel="noreferrer noopener">OpenShift</a>, qui expose les add-ons de Clever Cloud comme des <a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/" target="_blank" rel="noreferrer noopener">custom ressources</a>.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
