Skip to main content

devops_armory/cloud/gcp/gke/cluster/
models.rs

1use serde_derive::{Serialize, Deserialize};
2
3fn default_none_string() -> Option<String> {    
4    Some("none".to_string())
5}
6
7#[derive(Serialize, Deserialize, Default,Debug)]
8pub struct CreateGkeCluster {
9    pub cluster: GkeCluster
10}
11
12// Setting None to logging/monitoring service will fallback to default GKE value
13// In reality it will become Some("logging.googleapis.com/kubernetes".to_string())
14// or Some("monitoring.googleapis.com/kubernetes".to_string()), respectively.
15#[derive(Serialize, Deserialize, Default,Debug)]
16pub struct GkeCluster {
17    pub name: String,
18    pub description: String,
19    #[serde(default = "default_none_string")]
20    pub loggingService: Option<String>,
21    #[serde(default = "default_none_string")]
22    pub monitoringService: Option<String>,
23    pub network: String,
24    pub clusterIpv4Cidr: String,
25    pub subnetwork: String,
26    pub nodePools: Vec<Nodepools>,
27    pub locations: Vec<String>,
28    //pub resourceLabels: HashMap<String, String>,
29    pub masterAuthorizedNetworksConfig: MasterAuthorizedNetworksConfig,
30    pub networkConfig: NetworkConfig,
31    pub autoscaling: Option<Autoscaling>,
32    pub ipAllocationPolicy: IpAllocationPolicy
33
34}
35
36#[derive(Serialize, Deserialize, Default,Debug)]
37pub struct Nodepools {
38    pub name: String,
39    pub config: NodeConfig,
40    pub initialNodeCount: i32,
41    pub autoscaling: Option<NodePoolAutoscaling>
42}
43
44#[derive(Serialize, Deserialize, Default,Debug)]
45pub struct NodePoolAutoscaling {
46    pub enabled: bool,
47    pub minNodeCount: Option<i32>,
48    pub maxNodeCount: Option<i32>,
49    pub autoprovisioned: Option<bool>,
50    pub locationPolicy: String,
51    pub totalMinNodeCount: Option<i32>,
52    pub totalMaxNodeCount: Option<i32>
53}
54
55#[derive(Serialize, Deserialize, Default,Debug)]
56pub struct NodeConfig {
57    pub machineType: String,
58    pub diskSizeGb: i32,
59    pub oauthScopes: Vec<String>,
60    //pub metadata: GkeMetadata HashMap<String, String>,
61    pub imageType: String,
62    pub serviceAccount: String,
63    //pub labels: HashMap<String, String>,
64    pub diskType: String,
65}
66
67#[derive(Serialize, Deserialize, Default,Debug)]
68pub struct NetworkConfig {
69    //pub podIpv4CidrBlock: String,
70    pub defaultEnablePrivateNodes: bool,
71    pub subnetwork: String,
72    pub gatewayApiConfig: GatewayAPIConfig
73    //pub networkTierConfig: NetworkTierConfig
74}
75
76// Default value: "CHANNEL_STANDARD".to_string()
77#[derive(Serialize, Deserialize, Default,Debug)]
78pub struct GatewayAPIConfig {
79    pub channel: String
80}
81
82#[derive(Serialize, Deserialize, Default,Debug)]
83pub struct IpAllocationPolicy {
84    pub useIpAliases: bool,
85    pub servicesIpv4CidrBlock: String,
86}
87
88#[derive(Serialize, Deserialize, Default,Debug)]
89pub struct NetworkTierConfig {
90    pub networkTier: String
91}
92
93#[derive(Serialize, Deserialize, Default,Debug)]
94pub struct MasterAuthorizedNetworksConfig {
95    pub enabled: bool,
96    pub cidrBlocks: Vec<CiDrBlock>,
97    pub gcpPublicCidrsAccessEnabled: bool,
98    pub privateEndpointEnforcementEnabled: bool
99}
100
101#[derive(Serialize, Deserialize, Default,Debug)]
102pub struct CiDrBlock {
103    pub displayName: String,
104    pub cidrBlock: String
105}
106
107#[derive(Serialize, Deserialize, Default,Debug)]
108pub struct Autoscaling {
109    pub enableNodeAutoprovisioning: bool,
110    pub resourceLimits: Option<Vec<AutoscalerResourceLimits>>,
111    pub autoscalingProfile: String,
112    pub autoprovisioningLocations: Option<Vec<String>>,
113    pub defaultComputeClassConfig: DefaultComputeClass
114}
115
116#[derive(Serialize, Deserialize, Default,Debug)]
117pub struct DefaultComputeClass {
118    pub enabled: bool
119}
120
121#[derive(Serialize, Deserialize, Default,Debug)]
122pub struct AutoscalerResourceLimits {
123    pub resourceType: String,
124    pub minimum: i64,
125    pub maximum: i64
126}
127
128/// Update GKE cluster
129
130#[derive(Serialize, Deserialize, Default,Debug)]
131pub struct UpdateGkeCluster {
132    pub projectId: String,
133    //pub zone: String,
134    pub clusterId: String,
135    pub update: UpdateCluster
136}
137
138#[derive(Serialize, Deserialize, Default,Debug)]
139pub struct UpdateCluster {
140    pub desiredMasterAuthorizedNetworksConfig: Option<MasterAuthorizedNetworksConfig>,
141    pub desiredLoggingService: Option<String>,
142    pub desiredMonitoringService: Option<String>,
143    pub desiredMonitoringConfig: Option<DesiredMonitoringConfig>,
144
145}
146
147/// Update GKE cluster - Logging and monitoring
148
149#[derive(Serialize, Deserialize, Default,Debug)]
150pub struct UpdateClusterLogging {
151    pub projectId: String,
152    pub clusterId: String,
153    pub loggingService: String
154}
155
156#[derive(Serialize, Deserialize, Default,Debug)]
157pub struct UpdateClusterMonitoring {
158    pub projectId: String,
159    pub clusterId: String,
160    pub monitoringService: String
161}
162
163#[derive(Serialize, Deserialize, Default,Debug)]
164pub struct DesiredMonitoringConfig{
165    pub componentConfig: MonitoringComponentConfig
166}
167
168#[derive(Serialize, Deserialize, Default,Debug)]
169pub struct MonitoringComponentConfig{
170    pub enableComponents: Vec<String>
171}