use super::*;
mod impls;
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NetworkSpec {
pub vpc: Option<VPCSpec>,
pub subnets: Option<Subnets>,
pub cni: Option<CNISpec>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub security_group_overrides: BTreeMap<SecurityGroupRole, String>, }
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VPCSpec {
pub id: Option<String>,
pub cidr_block: Option<String>,
pub internet_gateway_id: Option<String>,
#[serde(default, skip_serializing_if = "Tags::is_empty")]
pub tags: Tags,
pub availability_zone_usage_limit: Option<i64>,
pub availability_zone_selection: Option<AZSelectionScheme>, }
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NetworkStatus {
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub security_groups: BTreeMap<SecurityGroupRole, SecurityGroup>,
pub api_server_elb: Option<ClassicELB>, }
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub enum ClassicELBScheme {
#[serde(rename = "internet-facing")]
InternetFacing,
#[serde(rename = "internal")]
Internal,
#[serde(rename = "Internet-facing")]
IncorrectInternetFacing,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Subnets(pub Vec<SubnetSpec>);
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubnetSpec {
pub id: Option<String>,
pub cidr_block: Option<String>,
pub availability_zone: Option<String>,
pub is_public: Option<bool>,
pub route_table_id: Option<String>,
pub nat_gateway_id: Option<String>,
#[serde(default, skip_serializing_if = "Tags::is_empty")]
pub tags: Tags, }
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CNISpec {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub cni_ingress_rules: Vec<CNIIngressRule>, }
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CNIIngressRule {
pub description: String, pub protocol: SecurityGroupProtocol, pub from_port: i64, pub to_port: i64, }
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub enum SecurityGroupProtocol {
#[serde(rename = "-1")]
All,
#[serde(rename = "4")]
IPinIP,
#[serde(rename = "tcp")]
Tcp,
#[serde(rename = "udp")]
Udp,
#[serde(rename = "icmp")]
Icmp,
#[serde(rename = "58")]
Icmpv6,
}
#[derive(Clone, Copy, Debug, Hash, PartialEq, PartialOrd, Eq, Ord, Serialize, Deserialize)]
pub enum SecurityGroupRole {
#[serde(rename = "bastion")]
Bastion,
#[serde(rename = "node")]
Node,
#[serde(rename = "node-eks-additional")]
EKSNodeAdditional,
#[serde(rename = "controlplane")]
ControlPlane,
#[serde(rename = "apiserver-lb")]
APIServerLB,
#[serde(rename = "lb")]
LB,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SecurityGroup {
pub id: String,
pub name: String,
pub ingress_rule: Option<Vec<IngressRule>>,
#[serde(default, skip_serializing_if = "Tags::is_empty")]
pub tags: Tags, }
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IngressRule {
pub description: String, pub protocol: SecurityGroupProtocol, pub from_port: i64, pub to_port: i64,
pub cidr_blocks: Option<Vec<String>>,
pub source_security_group_ids: Option<Vec<String>>, }
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClassicELB {
pub name: Option<String>,
pub dns_name: Option<String>,
pub scheme: Option<ClassicELBScheme>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub availability_zones: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subnet_ids: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub security_group_ids: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub listeners: Vec<ClassicELBListener>,
pub health_check: Option<ClassicELBHealthCheck>,
pub attributes: Option<ClassicELBAttributes>,
#[serde(default, skip_serializing_if = "Tags::is_empty")]
pub tags: Tags, }
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClassicELBListener {
pub protocol: ClassicELBProtocol, pub port: i64, pub instance_protocol: ClassicELBProtocol, pub instance_port: i64, }
#[derive(Clone, Copy, Debug, Hash, PartialEq, PartialOrd, Eq, Ord, Serialize, Deserialize)]
pub enum ClassicELBProtocol {
#[serde(rename = "TCP")]
Tcp,
#[serde(rename = "SSL")]
Ssl,
#[serde(rename = "HTTP")]
Http,
#[serde(rename = "HTTPS")]
Https,
}
#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClassicELBHealthCheck {
pub target: String, #[serde_as(as = "serde_with::DurationSeconds<i64>")]
pub interval: chrono::Duration, #[serde_as(as = "serde_with::DurationSeconds<i64>")]
pub timeout: chrono::Duration, pub healthy_threshold: i64, pub unhealthy_threshold: i64, }
#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClassicELBAttributes {
pub idle_timeout: Option<i64>,
pub cross_zone_load_balancing: Option<bool>, }