1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package v1alpha1
17
18 import (
19 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20 )
21
22
23 type PhysicalMachineChaosAction string
24
25 var (
26 PMStressCPUAction PhysicalMachineChaosAction = "stress-cpu"
27 PMStressMemAction PhysicalMachineChaosAction = "stress-mem"
28 PMDiskWritePayloadAction PhysicalMachineChaosAction = "disk-write-payload"
29 PMDiskReadPayloadAction PhysicalMachineChaosAction = "disk-read-payload"
30 PMDiskFillAction PhysicalMachineChaosAction = "disk-fill"
31 PMNetworkCorruptAction PhysicalMachineChaosAction = "network-corrupt"
32 PMNetworkDuplicateAction PhysicalMachineChaosAction = "network-duplicate"
33 PMNetworkLossAction PhysicalMachineChaosAction = "network-loss"
34 PMNetworkDelayAction PhysicalMachineChaosAction = "network-delay"
35 PMNetworkPartitionAction PhysicalMachineChaosAction = "network-partition"
36 PMNetworkBandwidthAction PhysicalMachineChaosAction = "network-bandwidth"
37 PMNetworkDNSAction PhysicalMachineChaosAction = "network-dns"
38 PMNetworkFloodAction PhysicalMachineChaosAction = "network-flood"
39 PMNetworkDownAction PhysicalMachineChaosAction = "network-down"
40 PMProcessAction PhysicalMachineChaosAction = "process"
41 PMJVMExceptionAction PhysicalMachineChaosAction = "jvm-exception"
42 PMJVMGCAction PhysicalMachineChaosAction = "jvm-gc"
43 PMJVMLatencyAction PhysicalMachineChaosAction = "jvm-latency"
44 PMJVMReturnAction PhysicalMachineChaosAction = "jvm-return"
45 PMJVMStressAction PhysicalMachineChaosAction = "jvm-stress"
46 PMJVMRuleDataAction PhysicalMachineChaosAction = "jvm-rule-data"
47 PMJVMMySQLAction PhysicalMachineChaosAction = "jvm-mysql"
48 PMClockAction PhysicalMachineChaosAction = "clock"
49 PMRedisExpirationAction PhysicalMachineChaosAction = "redis-expiration"
50 PMRedisPenetrationAction PhysicalMachineChaosAction = "redis-penetration"
51 PMRedisCacheLimitAction PhysicalMachineChaosAction = "redis-cacheLimit"
52 PMRedisSentinelRestartAction PhysicalMachineChaosAction = "redis-restart"
53 PMRedisSentinelStopAction PhysicalMachineChaosAction = "redis-stop"
54 PMKafkaFillAction PhysicalMachineChaosAction = "kafka-fill"
55 PMKafkaFloodAction PhysicalMachineChaosAction = "kafka-flood"
56 PMKafkaIOAction PhysicalMachineChaosAction = "kafka-io"
57 PMHTTPAbortAction PhysicalMachineChaosAction = "http-abort"
58 PMHTTPDelayAction PhysicalMachineChaosAction = "http-delay"
59 PMHTTPConfigAction PhysicalMachineChaosAction = "http-config"
60 PMHTTPRequestAction PhysicalMachineChaosAction = "http-request"
61 PMFileCreateAction PhysicalMachineChaosAction = "file-create"
62 PMFileModifyPrivilegeAction PhysicalMachineChaosAction = "file-modify"
63 PMFileDeleteAction PhysicalMachineChaosAction = "file-delete"
64 PMFileRenameAction PhysicalMachineChaosAction = "file-rename"
65 PMFileAppendAction PhysicalMachineChaosAction = "file-append"
66 PMFileReplaceAction PhysicalMachineChaosAction = "file-replace"
67 PMVMAction PhysicalMachineChaosAction = "vm"
68 PMUserDefinedAction PhysicalMachineChaosAction = "user_defined"
69 )
70
71
72
73
74
75
76
77 type PhysicalMachineChaos struct {
78 metav1.TypeMeta `json:",inline"`
79 metav1.ObjectMeta `json:"metadata,omitempty"`
80
81
82 Spec PhysicalMachineChaosSpec `json:"spec"`
83
84
85
86 Status PhysicalMachineChaosStatus `json:"status,omitempty"`
87 }
88
89
90 type PhysicalMachineChaosSpec struct {
91
92 Action PhysicalMachineChaosAction `json:"action"`
93
94 PhysicalMachineSelector `json:",inline"`
95
96
97 ExpInfo `json:",inline"`
98
99
100
101 Duration *string `json:"duration,omitempty" webhook:"Duration"`
102
103
104
105 RemoteCluster string `json:"remoteCluster,omitempty"`
106 }
107
108
109 type PhysicalMachineChaosStatus struct {
110 ChaosStatus `json:",inline"`
111 }
112
113 func (obj *PhysicalMachineChaos) GetSelectorSpecs() map[string]interface{} {
114 return map[string]interface{}{
115 ".": &obj.Spec.PhysicalMachineSelector,
116 }
117 }
118
119 type PhysicalMachineSelector struct {
120
121
122
123 Address []string `json:"address,omitempty"`
124
125
126
127 Selector PhysicalMachineSelectorSpec `json:"selector,omitempty"`
128
129
130
131
132 Mode SelectorMode `json:"mode"`
133
134
135
136
137
138
139 Value string `json:"value,omitempty"`
140 }
141
142
143
144 type PhysicalMachineSelectorSpec struct {
145 GenericSelectorSpec `json:",inline"`
146
147
148
149
150
151 PhysicalMachines map[string][]string `json:"physicalMachines,omitempty"`
152 }
153
154 func (spec *PhysicalMachineSelectorSpec) Empty() bool {
155 if spec == nil {
156 return true
157 }
158 if len(spec.AnnotationSelectors) != 0 || len(spec.FieldSelectors) != 0 || len(spec.LabelSelectors) != 0 ||
159 len(spec.Namespaces) != 0 || len(spec.PhysicalMachines) != 0 || len(spec.ExpressionSelectors) != 0 {
160 return false
161 }
162 return true
163 }
164
165 type ExpInfo struct {
166
167
168 UID string `json:"uid,omitempty" swaggerignore:"true"`
169
170
171
172 Action string `json:"action,omitempty" swaggerignore:"true"`
173
174
175
176 StressCPU *StressCPUSpec `json:"stress-cpu,omitempty"`
177
178
179
180 StressMemory *StressMemorySpec `json:"stress-mem,omitempty"`
181
182
183
184 DiskReadPayload *DiskPayloadSpec `json:"disk-read-payload,omitempty"`
185
186
187
188 DiskWritePayload *DiskPayloadSpec `json:"disk-write-payload,omitempty"`
189
190
191
192 DiskFill *DiskFillSpec `json:"disk-fill,omitempty"`
193
194
195
196 NetworkCorrupt *NetworkCorruptSpec `json:"network-corrupt,omitempty"`
197
198
199
200 NetworkDuplicate *NetworkDuplicateSpec `json:"network-duplicate,omitempty"`
201
202
203
204 NetworkLoss *NetworkLossSpec `json:"network-loss,omitempty"`
205
206
207
208 NetworkDelay *NetworkDelaySpec `json:"network-delay,omitempty"`
209
210
211
212 NetworkPartition *NetworkPartitionSpec `json:"network-partition,omitempty"`
213
214
215
216 NetworkDNS *NetworkDNSSpec `json:"network-dns,omitempty"`
217
218
219
220 NetworkBandwidth *NetworkBandwidthSpec `json:"network-bandwidth,omitempty"`
221
222
223
224 NetworkFlood *NetworkFloodSpec `json:"network-flood,omitempty"`
225
226
227
228 NetworkDown *NetworkDownSpec `json:"network-down,omitempty"`
229
230
231
232 Process *ProcessSpec `json:"process,omitempty"`
233
234
235
236 JVMException *JVMExceptionSpec `json:"jvm-exception,omitempty"`
237
238
239
240 JVMGC *JVMGCSpec `json:"jvm-gc,omitempty"`
241
242
243
244 JVMLatency *JVMLatencySpec `json:"jvm-latency,omitempty"`
245
246
247
248 JVMReturn *JVMReturnSpec `json:"jvm-return,omitempty"`
249
250
251
252 JVMStress *JVMStressSpec `json:"jvm-stress,omitempty"`
253
254
255
256 JVMRuleData *JVMRuleDataSpec `json:"jvm-rule-data,omitempty"`
257
258
259
260 JVMMySQL *PMJVMMySQLSpec `json:"jvm-mysql,omitempty"`
261
262
263
264 Clock *ClockSpec `json:"clock,omitempty"`
265
266
267
268 RedisExpiration *RedisExpirationSpec `json:"redis-expiration,omitempty"`
269
270
271
272 RedisPenetration *RedisPenetrationSpec `json:"redis-penetration,omitempty"`
273
274
275
276 RedisCacheLimit *RedisCacheLimitSpec `json:"redis-cacheLimit,omitempty"`
277
278
279
280 RedisSentinelRestart *RedisSentinelRestartSpec `json:"redis-restart,omitempty"`
281
282
283
284 RedisSentinelStop *RedisSentinelStopSpec `json:"redis-stop,omitempty"`
285
286
287
288 KafkaFill *KafkaFillSpec `json:"kafka-fill,omitempty"`
289
290
291
292 KafkaFlood *KafkaFloodSpec `json:"kafka-flood,omitempty"`
293
294
295
296 KafkaIO *KafkaIOSpec `json:"kafka-io,omitempty"`
297
298
299
300 HTTPAbort *HTTPAbortSpec `json:"http-abort,omitempty"`
301
302
303
304 HTTPDelay *HTTPDelaySpec `json:"http-delay,omitempty"`
305
306
307
308 HTTPConfig *HTTPConfigSpec `json:"http-config,omitempty"`
309
310
311
312 HTTPRequest *HTTPRequestSpec `json:"http-request,omitempty"`
313
314
315
316 FileCreate *FileCreateSpec `json:"file-create,omitempty"`
317
318
319
320 FileModifyPrivilege *FileModifyPrivilegeSpec `json:"file-modify,omitempty"`
321
322
323
324 FileDelete *FileDeleteSpec `json:"file-delete,omitempty"`
325
326
327
328 FileRename *FileRenameSpec `json:"file-rename,omitempty"`
329
330
331
332 FileAppend *FileAppendSpec `json:"file-append,omitempty"`
333
334
335
336 FileReplace *FileReplaceSpec `json:"file-replace,omitempty"`
337
338
339
340 VM *VMSpec `json:"vm,omitempty"`
341
342
343
344 UserDefined *UserDefinedSpec `json:"user_defined,omitempty"`
345 }
346
347 type StressCPUSpec struct {
348
349 Load int `json:"load,omitempty"`
350
351 Workers int `json:"workers,omitempty"`
352
353 Options []string `json:"options,omitempty"`
354 }
355
356 type StressMemorySpec struct {
357
358
359 Size string `json:"size,omitempty"`
360
361 Options []string `json:"options,omitempty"`
362 }
363
364 type DiskFileSpec struct {
365
366
367 Size string `json:"size,omitempty"`
368
369
370 Path string `json:"path,omitempty"`
371 }
372
373 type DiskPayloadSpec struct {
374 DiskFileSpec `json:",inline"`
375
376
377 PayloadProcessNum uint8 `json:"payload-process-num,omitempty"`
378 }
379
380 type DiskFillSpec struct {
381 DiskFileSpec `json:",inline"`
382
383
384 FillByFallocate bool `json:"fill-by-fallocate,omitempty"`
385 }
386
387 type NetworkCommonSpec struct {
388
389 Correlation string `json:"correlation,omitempty"`
390
391 Device string `json:"device,omitempty"`
392
393
394 SourcePort string `json:"source-port,omitempty"`
395
396
397 EgressPort string `json:"egress-port,omitempty"`
398
399 IPAddress string `json:"ip-address,omitempty"`
400
401 IPProtocol string `json:"ip-protocol,omitempty"`
402
403 Hostname string `json:"hostname,omitempty"`
404 }
405
406 type NetworkCorruptSpec struct {
407 NetworkCommonSpec `json:",inline"`
408
409
410 Percent string `json:"percent,omitempty"`
411 }
412
413 type NetworkDuplicateSpec struct {
414 NetworkCommonSpec `json:",inline"`
415
416
417 Percent string `json:"percent,omitempty"`
418 }
419
420 type NetworkLossSpec struct {
421 NetworkCommonSpec `json:",inline"`
422
423
424 Percent string `json:"percent,omitempty"`
425 }
426
427 type NetworkDelaySpec struct {
428 NetworkCommonSpec `json:",inline"`
429
430
431 Jitter string `json:"jitter,omitempty"`
432
433 Latency string `json:"latency,omitempty"`
434
435
436 AcceptTCPFlags string `json:"accept-tcp-flags,omitempty"`
437 }
438
439 type NetworkPartitionSpec struct {
440
441 Device string `json:"device,omitempty"`
442
443 Hostname string `json:"hostname,omitempty"`
444
445 IPAddress string `json:"ip-address,omitempty"`
446
447
448
449 Direction string `json:"direction,omitempty"`
450
451 IPProtocol string `json:"ip-protocol,omitempty"`
452
453
454 AcceptTCPFlags string `json:"accept-tcp-flags,omitempty"`
455 }
456
457 type NetworkDNSSpec struct {
458
459 DNSServer string `json:"dns-server,omitempty"`
460
461 DNSIp string `json:"dns-ip,omitempty"`
462
463 DNSDomainName string `json:"dns-domain-name,omitempty"`
464 }
465
466 type NetworkBandwidthSpec struct {
467 Rate string `json:"rate"`
468
469 Limit uint32 `json:"limit"`
470
471 Buffer uint32 `json:"buffer"`
472
473 Peakrate *uint64 `json:"peakrate,omitempty"`
474 Minburst *uint32 `json:"minburst,omitempty"`
475
476 Device string `json:"device,omitempty"`
477 IPAddress string `json:"ip-address,omitempty"`
478 Hostname string `json:"hostname,omitempty"`
479 }
480
481 type NetworkFloodSpec struct {
482
483 Rate string `json:"rate"`
484
485 IPAddress string `json:"ip-address,omitempty"`
486
487 Port string `json:"port,omitempty"`
488
489 Parallel int32 `json:"parallel,omitempty"`
490
491 Duration string `json:"duration"`
492 }
493
494 type NetworkDownSpec struct {
495
496 Device string `json:"device,omitempty"`
497
498 Duration string `json:"duration,omitempty"`
499 }
500
501 type ProcessSpec struct {
502
503 Process string `json:"process,omitempty"`
504
505 Signal int `json:"signal,omitempty"`
506
507
508 RecoverCmd string `json:"recoverCmd,omitempty"`
509 }
510
511 type JVMExceptionSpec struct {
512 JVMCommonSpec `json:",inline"`
513 JVMClassMethodSpec `json:",inline"`
514
515
516 ThrowException string `json:"exception,omitempty"`
517 }
518
519 type JVMStressSpec struct {
520 JVMCommonSpec `json:",inline"`
521
522
523 CPUCount int `json:"cpu-count,omitempty"`
524
525
526 MemoryType string `json:"mem-type,omitempty"`
527 }
528
529 type JVMGCSpec struct {
530 JVMCommonSpec `json:",inline"`
531 }
532
533 type JVMLatencySpec struct {
534 JVMCommonSpec `json:",inline"`
535 JVMClassMethodSpec `json:",inline"`
536
537
538 LatencyDuration int `json:"latency,omitempty"`
539 }
540
541 type JVMReturnSpec struct {
542 JVMCommonSpec `json:",inline"`
543 JVMClassMethodSpec `json:",inline"`
544
545
546 ReturnValue string `json:"value,omitempty"`
547 }
548
549 type JVMRuleDataSpec struct {
550 JVMCommonSpec `json:",inline"`
551
552
553 RuleData string `json:"rule-data,omitempty"`
554 }
555
556 type PMJVMMySQLSpec struct {
557 JVMCommonSpec `json:",inline"`
558
559 JVMMySQLSpec `json:",inline"`
560
561
562
563 ThrowException string `json:"exception,omitempty"`
564
565
566
567 LatencyDuration int `json:"latency,omitempty"`
568 }
569
570 type ClockSpec struct {
571
572 Pid int `json:"pid,omitempty"`
573
574 TimeOffset string `json:"time-offset,omitempty"`
575
576
577
578 ClockIdsSlice string `json:"clock-ids-slice,omitempty"`
579 }
580
581 type RedisCommonSpec struct {
582
583 Addr string `json:"addr,omitempty"`
584
585 Password string `json:"password,omitempty"`
586 }
587
588 type RedisExpirationSpec struct {
589 RedisCommonSpec `json:",inline"`
590
591 Expiration string `json:"expiration,omitempty"`
592
593 Key string `json:"key,omitempty"`
594
595 Option string `json:"option,omitempty"`
596 }
597
598 type RedisPenetrationSpec struct {
599 RedisCommonSpec `json:",inline"`
600
601 RequestNum int `json:"requestNum,omitempty"`
602 }
603
604 type RedisCacheLimitSpec struct {
605 RedisCommonSpec `json:",inline"`
606
607 Size string `json:"cacheSize,omitempty"`
608
609 Percent string `json:"percent,omitempty"`
610 }
611
612 type RedisSentinelRestartSpec struct {
613 RedisCommonSpec `json:",inline"`
614
615 Conf string `json:"conf,omitempty"`
616
617 FlushConfig bool `json:"flushConfig,omitempty"`
618
619 RedisPath bool `json:"redisPath,omitempty"`
620 }
621
622 type RedisSentinelStopSpec struct {
623 RedisCommonSpec `json:",inline"`
624
625 Conf string `json:"conf,omitempty"`
626
627 FlushConfig bool `json:"flushConfig,omitempty"`
628
629 RedisPath bool `json:"redisPath,omitempty"`
630 }
631
632 type KafkaCommonSpec struct {
633
634 Topic string `json:"topic,omitempty"`
635
636 Host string `json:"host,omitempty"`
637
638 Port uint16 `json:"port,omitempty"`
639
640 Username string `json:"username,omitempty"`
641
642 Password string `json:"password,omitempty"`
643 }
644
645 type KafkaFillSpec struct {
646 KafkaCommonSpec `json:",inline"`
647
648 MessageSize uint `json:"messageSize,omitempty"`
649
650 MaxBytes uint64 `json:"maxBytes,omitempty"`
651
652 ReloadCommand string `json:"reloadCommand,omitempty"`
653 }
654
655 type KafkaFloodSpec struct {
656 KafkaCommonSpec `json:",inline"`
657
658 MessageSize uint `json:"messageSize,omitempty"`
659
660 Threads uint `json:"threads,omitempty"`
661 }
662
663 type KafkaIOSpec struct {
664
665 Topic string `json:"topic,omitempty"`
666
667 ConfigFile string `json:"configFile,omitempty"`
668
669 NonReadable bool `json:"nonReadable,omitempty"`
670
671 NonWritable bool `json:"nonWritable,omitempty"`
672 }
673
674 type HTTPCommonSpec struct {
675
676 ProxyPorts []uint `json:"proxy_ports"`
677
678 Target string `json:"target"`
679
680 Port int32 `json:"port,omitempty"`
681
682 Path string `json:"path,omitempty"`
683
684 Method string `json:"method,omitempty"`
685
686 Code string `json:"code,omitempty"`
687 }
688
689 type HTTPAbortSpec struct {
690 HTTPCommonSpec `json:",inline"`
691 }
692
693 type HTTPDelaySpec struct {
694 HTTPCommonSpec `json:",inline"`
695
696 Delay string `json:"delay"`
697 }
698
699 type HTTPConfigSpec struct {
700
701 FilePath string `json:"file_path,omitempty"`
702 }
703
704
705 type HTTPRequestSpec struct {
706
707 URL string `json:"url,omitempty"`
708
709 EnableConnPool bool `json:"enable-conn-pool,omitempty"`
710
711 Count int `json:"count,omitempty"`
712 }
713
714 type FileCreateSpec struct {
715
716 FileName string `json:"file-name,omitempty"`
717
718 DirName string `json:"dir-name,omitempty"`
719 }
720
721 type FileModifyPrivilegeSpec struct {
722
723 FileName string `json:"file-name,omitempty"`
724
725 Privilege uint32 `json:"privilege,omitempty"`
726 }
727
728 type FileDeleteSpec struct {
729
730 FileName string `json:"file-name,omitempty"`
731
732 DirName string `json:"dir-name,omitempty"`
733 }
734
735 type FileRenameSpec struct {
736
737 SourceFile string `json:"source-file,omitempty"`
738
739 DestFile string `json:"dest-file,omitempty"`
740 }
741
742 type FileAppendSpec struct {
743
744 FileName string `json:"file-name,omitempty"`
745
746 Data string `json:"data,omitempty"`
747
748 Count int `json:"count,omitempty"`
749 }
750
751 type FileReplaceSpec struct {
752
753 FileName string `json:"file-name,omitempty"`
754
755 OriginStr string `json:"origin-string,omitempty"`
756
757 DestStr string `json:"dest-string,omitempty"`
758
759 Line int `json:"line,omitempty"`
760 }
761
762 type VMSpec struct {
763
764 VMName string `json:"vm-name,omitempty"`
765 }
766
767 type UserDefinedSpec struct {
768
769 AttackCmd string `json:"attackCmd,omitempty"`
770
771 RecoverCmd string `json:"recoverCmd,omitempty"`
772 }
773