alien_core/bindings/
service_account.rs1use super::BindingValue;
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(tag = "service", rename_all = "lowercase")]
14pub enum ServiceAccountBinding {
15 AwsIam(AwsServiceAccountBinding),
17 GcpServiceAccount(GcpServiceAccountBinding),
19 AzureManagedIdentity(AzureServiceAccountBinding),
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct AwsServiceAccountBinding {
27 pub role_name: BindingValue<String>,
29 pub role_arn: BindingValue<String>,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
35#[serde(rename_all = "camelCase")]
36pub struct GcpServiceAccountBinding {
37 pub email: BindingValue<String>,
39 pub unique_id: BindingValue<String>,
41}
42
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct AzureServiceAccountBinding {
47 pub client_id: BindingValue<String>,
49 pub resource_id: BindingValue<String>,
51 pub principal_id: BindingValue<String>,
53}
54
55impl ServiceAccountBinding {
56 pub fn aws_iam(
58 role_name: impl Into<BindingValue<String>>,
59 role_arn: impl Into<BindingValue<String>>,
60 ) -> Self {
61 Self::AwsIam(AwsServiceAccountBinding {
62 role_name: role_name.into(),
63 role_arn: role_arn.into(),
64 })
65 }
66
67 pub fn gcp_service_account(
69 email: impl Into<BindingValue<String>>,
70 unique_id: impl Into<BindingValue<String>>,
71 ) -> Self {
72 Self::GcpServiceAccount(GcpServiceAccountBinding {
73 email: email.into(),
74 unique_id: unique_id.into(),
75 })
76 }
77
78 pub fn azure_managed_identity(
80 client_id: impl Into<BindingValue<String>>,
81 resource_id: impl Into<BindingValue<String>>,
82 principal_id: impl Into<BindingValue<String>>,
83 ) -> Self {
84 Self::AzureManagedIdentity(AzureServiceAccountBinding {
85 client_id: client_id.into(),
86 resource_id: resource_id.into(),
87 principal_id: principal_id.into(),
88 })
89 }
90}