vaultrs/auth/
kubernetes.rs

1use crate::{
2    api::{
3        self, auth::kubernetes::requests::ConfigureKubernetesAuthRequest,
4        auth::kubernetes::requests::ConfigureKubernetesAuthRequestBuilder,
5        auth::kubernetes::requests::LoginWithKubernetesRequest,
6        auth::kubernetes::requests::ReadKubernetesAuthConfigRequest,
7        auth::kubernetes::responses::ReadKubernetesAuthConfigResponse, AuthInfo,
8    },
9    client::Client,
10    error::ClientError,
11};
12
13// Configure Kubernetes auth backend.
14//
15// See [ConfigureKubernetesAuthRequest]
16pub async fn configure(
17    client: &impl Client,
18    mount: &str,
19    kubernetes_host: &str,
20    opts: Option<&mut ConfigureKubernetesAuthRequestBuilder>,
21) -> Result<(), ClientError> {
22    let mut t = ConfigureKubernetesAuthRequest::builder();
23    let endpoint = opts
24        .unwrap_or(&mut t)
25        .mount(mount)
26        .kubernetes_host(kubernetes_host)
27        .build()
28        .unwrap();
29
30    api::exec_with_empty(client, endpoint).await
31}
32
33// Configure Kubernetes auth backend.
34//
35// See [ReadKubernetesAuthConfigResponse]
36pub async fn read_config(
37    client: &impl Client,
38    mount: &str,
39) -> Result<ReadKubernetesAuthConfigResponse, ClientError> {
40    let endpoint = ReadKubernetesAuthConfigRequest::builder()
41        .mount(mount)
42        .build()
43        .unwrap();
44
45    api::exec_with_result(client, endpoint).await
46}
47
48// Fetch a <token with policies using a Kubernetes ServiceAccount.
49//
50// See [LoginWithKubernetesRequest]
51pub async fn login(
52    client: &impl Client,
53    mount: &str,
54    role: &str,
55    jwt: &str,
56) -> Result<AuthInfo, ClientError> {
57    let endpoint = LoginWithKubernetesRequest::builder()
58        .mount(mount)
59        .role(role)
60        .jwt(jwt)
61        .build()
62        .unwrap();
63    api::auth(client, endpoint).await
64}
65
66pub mod role {
67    use crate::api;
68    use crate::api::auth::kubernetes::{
69        requests::{
70            CreateKubernetesRoleRequest, CreateKubernetesRoleRequestBuilder,
71            DeleteKubernetesRoleRequest, ListRolesRequest, ReadKubernetesRoleRequest,
72        },
73        responses::{ListRolesResponse, ReadKubernetesRoleResponse},
74    };
75    use crate::client::Client;
76    use crate::error::ClientError;
77
78    /// Lists all Kubernetes roles.
79    ///
80    /// See [ListRolesRequest]
81    ///
82    pub async fn list(client: &impl Client, mount: &str) -> Result<ListRolesResponse, ClientError> {
83        let endpoint = ListRolesRequest::builder().mount(mount).build().unwrap();
84        api::exec_with_result(client, endpoint).await
85    }
86
87    /// Reads properties of a Kubernetes role.
88    ///
89    /// See [ReadKubernetesRoleResponse]
90    pub async fn read(
91        client: &impl Client,
92        mount: &str,
93        name: &str,
94    ) -> Result<ReadKubernetesRoleResponse, ClientError> {
95        let endpoint = ReadKubernetesRoleRequest::builder()
96            .mount(mount)
97            .name(name)
98            .build()
99            .unwrap();
100        api::exec_with_result(client, endpoint).await
101    }
102
103    /// Creates a Kubernetes role.
104    ///
105    /// See [CreateKubernetesRoleRequest]
106    pub async fn create(
107        client: &impl Client,
108        mount: &str,
109        name: &str,
110        opts: Option<&mut CreateKubernetesRoleRequestBuilder>,
111    ) -> Result<(), ClientError> {
112        let mut t = CreateKubernetesRoleRequest::builder();
113        let endpoint = opts
114            .unwrap_or(&mut t)
115            .mount(mount)
116            .name(name)
117            .build()
118            .unwrap();
119        api::exec_with_empty(client, endpoint).await
120    }
121
122    /// Deletes an existing Kubernetes role.
123    ///
124    /// See [DeleteKubernetesRoleRequest]
125    pub async fn delete(client: &impl Client, mount: &str, name: &str) -> Result<(), ClientError> {
126        let endpoint = DeleteKubernetesRoleRequest::builder()
127            .mount(mount)
128            .name(name)
129            .build()
130            .unwrap();
131        api::exec_with_empty(client, endpoint).await
132    }
133}