platz_sdk/resources/
deployments.rs

1use crate::client::PlatzClient;
2use anyhow::Result;
3use chrono::prelude::*;
4use kv_derive::{prelude::*, IntoVec};
5use serde::{Deserialize, Serialize};
6use strum::Display;
7use uuid::Uuid;
8
9#[derive(Debug, Deserialize, Clone)]
10pub struct Deployment {
11    pub id: Uuid,
12    pub created_at: DateTime<Utc>,
13    pub name: String,
14    pub kind_id: Uuid,
15    pub cluster_id: Uuid,
16    pub enabled: bool,
17    pub status: DeploymentStatus,
18    pub description_md: Option<String>,
19    pub reason: Option<String>,
20    pub revision_id: Option<Uuid>,
21    pub reported_status: Option<serde_json::Value>,
22    pub helm_chart_id: Uuid,
23    pub config: serde_json::Value,
24    pub values_override: Option<serde_json::Value>,
25}
26
27#[derive(Debug, Deserialize, Clone, Display)]
28pub enum DeploymentStatus {
29    Unknown,
30    Installing,
31    Renaming,
32    Upgrading,
33    Running,
34    Error,
35    Uninstalling,
36    Uninstalled,
37    Deleting,
38}
39
40#[derive(Debug, Serialize)]
41pub struct NewDeployment {
42    #[serde(default)]
43    pub name: String,
44    pub kind_id: Uuid,
45    pub cluster_id: Uuid,
46    pub helm_chart_id: Uuid,
47    pub config: Option<serde_json::Value>,
48    pub values_override: Option<serde_json::Value>,
49}
50
51#[derive(Debug, Serialize, Default)]
52pub struct UpdateDeployment {
53    pub name: Option<String>,
54    pub cluster_id: Option<Uuid>,
55    pub helm_chart_id: Option<Uuid>,
56    pub config: Option<serde_json::Value>,
57    pub values_override: Option<Option<serde_json::Value>>,
58    pub enabled: Option<bool>,
59    pub description_md: Option<String>,
60}
61
62#[derive(Default, IntoVec)]
63pub struct DeploymentFilters {
64    #[kv(optional)]
65    pub name: Option<String>,
66    #[kv(optional)]
67    pub kind_id: Option<String>,
68    #[kv(optional)]
69    pub cluster_id: Option<Uuid>,
70    #[kv(optional)]
71    pub enabled: Option<bool>,
72    #[kv(optional)]
73    pub env_id: Option<Uuid>,
74}
75
76impl PlatzClient {
77    pub async fn deployments(&self, filters: DeploymentFilters) -> Result<Vec<Deployment>> {
78        Ok(self
79            .request(reqwest::Method::GET, "/api/v2/deployments")
80            .add_to_query(filters.into_vec())
81            .paginated()
82            .await?)
83    }
84
85    pub async fn deployment(&self, deployment_id: Uuid) -> Result<Deployment> {
86        Ok(self
87            .request(
88                reqwest::Method::GET,
89                format!("/api/v2/deployments/{deployment_id}"),
90            )
91            .send()
92            .await?)
93    }
94
95    pub async fn update_deployment(
96        &self,
97        deployment_id: Uuid,
98        update_deployment: UpdateDeployment,
99    ) -> Result<Deployment> {
100        Ok(self
101            .request(
102                reqwest::Method::PUT,
103                format!("/api/v2/deployments/{deployment_id}"),
104            )
105            .send_with_body(update_deployment)
106            .await?)
107    }
108
109    pub async fn create_deployment(&self, new_deployment: NewDeployment) -> Result<Deployment> {
110        Ok(self
111            .request(reqwest::Method::POST, "/api/v2/deployments")
112            .send_with_body(new_deployment)
113            .await?)
114    }
115}