platz_sdk/resources/
deployments.rs1use 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}