1#[allow(unused_imports)]
6mod prelude {
7 pub use kube::CustomResource;
8 pub use typed_builder::TypedBuilder;
9 pub use schemars::JsonSchema;
10 pub use serde::{Serialize, Deserialize};
11 pub use std::collections::BTreeMap;
12 pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
13}
14use self::prelude::*;
15
16#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
18#[kube(group = "traefik.io", version = "v1alpha1", kind = "TraefikService", plural = "traefikservices")]
19#[kube(namespaced)]
20#[kube(derive="Default")]
21#[kube(derive="PartialEq")]
22pub struct TraefikServiceSpec {
23 #[serde(default, skip_serializing_if = "Option::is_none")]
25 #[builder(default, setter(strip_option))]
26 pub mirroring: Option<TraefikServiceMirroring>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 #[builder(default, setter(strip_option))]
30 pub weighted: Option<TraefikServiceWeighted>,
31}
32
33#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
35pub struct TraefikServiceMirroring {
36 #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheck")]
38 #[builder(default, setter(strip_option))]
39 pub health_check: Option<TraefikServiceMirroringHealthCheck>,
40 #[serde(default, skip_serializing_if = "Option::is_none")]
42 #[builder(default, setter(strip_option))]
43 pub kind: Option<TraefikServiceMirroringKind>,
44 #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxBodySize")]
48 #[builder(default, setter(strip_option))]
49 pub max_body_size: Option<i64>,
50 #[serde(default, skip_serializing_if = "Option::is_none", rename = "mirrorBody")]
53 #[builder(default, setter(strip_option))]
54 pub mirror_body: Option<bool>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 #[builder(default, setter(strip_option))]
58 pub mirrors: Option<Vec<TraefikServiceMirroringMirrors>>,
59 pub name: String,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
64 #[builder(default, setter(strip_option))]
65 pub namespace: Option<String>,
66 #[serde(default, skip_serializing_if = "Option::is_none", rename = "nativeLB")]
71 #[builder(default, setter(strip_option))]
72 pub native_lb: Option<bool>,
73 #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePortLB")]
78 #[builder(default, setter(strip_option))]
79 pub node_port_lb: Option<bool>,
80 #[serde(default, skip_serializing_if = "Option::is_none", rename = "passHostHeader")]
83 #[builder(default, setter(strip_option))]
84 pub pass_host_header: Option<bool>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
88 #[builder(default, setter(strip_option))]
89 pub port: Option<IntOrString>,
90 #[serde(default, skip_serializing_if = "Option::is_none", rename = "responseForwarding")]
92 #[builder(default, setter(strip_option))]
93 pub response_forwarding: Option<TraefikServiceMirroringResponseForwarding>,
94 #[serde(default, skip_serializing_if = "Option::is_none")]
97 #[builder(default, setter(strip_option))]
98 pub scheme: Option<String>,
99 #[serde(default, skip_serializing_if = "Option::is_none", rename = "serversTransport")]
103 #[builder(default, setter(strip_option))]
104 pub servers_transport: Option<String>,
105 #[serde(default, skip_serializing_if = "Option::is_none")]
108 #[builder(default, setter(strip_option))]
109 pub sticky: Option<TraefikServiceMirroringSticky>,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
113 #[builder(default, setter(strip_option))]
114 pub strategy: Option<String>,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
118 #[builder(default, setter(strip_option))]
119 pub weight: Option<i64>,
120}
121
122#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
124pub struct TraefikServiceMirroringHealthCheck {
125 #[serde(default, skip_serializing_if = "Option::is_none", rename = "followRedirects")]
128 #[builder(default, setter(strip_option))]
129 pub follow_redirects: Option<bool>,
130 #[serde(default, skip_serializing_if = "Option::is_none")]
132 #[builder(default, setter(strip_option))]
133 pub headers: Option<BTreeMap<String, String>>,
134 #[serde(default, skip_serializing_if = "Option::is_none")]
136 #[builder(default, setter(strip_option))]
137 pub hostname: Option<String>,
138 #[serde(default, skip_serializing_if = "Option::is_none")]
141 #[builder(default, setter(strip_option))]
142 pub interval: Option<IntOrString>,
143 #[serde(default, skip_serializing_if = "Option::is_none")]
145 #[builder(default, setter(strip_option))]
146 pub method: Option<String>,
147 #[serde(default, skip_serializing_if = "Option::is_none")]
151 #[builder(default, setter(strip_option))]
152 pub mode: Option<String>,
153 #[serde(default, skip_serializing_if = "Option::is_none")]
155 #[builder(default, setter(strip_option))]
156 pub path: Option<String>,
157 #[serde(default, skip_serializing_if = "Option::is_none")]
159 #[builder(default, setter(strip_option))]
160 pub port: Option<i64>,
161 #[serde(default, skip_serializing_if = "Option::is_none")]
163 #[builder(default, setter(strip_option))]
164 pub scheme: Option<String>,
165 #[serde(default, skip_serializing_if = "Option::is_none")]
167 #[builder(default, setter(strip_option))]
168 pub status: Option<i64>,
169 #[serde(default, skip_serializing_if = "Option::is_none")]
172 #[builder(default, setter(strip_option))]
173 pub timeout: Option<IntOrString>,
174}
175
176#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
178pub enum TraefikServiceMirroringKind {
179 Service,
180 TraefikService,
181}
182
183#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
185pub struct TraefikServiceMirroringMirrors {
186 #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheck")]
188 #[builder(default, setter(strip_option))]
189 pub health_check: Option<TraefikServiceMirroringMirrorsHealthCheck>,
190 #[serde(default, skip_serializing_if = "Option::is_none")]
192 #[builder(default, setter(strip_option))]
193 pub kind: Option<TraefikServiceMirroringMirrorsKind>,
194 pub name: String,
197 #[serde(default, skip_serializing_if = "Option::is_none")]
199 #[builder(default, setter(strip_option))]
200 pub namespace: Option<String>,
201 #[serde(default, skip_serializing_if = "Option::is_none", rename = "nativeLB")]
206 #[builder(default, setter(strip_option))]
207 pub native_lb: Option<bool>,
208 #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePortLB")]
213 #[builder(default, setter(strip_option))]
214 pub node_port_lb: Option<bool>,
215 #[serde(default, skip_serializing_if = "Option::is_none", rename = "passHostHeader")]
218 #[builder(default, setter(strip_option))]
219 pub pass_host_header: Option<bool>,
220 #[serde(default, skip_serializing_if = "Option::is_none")]
223 #[builder(default, setter(strip_option))]
224 pub percent: Option<i64>,
225 #[serde(default, skip_serializing_if = "Option::is_none")]
228 #[builder(default, setter(strip_option))]
229 pub port: Option<IntOrString>,
230 #[serde(default, skip_serializing_if = "Option::is_none", rename = "responseForwarding")]
232 #[builder(default, setter(strip_option))]
233 pub response_forwarding: Option<TraefikServiceMirroringMirrorsResponseForwarding>,
234 #[serde(default, skip_serializing_if = "Option::is_none")]
237 #[builder(default, setter(strip_option))]
238 pub scheme: Option<String>,
239 #[serde(default, skip_serializing_if = "Option::is_none", rename = "serversTransport")]
243 #[builder(default, setter(strip_option))]
244 pub servers_transport: Option<String>,
245 #[serde(default, skip_serializing_if = "Option::is_none")]
248 #[builder(default, setter(strip_option))]
249 pub sticky: Option<TraefikServiceMirroringMirrorsSticky>,
250 #[serde(default, skip_serializing_if = "Option::is_none")]
253 #[builder(default, setter(strip_option))]
254 pub strategy: Option<String>,
255 #[serde(default, skip_serializing_if = "Option::is_none")]
258 #[builder(default, setter(strip_option))]
259 pub weight: Option<i64>,
260}
261
262#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
264pub struct TraefikServiceMirroringMirrorsHealthCheck {
265 #[serde(default, skip_serializing_if = "Option::is_none", rename = "followRedirects")]
268 #[builder(default, setter(strip_option))]
269 pub follow_redirects: Option<bool>,
270 #[serde(default, skip_serializing_if = "Option::is_none")]
272 #[builder(default, setter(strip_option))]
273 pub headers: Option<BTreeMap<String, String>>,
274 #[serde(default, skip_serializing_if = "Option::is_none")]
276 #[builder(default, setter(strip_option))]
277 pub hostname: Option<String>,
278 #[serde(default, skip_serializing_if = "Option::is_none")]
281 #[builder(default, setter(strip_option))]
282 pub interval: Option<IntOrString>,
283 #[serde(default, skip_serializing_if = "Option::is_none")]
285 #[builder(default, setter(strip_option))]
286 pub method: Option<String>,
287 #[serde(default, skip_serializing_if = "Option::is_none")]
291 #[builder(default, setter(strip_option))]
292 pub mode: Option<String>,
293 #[serde(default, skip_serializing_if = "Option::is_none")]
295 #[builder(default, setter(strip_option))]
296 pub path: Option<String>,
297 #[serde(default, skip_serializing_if = "Option::is_none")]
299 #[builder(default, setter(strip_option))]
300 pub port: Option<i64>,
301 #[serde(default, skip_serializing_if = "Option::is_none")]
303 #[builder(default, setter(strip_option))]
304 pub scheme: Option<String>,
305 #[serde(default, skip_serializing_if = "Option::is_none")]
307 #[builder(default, setter(strip_option))]
308 pub status: Option<i64>,
309 #[serde(default, skip_serializing_if = "Option::is_none")]
312 #[builder(default, setter(strip_option))]
313 pub timeout: Option<IntOrString>,
314}
315
316#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
318pub enum TraefikServiceMirroringMirrorsKind {
319 Service,
320 TraefikService,
321}
322
323#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
325pub struct TraefikServiceMirroringMirrorsResponseForwarding {
326 #[serde(default, skip_serializing_if = "Option::is_none", rename = "flushInterval")]
332 #[builder(default, setter(strip_option))]
333 pub flush_interval: Option<String>,
334}
335
336#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
339pub struct TraefikServiceMirroringMirrorsSticky {
340 #[serde(default, skip_serializing_if = "Option::is_none")]
342 #[builder(default, setter(strip_option))]
343 pub cookie: Option<TraefikServiceMirroringMirrorsStickyCookie>,
344}
345
346#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
348pub struct TraefikServiceMirroringMirrorsStickyCookie {
349 #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpOnly")]
351 #[builder(default, setter(strip_option))]
352 pub http_only: Option<bool>,
353 #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
357 #[builder(default, setter(strip_option))]
358 pub max_age: Option<i64>,
359 #[serde(default, skip_serializing_if = "Option::is_none")]
361 #[builder(default, setter(strip_option))]
362 pub name: Option<String>,
363 #[serde(default, skip_serializing_if = "Option::is_none")]
367 #[builder(default, setter(strip_option))]
368 pub path: Option<String>,
369 #[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
372 #[builder(default, setter(strip_option))]
373 pub same_site: Option<String>,
374 #[serde(default, skip_serializing_if = "Option::is_none")]
376 #[builder(default, setter(strip_option))]
377 pub secure: Option<bool>,
378}
379
380#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
382pub struct TraefikServiceMirroringResponseForwarding {
383 #[serde(default, skip_serializing_if = "Option::is_none", rename = "flushInterval")]
389 #[builder(default, setter(strip_option))]
390 pub flush_interval: Option<String>,
391}
392
393#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
396pub struct TraefikServiceMirroringSticky {
397 #[serde(default, skip_serializing_if = "Option::is_none")]
399 #[builder(default, setter(strip_option))]
400 pub cookie: Option<TraefikServiceMirroringStickyCookie>,
401}
402
403#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
405pub struct TraefikServiceMirroringStickyCookie {
406 #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpOnly")]
408 #[builder(default, setter(strip_option))]
409 pub http_only: Option<bool>,
410 #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
414 #[builder(default, setter(strip_option))]
415 pub max_age: Option<i64>,
416 #[serde(default, skip_serializing_if = "Option::is_none")]
418 #[builder(default, setter(strip_option))]
419 pub name: Option<String>,
420 #[serde(default, skip_serializing_if = "Option::is_none")]
424 #[builder(default, setter(strip_option))]
425 pub path: Option<String>,
426 #[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
429 #[builder(default, setter(strip_option))]
430 pub same_site: Option<String>,
431 #[serde(default, skip_serializing_if = "Option::is_none")]
433 #[builder(default, setter(strip_option))]
434 pub secure: Option<bool>,
435}
436
437#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
439pub struct TraefikServiceWeighted {
440 #[serde(default, skip_serializing_if = "Option::is_none")]
442 #[builder(default, setter(strip_option))]
443 pub services: Option<Vec<TraefikServiceWeightedServices>>,
444 #[serde(default, skip_serializing_if = "Option::is_none")]
447 #[builder(default, setter(strip_option))]
448 pub sticky: Option<TraefikServiceWeightedSticky>,
449}
450
451#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
453pub struct TraefikServiceWeightedServices {
454 #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheck")]
456 #[builder(default, setter(strip_option))]
457 pub health_check: Option<TraefikServiceWeightedServicesHealthCheck>,
458 #[serde(default, skip_serializing_if = "Option::is_none")]
460 #[builder(default, setter(strip_option))]
461 pub kind: Option<TraefikServiceWeightedServicesKind>,
462 pub name: String,
465 #[serde(default, skip_serializing_if = "Option::is_none")]
467 #[builder(default, setter(strip_option))]
468 pub namespace: Option<String>,
469 #[serde(default, skip_serializing_if = "Option::is_none", rename = "nativeLB")]
474 #[builder(default, setter(strip_option))]
475 pub native_lb: Option<bool>,
476 #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePortLB")]
481 #[builder(default, setter(strip_option))]
482 pub node_port_lb: Option<bool>,
483 #[serde(default, skip_serializing_if = "Option::is_none", rename = "passHostHeader")]
486 #[builder(default, setter(strip_option))]
487 pub pass_host_header: Option<bool>,
488 #[serde(default, skip_serializing_if = "Option::is_none")]
491 #[builder(default, setter(strip_option))]
492 pub port: Option<IntOrString>,
493 #[serde(default, skip_serializing_if = "Option::is_none", rename = "responseForwarding")]
495 #[builder(default, setter(strip_option))]
496 pub response_forwarding: Option<TraefikServiceWeightedServicesResponseForwarding>,
497 #[serde(default, skip_serializing_if = "Option::is_none")]
500 #[builder(default, setter(strip_option))]
501 pub scheme: Option<String>,
502 #[serde(default, skip_serializing_if = "Option::is_none", rename = "serversTransport")]
506 #[builder(default, setter(strip_option))]
507 pub servers_transport: Option<String>,
508 #[serde(default, skip_serializing_if = "Option::is_none")]
511 #[builder(default, setter(strip_option))]
512 pub sticky: Option<TraefikServiceWeightedServicesSticky>,
513 #[serde(default, skip_serializing_if = "Option::is_none")]
516 #[builder(default, setter(strip_option))]
517 pub strategy: Option<String>,
518 #[serde(default, skip_serializing_if = "Option::is_none")]
521 #[builder(default, setter(strip_option))]
522 pub weight: Option<i64>,
523}
524
525#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
527pub struct TraefikServiceWeightedServicesHealthCheck {
528 #[serde(default, skip_serializing_if = "Option::is_none", rename = "followRedirects")]
531 #[builder(default, setter(strip_option))]
532 pub follow_redirects: Option<bool>,
533 #[serde(default, skip_serializing_if = "Option::is_none")]
535 #[builder(default, setter(strip_option))]
536 pub headers: Option<BTreeMap<String, String>>,
537 #[serde(default, skip_serializing_if = "Option::is_none")]
539 #[builder(default, setter(strip_option))]
540 pub hostname: Option<String>,
541 #[serde(default, skip_serializing_if = "Option::is_none")]
544 #[builder(default, setter(strip_option))]
545 pub interval: Option<IntOrString>,
546 #[serde(default, skip_serializing_if = "Option::is_none")]
548 #[builder(default, setter(strip_option))]
549 pub method: Option<String>,
550 #[serde(default, skip_serializing_if = "Option::is_none")]
554 #[builder(default, setter(strip_option))]
555 pub mode: Option<String>,
556 #[serde(default, skip_serializing_if = "Option::is_none")]
558 #[builder(default, setter(strip_option))]
559 pub path: Option<String>,
560 #[serde(default, skip_serializing_if = "Option::is_none")]
562 #[builder(default, setter(strip_option))]
563 pub port: Option<i64>,
564 #[serde(default, skip_serializing_if = "Option::is_none")]
566 #[builder(default, setter(strip_option))]
567 pub scheme: Option<String>,
568 #[serde(default, skip_serializing_if = "Option::is_none")]
570 #[builder(default, setter(strip_option))]
571 pub status: Option<i64>,
572 #[serde(default, skip_serializing_if = "Option::is_none")]
575 #[builder(default, setter(strip_option))]
576 pub timeout: Option<IntOrString>,
577}
578
579#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
581pub enum TraefikServiceWeightedServicesKind {
582 Service,
583 TraefikService,
584}
585
586#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
588pub struct TraefikServiceWeightedServicesResponseForwarding {
589 #[serde(default, skip_serializing_if = "Option::is_none", rename = "flushInterval")]
595 #[builder(default, setter(strip_option))]
596 pub flush_interval: Option<String>,
597}
598
599#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
602pub struct TraefikServiceWeightedServicesSticky {
603 #[serde(default, skip_serializing_if = "Option::is_none")]
605 #[builder(default, setter(strip_option))]
606 pub cookie: Option<TraefikServiceWeightedServicesStickyCookie>,
607}
608
609#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
611pub struct TraefikServiceWeightedServicesStickyCookie {
612 #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpOnly")]
614 #[builder(default, setter(strip_option))]
615 pub http_only: Option<bool>,
616 #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
620 #[builder(default, setter(strip_option))]
621 pub max_age: Option<i64>,
622 #[serde(default, skip_serializing_if = "Option::is_none")]
624 #[builder(default, setter(strip_option))]
625 pub name: Option<String>,
626 #[serde(default, skip_serializing_if = "Option::is_none")]
630 #[builder(default, setter(strip_option))]
631 pub path: Option<String>,
632 #[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
635 #[builder(default, setter(strip_option))]
636 pub same_site: Option<String>,
637 #[serde(default, skip_serializing_if = "Option::is_none")]
639 #[builder(default, setter(strip_option))]
640 pub secure: Option<bool>,
641}
642
643#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
646pub struct TraefikServiceWeightedSticky {
647 #[serde(default, skip_serializing_if = "Option::is_none")]
649 #[builder(default, setter(strip_option))]
650 pub cookie: Option<TraefikServiceWeightedStickyCookie>,
651}
652
653#[derive(Serialize, Deserialize, Clone, Debug, TypedBuilder, Default, PartialEq, JsonSchema)]
655pub struct TraefikServiceWeightedStickyCookie {
656 #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpOnly")]
658 #[builder(default, setter(strip_option))]
659 pub http_only: Option<bool>,
660 #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
664 #[builder(default, setter(strip_option))]
665 pub max_age: Option<i64>,
666 #[serde(default, skip_serializing_if = "Option::is_none")]
668 #[builder(default, setter(strip_option))]
669 pub name: Option<String>,
670 #[serde(default, skip_serializing_if = "Option::is_none")]
674 #[builder(default, setter(strip_option))]
675 pub path: Option<String>,
676 #[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
679 #[builder(default, setter(strip_option))]
680 pub same_site: Option<String>,
681 #[serde(default, skip_serializing_if = "Option::is_none")]
683 #[builder(default, setter(strip_option))]
684 pub secure: Option<bool>,
685}
686