Compare commits

...

129 Commits

Author SHA1 Message Date
屈轩
88e226a154 fix(region): vendor update (#24611) 2026-04-02 10:34:56 +08:00
Zexi Li
68b0363ba2 feat(llm): get available models from base_url (for ollama & openai) (#24606)
Co-authored-by: cwz <cwz_eikoh@163.com>
2026-04-01 15:44:20 +08:00
Zexi Li
1fc6fc9b98 fix(monitor): update silent_period when channel is empty (#24603)
silent_period is stored as Frequency on the notification, not on the
alert itself. PostUpdate only called UpdateNotification (which recreates
notifications with the new silent_period) when Channel was non-empty.
When channel was an empty array, the silent_period update was silently
skipped. Add an else-if branch to directly update the existing
notifications' Frequency when silent_period changes but channel is empty.
2026-03-31 20:00:54 +08:00
Jian Qiu
621d180e98 fix(host): use findmnt instead of df to detect local mount point (#24600)
Co-authored-by: Haibersut <117586514+Haibersut@users.noreply.github.com>
2026-03-31 18:08:17 +08:00
Zexi Li
69a83aee24 feat(monitor): add batch resource metrics query API (#24597)
Add unifiedmonitor class action `resource-metrics` with client options/CLI command.
Implement host/guest metric drivers to query cpu/mem/disk/net rates and attach alert state.
2026-03-31 17:44:58 +08:00
Jian Qiu
121b2d4ee4 fix: support build specific multi-arch buildx (#24587)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-31 17:42:20 +08:00
Jian Qiu
230f1683a2 fix: add customer usable filters that filter noaddr networks (#24584)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-31 17:27:21 +08:00
Zexi Li
04593a9149 fix(host): use proper shell quoting in pod tar/find commands (#24593)
Add shellQuote helper that safely escapes single quotes and apply it
consistently across tarGzDir and tarHostDir to prevent shell injection
via crafted paths, directory names, or exclude patterns.
2026-03-31 12:04:21 +08:00
Zexi Li
27ff5bca59 fix(host): get pod status by primary container status (#24582) 2026-03-30 16:21:31 +08:00
wanyaoqi
4a7befa0c6 fix(host): add ovmf 4m code (#24576) 2026-03-30 07:54:18 +08:00
Zexi Li
8838aaf84b fix(llm): 修复 llm 镜像没有根据 sku 更新的问题 (#24573) 2026-03-26 21:45:06 +08:00
Jian Qiu
199a669d19 fix: compat fixes for container host in vm (#24571)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-26 18:23:06 +08:00
屈轩
789c571703 fix(logger): add syslog init log (#24556) 2026-03-26 18:11:05 +08:00
wanyaoqi
af4f1d522a fix(region): validate kickstart enabled (#24559) 2026-03-26 18:09:57 +08:00
Zexi Li
a52c9b8a3b fix(region): order containers by created_at time (#24569) 2026-03-26 12:25:46 +08:00
Zexi Li
0e369eef9f fix(keystone): allow blob update for image credentials (#24566)
Also fix type check to allow secret/image only.
2026-03-26 11:50:51 +08:00
屈轩
86d531bf4e fix(region): add domain container usage (#24563) 2026-03-25 18:26:44 +08:00
Zexi Li
a53f8d0095 fix(vllm): user customize args & health check in hostlocal net (#24552)
Co-authored-by: cwz <cwz_eikoh@163.com>
2026-03-25 10:36:34 +08:00
wanyaoqi
8d5310f9e9 Automated cherry pick of #24544: fix(host): metadata handler proxy telegraf data fix tenant_id (#24546)
* fix(host): metadata handler proxy telegraf data

* fix(host): append unknown dmesg to last entry
2026-03-25 10:34:34 +08:00
Jian Qiu
1e5bab79f8 fix: lbagent genHaproxyConfig possible nil pointer panic (#24538)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-25 10:32:56 +08:00
Jian Qiu
6310c1e4a6 fix(hostmetrics): add checks for incomplete pod and container stats (#24550)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-25 10:31:20 +08:00
屈轩
51e3e7feb9 fix(region): add container usage (#24541) 2026-03-25 10:23:21 +08:00
屈轩
2c32ed9b85 fix(host-image): update script for riscv64 host-image (#24534) 2026-03-24 11:37:31 +08:00
Zexi Li
75c546050f fix(host): probing multiple container status (#24530) 2026-03-24 10:27:16 +08:00
wanyaoqi
4f91a82f12 fix(host): dd zero to lv wife partitions on lvremove (#24526) 2026-03-23 19:02:04 +08:00
wanyaoqi
c14170ff8f fix(host-deployer): resizefs add fstype LVM2_member (#24518) 2026-03-23 00:01:13 +08:00
wanyaoqi
6f23751754 fix(region): check instance snapshot joint is nil on snapshot purge (#24514) 2026-03-22 23:59:26 +08:00
屈轩
ece4993df6 fix(apigateway): stream download content-type (#24509) 2026-03-20 13:41:45 +08:00
Jian Qiu
fec1f2495b feature: support host-local wire (#24498)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-20 01:36:59 +08:00
wanyaoqi
e42d360bb5 Automated cherry pick of #24452: Cherry pick of #23094 upstream release 4.0 1770106850 (#24464)
* feat(region, climc): Add kickstart parameters and metadata

- Add kickstart parameters and metadata support
- Add kickstart CLI options and management commands
- Set kickstart metadata in PostCreate
- Add related kickstart metadata fields

* feat(host): Implement automated VM installation

- Mounts the installation ISO to a unique temp path, reusing existing mounts.
- Extracts kernel (`vmlinuz`, `initrd`) to configure QEMU boot.
- Injects kernel parameters to trigger the autoinstall.
- Add kickstart configuration validation.

Modified `guestLauncher` script to handle kernel parameters with spaces
that were previously truncated by the Python script.

* feat(host): Implement Kickstart monitoring

- Automatically updates the VM status upon
receiving `KICKSTART_SUCCESS` or `KICKSTART_FAILED` signals.
- On success, cleans up temporary mount points
and restarts the server via the Region API.

* feat(region): add kickstart type metadata

Adds the `VM_METADATA_KICKSTART_TYPE` to distinguish between
kickstart configurations passed by URL or by direct content.

* feat(host): Handle kickstart installing and timeout

- Set status to 'installing' upon successful kickstart boot
- Handle KICKSTART_INSTALLING serial message for status updates
- Add timeout handling for kickstart status monitoring

* feat(host): provide Kickstart config via content

Embed the provided config content as a file in a
labeled ISO (mkisofs), then mount the ISO during
the Kickstart installation to supply the config.

* refactor(host): Enhance the kickstart installation

- Integrates kickstart status directly into the VM status, replacing metadata.
- Unifies locations for kickstart logs and temporary files.
- Uses regex for more robust status matching.
- Moves helper functions to `kickstart_helper.go`.
- Fixes an incorrect kickstart configuration filename.
- Adjusts kickstart logging.

* feat(region, host): add kickstart support for openEuler

* refactor(host): extract kickstart cleanup function

* feat(region, climc): add kickstart-complete cli

Add this command to manually update the kickstart status and
reboot VM if needed. This is mainly used by users to manually
update the kickstart status when kickstart status detection is abnormal.

* refactor(region): reduce code duplication in Kickstart validation

- unify two validateKickstartConfig functions
- extract determineKickstartType function for type determination

* fix(region, host): fix kickstart auto-reboot

- Adjusted the timing of setting the status to
`kickstart_pending` to avoid incorrect reboot checks
- Skip setting kickstart if the status is already
`kickstart_completed` to prevent unnecessary reboots
- Added cleanup of kickstart files upon VM deletion

* feat(host): download kickstart config from URL

- download content when passing config via URL
- unified boot parameters

* feat(host): copy kickstart kernel files

* feat(host): ensure kickstart completion signal in config

---------

Co-authored-by: happygame <happygame1024@gmail.com>
2026-03-20 01:35:42 +08:00
wanyaoqi
6ea800897e Automated cherry pick of #24456: Fix/host deployer nbd driver40 (#24465)
* fix(host-deployer): nbd add concurrency control

* fix(host-deployer,glance): windows image add current version
2026-03-20 01:32:19 +08:00
Zexi Li
f1740579f1 feat(llm): unify container access url info and login response (#24506) 2026-03-19 23:07:01 +08:00
wanyaoqi
da37f6836a fix(host-deployer): get resize dev by serial panic (#24447) 2026-03-19 23:04:13 +08:00
cwz_eikoh
e701abe273 Automated cherry pick of #24471: Feature(mcp): support x-api-key authentication for mcp-server (#24501)
* feat(mcp-server): support base64 ak/sk

* fix(mcp-agent): try to fix route of default-mcp-tools
2026-03-19 15:04:57 +08:00
cwz_eikoh
e51be81c7e feat(llm): support model import for vllm (#24502) 2026-03-19 15:03:41 +08:00
wanyaoqi
5649836123 Automated cherry pick of #24473: fix(glance): cache images to ceph add brand filter (#24477)
* fix(glance): cache images to ceph add brand filter

* fix(region): iso image support default uefi boot mod
2026-03-19 11:45:18 +08:00
Jian Qiu
590a775cd8 fix: logger add app-options-show api (#24494)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-19 11:44:05 +08:00
屈轩
184de997c5 fix(region): allow set disk auto-delete attribute (#24487) 2026-03-19 10:27:52 +08:00
Zexi Li
c7b7911401 fix(llm): derive openclaw auth password from llm id (#24483) 2026-03-18 19:01:10 +08:00
屈轩
5250d2b647 fix(region): vendor update (#24484) 2026-03-18 18:52:10 +08:00
wanyaoqi
da094dbb5e fix(baremetal-agent): bm register reuse baseprepare updateBmInfo (#24476) 2026-03-18 10:11:00 +08:00
Zexi Li
3b031ebdca fix(monitor): align multi-metric alert conditions in notifications (#24469) 2026-03-17 15:57:27 +08:00
屈轩
93ea44d336 fix: add more log info (#24462) 2026-03-17 14:39:04 +08:00
Zexi Li
bdbe0642a0 feat(llm): add llm_types filters and cleanup dify cli (#24459) 2026-03-16 18:05:20 +08:00
Zexi Li
e6e4b70b6f feat(llm): 调整 openclaw 容器与 LLM 基础模型/sku 逻辑 (#24454) 2026-03-16 16:19:46 +08:00
Zexi Li
4b91e6235c fix(llm): mount openclaw home dir (#24450) 2026-03-13 20:38:37 +08:00
屈轩
c8a6867c10 fix(region): avoid delete ksyun vm error (#24442) 2026-03-13 15:23:17 +08:00
Jian Qiu
1673cf3fca fix: compat fixes for container host in vm (#24444)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-03-13 13:26:50 +08:00
cwz_eikoh
140054c927 Automated cherry pick of #24338: feat(llm): init vllm as llm_container (#24436)
* feat(llm): init vllm as llm_container

* feat(vllm): fix save-instant-model for vllm

* feat(llm): support quick-model for vllm

* feat(vllm): support preferred-model in llm

* fix(llm): add ValidateSpec in llm_container_driver

* feat(vllm): auto-set vllm params
2026-03-13 11:07:09 +08:00
Zexi Li
fc33607c0e feat(host): rotate container logs (#24434) 2026-03-12 15:15:24 +08:00
Zexi Li
1b276b02cb feat(llm): add login-info api (#24430) 2026-03-12 07:21:01 +08:00
wanyaoqi
8543f3735d fix(region): guestnetworksecgroup list add network info (#24393) 2026-03-11 19:31:52 +08:00
wanyaoqi
5dd913b40f fix(host): check file exist before copy ovmf vars (#24366) 2026-03-11 19:29:43 +08:00
Zexi Li
bfca09016e feat(llm): restart action (#24428) 2026-03-11 19:08:42 +08:00
屈轩
d1dec1d4bb fix(cloudmon): update volc api (#24424) 2026-03-11 16:54:50 +08:00
Zexi Li
129e15e52f Automated cherry pick of #24411: openclaw llm agent (#24419)
* support comfyui and openclaw

feat(region,host): support env credential of container

feat(llm): openclaw url

* fix(region): delete server without host_id

* feat(llm): llm spec
2026-03-11 15:21:17 +08:00
屈轩
f832e211bd fix(monitor): add vm out bandwidth metric (#24418) 2026-03-11 13:49:59 +08:00
屈轩
d1351b84c7 fix(region): vendor update (#24414) 2026-03-11 11:03:23 +08:00
屈轩
36afb063ef fix(region): persistence server status change (#24408) 2026-03-10 15:06:42 +08:00
Zexi Li
8bce8e4e17 Automated cherry pick of #24399: feat(llm): polymetric dify with llm (#24406)
* feat(llm): polymetric dify with llm

* fix(llm): drop LLMSpecHolder & fix some bugs

---------

Co-authored-by: cwz <cwz_eikoh@163.com>
2026-03-10 10:23:54 +08:00
Zexi Li
92b77d1f4d fix(region): associate eip to pod (#24403) 2026-03-09 15:24:09 +08:00
Zexi Li
d9229dae60 fix(monitor): 仅在 From/To/Interval 为空时设置默认值 (#24397)
setDefaultValue 中 From、To、Interval 改为仅在当前值为空时
才用 inputQuery 覆盖,避免覆盖用户已指定的查询时间范围与间隔
2026-03-06 19:13:30 +08:00
Zexi Li
af117c4f4b fix(host): hard code start index of va gpu (#24390) 2026-03-05 11:55:15 +08:00
Zexi Li
2e89fd9f95 feat(host): cgroupv2 implemented for pod (#24387) 2026-03-04 11:21:49 +08:00
cwz_eikoh
e9c33ccb09 Automated cherry pick of #24355: fix: some bugs in mcp-agent & llm (#24382)
* fix(mcp-agent): encoding issue when simulated streaming

* fix(mcp-agent): use chat-stream in phase tool-choose

* fix(mcp-agent): support reasoning model

* fix(llm): add pre-delete detection

* feat(mcp-agent): add default mcp-agent

* feat(mcp-agent): add default-mcp-tools
2026-03-03 16:07:43 +08:00
cwz_eikoh
cc7e6fca79 Automated cherry pick of #24354: feat(mcp-server): add mcp-server config (#24386)
* feat(mcp-server): add mcp-server config

* fix(mcp-agent): add claude mcp-server-config
2026-03-03 16:06:28 +08:00
屈轩
aaf93d316d fix(esxi-agent): vendor update for rebuild root fail (#24381) 2026-03-03 00:18:37 +08:00
Zexi Li
734e73da54 feat(monitor): support disable_notify_recovery for commonalert (#24376) 2026-03-02 16:13:00 +08:00
屈轩
bfd9d30689 fix(region): check bind disk resource (#24374) 2026-03-02 12:03:03 +08:00
屈轩
d9d0819e94 fix(region): snapshot size opslog (#24370) 2026-02-28 17:00:41 +08:00
屈轩
f5facd4c0a fix(region): avoid sync remove disk (#24363) 2026-02-27 15:06:53 +08:00
屈轩
465ffb8977 fix(ansibleserver): update telegraf (#24360) 2026-02-27 14:06:52 +08:00
Jian Qiu
9799dcadf8 fix: allow uncache deleted image (#24350)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-26 23:08:03 +08:00
wanyaoqi
39cbadd2b8 fix(host): add guest max mem size options (#24343) 2026-02-26 20:26:58 +08:00
Zexi Li
817673bbc5 fix(monitor): convert SNodeAlert to SCommonAlert in FetchCustomizeColumns (#24346)
Pass cObjs of type *SCommonAlert to SCommonAlertManager.FetchCustomizeColumns
instead of *SNodeAlert so the parent correctly fetches common alert columns.
2026-02-25 19:32:09 +08:00
Jian Qiu
f7161ae1bf fix: keep climc network-create backward compatibility (#24339)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-25 09:03:19 +08:00
屈轩
42b5913416 fix(region): avoid account sync cost time abnormal (#24335) 2026-02-24 17:33:57 +08:00
Jian Qiu
2e90864f32 fix: instance snapshot virtual size (#24329)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-24 09:23:28 +08:00
Zexi Li
15ea182d65 fix(region): wrong args type on callback function of DiskCreateTask (#24331) 2026-02-13 17:05:31 +08:00
Zexi Li
3c4f838bbb fix(host): do not set cached image status to active for TGZ on host (#24325)
TGZ images are unpacked after fetch on host; leave status update to region
StorageCacheImageTask so cachedimage becomes active only in OnCacheSucc.
2026-02-13 10:05:23 +08:00
Jian Qiu
bbcdc46a82 fix: ensure s3 client init for s3 storage driver (#24322)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-12 10:01:32 +08:00
Zexi Li
67ad215c00 feat(region,host): support post overlay uppper config (#24317) 2026-02-11 16:57:36 +08:00
屈轩
7d1f917f0d fix(yunionconf): policy scope (#24315) 2026-02-11 11:23:56 +08:00
wanyaoqi
673bae1853 fix(host): set dmesg parse failed log level to debug (#24310) 2026-02-11 00:58:57 +08:00
wanyaoqi
2dad4c9162 fix(host-deployer): deploy single disk has no disk id (#24305) 2026-02-10 19:36:09 +08:00
wanyaoqi
093a497f63 Automated cherry pick of #24301: fix(host-deployer): online resize loop dev (#24302)
* fix(host-deployer): online resize loop dev

* fix(host-deployer): update host-deployer-base
2026-02-10 17:07:58 +08:00
Zexi Li
bdbb3e71e0 Automated cherry pick of #24290: feat(monitor): support alert reason notification (#24294)
* feat(monitor): support alert reason notification

* fix(climc): commonalert list options
2026-02-10 09:06:35 +08:00
Jian Qiu
1eb46d87e1 fix: guest syncstatus subtask for disk create task (#24293)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-10 09:03:33 +08:00
屈轩
050d940832 fix(notify): notify receiver (#24298) 2026-02-09 20:42:44 +08:00
Jian Qiu
e7caa1f6e2 fix: remove parent task info from task context (#24284)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-09 13:22:18 +08:00
wanyaoqi
1667655c28 fix(host): add device_id only scsi-hd device (#24280) 2026-02-09 11:26:53 +08:00
wanyaoqi
36e4f22d37 fix(host): deploy nics config defore do add nics (#24277) 2026-02-09 08:37:54 +08:00
Jian Qiu
55e355860c fix: unify lb charge type (#24273)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-08 18:43:31 +08:00
Jian Qiu
3a53b034ba feature: support postpaid traffic metering (#24270)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-08 12:58:02 +08:00
wanyaoqi
24b1bc9c38 feat(region,host,vpcagent): allow guest network dedicate secgroups (#24262) 2026-02-07 17:31:55 +08:00
wanyaoqi
11ceadfcf2 fix(region,host): rbd snapshot get actual size (#24241)
- add host down and auto migrate notification
2026-02-07 17:31:06 +08:00
屈轩
f8611bb9f0 fix(region): vendor update (#24266) 2026-02-07 13:52:12 +08:00
wanyaoqi
aa5f56b225 fix(region,host): rename screen dump info structure (#24259) 2026-02-06 18:09:12 +08:00
cwz_eikoh
1868c64c2f fix(llm): add handler in apigateway for mcp-agent-chat (#24255) 2026-02-05 18:17:03 +08:00
屈轩
d5e86b770b fix(region): snapshot policy operation (#24248) 2026-02-05 16:40:29 +08:00
wanyaoqi
9c77f44b94 fix(glance): set s3 bucket name before s3 init check (#24238) 2026-02-04 23:07:44 +08:00
屈轩
2ea2e74464 fix(yunionconf): support tags (#24232) 2026-02-04 17:14:02 +08:00
屈轩
97c6af0dab fix(region): public cloud sku create (#24227) 2026-02-04 14:57:03 +08:00
屈轩
2c2fe1bb16 fix(region): support cloudpods vm disk driver (#24222) 2026-02-04 14:28:13 +08:00
Zexi Li
b6622f1fde fix(region,climc): persist netinterface vlan_id to hostnetwork (#24215)
- climc: add VlanId to host-add-netif, host-remove-netif, host-enable-netif,
  host-disable-netif
- region: set bn.VlanId from netif.VlanId when attaching to network
- mcclient: include Vlan_ID in baremetalnetworks list columns
2026-02-04 11:03:27 +08:00
屈轩
82c5ab2fb1 fix(host): support skip check kernel mod (#24219) 2026-02-04 10:30:07 +08:00
屈轩
10bdd3c05d fix(region): avoid duplicate check when update account aksk (#24210) 2026-02-03 20:53:21 +08:00
Zexi Li
02370a6529 Automated cherry pick of #24194: Fix(llm): some mistakes, use CmpId & InstantModelId insteadof SvrId & ModelId (#24206)
* fix(llm): some mistakes

* fix(llm): use CmpId instead of SvrId

* fix(llm): instant_model use id instead of modelId

---------

Co-authored-by: cwz <cwz_eikoh@163.com>
2026-02-03 16:46:17 +08:00
Zexi Li
24012af0d7 fix(monitor): comparator string (#24203) 2026-02-03 12:01:48 +08:00
屈轩
fd12d54130 fix(region): init snapshot policy disk table (#24199) 2026-02-02 20:38:34 +08:00
wanyaoqi
aa4cfa6688 fix(host): guestnetworksync do nothing on detach vfio nic (#24179) 2026-02-02 20:18:21 +08:00
Jian Qiu
1d58d47425 fix: allow guestnetwork ip4 addr field nullable (#24192)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-02-02 20:15:45 +08:00
Zexi Li
bdc91273e1 feat(monitor): add the registered model manger function (#24196) 2026-02-02 17:51:24 +08:00
屈轩
f3f21962ab fix(climc): sku create support arch (#24187) 2026-02-02 14:17:14 +08:00
屈轩
c7cdb0297a fix(notify): support webhook sign (#24181) 2026-02-02 12:53:50 +08:00
wanyaoqi
0d58a6228a Automated cherry pick of #24126: feat(region,host): riscv64 cpu arch support (#24175)
* feat(region,host): riscv64 cpu arch support

* fix(region,host): compatible riscv64

* fix(host): add qemu v10.0.7 support
2026-02-01 20:28:32 +08:00
wanyaoqi
348fcdfca9 fix(host): live migrate add timeout (#24163) 2026-02-01 20:24:31 +08:00
wanyaoqi
83814d3c84 fix(region): server add set network num queues (#24167) 2026-02-01 20:12:56 +08:00
wanyaoqi
4b4ee6aa64 fix(glance): set glance s3 bucket name default onecloud-images (#24172) 2026-02-01 20:10:27 +08:00
屈轩
2f91466ab4 fix(region): defer ctx cancel (#24155) 2026-01-30 19:11:45 +08:00
cwz_eikoh
2d99794806 Automated cherry pick of #24149: Fix(llm): fix bugs & apikey encrypt & support history for mcp-agent-chat & delete modelname in llmSku (#24151)
* fix(llm): mcp-agent apiKey encrypt

* fix(llm): error-handle when instant-model import

* feature(llm): add get-available-network for llm

* feature(llm): support history for mcp-agent-chat

* fix(llm): llm create with net instead of networktype & networkid

* fix(llm): delete modelName in llmSku & fix some bugs
2026-01-29 10:58:41 +08:00
wanyaoqi
15318ac0ea fix(region): have agent add check is telegraf deployed (#24147) 2026-01-29 10:34:38 +08:00
屈轩
1786b05c3a fix(region): billing resource create time (#24141) 2026-01-28 19:59:53 +08:00
屈轩
75d2af1a6a fix(glance): support prob iso image (#24134) 2026-01-28 15:29:03 +08:00
Zexi Li
0bb65d75e5 fix(llm): add community-registry api (#24132) 2026-01-28 14:31:05 +08:00
Jian Qiu
81a336ea41 fix: skip baremetal-agent riscv64 (#24124)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-01-24 20:32:28 +08:00
屈轩
0c9d242f34 fix(region): vendor update (#24119) 2026-01-23 17:03:37 +08:00
屈轩
db2932e20c fix(region): cloudpods container sync (#24114) 2026-01-21 15:35:16 +08:00
Jian Qiu
2d4a3da562 fix: update vendor 4.0.2 20260121 (#24110)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-01-21 13:57:24 +08:00
4431 changed files with 569204 additions and 144526 deletions

View File

@@ -260,7 +260,7 @@ dep:
@echo "$$depDeprecated"
@$(MAKE) mod
RELEASE_BRANCH:=release/4.0
RELEASE_BRANCH:=release/4.0.2
GOPROXY ?= direct
mod:

View File

@@ -2,7 +2,7 @@ FROM registry.cn-beijing.aliyuncs.com/yunionio/ansibleserver-base:3.22.2-0
# https://github.com/yunionio/telegraf/blob/yn-release-1.36/Makefile.yn#L28
# install playbook and telegraf install pkg
COPY --from=registry.cn-beijing.aliyuncs.com/yunionio/file-repo:v0.5.2 /opt/yunion/playbook /opt/yunion/playbook
COPY --from=registry.cn-beijing.aliyuncs.com/yunionio/file-repo:v0.5.2 /opt/yunion/ansible-install-pkg /opt/yunion/ansible-install-pkg
COPY --from=registry.cn-beijing.aliyuncs.com/yunionio/file-repo:v0.5.3 /opt/yunion/playbook /opt/yunion/playbook
COPY --from=registry.cn-beijing.aliyuncs.com/yunionio/file-repo:v0.5.3 /opt/yunion/ansible-install-pkg /opt/yunion/ansible-install-pkg
ADD ./_output/alpine-build/bin/ansibleserver /opt/yunion/bin/ansibleserver

View File

@@ -1,4 +1,4 @@
FROM registry.cn-beijing.aliyuncs.com/yunionio/host-deployer-base:1.5.3
FROM registry.cn-beijing.aliyuncs.com/yunionio/host-deployer-base:1.5.8
LABEL maintainer="Yaoqi Wan wanyaoqi@yunionyun.com"

View File

@@ -71,18 +71,6 @@ glance-base-3-22-2:
$(DOCKER_BUILDX)/glance-base:$(GLANCE_BASE_VERSION_3-22-2) -f ./Dockerfile.glance-base .
HOST_IMAGE_VERSION ?= v1.0.2
HOST_IMAGE_NAME = $(REGISTRY)/host-image:$(HOST_IMAGE_VERSION)
host-image:
docker pull $(HOST_IMAGE_NAME)-amd64 --platform amd64
docker pull $(HOST_IMAGE_NAME)-arm64 --platform arm64
docker manifest create $(HOST_IMAGE_NAME) \
$(HOST_IMAGE_NAME)-amd64 \
$(HOST_IMAGE_NAME)-arm64
docker manifest annotate $(HOST_IMAGE_NAME) $(HOST_IMAGE_NAME)-amd64 --arch amd64
docker manifest annotate $(HOST_IMAGE_NAME) $(HOST_IMAGE_NAME)-arm64 --arch arm64
docker manifest push $(HOST_IMAGE_NAME)
LBAGENT_BASE_VERSION = v0.0.5
lbagent-base:
$(DOCKER_BUILDX)/lbagent-base:$(LBAGENT_BASE_VERSION) -f ./Dockerfile.lbagent-base .

View File

@@ -1,8 +1,11 @@
策略名称: {{.name}}
触发时间: {{.start_time}}
报警级别: {{.level}}
触发条件: {{.description | unescaped}}
报警数量:{{len .matches}}
触发条件:{{if eq (len .matches) 1}} {{(index .matches 0).condition | unescaped}}{{else}}
{{- range .matches}}- {{.condition | unescaped}}
{{- end}}{{end}}
{{if .reason}}报警原因: {{.reason}}
{{end}}报警数量:{{len .matches}}
资源名称:{{.resource_name}}
详情地址: {{.web_url}}

View File

@@ -88,8 +88,19 @@
</tr>
<tr>
<td class="td">策略详情:</td>
<td>{{.description}}</td>
<td>
{{- range $i, $m := .matches -}}
{{- if $i}}<br/>{{end -}}
{{- $m.condition | unescaped -}}
{{- end -}}
</td>
</tr>
{{if .reason}}
<tr>
<td class="td">报警原因:</td>
<td>{{.reason}}</td>
</tr>
{{end}}
</table>
<table class="table" style="padding-top: 6px; padding-bottom: 10px;">
<tr>

View File

@@ -1,8 +1,11 @@
AlertName: {{.name}}
Time: {{.start_time}}
Level: {{.level}}
TriggerCondition: {{.description | unescaped}}
AlertCount: {{len .matches}}
TriggerCondition:{{if eq (len .matches) 1}} {{(index .matches 0).condition | unescaped}}{{else}}
{{- range .matches}}- {{.condition | unescaped}}
{{- end}}{{end}}
{{if .reason}}Reason: {{.reason}}
{{end}}AlertCount: {{len .matches}}
ResourceName: {{.resource_name}}
WebUrl: {{.web_url}}

View File

@@ -88,8 +88,19 @@
</tr>
<tr>
<td class="td">Strategy details</td>
<td>{{.description}}</td>
<td>
{{- range $i, $m := .matches -}}
{{- if $i}}<br/>{{end -}}
{{- $m.condition | unescaped -}}
{{- end -}}
</td>
</tr>
{{if .reason}}
<tr>
<td class="td">Reason</td>
<td>{{.reason}}</td>
</tr>
{{end}}
</table>
<table class="table" style="padding-top: 6px; padding-bottom: 10px;">
<tr>

View File

@@ -42,6 +42,12 @@ import (
func init() {
cmd := shell.NewResourceCmd(&modules.Disks)
cmd.List(&compute_options.DiskListOptions{})
cmd.Show(&compute_options.DiskIdOptions{})
cmd.Perform("public", &compute_options.DiskIdOptions{})
cmd.Perform("private", &compute_options.DiskIdOptions{})
cmd.Perform("syncstatus", &compute_options.DiskIdOptions{})
cmd.Perform("change-owner-candidate-domains", &compute_options.DiskIdOptions{})
cmd.Perform("disk-cancel-delete", &compute_options.DiskIdOptions{})
cmd.Perform("set-class-metadata", &options.ResourceMetadataOptions{})
cmd.Perform("rebuild", &compute_options.DiskRebuildOptions{})
cmd.Perform("migrate", &compute_options.DiskMigrateOptions{})
@@ -49,26 +55,6 @@ func init() {
cmd.Perform("change-billing-type", new(compute_options.DiskChangeBillingTypeOptions))
cmd.Perform("change-storage-type", &compute_options.DiskChangeStorageTypeOptions{})
type DiskDetailOptions struct {
ID string `help:"ID or Name of disk"`
}
R(&DiskDetailOptions{}, "disk-show", "Show details of disk", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
disk, e := modules.Disks.Get(s, args.ID, nil)
if e != nil {
return e
}
printObject(disk)
return nil
})
R(&DiskDetailOptions{}, "disk-cancel-delete", "Cancel pending delete disks", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
disk, e := modules.Disks.PerformAction(s, args.ID, "cancel-delete", nil)
if e != nil {
return e
}
printObject(disk)
return nil
})
type DiskDeleteOptions struct {
ID []string `help:"ID of disks to delete" metavar:"DISK"`
OverridePendingDelete bool `help:"Delete disk directly instead of pending delete" short-token:"f"`
@@ -97,25 +83,7 @@ func init() {
return nil
})
R(&DiskDetailOptions{}, "disk-public", "Make a disk public", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
disk, e := modules.Disks.PerformAction(s, args.ID, "public", nil)
if e != nil {
return e
}
printObject(disk)
return nil
})
R(&DiskDetailOptions{}, "disk-private", "Make a disk private", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
disk, e := modules.Disks.PerformAction(s, args.ID, "private", nil)
if e != nil {
return e
}
printObject(disk)
return nil
})
R(&DiskDetailOptions{}, "disk-metadata", "Get metadata of a disk", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
R(&compute_options.DiskIdOptions{}, "disk-metadata", "Get metadata of a disk", func(s *mcclient.ClientSession, args *compute_options.DiskIdOptions) error {
meta, e := modules.Disks.GetMetadata(s, args.ID, nil)
if e != nil {
return e
@@ -124,20 +92,11 @@ func init() {
return nil
})
R(&DiskDetailOptions{}, "disk-syncstatus", "Sync status for disk", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
ret, e := modules.Disks.PerformAction(s, args.ID, "syncstatus", nil)
if e != nil {
return e
}
printObject(ret)
return nil
})
type DiskUpdateOptions struct {
ID string `help:"ID or name of disk"`
Name string `help:"New name of disk"`
Desc string `help:"Description" metavar:"DESCRIPTION"`
AutoDelete string `help:"enable/disable auto delete of disk" choices:"enable|disable"`
AutoDelete string `help:"Set disk auto_delete (true/false or enable/disable)" choices:"true|false|enable|disable"`
AutoSnapshot string `help:"enable/disable auto snapshot of disk" choices:"enable|disable"`
DiskType string `help:"Disk type" choices:"data|volume|sys"`
IsSsd *bool `help:"mark disk as ssd" negative:"no-is-ssd"`
@@ -152,7 +111,7 @@ func init() {
params.Add(jsonutils.NewString(args.Desc), "description")
}
if len(args.AutoDelete) > 0 {
if args.AutoDelete == "enable" {
if args.AutoDelete == "enable" || args.AutoDelete == "true" {
params.Add(jsonutils.JSONTrue, "auto_delete")
} else {
params.Add(jsonutils.JSONFalse, "auto_delete")
@@ -301,7 +260,7 @@ func init() {
return nil
})
R(&DiskDetailOptions{}, "disk-change-owner-candidate-domains", "Get change owner candidate domain list", func(s *mcclient.ClientSession, args *DiskDetailOptions) error {
R(&compute_options.DiskIdOptions{}, "disk-change-owner-candidate-domains", "Get change owner candidate domain list", func(s *mcclient.ClientSession, args *compute_options.DiskIdOptions) error {
result, err := modules.Disks.GetSpecific(s, args.ID, "change-owner-candidate-domains", nil)
if err != nil {
return err

View File

@@ -267,6 +267,7 @@ func init() {
Ip6Addr string `help:"IPv6 address"`
Bridge string `help:"Bridge of hostwire"`
Interface string `help:"Interface name, eg:eth0, en0"`
VlanId int `help:"Vlan ID"`
}
R(&HostAddNetIfOptions{}, "host-add-netif", "Host add a NIC", func(s *mcclient.ClientSession, args *HostAddNetIfOptions) error {
params := jsonutils.NewDict()
@@ -289,6 +290,7 @@ func init() {
if len(args.Interface) > 0 {
params.Add(jsonutils.NewString(args.Interface), "interface")
}
addVlanIdToParams(params, args.VlanId)
result, err := modules.Hosts.PerformAction(s, args.ID, "add-netif", params)
if err != nil {
return err
@@ -298,12 +300,14 @@ func init() {
})
type HostRemoveNetIfOptions struct {
ID string `help:"ID or Name of host"`
MAC string `help:"MAC of NIC to remove"`
ID string `help:"ID or Name of host"`
MAC string `help:"MAC of NIC to remove"`
VlanId int `help:"Vlan Id"`
}
R(&HostRemoveNetIfOptions{}, "host-remove-netif", "Remove NIC from host", func(s *mcclient.ClientSession, args *HostRemoveNetIfOptions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.MAC), "mac")
addVlanIdToParams(params, args.VlanId)
result, err := modules.Hosts.PerformAction(s, args.ID, "remove-netif", params)
if err != nil {
return err
@@ -319,6 +323,7 @@ func init() {
Ip6 string `help:"IPv6 address"`
Network string `help:"network to connect"`
Reserved bool `help:"fetch IP from reserved pool"`
VlanId int `help:"Vlan ID"`
}
R(&HostEnableNetIfOptions{}, "host-enable-netif", "Enable a network interface for a host", func(s *mcclient.ClientSession, args *HostEnableNetIfOptions) error {
params := jsonutils.NewDict()
@@ -337,6 +342,7 @@ func init() {
if len(args.Network) > 0 {
params.Add(jsonutils.NewString(args.Network), "network")
}
addVlanIdToParams(params, args.VlanId)
result, err := modules.Hosts.PerformAction(s, args.ID, "enable-netif", params)
if err != nil {
return err
@@ -349,6 +355,7 @@ func init() {
ID string `help:"ID or Name of host"`
MAC string `help:"MAC of NIC to disable"`
Reserve bool `help:"Reserve the IP address"`
VlanId int `help:"Vlan Id"`
}
R(&HostDisableNetIfOptions{}, "host-disable-netif", "Disable a network interface", func(s *mcclient.ClientSession, args *HostDisableNetIfOptions) error {
params := jsonutils.NewDict()
@@ -356,6 +363,7 @@ func init() {
if args.Reserve {
params.Add(jsonutils.JSONTrue, "reserve")
}
addVlanIdToParams(params, args.VlanId)
result, err := modules.Hosts.PerformAction(s, args.ID, "disable-netif", params)
if err != nil {
return err
@@ -697,3 +705,9 @@ func init() {
},
)
}
func addVlanIdToParams(params *jsonutils.JSONDict, vlanId int) {
if vlanId > 1 {
params.Add(jsonutils.NewInt(int64(vlanId)), "vlan_id")
}
}

View File

@@ -37,7 +37,7 @@ func init() {
return nil
})
R(&options.TagListOptions{}, "tag-list", "List tags", func(s *mcclient.ClientSession, opts *options.TagListOptions) error {
R(&options.TagListOptions{}, "service-metadata-list", "List service metadata", func(s *mcclient.ClientSession, opts *options.TagListOptions) error {
var mod modulebase.IResourceManager
switch opts.Service {
case "compute":

View File

@@ -98,6 +98,22 @@ func init() {
return nil
})
type NetworkCreate3Options struct {
compute_options.NetworkCreateOptions `start_ip->positional:"false" end_ip->positional:"false" net_mask->positional:"false"`
}
R(&NetworkCreate3Options{}, "network-create3", "Create a dual-stack virtual network", func(s *mcclient.ClientSession, args *NetworkCreate3Options) error {
params, err := args.Params()
if err != nil {
return err
}
net, err := modules.Networks.Create(s, params)
if err != nil {
return err
}
printObject(net)
return nil
})
type NetworkSplitOptions struct {
NETWORK string `help:"ID or name of network to split"`
IP string `help:"Start ip of the split network"`

View File

@@ -36,4 +36,7 @@ func init() {
cmd.Perform("change-owner", &options.SecgroupChangeOwnerOptions{})
cmd.Perform("import-rules", &options.SecgroupImportRulesOptions{})
cmd.PerformClass("clean", &options.SecgroupCleanOptions{})
scmd := shell.NewResourceCmd(&modules.Servernetworksecgroups)
scmd.List(&options.ServerNetworkSecgroupListOptions{})
}

View File

@@ -23,14 +23,20 @@ import (
"yunion.io/x/pkg/util/printutils"
"yunion.io/x/pkg/util/regutils"
"yunion.io/x/onecloud/cmd/climc/shell"
"yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/cmdline"
"yunion.io/x/onecloud/pkg/mcclient"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
"yunion.io/x/onecloud/pkg/mcclient/options"
compute_options "yunion.io/x/onecloud/pkg/mcclient/options/compute"
)
func init() {
cmd := shell.NewResourceCmd(&modules.ServerNetworkTrafficLogs)
cmd.List(new(compute_options.ServerNetworkTrafficLogListOptions))
type ServerNetworkListOptions struct {
options.BaseListOptions
Server string `help:"ID or Name of Server"`

View File

@@ -30,6 +30,7 @@ import (
"yunion.io/x/pkg/util/printutils"
"yunion.io/x/onecloud/cmd/climc/shell"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/modulebase"
@@ -132,6 +133,10 @@ func init() {
cmd.BatchPerform("set-root-disk-matcher", &options.ServerSetRootDiskMatcher{})
cmd.Perform("disable-auto-merge-snapshot", &options.ServerDisableAutoMergeSnapshot{})
cmd.BatchPerform("set-tpm", &options.ServerSetTpmOptions{})
cmd.Perform("set-kickstart", &options.ServerKickstartConfigOptions{})
cmd.Perform("delete-kickstart", &options.ServerIdOptions{})
cmd.Perform("kickstart-complete", &options.ServerKickstartCompleteOptions{})
cmd.Get("kickstart", new(options.ServerIdOptions))
cmd.Get("vnc", new(options.ServerVncOptions))
cmd.Get("desc", new(options.ServerIdOptions))
cmd.Get("status", new(options.ServerIdOptions))
@@ -148,6 +153,10 @@ func init() {
cmd.Get("screen-dump-show", new(options.ServerScreenDumpOptions))
cmd.Get("numa-info", new(options.ServerIdOptions))
cmd.BatchPerform("screen-dump", new(options.ServerIdsOptions))
cmd.Perform("set-network-num-queues", new(options.ServerSetNetworkNumQueues))
cmd.Perform("set-network-secgroup", new(options.ServerNetworkSecGroupsOptions))
cmd.Perform("add-network-secgroup", new(options.ServerNetworkSecGroupsOptions))
cmd.Perform("revoke-network-secgroup", new(options.ServerNetworkSecGroupsOptions))
cmd.GetProperty(&options.ServerStatusStatisticsOptions{})
cmd.GetProperty(&options.ServerProjectStatisticsOptions{})
@@ -209,7 +218,7 @@ func init() {
params.Name = opts.NAME
params.AutoStart = opts.AutoStart
params.Eip = opts.Eip
params.EipChargeType = opts.EipChargeType
params.EipChargeType = billing_api.ParseNetChargeType(opts.EipChargeType)
params.EipBw = opts.EipBw
server, err := modules.Servers.Create(s, params.JSON(params))

View File

@@ -54,7 +54,7 @@ type ImageOptionalOptions struct {
OsDist string `help:"Distribution name of OS" metavar:"OS_DISTRIBUTION"`
OsVersion string `help:"Version of OS"`
OsCodename string `help:"Codename of OS"`
OsArch string `help:"Os hardware architecture" choices:"x86|x86_64|aarch32|aarch64"`
OsArch string `help:"Os hardware architecture" choices:"x86|x86_64|aarch32|aarch64|riscv32|riscv64"`
OsLang string `help:"OS Language" choices:"zh_CN|en_US"`
Preference int64 `help:"Disk preferences"`
Notes string `help:"Notes about the image"`

View File

@@ -7,7 +7,7 @@ import (
)
func init() {
cmd := shell.NewResourceCmd(&modules.Difies)
cmd := shell.NewResourceCmd(&modules.LLMs).WithKeyword("dify")
cmd.BatchCreate(new(options.DifyCreateOptions))
cmd.List(new(options.DifyListOptions))
cmd.Show(new(options.DifyShowOptions))

View File

@@ -1,20 +0,0 @@
package llm
import (
"yunion.io/x/onecloud/cmd/climc/shell"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/llm"
base_options "yunion.io/x/onecloud/pkg/mcclient/options"
options "yunion.io/x/onecloud/pkg/mcclient/options/llm"
)
func init() {
cmd := shell.NewResourceCmd(&modules.DifySku)
cmd.List(new(options.DifySkuListOptions))
cmd.Show(new(options.DifySkuShowOptions))
cmd.Update(new(options.DifySkuUpdateOptions))
cmd.Create(new(options.DifySkuCreateOptions))
cmd.Delete(new(options.DifySkuDeleteOptions))
cmd.Perform("public", &base_options.BasePublicOptions{})
cmd.Perform("private", &base_options.BaseIdOptions{})
// cmd.Perform("clone", new(options.DesktopSkuCloneOptions))
}

View File

@@ -2,7 +2,6 @@ package llm
import (
"yunion.io/x/onecloud/cmd/climc/shell"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/llm"
commonoptions "yunion.io/x/onecloud/pkg/mcclient/options"
options "yunion.io/x/onecloud/pkg/mcclient/options/llm"
@@ -22,4 +21,5 @@ func init() {
cmd.Perform("public", new(commonoptions.BasePublicOptions))
cmd.Perform("private", new(commonoptions.BaseIdOptions))
cmd.PerformClass("import", new(options.LLMInstantModelImportOptions))
cmd.GetProperty(new(options.LLMInstantModelCommunityRegistryOptions))
}

View File

@@ -11,13 +11,18 @@ func init() {
cmd.BatchCreate(new(options.LLMCreateOptions))
cmd.List(new(options.LLMListOptions))
cmd.Show(new(options.LLMShowOptions))
cmd.Update(new(options.LLMUpdateOptions))
cmd.Delete(new(options.LLMDeleteOptions))
// cmd.Perform("change-model", new(options.LLMChangeModelOptions))
cmd.Perform("syncstatus", new(options.LLMIdOptions))
cmd.BatchPerform("stop", new(options.LLMStopOptions))
cmd.BatchPerform("start", new(options.LLMStartOptions))
cmd.BatchPerform("restart", new(options.LLMRestartOptions))
cmd.Get("probed-models", new(options.LLMIdOptions))
cmd.Get("url", new(options.LLMIdOptions))
cmd.Get("login-info", new(options.LLMIdOptions))
cmd.Custom(shell.CustomActionGet, "available-network", new(options.LLMAvailableNetworkOptions))
cmd.PerformClass("provider-models", new(options.LLMProviderModelsOptions))
cmd.Perform("save-instant-model", new(options.LLMSaveInstantModelOptions))
cmd.Perform("quick-models", new(options.LLMQuickModelsOptions))
}

View File

@@ -7,6 +7,7 @@ import (
options "yunion.io/x/onecloud/pkg/mcclient/options/llm"
)
// llm-sku: unified SKU (ollama/vllm/dify). Create/update here for ollama|vllm; for dify use dify-sku or list with --llm-type dify.
func init() {
cmd := shell.NewResourceCmd(&modules.LLMSku)
cmd.List(new(options.LLMSkuListOptions))
@@ -16,5 +17,4 @@ func init() {
cmd.Delete(new(options.LLMSkuDeleteOptions))
cmd.Perform("public", &base_options.BasePublicOptions{})
cmd.Perform("private", &base_options.BaseIdOptions{})
// cmd.Perform("clone", new(options.DesktopSkuCloneOptions))
}

View File

@@ -4,7 +4,7 @@ import (
"bufio"
"fmt"
"io"
"net/url"
"net/http"
"strings"
"yunion.io/x/onecloud/cmd/climc/shell"
@@ -28,6 +28,7 @@ func init() {
// cmd.Get("chat-test", new(options.MCPAgentChatTestOptions))
cmd.Get("request", new(options.MCPAgentMCPAgentRequestOptions))
shell.R(&options.MCPAgentMCPAgentRequestOptions{}, "mcp-agent-chat", "Chat with MCP Agent (Stream)", chatStream)
shell.R(&options.MCPAgentDefaultChatOptions{}, "mcp-agent-chat-default", "Chat with default MCP Agent (Stream, no ID required)", chatStreamDefault)
}
func chatStream(s *mcclient.ClientSession, args *options.MCPAgentMCPAgentRequestOptions) error {
@@ -36,15 +37,24 @@ func chatStream(s *mcclient.ClientSession, args *options.MCPAgentMCPAgentRequest
return err
}
path := fmt.Sprintf("/mcp_agents/%s/chat-stream?message=%s", id, url.QueryEscape(args.Message))
bodyJSON, err := args.Params()
if err != nil {
return fmt.Errorf("failed to build request params: %v", err)
}
headers := http.Header{}
headers.Set("Content-Type", "application/json")
body := strings.NewReader(bodyJSON.String())
path := fmt.Sprintf("/mcp_agents/%s/chat-stream", id)
resp, err := s.RawVersionRequest(
modules.MCPAgent.ServiceType(),
modules.MCPAgent.EndpointType(),
"GET",
"POST",
path,
nil,
nil,
headers,
body,
)
if err != nil {
return err
@@ -79,3 +89,50 @@ func chatStream(s *mcclient.ClientSession, args *options.MCPAgentMCPAgentRequest
fmt.Println()
return nil
}
func chatStreamDefault(s *mcclient.ClientSession, args *options.MCPAgentDefaultChatOptions) error {
bodyJSON, err := args.Params()
if err != nil {
return fmt.Errorf("failed to build request params: %v", err)
}
headers := http.Header{}
headers.Set("Content-Type", "application/json")
body := strings.NewReader(bodyJSON.String())
path := "/mcp_agents/default/chat-stream"
resp, err := s.RawVersionRequest(
modules.MCPAgent.ServiceType(),
modules.MCPAgent.EndpointType(),
"POST",
path,
headers,
body,
)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
respBody, _ := io.ReadAll(resp.Body)
return fmt.Errorf("Error: %s %s", resp.Status, string(respBody))
}
scanner := bufio.NewScanner(resp.Body)
var eventData []string
for scanner.Scan() {
line := scanner.Text()
if line == "" {
if len(eventData) > 0 {
fmt.Print(strings.Join(eventData, "\n"))
eventData = nil
}
continue
}
if after, found := strings.CutPrefix(line, "data: "); found {
eventData = append(eventData, after)
}
}
if err := scanner.Err(); err != nil {
return err
}
fmt.Println()
return nil
}

View File

@@ -23,4 +23,5 @@ func init() {
cmd := NewResourceCmd(modules.MonitorResourceManager)
cmd.GetProperty(new(options.MonitorResourceJointAlertOptions))
cmd.List(new(options.MonitorResourceListOptions))
cmd.Perform("do-action", new(options.MonitorResourceDoActionOptions))
}

View File

@@ -41,4 +41,17 @@ func init() {
printObject(resp)
return nil
})
R(new(options.ResourceMetricsOptions), "monitor-resource-metrics", "Query batch resource metrics (cpu/mem/disk/net) and alert state", func(s *mcclient.ClientSession, opts *options.ResourceMetricsOptions) error {
input, err := opts.GetInput()
if err != nil {
return err
}
resp, err := monitor.UnifiedMonitorManager.PerformResourceMetrics(s, input)
if err != nil {
return errors.Wrap(err, "PerformResourceMetrics")
}
printObject(resp)
return nil
})
}

87
cmd/isocli/main.go Normal file
View File

@@ -0,0 +1,87 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"fmt"
"os"
"yunion.io/x/pkg/util/shellutils"
"yunion.io/x/structarg"
_ "yunion.io/x/onecloud/cmd/isocli/shell"
)
type BaseOptions struct {
Debug bool `help:"debug mode"`
SUBCOMMAND string `help:"aliyuncli subcommand" subcommand:"true"`
}
func getSubcommandParser() (*structarg.ArgumentParser, error) {
parse, e := structarg.NewArgumentParserWithHelp(&BaseOptions{},
"isocli",
"Command-line ISO tools.",
`See "isocli COMMAND --help" for help on a specific command.`)
if e != nil {
return nil, e
}
subcmd := parse.GetSubcommand()
if subcmd == nil {
return nil, fmt.Errorf("No subcommand argument.")
}
for _, v := range shellutils.CommandTable {
_, e := subcmd.AddSubParserWithHelp(v.Options, v.Command, v.Desc, v.Callback)
if e != nil {
return nil, e
}
}
return parse, nil
}
func showErrorAndExit(e error) {
fmt.Fprintf(os.Stderr, "%s", e)
fmt.Fprintln(os.Stderr)
os.Exit(1)
}
func main() {
parser, e := getSubcommandParser()
if e != nil {
showErrorAndExit(e)
}
e = parser.ParseArgs(os.Args[1:], false)
if parser.IsHelpSet() {
fmt.Print(parser.HelpString())
return
}
subcmd := parser.GetSubcommand()
subparser := subcmd.GetSubParser()
if e != nil || subparser == nil {
if subparser != nil {
fmt.Print(subparser.Usage())
} else {
fmt.Print(parser.Usage())
}
showErrorAndExit(e)
}
suboptions := subparser.Options()
e = subcmd.Invoke(suboptions)
if e != nil {
showErrorAndExit(e)
}
}

82
cmd/isocli/shell/iso.go Normal file
View File

@@ -0,0 +1,82 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package shell
import (
"fmt"
"os"
"path/filepath"
"strings"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/util/shellutils"
"yunion.io/x/onecloud/pkg/util/isoutils"
)
func init() {
type DetectOSOptions struct {
ISO string `help:"ISO file"`
}
shellutils.R(&DetectOSOptions{}, "detect", "Detect", func(args *DetectOSOptions) error {
stat, err := os.Stat(args.ISO)
if err != nil {
return err
}
if stat.IsDir() {
// 如果是目录,仅遍历一层目录下的 .iso 文件
entries, err := os.ReadDir(args.ISO)
if err != nil {
return err
}
for _, entry := range entries {
if entry.IsDir() {
continue // 跳过子目录
}
if strings.HasSuffix(strings.ToLower(entry.Name()), ".iso") {
path := filepath.Join(args.ISO, entry.Name())
fmt.Printf("Processing: %s\n", path)
f, err := os.Open(path)
if err != nil {
fmt.Printf("Error opening %s: %v\n", path, err)
continue // 继续处理其他文件
}
isoInfo, err := isoutils.DetectOSFromISO(f)
f.Close()
if err != nil {
fmt.Printf("Error detecting OS from %s: %v\n", path, err)
continue
}
fmt.Printf("%s: %s\n", path, jsonutils.Marshal(isoInfo))
}
}
return nil
}
// 如果是文件,按原逻辑处理
f, err := os.Open(args.ISO)
if err != nil {
return err
}
defer f.Close()
isoInfo, err := isoutils.DetectOSFromISO(f)
if err != nil {
return err
}
fmt.Printf("%s: %s\n", args.ISO, jsonutils.Marshal(isoInfo))
return nil
})
}

156
go.mod
View File

@@ -6,29 +6,32 @@ require (
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669
github.com/360EntSecGroup-Skylar/excelize v1.4.0
github.com/LeeEirc/terminalparser v0.0.0-20240205084113-fbf78c8480f2
github.com/Microsoft/go-winio v0.6.2
github.com/aliyun/alibaba-cloud-sdk-go v1.61.684
github.com/anacrolix/torrent v1.57.0
github.com/benbjohnson/clock v1.0.0
github.com/bitly/go-simplejson v0.5.0
github.com/c-bata/go-prompt v0.2.4
github.com/cheggaaa/pb/v3 v3.0.8
github.com/containerd/containerd v1.4.1
github.com/containerd/containerd v1.7.13
github.com/containerd/typeurl v1.0.2
github.com/coredns/coredns v1.3.0
github.com/coreos/go-iptables v0.6.0
github.com/creack/pty v1.1.18
github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible
github.com/docker/go-units v0.5.0
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96
github.com/eggsampler/acme/v3 v3.6.2
github.com/fernet/fernet-go v0.0.0-20180830025343-9eac43b88a5e
github.com/fsnotify/fsnotify v1.5.4
github.com/fsnotify/fsnotify v1.6.0
github.com/ghodss/yaml v1.0.0
github.com/gin-gonic/gin v1.7.7
github.com/go-ldap/ldap/v3 v3.1.5
github.com/go-yaml/yaml v2.1.0+incompatible
github.com/golang-plus/errors v1.0.0
github.com/golang-plus/uuid v1.0.0
github.com/golang/mock v1.4.4
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.4
github.com/google/cadvisor v0.38.5
github.com/google/cadvisor v0.46.0
github.com/google/gopacket v1.1.17
github.com/google/uuid v1.6.0
github.com/googollee/go-socket.io v0.0.0-20181214084611-0ad7206c347a
@@ -39,8 +42,9 @@ require (
github.com/influxdata/influxql v1.1.0
github.com/influxdata/promql/v2 v2.12.0
github.com/jaypipes/ghw v0.11.0
github.com/kdomanski/iso9660 v0.4.0
github.com/koding/websocketproxy v0.0.0-20181220232114-7ed82d81a28c
github.com/lestrrat-go/jwx v1.0.2
github.com/lestrrat-go/jwx v1.2.25
github.com/lestrrat/go-jwx v0.0.0-20180221005942-b7d4802280ae
github.com/libvirt/libvirt-go-xml v5.2.0+incompatible
github.com/mark3labs/mcp-go v0.42.0
@@ -52,6 +56,9 @@ require (
github.com/miekg/dns v1.1.25
github.com/minio/minio-go v6.0.14+incompatible
github.com/mitchellh/go-wordwrap v1.0.1
github.com/moby/term v0.5.0
github.com/mogaika/udf v0.0.0-20171019171931-167f0ab01c73
github.com/opencontainers/runtime-spec v1.1.0
github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490
github.com/pierrec/lz4/v4 v4.1.15
github.com/pkg/errors v0.9.1
@@ -70,7 +77,7 @@ require (
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
github.com/tjfoc/gmsm v1.4.1
github.com/tredoe/osutil v1.5.0
github.com/vishvananda/netlink v1.1.0
github.com/vishvananda/netlink v1.2.1-beta.2
github.com/vishvananda/netns v0.0.5-0.20240412164733-9469873f4601
github.com/vmihailenco/msgpack v4.0.4+incompatible
github.com/xuri/excelize/v2 v2.7.1
@@ -78,32 +85,34 @@ require (
github.com/zexi/influxql-to-metricsql v0.1.1
go.etcd.io/etcd/api/v3 v3.5.0
go.etcd.io/etcd/client/v3 v3.5.0
golang.org/x/crypto v0.21.0
golang.org/x/net v0.23.0
golang.org/x/sync v0.8.0
golang.org/x/sys v0.26.0
golang.org/x/text v0.14.0
golang.org/x/crypto v0.41.0
golang.org/x/net v0.43.0
golang.org/x/sync v0.16.0
golang.org/x/sys v0.35.0
golang.org/x/text v0.28.0
golang.org/x/time v0.5.0
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230215201556-9c5414ab4bde
google.golang.org/grpc v1.62.0
google.golang.org/protobuf v1.35.1
gopkg.in/fatih/set.v0 v0.2.1
gopkg.in/ini.v1 v1.62.0
gopkg.in/mail.v2 v2.3.1
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.19.3
k8s.io/apimachinery v0.19.3
k8s.io/client-go v0.19.3
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.26.2
k8s.io/apimachinery v0.26.2
k8s.io/client-go v0.26.2
k8s.io/cluster-bootstrap v0.19.3
k8s.io/cri-api v0.28.15
k8s.io/klog/v2 v2.20.0
k8s.io/klog/v2 v2.90.1
moul.io/http2curl/v2 v2.3.0
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260115023540-d2cc546f0409
yunion.io/x/executor v0.0.0-20250518005516-5402e9e0bed0
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260402020900-42ffc7d84d79
yunion.io/x/executor v0.0.0-20260312022053-f538abd2b005
yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1
yunion.io/x/log v1.0.1-0.20240305175729-7cf2d6cd5a91
yunion.io/x/ovsdb v0.0.0-20230306173834-f164f413a900
yunion.io/x/pkg v1.10.4-0.20251114095758-2a2f105d9712
yunion.io/x/pkg v1.10.4-0.20260224071200-5c269fa62429
yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1
yunion.io/x/sqlchemy v1.1.3-0.20251231025938-b0a38f6e9fab
yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c
@@ -116,6 +125,8 @@ require (
cloud.google.com/go/iam v1.1.6 // indirect
cloud.google.com/go/storage v1.39.1 // indirect
gitee.com/chunanyong/dm v1.8.14 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
github.com/Azure/go-autorest/autorest v0.9.6 // indirect
github.com/Azure/go-autorest/autorest/adal v0.8.2 // indirect
@@ -127,8 +138,7 @@ require (
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
github.com/DataDog/dd-trace-go v0.6.1 // indirect
github.com/DataDog/zstd v1.3.4 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/Microsoft/hcsshim v0.8.14 // indirect
github.com/Microsoft/hcsshim v0.11.4 // indirect
github.com/RoaringBitmap/roaring v1.2.3 // indirect
github.com/Shopify/sarama v1.20.0 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
@@ -154,13 +164,13 @@ require (
github.com/aokoli/goutils v1.0.1 // indirect
github.com/apache/thrift v0.13.0 // indirect
github.com/aws/aws-sdk-go v1.39.0 // indirect
github.com/aws/aws-sdk-go-v2 v1.39.2 // indirect
github.com/aws/aws-sdk-go-v2 v1.41.4 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1 // indirect
github.com/aws/aws-sdk-go-v2/config v1.31.12 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.18.16 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.9 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect
@@ -172,45 +182,44 @@ require (
github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 // indirect
github.com/aws/smithy-go v1.23.0 // indirect
github.com/aws/smithy-go v1.24.2 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/basgys/goxml2json v1.1.1-0.20181031222924-996d9fc8d313 // indirect
github.com/beevik/etree v1.1.0 // indirect
github.com/benbjohnson/immutable v0.3.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.2.2 // indirect
github.com/blang/semver v3.5.1+incompatible // indirect
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/cespare/xxhash v1.1.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/checkpoint-restore/go-criu/v4 v4.1.0 // indirect
github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775 // indirect
github.com/checkpoint-restore/go-criu/v5 v5.3.0 // indirect
github.com/cilium/ebpf v0.9.1 // indirect
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 // indirect
github.com/containerd/console v1.0.0 // indirect
github.com/containerd/cgroups v1.1.0 // indirect
github.com/containerd/console v1.0.3 // indirect
github.com/containerd/continuity v0.4.5 // indirect
github.com/containerd/fifo v1.1.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/ttrpc v1.0.2 // indirect
github.com/containerd/typeurl v1.0.1 // indirect
github.com/containerd/ttrpc v1.2.2 // indirect
github.com/containerd/typeurl/v2 v2.1.1 // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/cyphar/filepath-securejoin v0.2.2 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
github.com/dimchansky/utfbom v1.1.0 // indirect
github.com/dnstap/golang-dnstap v0.0.0-20170829151710-2cf77a2b5e11 // indirect
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 // indirect
github.com/docker/go-units v0.4.0 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/eapache/go-resiliency v1.1.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
github.com/eapache/queue v1.1.0 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
github.com/emicklei/go-restful/v3 v3.10.1 // indirect
github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect
github.com/farsightsec/golang-framestream v0.0.0-20181102145529-8a0cb8ba8710 // indirect
github.com/fatih/color v1.13.0 // indirect
@@ -224,26 +233,32 @@ require (
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.20.0 // indirect
github.com/go-openapi/swag v0.19.14 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/validator/v10 v10.4.1 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/godbus/dbus/v5 v5.0.4 // indirect
github.com/goccy/go-json v0.9.7 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/gofrs/uuid v4.1.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-plus/errors v1.0.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-querystring v1.0.0 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.2 // indirect
github.com/googleapis/gnostic v0.4.1 // indirect
github.com/googollee/go-engine.io v0.0.0-20180829091931-e2f255711dcb // indirect
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/huandu/xstrings v1.3.2 // indirect
github.com/huaweicloud/huaweicloud-sdk-go v1.0.26 // indirect
github.com/icholy/digest v1.1.0 // indirect
@@ -251,17 +266,22 @@ require (
github.com/invopop/jsonschema v0.13.0 // indirect
github.com/jdcloud-api/jdcloud-sdk-go v1.55.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/karrick/godirwalk v1.16.1 // indirect
github.com/karrick/godirwalk v1.17.0 // indirect
github.com/klauspost/compress v1.16.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.3 // indirect
github.com/kr/fs v0.1.0 // indirect
github.com/ks3sdklib/aws-sdk-go v1.8.1 // indirect
github.com/leodido/go-urn v1.2.0 // indirect
github.com/lestrrat-go/iter v0.0.0-20200422075355-fc1769541911 // indirect
github.com/lestrrat-go/pdebug v0.0.0-20200204225717-4d6bd78da58d // indirect
github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect
github.com/lestrrat-go/blackmagic v1.0.0 // indirect
github.com/lestrrat-go/httpcc v1.0.1 // indirect
github.com/lestrrat-go/iter v1.0.1 // indirect
github.com/lestrrat-go/option v1.0.0 // indirect
github.com/lestrrat/go-pdebug v0.0.0-20180220043741-569c97477ae8 // indirect
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
github.com/ma314smith/signedxml v0.0.0-20210628192057-abc5b481ae1c // indirect
@@ -270,7 +290,7 @@ require (
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mattn/go-tty v0.0.0-20181127064339-e4f871175a2f // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18 // indirect
github.com/mdlayher/socket v0.4.1 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
@@ -279,24 +299,27 @@ require (
github.com/minio/sha256-simd v1.0.0 // indirect
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/moby/sys/mountinfo v0.1.3 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/moby/locker v1.0.1 // indirect
github.com/moby/sys/mountinfo v0.6.2 // indirect
github.com/moby/sys/sequential v0.5.0 // indirect
github.com/moby/sys/signal v0.7.0 // indirect
github.com/moby/sys/user v0.1.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/mozillazg/go-httpheader v0.2.1 // indirect
github.com/mozillazg/go-pinyin v0.19.0 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976 // indirect
github.com/mrunalp/fileutils v0.5.0 // indirect
github.com/mschoch/smat v0.2.0 // indirect
github.com/multiformats/go-multihash v0.2.3 // indirect
github.com/multiformats/go-varint v0.0.6 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.1 // indirect
github.com/opencontainers/runc v1.0.0-rc92 // indirect
github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6 // indirect
github.com/opencontainers/selinux v1.6.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b // indirect
github.com/opencontainers/runc v1.1.5 // indirect
github.com/opencontainers/selinux v1.11.0 // indirect
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 // indirect
github.com/opentracing/opentracing-go v1.0.2 // indirect
github.com/openzipkin/zipkin-go-opentracing v0.3.4 // indirect
@@ -323,24 +346,24 @@ require (
github.com/pkg/term v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
github.com/prometheus/client_golang v1.12.2 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.35.0 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/prometheus/client_golang v1.14.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/protolambda/ctxlock v0.1.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/richardlehane/mscfb v1.0.4 // indirect
github.com/richardlehane/msoleps v1.0.3 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect
github.com/seccomp/libseccomp-golang v0.9.1 // indirect
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect
github.com/smartystreets/assertions v1.2.0 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/cast v1.7.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2 // indirect
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.413 // indirect
github.com/tencentyun/cos-go-sdk-v5 v0.7.24 // indirect
github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e // indirect
@@ -352,7 +375,6 @@ require (
github.com/vmware/govmomi v0.37.1 // indirect
github.com/volcengine/ve-tos-golang-sdk/v2 v2.6.2 // indirect
github.com/volcengine/volc-sdk-golang v1.0.23 // indirect
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243 // indirect
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect
github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
@@ -371,7 +393,7 @@ require (
go.uber.org/zap v1.17.0 // indirect
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
golang.org/x/oauth2 v0.17.0 // indirect
golang.org/x/term v0.18.0 // indirect
golang.org/x/term v0.34.0 // indirect
google.golang.org/api v0.167.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect
@@ -379,19 +401,17 @@ require (
google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.62.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 // indirect
lukechampine.com/blake3 v1.1.6 // indirect
modernc.org/libc v1.22.3 // indirect
modernc.org/mathutil v1.5.0 // indirect
modernc.org/memory v1.5.0 // indirect
modernc.org/sqlite v1.21.1 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.0.1 // indirect
sigs.k8s.io/yaml v1.2.0 // indirect
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
zombiezen.com/go/sqlite v0.13.1 // indirect
)
replace github.com/influxdata/promql/v2 => github.com/zexi/promql/v2 v2.12.1
replace github.com/docker/docker => github.com/docker/docker v20.10.27+incompatible

379
go.sum
View File

@@ -8,7 +8,6 @@ cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxK
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
@@ -52,7 +51,11 @@ gitee.com/chunanyong/dm v1.8.14 h1:1S9+aD0fY/HXkcm8dKh2HjYsDlcdXNG+4IOX9JtrSjA=
gitee.com/chunanyong/dm v1.8.14/go.mod h1:EPRJnuPFgbyOFgJ0TRYCTGzhq+ZT4wdyaj/GW/LLcNg=
github.com/360EntSecGroup-Skylar/excelize v1.4.0 h1:43rak9uafmwSJpXfFO1heKQph8tP3nlfWJWFQQtW1R0=
github.com/360EntSecGroup-Skylar/excelize v1.4.0/go.mod h1:R8KYLmGns0vDPe6/HyphW0mzW+MFexlGDafU0ykVEnU=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 h1:59MxjQVfjXsBpLy+dbd2/ELV5ofnUkUZBvWSC85sheA=
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0/go.mod h1:OahwfttHWG6eJ0clwcfBAHoDI6X/LV/15hx/wlMZSrU=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
@@ -90,14 +93,14 @@ github.com/DataDog/zstd v1.3.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t
github.com/LeeEirc/terminalparser v0.0.0-20240205084113-fbf78c8480f2 h1:XGB3B0651J1uKOE1KJa1gsrV/DO1kthhk2NTDUHATgs=
github.com/LeeEirc/terminalparser v0.0.0-20240205084113-fbf78c8480f2/go.mod h1:tiLv6VBLH4Z3KdBSe2qIKRwQDGCVQ9/F5fOKpQGvyoA=
github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/Microsoft/hcsshim v0.8.14 h1:lbPVK25c1cu5xTLITwpUcxoA9vKrKErASPYygvouJns=
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8=
github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q=
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM=
@@ -198,8 +201,8 @@ github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevB
github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
github.com/aws/aws-sdk-go v1.39.0 h1:74BBwkEmiqBbi2CGflEh34l0YNtIibTjZsibGarkNjo=
github.com/aws/aws-sdk-go v1.39.0/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go-v2 v1.39.2 h1:EJLg8IdbzgeD7xgvZ+I8M1e0fL0ptn/M47lianzth0I=
github.com/aws/aws-sdk-go-v2 v1.39.2/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY=
github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k=
github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1 h1:i8p8P4diljCr60PpJp6qZXNlgX4m2yQFpYk+9ZT+J4E=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1/go.mod h1:ddqbooRZYNoJ2dsTwOty16rM+/Aqmk/GOXrK8cg7V00=
github.com/aws/aws-sdk-go-v2/config v1.31.12 h1:pYM1Qgy0dKZLHX2cXslNacbcEFMkDMl+Bcj5ROuS6p8=
@@ -208,10 +211,10 @@ github.com/aws/aws-sdk-go-v2/credentials v1.18.16 h1:4JHirI4zp958zC026Sm+V4pSDwW
github.com/aws/aws-sdk-go-v2/credentials v1.18.16/go.mod h1:qQMtGx9OSw7ty1yLclzLxXCRbrkjWAM7JnObZjmCB7I=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 h1:Mv4Bc0mWmv6oDuSWTKnk+wgeqPL5DRFu5bQL9BGPQ8Y=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9/go.mod h1:IKlKfRppK2a1y0gy1yH6zD+yX5uplJ6UuPlgd48dJiQ=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 h1:se2vOWGD3dWQUtfn4wEjRQJb1HK1XsNIt825gskZ970=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9/go.mod h1:hijCGH2VfbZQxqCDN7bwz/4dzxV+hkyhjawAtdPWKZA=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 h1:6RBnKZLkJM4hQ+kN6E7yWFveOTg8NLPHAkqrs4ZPlTU=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9/go.mod h1:V9rQKRmK7AWuEsOMnHzKj8WyrIir1yUJbZxDuZLFvXI=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.9 h1:w9LnHqTq8MEdlnyhV4Bwfizd65lfNCNgdlNC6mM5paE=
@@ -234,8 +237,8 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 h1:5fm5RTONng73/QA73LhCNR7U
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1/go.mod h1:xBEjWD13h+6nq+z4AkqSfSvqRKFgDIQeaMguAJndOWo=
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 h1:p3jIvqYwUZgu/XYeI48bJxOhvm47hZb5HUQ0tn6Q9kA=
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6/go.mod h1:WtKK+ppze5yKPkZ0XwqIVWD4beCwv056ZbPQNoeHqM8=
github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE=
github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=
github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
@@ -281,80 +284,86 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/checkpoint-restore/go-criu/v4 v4.1.0 h1:WW2B2uxx9KWF6bGlHqhm8Okiafwwx7Y2kcpn8lCpjgo=
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8=
github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA=
github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775 h1:cHzBGGVew0ezFsq2grfy2RsB8hO/eNyBgOLHBCqfR1U=
github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc=
github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA=
github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4=
github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk=
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
github.com/containerd/console v1.0.0 h1:fU3UuQapBs+zLJu82NhR11Rif1ny2zfMMAyPJzSN5tQ=
github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.4.1 h1:pASeJT3R3YyVn+94qEPk0SnU1OQ20Jd/T+SPKy9xehY=
github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
github.com/containerd/containerd v1.7.13 h1:wPYKIeGMN8vaggSKuV1X0wZulpMz4CrgEsZdaCyB6Is=
github.com/containerd/containerd v1.7.13/go.mod h1:zT3up6yTRfEUa6+GsITYIJNgSVL9NQ4x4h1RPzk0Wu4=
github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY=
github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
github.com/containerd/ttrpc v1.0.2 h1:2/O3oTZN36q2xRolk0a2WWGgh7/Vf/liElg5hFYLX9U=
github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
github.com/containerd/typeurl v1.0.1 h1:PvuK4E3D5S5q6IqsPDCy928FhP0LUIGcmZ/Yhgp5Djw=
github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ=
github.com/containerd/ttrpc v1.2.2 h1:9vqZr0pxwOF5koz6N0N3kJ0zDHokrcPxIR/ZR2YFtOs=
github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak=
github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4=
github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0=
github.com/coredns/coredns v1.3.0 h1:Ubjr8ZrOpEj95/A9dqQqQAG2k5DWEFdg2ZB3tUXuULA=
github.com/coredns/coredns v1.3.0/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0=
github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk=
github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI=
github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d h1:1iy2qD6JEhHKKhUOA9IWs7mjco7lnw2qx8FsRI2wirE=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/dnstap/golang-dnstap v0.0.0-20170829151710-2cf77a2b5e11 h1:m8nX8hsUghn853BJ5qB0lX+VvS6LTJPksWyILFZRYN4=
github.com/dnstap/golang-dnstap v0.0.0-20170829151710-2cf77a2b5e11/go.mod h1:s1PfVYYVmTMgCSPtho4LKBDecEHJWtiVDPNv78Z985U=
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible h1:dvc1KSkIYTVjZgHf/CTC2diTYC8PzhaA5sFISRfNVrE=
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v20.10.27+incompatible h1:Id/ZooynV4ZlD6xX20RCd3SR0Ikn7r4QZDa2ECK2TgA=
github.com/docker/docker v20.10.27+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v20.10.18+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho=
github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 h1:EHZfspsnLAz8Hzccd67D5abwLiqoqym2jz/jOS39mCk=
github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
@@ -373,10 +382,14 @@ github.com/eggsampler/acme/v3 v3.6.2 h1:gvyZbQ92wNQLDASVftGpHEdFwPSfg0+17P0lLt09
github.com/eggsampler/acme/v3 v3.6.2/go.mod h1:/qh0rKC/Dh7Jj+p4So7DbWmFNzC4dpcpK53r226Fhuo=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ=
github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
@@ -395,13 +408,14 @@ github.com/fernet/fernet-go v0.0.0-20180830025343-9eac43b88a5e/go.mod h1:2H9hjfb
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gernest/wow v0.1.0/go.mod h1:dEPabJRi5BneI1Nev1VWo0ZlcTWibHWp43qxKms4elY=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
@@ -439,7 +453,7 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v1.0.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -449,9 +463,17 @@ github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA=
github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng=
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@@ -467,11 +489,15 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/go-yaml/yaml v2.1.0+incompatible h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o=
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v4.1.0+incompatible h1:sIa2eCvUTwgjbqXrPLfNwUf9S3i3mpH1O1atV+iL/Wk=
github.com/gofrs/uuid v4.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
@@ -496,8 +522,9 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -525,8 +552,10 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/cadvisor v0.38.5 h1:XOvqjL2+xMEuDORcLMv77NystZvQB7YgGxcKpRul/vE=
github.com/google/cadvisor v0.38.5/go.mod h1:1OFB9sOOMkBdUBGCO/1SArawTnDscgMzTodacVDe8mA=
github.com/google/cadvisor v0.46.0 h1:ryTIniqhN8/wR8UA1RuYSXHvsAtdpk/01XwTZtYHekY=
github.com/google/cadvisor v0.46.0/go.mod h1:YnCDnR8amaS0HoMEjheOI0TMPzFKCBLc30mciLEjwGI=
github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -534,19 +563,20 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY=
github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM=
github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
@@ -575,7 +605,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
github.com/googollee/go-engine.io v0.0.0-20180829091931-e2f255711dcb h1:n22Aukg/TjoypWc37dbKIpCsz0VMFPD36HQk1WKvg3A=
github.com/googollee/go-engine.io v0.0.0-20180829091931-e2f255711dcb/go.mod h1:MBpz1MS3P4HtRcBpQU4HcjvWXZ9q+JWacMEh2/BFYbg=
@@ -594,13 +623,17 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gosuri/uitable v0.0.0-20160404203958-36ee7e946282 h1:KFqmdzEPbU7Uck2tn50t+HQXZNVkxe8M9qRb/ZoSHaE=
github.com/gosuri/uitable v0.0.0-20160404203958-36ee7e946282/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
github.com/hako/durafmt v0.0.0-20180520121703-7b7ae1e72ead h1:Y9WOGZY2nw5ksbEf5AIpk+vK52Tdg/VN/rHFRfEeeGQ=
github.com/hako/durafmt v0.0.0-20180520121703-7b7ae1e72ead/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
@@ -617,7 +650,6 @@ github.com/huaweicloud/huaweicloud-sdk-go v1.0.26/go.mod h1:YHXxw/bm7AohI4jTY8Z4
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4=
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/influxdata/influxql v1.1.0 h1:sPsaumLFRPMwR5QtD3Up54HXpNND8Eu7G1vQFmi3quQ=
@@ -634,6 +666,7 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
@@ -654,11 +687,15 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI=
github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
github.com/kdomanski/iso9660 v0.4.0 h1:BPKKdcINz3m0MdjIMwS0wx1nofsOjxOq8TOr45WGHFg=
github.com/kdomanski/iso9660 v0.4.0/go.mod h1:OxUSupHsO9ceI8lBLPJKWBTphLemjrCQY8LPXM7qSzU=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU=
@@ -666,7 +703,6 @@ github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8t
github.com/koding/websocketproxy v0.0.0-20181220232114-7ed82d81a28c h1:N7A4JCA2G+j5fuFxCsJqjFU/sZe0mj8H0sSoSwbaikw=
github.com/koding/websocketproxy v0.0.0-20181220232114-7ed82d81a28c/go.mod h1:Nn5wlyECw3iJrzi0AhIWg+AJUb4PlRQVW4/3XHH1LZA=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -685,12 +721,18 @@ github.com/ks3sdklib/aws-sdk-go v1.8.1 h1:/3mYWujGfr4K/+mAdESbi9u3T4VDuHYMYFk1/O
github.com/ks3sdklib/aws-sdk-go v1.8.1/go.mod h1:jGcsV0dJgMmStAyqjkKVUu6F167pAXYZAS3LqoZMmtM=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/lestrrat-go/iter v0.0.0-20200422075355-fc1769541911 h1:FvnrqecqX4zT0wOIbYK1gNgTm0677INEWiFY8UEYggY=
github.com/lestrrat-go/iter v0.0.0-20200422075355-fc1769541911/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc=
github.com/lestrrat-go/jwx v1.0.2 h1:FsbZg/v979RikHWhSu/7BRHh2Z1Z8byPleURRb1Y0XI=
github.com/lestrrat-go/jwx v1.0.2/go.mod h1:TPF17WiSFegZo+c20fdpw49QD+/7n4/IsGvEmCSWwT0=
github.com/lestrrat-go/pdebug v0.0.0-20200204225717-4d6bd78da58d h1:aEZT3f1GGg5RIlHMAy4/4fe4ciOi3SCwYoaURphcB4k=
github.com/lestrrat-go/pdebug v0.0.0-20200204225717-4d6bd78da58d/go.mod h1:B06CSso/AWxiPejj+fheUINGeBKeeEZNt8w+EoU7+L8=
github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A=
github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y=
github.com/lestrrat-go/blackmagic v1.0.0 h1:XzdxDbuQTz0RZZEmdU7cnQxUtFUzgCSPq8RCz4BxIi4=
github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ=
github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE=
github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E=
github.com/lestrrat-go/iter v1.0.1 h1:q8faalr2dY6o8bV45uwrxq12bRa1ezKrB6oM9FUgN4A=
github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc=
github.com/lestrrat-go/jwx v1.2.25 h1:tAx93jN2SdPvFn08fHNAhqFJazn5mBBOB8Zli0g0otA=
github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY=
github.com/lestrrat-go/option v1.0.0 h1:WqAWL8kh8VcSoD6xjSH34/1m8yxluXQbDeKNfvFeEO4=
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
github.com/lestrrat/go-jwx v0.0.0-20180221005942-b7d4802280ae h1:XoMPFIGibcPKgLrgIxzif36Zs/2yOEeGYc/7nitjzNM=
github.com/lestrrat/go-jwx v0.0.0-20180221005942-b7d4802280ae/go.mod h1:T+yHdCP6MJKtzoVQMHvVCeam5VFwX1+rWzn5zZgKYMI=
github.com/lestrrat/go-pdebug v0.0.0-20180220043741-569c97477ae8 h1:ttJD8hTqvrPEUBoAG5hJKbDOJ84u7zmbnZsUL4V9430=
@@ -704,6 +746,9 @@ github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQ
github.com/ma314smith/signedxml v0.0.0-20210628192057-abc5b481ae1c h1:UPJygtyk491bJJ/DnRJFuzcq9Dl9NSeFrJ7VdiRzMxc=
github.com/ma314smith/signedxml v0.0.0-20210628192057-abc5b481ae1c/go.mod h1:KEgVcb43+f5KFUH/x6Vd3NROG0AIL2CuKMrIqYsmx6E=
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mark3labs/mcp-go v0.42.0 h1:gk/8nYJh8t3yroCAOBhNbYsM9TCKvkM13I5t5Hfu6Ls=
@@ -731,8 +776,8 @@ github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4f
github.com/mattn/go-tty v0.0.0-20181127064339-e4f871175a2f h1:4P7Ul+TAnk92vTeVkXs6VLjmf1EhrYtDRa03PCYY6VM=
github.com/mattn/go-tty v0.0.0-20181127064339-e4f871175a2f/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/mdlayher/arp v0.0.0-20190313224443-98a83c8a2717 h1:lAsTIRVOYxE/LwrMmSAVfV/HDndBEvHaAEkjbwhqsJ4=
github.com/mdlayher/arp v0.0.0-20190313224443-98a83c8a2717/go.mod h1:eOj1DDj3NAZ6yv+WafaKzY37MFZ58TdfIhQ+8nQbiis=
github.com/mdlayher/ethernet v0.0.0-20190313224307-5b5fc417d966/go.mod h1:5s5p/sMJ6sNsFl6uCh85lkFGV8kLuIYJCRJLavVJwvg=
@@ -766,8 +811,18 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/moby/sys/mountinfo v0.1.3 h1:KIrhRO14+AkwKvG/g2yIpNMOUVZ02xNhOw8KY1WsLOI=
github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o=
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -777,9 +832,10 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mogaika/udf v0.0.0-20171019171931-167f0ab01c73 h1:HpHNB68mF30LkUorpr7B22Xy0XwParP/n+AL0z4VlFc=
github.com/mogaika/udf v0.0.0-20171019171931-167f0ab01c73/go.mod h1:OVErfG87tRGCHZpQGO8pL4vDZuY0qr4blPOTR0go6e8=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ=
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
@@ -787,8 +843,8 @@ github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2u
github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976 h1:aZQToFSLH8ejFeSkTc3r3L4dPImcj7Ib/KgmkQqbGGg=
github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0=
github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4=
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
@@ -797,10 +853,13 @@ github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsC
github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY=
github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -809,26 +868,32 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs=
github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys=
github.com/onsi/gomega v1.23.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v1.0.0-rc92 h1:+IczUKCRzDzFDnw99O/PAqrcBBCoRp9xN3cB1SYSNS4=
github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE=
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6 h1:NhsM2gc769rVWDqJvapK37r+7+CBXI8xHhnfnt8uQsg=
github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/selinux v1.6.0 h1:+bIAS/Za3q5FTwWym4fTB0vObnfCf3G/NC7K6Jx62mY=
github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8=
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ=
github.com/opencontainers/runc v1.1.4/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg=
github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs=
github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg=
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg=
github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU=
github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg=
@@ -838,7 +903,6 @@ github.com/openzipkin/zipkin-go-opentracing v0.3.4 h1:x/pBv/5VJNWkcHF1G9xqhug8Iw
github.com/openzipkin/zipkin-go-opentracing v0.3.4/go.mod h1:js2AbwmHW0YD9DwIw2JhQWmbfFi/UnWyYwdVhqbCDOE=
github.com/oracle/oci-go-sdk v24.3.0+incompatible h1:x4mcfb4agelf1O4/1/auGlZ1lr97jXRSSN5MxTgG/zU=
github.com/oracle/oci-go-sdk v24.3.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490 h1:QTvNkZ5ylY0PGgA+Lih+GdboMLY/G9SEGLMEGVjTVA4=
github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
@@ -914,14 +978,16 @@ github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34=
github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
@@ -929,24 +995,23 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE=
github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE=
github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
github.com/protolambda/ctxlock v0.1.0 h1:rCUY3+vRdcdZXqT07iXgyr744J2DU2LCBIXowYAjBCE=
github.com/protolambda/ctxlock v0.1.0/go.mod h1:vefhX6rIZH8rsg5ZpOJfEDYQOppZi19SfPiGOFrNnwM=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ=
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
@@ -973,8 +1038,8 @@ github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5P
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
github.com/seccomp/libseccomp-golang v0.9.1 h1:NJjM5DNFOs0s3kYE1WUOr6G8V97sdt46rlXTMfXGWBo=
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds=
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
@@ -991,6 +1056,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
@@ -1012,8 +1078,10 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
@@ -1032,8 +1100,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2 h1:b6uOv7YOFK0TYG7HtkIgExQo+2RdLuwRft63jn2HWj8=
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8=
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e h1:nt2877sKfojlHCTOBXbpWjBkuWKritFaGIfgQwbQUls=
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e/go.mod h1:B4+Kq1u5FlULTjFSM707Q6e/cOHFv0z/6QRoxubDIQ8=
@@ -1063,9 +1131,9 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs=
github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/vishvananda/netns v0.0.5-0.20240412164733-9469873f4601 h1:eELqkILRCR0kkoFujWv/hGyn+KfpGjHY01Rl1p42CBg=
@@ -1080,8 +1148,6 @@ github.com/volcengine/volc-sdk-golang v1.0.23 h1:anOslb2Qp6ywnsbyq9jqR0ljuO63kg9
github.com/volcengine/volc-sdk-golang v1.0.23/go.mod h1:AfG/PZRUkHJ9inETvbjNifTDgut25Wbkm2QoYBTbvyU=
github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243 h1:R43TdZy32XXSXjJn7M/HhALJ9imq6ztLnChfYJpVDnM=
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c=
@@ -1138,6 +1204,7 @@ go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB
go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc=
go.opentelemetry.io/otel/trace v1.23.0 h1:37Ik5Ib7xfYVb4V1UtnT97T1jI+AoIYkJyPkuL4iJgI=
go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5UkggkflQwDScNUsk=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
@@ -1165,8 +1232,8 @@ golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1229,7 +1296,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -1249,6 +1315,7 @@ golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
@@ -1268,8 +1335,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1290,10 +1357,11 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1320,7 +1388,7 @@ golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1328,9 +1396,7 @@ golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1350,11 +1416,10 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201110211018-35f3e6cf4a65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1364,11 +1429,13 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220608164250-635b8c9b7f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1376,27 +1443,27 @@ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -1405,12 +1472,11 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1428,6 +1494,7 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -1451,7 +1518,6 @@ golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200417140056-c07e33ef3290/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -1463,6 +1529,7 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
@@ -1515,7 +1582,6 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
@@ -1533,7 +1599,7 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
@@ -1547,7 +1613,6 @@ google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiq
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
@@ -1558,7 +1623,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk=
google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
@@ -1573,6 +1640,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
@@ -1581,6 +1650,7 @@ gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
@@ -1607,11 +1677,11 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1622,12 +1692,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.19.3 h1:GN6ntFnv44Vptj/b+OnMW7FmzkpDoIDLZRvKX3XH9aU=
k8s.io/api v0.19.3/go.mod h1:VF+5FT1B74Pw3KxMdKyinLo+zynBaMBiAfGMuldcNDs=
k8s.io/apimachinery v0.19.3 h1:bpIQXlKjB4cB/oNpnNnV+BybGPR7iP5oYpsOTEJ4hgc=
k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ=
k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU=
k8s.io/apimachinery v0.19.3/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
k8s.io/client-go v0.19.3 h1:ctqR1nQ52NUs6LpI0w+a5U+xjYwflFwA13OJKcicMxg=
k8s.io/client-go v0.19.3/go.mod h1:+eEMktZM+MG0KO+PTkci8xnbCZHvj9TqR6Q1XDUIJOM=
k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ=
k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I=
k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI=
k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU=
k8s.io/cluster-bootstrap v0.19.3 h1:LIVoRLTjJt3Yq/u+cV8h3cxGPwz9w+SFXtHdiKxfD7A=
k8s.io/cluster-bootstrap v0.19.3/go.mod h1:yZPVza5jZABN+xe4y6By4DnZI+UF9TxYj80etnDzZ5w=
k8s.io/cri-api v0.28.15 h1:wawXexvh0QCJM+ymdPy+ssksy1tZv0fOKmc8CA1t3CA=
@@ -1635,12 +1707,15 @@ k8s.io/cri-api v0.28.15/go.mod h1:8/bPK3T4irPoj3LjriQc1TAIheeN2yWXR3mz+8jNZ8U=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.20.0 h1:tlyxlSvd63k7axjhuchckaRJm+a92z5GSOrTOQY5sHw=
k8s.io/klog/v2 v2.20.0/go.mod h1:Gm8eSIfQN6457haJuPaMxZw4wyP5k+ykPFlrhQDvhvw=
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E=
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrDp+YEkVDAHu7Jwk=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c=
lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA=
modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY=
@@ -1656,15 +1731,19 @@ moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHc
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260115023540-d2cc546f0409 h1:T1CZAt2R7lD3+40hkZHZJyxptrUMCfNmLAh9WEBsISU=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260115023540-d2cc546f0409/go.mod h1:aWRX5Phwz3nbHUNnIAm1oVogjguXPYDDgCOy/9Hnnvk=
yunion.io/x/executor v0.0.0-20250518005516-5402e9e0bed0 h1:msG4SiDSVU7CrXH06WuHlNEZXIooTcmNbfrIGHuIHBU=
yunion.io/x/executor v0.0.0-20250518005516-5402e9e0bed0/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260402020900-42ffc7d84d79 h1:qIoU1jY9pRHHMR7sWBMb3ocW+IP/OQ4wIg7bPz54R2s=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260402020900-42ffc7d84d79/go.mod h1:aWRX5Phwz3nbHUNnIAm1oVogjguXPYDDgCOy/9Hnnvk=
yunion.io/x/executor v0.0.0-20260312022053-f538abd2b005 h1:3sWwcjGXGjG9mLBWa7AyLq+QSi0udTAx21pfVQRFMBE=
yunion.io/x/executor v0.0.0-20260312022053-f538abd2b005/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1 h1:/+THlvf/MvgCW+7KeCDCr33e81KSRa5JmdZ1IIyLOXQ=
yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1/go.mod h1:VK4Z93dgiKgAijcSqbMKmGaBMJuHulR16Hz4K015ZPo=
@@ -1676,8 +1755,8 @@ yunion.io/x/ovsdb v0.0.0-20230306173834-f164f413a900 h1:Hu/4ERvoWaN6aiFs4h4/yvVB
yunion.io/x/ovsdb v0.0.0-20230306173834-f164f413a900/go.mod h1:0vLkNEhlmA64HViPBAnSTUMrx5QP1CLsxXmxDKQ80tc=
yunion.io/x/pkg v0.0.0-20190620104149-945c25821dbf/go.mod h1:t6rEGG2sQ4J7DhFxSZVOTjNd0YO/KlfWQyK1W4tog+E=
yunion.io/x/pkg v0.0.0-20190628082551-f4033ba2ea30/go.mod h1:t6rEGG2sQ4J7DhFxSZVOTjNd0YO/KlfWQyK1W4tog+E=
yunion.io/x/pkg v1.10.4-0.20251114095758-2a2f105d9712 h1:LUYhaE2PbRrlO2dJTII3K5L62wYlwDet2drziGv6yLY=
yunion.io/x/pkg v1.10.4-0.20251114095758-2a2f105d9712/go.mod h1:0Bwxqd9MA3ACi119/l02FprY/o9gHahmYC2bsSbnVpM=
yunion.io/x/pkg v1.10.4-0.20260224071200-5c269fa62429 h1:yskc2HFnBZXEzfYeQBFdL2gXzVfdPQ8yT4qVDyuhajM=
yunion.io/x/pkg v1.10.4-0.20260224071200-5c269fa62429/go.mod h1:0Bwxqd9MA3ACi119/l02FprY/o9gHahmYC2bsSbnVpM=
yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1 h1:1KJ3YYinydPHpDEQRXdr/T8SYcKZ5Er+m489H+PnaQ4=
yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1/go.mod h1:0iFKpOs1y4lbCxeOmq3Xx/0AcQoewVPwj62eRluioEo=
yunion.io/x/sqlchemy v1.1.3-0.20251231025938-b0a38f6e9fab h1:5m/bSzW3uTAk83rp9eethbYsxJFYInFVeU1RDkteW4E=

View File

@@ -19,13 +19,14 @@ import (
"net/http"
"strings"
"yunion.io/x/pkg/errors"
"yunion.io/x/onecloud/pkg/apigateway/clientman"
"yunion.io/x/onecloud/pkg/appsrv"
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/auth"
"yunion.io/x/onecloud/pkg/util/netutils2"
"yunion.io/x/pkg/errors"
)
const (

View File

@@ -0,0 +1,257 @@
package handler
import (
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"strings"
"time"
"yunion.io/x/log"
"yunion.io/x/pkg/errors"
"yunion.io/x/pkg/util/httputils"
"yunion.io/x/onecloud/pkg/apigateway/options"
"yunion.io/x/onecloud/pkg/appsrv"
"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient/auth"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/llm"
mcpServerOption "yunion.io/x/onecloud/pkg/mcp-server/options"
)
func mcpServersConfigHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {
serviceName := "mcp-server"
url, err := auth.GetPublicServiceURL(serviceName, options.Options.Region, "", httputils.GET)
if err != nil {
log.Warningf("GetPublicServiceURL for %s failed: %v", serviceName, err)
}
sseURL := fmt.Sprintf("%s/sse", url)
responseType := r.URL.Query().Get("type")
switch responseType {
case "claude":
// Claude 仅支持单个自定义 header使用 X-API-Key。填写方式
// base64(ak:sk)`echo -n "你的AK:你的SK" | base64`,将输出填入
cmd := fmt.Sprintf("claude mcp add --transport sse %s --header \"X-API-Key: <填写 token 或 base64(AK:SK)>\"", sseURL)
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.Write([]byte(cmd))
return
case "cursor":
// fall through to JSON
default:
// default: return JSON (cursor format)
}
// Cursor在 headers 中填写控制台/CLI 获取的 Access Key 与 Secret Key
config := map[string]interface{}{
"mcpServers": map[string]interface{}{
mcpServerOption.Options.MCPServerName: map[string]interface{}{
"url": sseURL,
"headers": map[string]string{
"AK": "<填写 Access Key>",
"SK": "<填写 Secret Key>",
},
},
},
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(config)
}
func chatHandlerInfo(method, prefix string, handler func(context.Context, http.ResponseWriter, *http.Request)) *appsrv.SHandlerInfo {
log.Debugf("%s - %s", method, prefix)
hi := appsrv.SHandlerInfo{}
hi.SetMethod(method)
hi.SetPath(prefix)
hi.SetHandler(handler)
hi.SetProcessTimeout(6 * time.Hour)
// Use default worker manager with default pool size (usually 32)
// instead of uploader worker which has limited pool size (4)
return &hi
}
func mcpAgentChatStreamHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {
params, _, body := appsrv.FetchEnv(ctx, w, r)
id := params["<id>"]
if len(id) == 0 {
httperrors.MissingParameterError(ctx, w, "id")
return
}
token := AppContextToken(ctx)
s := auth.GetSession(ctx, token, FetchRegion(r))
// Prepare request to backend
headers := http.Header{}
headers.Set("Content-Type", "application/json")
// Forward the request body to the backend
var bodyReader io.Reader
if body != nil {
bodyStr := body.String()
bodyReader = strings.NewReader(bodyStr)
}
path := fmt.Sprintf("/mcp_agents/%s/chat-stream", id)
resp, err := s.RawVersionRequest(
modules.MCPAgent.ServiceType(),
modules.MCPAgent.EndpointType(),
"POST",
path,
headers,
bodyReader,
)
if err != nil {
httperrors.GeneralServerError(ctx, w, errors.Wrap(err, "request backend"))
return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
// Read error body
respBody, _ := io.ReadAll(resp.Body)
// Try to parse as JSON error if possible, or just return as is
if resp.StatusCode >= 400 && resp.StatusCode < 500 {
httperrors.InputParameterError(ctx, w, "backend error: %s", string(respBody))
} else {
httperrors.GeneralServerError(ctx, w, fmt.Errorf("backend error %d: %s", resp.StatusCode, string(respBody)))
}
return
}
// Set SSE headers
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
// For now just standard SSE headers.
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
// Stream the response from backend to client
buf := make([]byte, 1024)
for {
n, err := resp.Body.Read(buf)
if n > 0 {
if _, wErr := w.Write(buf[:n]); wErr != nil {
log.Errorf("write response error: %v", wErr)
return
}
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
}
if err != nil {
if err != io.EOF {
log.Errorf("read backend response error: %v", err)
}
break
}
}
}
// mcpAgentDefaultChatStreamHandler 将请求转发到 region 的 default-chat-stream使用 default_agent=true 的条目)
func mcpAgentDefaultChatStreamHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {
token := AppContextToken(ctx)
s := auth.GetSession(ctx, token, FetchRegion(r))
headers := http.Header{}
headers.Set("Content-Type", "application/json")
var bodyReader io.Reader
if r.Body != nil {
bodyReader = r.Body
}
path := "/mcp_agents/default-chat-stream"
resp, err := s.RawVersionRequest(
modules.MCPAgent.ServiceType(),
modules.MCPAgent.EndpointType(),
"POST",
path,
headers,
bodyReader,
)
if err != nil {
httperrors.GeneralServerError(ctx, w, errors.Wrap(err, "request backend"))
return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
respBody, _ := io.ReadAll(resp.Body)
if resp.StatusCode >= 400 && resp.StatusCode < 500 {
httperrors.InputParameterError(ctx, w, "backend error: %s", string(respBody))
} else {
httperrors.GeneralServerError(ctx, w, fmt.Errorf("backend error %d: %s", resp.StatusCode, string(respBody)))
}
return
}
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
buf := make([]byte, 1024)
for {
n, err := resp.Body.Read(buf)
if n > 0 {
if _, wErr := w.Write(buf[:n]); wErr != nil {
log.Errorf("write response error: %v", wErr)
return
}
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
}
if err != nil {
if err != io.EOF {
log.Errorf("read backend response error: %v", err)
}
break
}
}
}
// mcpAgentDefaultToolsHandler 将 GET 请求转发到 region 的 default-mcp-tools仅使用 options.MCPServerURL不通过 mcp_agent 条目)
func mcpAgentDefaultToolsHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {
token := AppContextToken(ctx)
s := auth.GetSession(ctx, token, FetchRegion(r))
path := "/mcp_agents/default-mcp-tools"
resp, err := s.RawVersionRequest(
modules.MCPAgent.ServiceType(),
modules.MCPAgent.EndpointType(),
"GET",
path,
nil,
nil,
)
if err != nil {
httperrors.GeneralServerError(ctx, w, errors.Wrap(err, "request backend"))
return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
respBody, _ := io.ReadAll(resp.Body)
if resp.StatusCode >= 400 && resp.StatusCode < 500 {
httperrors.InputParameterError(ctx, w, "backend error: %s", string(respBody))
} else {
httperrors.GeneralServerError(ctx, w, fmt.Errorf("backend error %d: %s", resp.StatusCode, string(respBody)))
}
return
}
w.Header().Set("Content-Type", "application/json")
_, err = io.Copy(w, resp.Body)
if err != nil {
log.Errorf("write default mcp tools response error: %v", err)
}
}

View File

@@ -105,11 +105,23 @@ func (h *MiscHandler) Bind(app *appsrv.Application) {
s3upload := uploadHandlerInfo(POST, prefix+"s3uploads", FetchAuthToken(h.postS3UploadHandler))
app.AddHandler3(s3upload)
// mcp agent chat stream
chatStream := chatHandlerInfo("POST", prefix+"mcp_agents/<id>/chat-stream", FetchAuthToken(mcpAgentChatStreamHandler))
app.AddHandler3(chatStream)
// mcp agent default chat stream (uses agent with default_agent=true)
defaultChatStream := chatHandlerInfo("POST", prefix+"mcp_agents/default/chat-stream", FetchAuthToken(mcpAgentDefaultChatStreamHandler))
app.AddHandler3(defaultChatStream)
// syslog webservice handlers
app.AddHandler(POST, prefix+"syslog/token", handleSyslogWebServiceToken)
app.AddHandler(POST, prefix+"syslog/message", handleSyslogWebServiceMessage)
// service settings
app.AddHandler(GET, prefix+"service_settings", h.getServiceSettings)
// mcp servers config
app.AddHandler(GET, prefix+"mcp-servers-config", mcpServersConfigHandler)
// mcp agent default MCP server tools (options.MCPServerURL only, no mcp_agent entry)
app.AddHandler(GET, prefix+"default-mcp-tools", FetchAuthToken(mcpAgentDefaultToolsHandler))
}
func UploadHandlerInfo(method, prefix string, handler func(context.Context, http.ResponseWriter, *http.Request)) *appsrv.SHandlerInfo {

View File

@@ -60,6 +60,9 @@ type sReport struct {
BaremetalMemSizeMb int64
BaremetalStorageSizeGb int64
ServerCnt int64
ContainerCnt int64
ContainerCpuCnt int64
ContainerMemSizeMb int64
ServerCpuCnt int64
ServerMemSizeMb int64
KvmServerCnt int64
@@ -270,6 +273,9 @@ func Report(ctx context.Context, userCred mcclient.TokenCredential, isStart bool
ret.ServerCnt, _ = usage.Int("all.servers")
ret.ServerCpuCnt, _ = usage.Int("all.servers.cpu")
ret.ServerMemSizeMb, _ = usage.Int("all.servers.memory")
ret.ContainerCnt, _ = usage.Int("all.containers")
ret.ContainerCpuCnt, _ = usage.Int("all.containers.cpu")
ret.ContainerMemSizeMb, _ = usage.Int("all.containers.memory")
ret.DiskCnt, _ = usage.Int("all.disks.count")
ret.DiskSizeMb, _ = usage.Int("all.disks")
ret.BucketCnt, _ = usage.Int("all.buckets")

View File

@@ -22,7 +22,7 @@ type BillingDetailsInfo struct {
type BillingResourceListInput struct {
// 计费类型,按需计费和预付费
// pattern:prepaid|postpaid
BillingType string `json:"billing_type"`
BillingType TBillingType `json:"billing_type"`
// 计费过期时间的查询起始时间
BillingExpireSince time.Time `json:"billing_expire_since"`

View File

@@ -14,9 +14,41 @@
package billing
import "yunion.io/x/cloudmux/pkg/apis/billing"
import (
"yunion.io/x/cloudmux/pkg/apis/billing"
"yunion.io/x/cloudmux/pkg/apis/compute"
)
type TBillingType string
const (
BILLING_TYPE_POSTPAID = billing.BILLING_TYPE_POSTPAID
BILLING_TYPE_PREPAID = billing.BILLING_TYPE_PREPAID
BILLING_TYPE_POSTPAID = TBillingType(billing.BILLING_TYPE_POSTPAID)
BILLING_TYPE_PREPAID = TBillingType(billing.BILLING_TYPE_PREPAID)
)
type TNetChargeType string
const (
NET_CHARGE_TYPE_BY_TRAFFIC = TNetChargeType(compute.EIP_CHARGE_TYPE_BY_TRAFFIC)
NET_CHARGE_TYPE_BY_BANDWIDTH = TNetChargeType(compute.EIP_CHARGE_TYPE_BY_BANDWIDTH)
)
func ParseBillingType(s string) TBillingType {
switch s {
case string(BILLING_TYPE_POSTPAID):
return BILLING_TYPE_POSTPAID
case string(BILLING_TYPE_PREPAID):
return BILLING_TYPE_PREPAID
}
return ""
}
func ParseNetChargeType(s string) TNetChargeType {
switch s {
case string(NET_CHARGE_TYPE_BY_TRAFFIC):
return NET_CHARGE_TYPE_BY_TRAFFIC
case string(NET_CHARGE_TYPE_BY_BANDWIDTH):
return NET_CHARGE_TYPE_BY_BANDWIDTH
}
return ""
}

View File

@@ -20,6 +20,7 @@ import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
type SchedtagConfig struct {
@@ -121,7 +122,10 @@ type NetworkConfig struct {
PortMappings GuestPortMappings `json:"port_mappings"`
ChargeType string `json:"charge_type"`
// 计费模式
BillingType billing_api.TBillingType `json:"billing_type"`
// 计量模式
ChargeType billing_api.TNetChargeType `json:"charge_type"`
// swagger:ignore
Project string `json:"project_id"`
@@ -130,6 +134,9 @@ type NetworkConfig struct {
Domain string `json:"domain_id"`
Ifname string `json:"ifname"`
Schedtags []*SchedtagConfig `json:"schedtags"`
// network secgroups
Secgroups []string `json:"secgroups"`
}
type AttachNetworkInput struct {
@@ -190,6 +197,11 @@ type DiskConfig struct {
// required: false
AutoReset bool `json:"auto_reset"`
// 是否跟随主机删除而自动删除
// 默认跟随主机创建的磁盘为 true
// required: false
AutoDelete *bool `json:"auto_delete,omitempty"`
// 磁盘存储格式
// enum: ["qcow2", "raw", "docker", "iso", "vmdk", "vmdkflatver1", "vmdkflatver2", "vmdkflat", "vmdksparse", "vmdksparsever1", "vmdksparsever2", "vmdksepsparse", "vhd"]
// requried: false
@@ -466,6 +478,37 @@ type DeployConfig struct {
Content string `json:"content"`
}
// KickstartConfig Kickstart/Autoinstall自动化安装配置
type KickstartConfig struct {
// 配置文件内容 (当用户直接提供配置时使用)
// required: false
Config string `json:"config,omitempty"`
// 配置文件 URL (当配置文件位于外部服务器时使用)
// required: false
ConfigURL string `json:"config_url,omitempty"`
// 操作系统类型 (用于确定内核参数和文件路径)
// enum: centos,rhel,fedora,openeuler,ubuntu
// required: true
OSType string `json:"os_type" validate:"required,oneof=centos rhel fedora openeuler ubuntu"`
// 是否启用 (用于临时禁用而不删除配置)
// default: true
// required: false
Enabled *bool `json:"enabled,omitempty"`
// 最大重试次数
// default: 3
// required: false
MaxRetries int `json:"max_retries,omitempty"`
// 安装超时时间 (分钟)
// default: 60
// required: false
TimeoutMinutes int `json:"timeout_minutes,omitempty"`
}
type ServerCreateInput struct {
apis.VirtualResourceCreateInput
DeletePreventableCreateInput
@@ -604,7 +647,7 @@ type ServerCreateInput struct {
// 弹性公网IP线路类型
EipBgpType string `json:"eip_bgp_type,omitzero"`
// 弹性公网IP计费类型
EipChargeType string `json:"eip_charge_type,omitempty"`
EipChargeType billing_api.TNetChargeType `json:"eip_charge_type,omitempty"`
// 是否跟随主机删除而自动释放
EipAutoDellocate bool `json:"eip_auto_dellocate,omitempty"`
@@ -630,7 +673,7 @@ type ServerCreateInput struct {
// |---- |------- |
// |traffic |按流量计费|
// |bandwidth |按带宽计费|
PublicIpChargeType string `json:"public_ip_charge_type,omitempty"`
PublicIpChargeType billing_api.TNetChargeType `json:"public_ip_charge_type,omitempty"`
// 使用主机快照创建虚拟机, 主机快照不会重置密码及秘钥信息
// 使用主机快照创建的虚拟机将沿用之前的密码秘钥及安全组信息
@@ -656,7 +699,7 @@ type ServerCreateInput struct {
// swagger:ignore
OsProfile jsonutils.JSONObject `json:"__os_profile__"`
// swagger:ignore
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
// swagger:ignore
BillingCycle string `json:"billing_cycle"`
// 到期释放时间
@@ -677,9 +720,32 @@ type ServerCreateInput struct {
// 指定用于新建主机的主机镜像ID
GuestImageID string `json:"guest_image_id"`
// Kickstart/Autoinstall自动化安装配置
// required: false
KickstartConfig *KickstartConfig `json:"kickstart_config,omitempty"`
Pod *PodCreateInput `json:"pod"`
}
func (c *KickstartConfig) IsEnabled() bool {
if c.Enabled != nil && !*c.Enabled {
return false
}
return true
}
// ServerUpdateKickstartStatusInput 更新虚拟机 kickstart 状态的输入
type ServerUpdateKickstartStatusInput struct {
// kickstart 状态
// enum: kickstart_pending,kickstart_installing,kickstart_completed,kickstart_failed
// required: true
Status string `json:"status" validate:"required,oneof=kickstart_pending kickstart_installing kickstart_completed kickstart_failed"`
// 错误信息(可选)
// required: false
ErrorMessage string `json:"error_message,omitempty"`
}
func (input *ServerCreateInput) AfterUnmarshal() {
if input.Baremetal {
input.Hypervisor = HYPERVISOR_BAREMETAL

View File

@@ -100,6 +100,6 @@ type CachedimageListInput struct {
// valid cachedimage
Valid bool `json:"valid"`
// enum: [public, private]
// enum: ["public", "private"]
CloudEnv string `json:"cloud_env"`
}

View File

@@ -19,6 +19,7 @@ import (
"time"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
type DBInstanceCreateInput struct {
@@ -87,7 +88,7 @@ type DBInstanceCreateInput struct {
// 计费方式
// enum: ["postpaid", "prepaid"]
BillingType string
BillingType billing_api.TBillingType `json:"billing_type"`
// swagger:ignore
BillingCycle string

View File

@@ -25,6 +25,7 @@ import (
"yunion.io/x/onecloud/pkg/apis"
"yunion.io/x/onecloud/pkg/apis/billing"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/onecloud/pkg/httperrors"
)
@@ -177,6 +178,8 @@ type DiskListInput struct {
// 根据是否绑定快照策略过滤
BindingSnapshotpolicy *bool `json:"binding_snapshotpolicy"`
// 根据是否磁盘所在虚拟机是否绑定主机快照策略
BindingServerSnapshotpolicy *bool `json:"binding_server_snapshotpolicy"`
}
type DiskResourceInput struct {
@@ -221,13 +224,22 @@ type SimpleGuest struct {
Bps int `json:"bps"`
// 计费类型
BillingType string `json:"billing_type"`
// 磁盘绑定的快照策略列表
Snapshotpolicy []SimpleSnapshotPolicy `json:"snapshotpolicy"`
}
type SimpleSnapshotPolicy struct {
Id string `json:"id"`
Name string `json:"name"`
RepeatWeekdays []int `json:"repeat_weekdays"`
TimePoints []int `json:"time_points"`
// 快照策略ID
Id string `json:"id"`
// 快照策略名称
Name string `json:"name"`
// 快照策略类型
ResourceType string `json:"resource_type"`
// 快照策略重复周期
RepeatWeekdays []int `json:"repeat_weekdays"`
// 快照策略时间点
TimePoints []int `json:"time_points"`
}
type DiskDetails struct {
@@ -247,11 +259,11 @@ type DiskDetails struct {
GuestStatus string `json:"guest_status"`
// 所挂载虚拟机计费类型
GuestBillingType string `json:"guest_billing_type"`
// 磁盘所在虚拟机绑定的主机快照策略数量
GuestSnapshotpolicyCount int `json:"guest_snapshotpolicy_count"`
// 自动清理时间
AutoDeleteAt time.Time `json:"auto_delete_at"`
// 自动快照策略状态
SnapshotpolicyStatus string `json:"snapshotpolicy_status,allowempty"`
// 自动快照策略
Snapshotpolicies []SimpleSnapshotPolicy `json:"snapshotpolicies"`
@@ -281,6 +293,11 @@ type DiskUpdateInput struct {
DiskType string `json:"disk_type"`
// 关机自动重置
AutoReset *bool `json:"auto_reset"`
// 是否跟随主机删除而自动删除
// 默认跟随主机创建的磁盘为 true
// required: false
AutoDelete *bool `json:"auto_delete,omitempty"`
}
type DiskSaveInput struct {
@@ -363,6 +380,7 @@ type DiskChagneStorageTypeInput struct {
}
type DiskSnapshotpolicyInput struct {
// 快照策略ID
SnapshotpolicyId string `json:"snapshotpolicy_id"`
}
@@ -405,5 +423,5 @@ type DiskChangeBillingTypeInput struct {
// 目前支持阿里云
// enmu: [postpaid, prepaid]
// required: true
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
}

View File

@@ -18,6 +18,7 @@ import (
"time"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
type ElasticcacheDetails struct {
@@ -255,7 +256,7 @@ type ElasticcacheCreateInput struct {
// 计费方式
// enum: ["postpaid", "prepaid"]
BillingType string
BillingType billing_api.TBillingType `json:"billing_type"`
// swagger:ignore
BillingCycle string

View File

@@ -16,6 +16,7 @@ package compute
import (
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
type SElasticipCreateInput struct {
@@ -60,7 +61,7 @@ type SElasticipCreateInput struct {
// |OpenStack | traffic |
// default: traffic
// enum: ["traffic", "bandwidth"]
ChargeType string `json:"charge_type"`
ChargeType billing_api.TNetChargeType `json:"charge_type"`
Mode string `json:"mode"`

View File

@@ -44,9 +44,6 @@ const (
EIP_STATUS_CHANGE_BANDWIDTH = "change_bandwidth"
EIP_CHARGE_TYPE_BY_TRAFFIC = compute.EIP_CHARGE_TYPE_BY_TRAFFIC
EIP_CHARGE_TYPE_BY_BANDWIDTH = compute.EIP_CHARGE_TYPE_BY_BANDWIDTH
INSTANCE_ASSOCIATE_EIP = "associate_eip"
INSTANCE_ASSOCIATE_EIP_FAILED = "associate_eip_failed"
INSTANCE_DISSOCIATE_EIP = "dissociate_eip"

View File

@@ -20,6 +20,7 @@ import (
"yunion.io/x/cloudmux/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
const (
@@ -92,7 +93,7 @@ type FileSystemCreateInput struct {
// 计费方式
// enum: ["postpaid", "prepaid"]
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
// swagger:ignore
BillingCycle string `json:"billing_cycle"`
}

View File

@@ -0,0 +1,15 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package guest // import "yunion.io/x/onecloud/pkg/apis/compute/guest"

View File

@@ -0,0 +1,47 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package guest
import (
"time"
"yunion.io/x/onecloud/pkg/apis"
compute_api "yunion.io/x/onecloud/pkg/apis/compute"
)
type GuestNetworkTrafficState string
const (
GuestNetworkTrafficStateContinue GuestNetworkTrafficState = ""
GuestNetworkTrafficStateStart GuestNetworkTrafficState = "start"
)
type GuestNetworkTrafficLogListInput struct {
apis.ProjectizedResourceListInput
compute_api.ServerFilterListInput
compute_api.NetworkFilterListInput
Since time.Time `json:"since"`
Until time.Time `json:"until"`
IpAddr []string `json:"ip_addr"`
Ip6Addr []string `json:"ip6_addr"`
State []GuestNetworkTrafficState `json:"state"`
}
type GuestNetworkTrafficLogDetails struct {
compute_api.SGuestNetworkTrafficLog
}

View File

@@ -180,6 +180,12 @@ const (
VM_QGA_SET_NETWORK = "qga_set_network"
VM_QGA_SET_NETWORK_FAILED = "qga_set_network_failed"
// Kickstart自动安装相关状态
VM_KICKSTART_PENDING = "kickstart_pending" // kickstart配置完成等待VM启动
VM_KICKSTART_INSTALLING = "kickstart_installing" // kickstart正在安装
VM_KICKSTART_COMPLETED = "kickstart_completed" // kickstart安装完成准备转为running
VM_KICKSTART_FAILED = "kickstart_failed" // kickstart安装失败
SHUTDOWN_STOP = "stop"
SHUTDOWN_TERMINATE = "terminate"
SHUTDOWN_STOP_RELEASE_GPU = "stop_release_gpu"
@@ -259,7 +265,7 @@ const (
VM_MACHINE_TYPE_PC = "pc"
VM_MACHINE_TYPE_Q35 = "q35"
VM_MACHINE_TYPE_ARM_VIRT = "virt"
VM_MACHINE_TYPE_VIRT = "virt"
VM_VDI_PROTOCOL_VNC = "vnc"
VM_VDI_PROTOCOL_SPICE = "spice"
@@ -274,6 +280,7 @@ const (
var VM_RUNNING_STATUS = []string{VM_START_START, VM_STARTING, VM_RUNNING, VM_BLOCK_STREAM, VM_BLOCK_STREAM_FAIL}
var VM_CREATING_STATUS = []string{VM_CREATE_NETWORK, VM_CREATE_DISK, VM_START_DEPLOY, VM_DEPLOYING}
var VM_KICKSTART_STATUS = []string{VM_KICKSTART_PENDING, VM_KICKSTART_INSTALLING, VM_KICKSTART_COMPLETED, VM_KICKSTART_FAILED}
var HYPERVISORS = []string{
HYPERVISOR_KVM,
@@ -349,8 +356,31 @@ const (
VM_METADATA_CPU_NUMA_PIN_TYPE = "__cpu_numa_pin_type"
VM_METADATA_VIRTUAL_ISOLATED_DEVICE_CONFIG = "__virtual_isolated_device_config"
// Kickstart相关metadata常量
VM_METADATA_KICKSTART_CONFIG = "kickstart_config"
VM_METADATA_KICKSTART_TYPE = "kickstart_type"
VM_METADATA_KICKSTART_ATTEMPT = "kickstart_attempt"
VM_METADATA_KICKSTART_COMPLETED_FLAG = "kickstart_completed_flag"
)
const (
KICKSTART_TYPE_URL = "url"
KICKSTART_TYPE_CONTENT = "content"
)
var KICKSTART_VALID_TYPES = []string{
KICKSTART_TYPE_URL,
KICKSTART_TYPE_CONTENT,
}
var KICKSTART_VALID_OS_TYPES = []string{
"centos",
"rhel",
"fedora",
"ubuntu",
"openeuler",
}
// windows allow a maximal length of 15
// http://support.microsoft.com/kb/909264
const MAX_WINDOWS_COMPUTER_NAME_LENGTH = 15

View File

@@ -28,7 +28,7 @@ type SImagesInGuest struct {
DataImages []SSubImage
}
type SGuestScreenDump struct {
type SGuestScreenDumpInfo struct {
S3AccessKey string
S3SecretKey string
S3Endpoint string

View File

@@ -16,10 +16,14 @@ package compute
import (
"reflect"
"time"
"yunion.io/x/cloudmux/pkg/apis/compute"
"yunion.io/x/jsonutils"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/pkg/gotypes"
"yunion.io/x/onecloud/pkg/apis"
)
type GuestnetworkDetails struct {
@@ -76,12 +80,24 @@ type GuestnetworkShortDesc struct {
Ifname string `json:"ifname"`
// 是否为缺省路由网关
IsDefault bool `json:"is_default"`
// 线路类型
BgpType string `json:"bgp_type"`
// 计费模式
ChargeType string `json:"charge_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
// 计量模式
ChargeType billing_api.TNetChargeType `json:"charge_type"`
// 网卡序号
Index int `json:"index"`
}
type GuestnetworkSecgroupShortDesc struct {
NetworkIndex int `json:"network_index"`
Secgroups []apis.StandaloneShortDesc `json:"secgroups"`
Mac string `json:"mac"`
}
type GuestnetworkListInput struct {
GuestJointsListInput
@@ -137,6 +153,9 @@ type GuestnetworkBaseDesc struct {
TxTrafficLimit int64 `json:"tx_traffic_limit"`
NicType compute.TNicType `json:"nic_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
ChargeType billing_api.TNetChargeType `json:"charge_type"`
Ip6 string `json:"ip6"`
Gateway6 string `json:"gateway6"`
Masklen6 uint8 `json:"masklen6"`
@@ -148,6 +167,9 @@ type GuestnetworkBaseDesc struct {
WireId string `json:"wire_id"`
Interface string `json:"interface"`
Secgroups []*SecgroupJsonDesc `json:"secgroups"`
SecurityRules string `json:"security_rules"`
Vpc struct {
Id string `json:"id"`
Provider string `json:"provider"`
@@ -183,6 +205,14 @@ type GuestnetworkJsonDesc struct {
LinkUp bool `json:"link_up"`
}
type GuestnetworkSecgroupDesc struct {
Secgroups []*SecgroupJsonDesc `json:"secgroups"`
SecurityRules string `json:"security_rules"`
Index int `json:"index"`
Mac string `json:"mac"`
}
type SNicTrafficRecord struct {
RxTraffic int64
TxTraffic int64
@@ -190,6 +220,24 @@ type SNicTrafficRecord struct {
HasBeenSetDown bool
}
type GuestNicTrafficSyncInput struct {
// 同步时间
SyncAt time.Time
// 是否重置计数器
IsReset bool `json:"is_reset"`
// first key: guest_id
// second key: nic_mac
Traffic map[string]map[string]*SNicTrafficRecord
}
func NewGuestNicTrafficSyncInput(syncAt time.Time, isReset bool) *GuestNicTrafficSyncInput {
return &GuestNicTrafficSyncInput{
SyncAt: syncAt,
Traffic: make(map[string]map[string]*SNicTrafficRecord),
IsReset: isReset,
}
}
type GuestPortMappingProtocol string
const (

View File

@@ -23,6 +23,7 @@ import (
"yunion.io/x/onecloud/pkg/apis"
"yunion.io/x/onecloud/pkg/apis/billing"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/onecloud/pkg/apis/host"
imageapi "yunion.io/x/onecloud/pkg/apis/image"
"yunion.io/x/onecloud/pkg/httperrors"
@@ -135,6 +136,14 @@ type ServerListInput struct {
// 根据是否绑定快照策略过滤
BindingSnapshotpolicy *bool `json:"binding_snapshotpolicy"`
// 根据虚机关联的磁盘是否绑定快照策略过滤
BindingDisksSnapshotpolicy *bool `json:"binding_disks_snapshotpolicy"`
}
// 主机快照策略绑定/设置接口入参
type ServerSnapshotpolicyInput struct {
// 快照策略ID
SnapshotpolicyId string `json:"snapshotpolicy_id"`
}
func (input *ServerListInput) AfterUnmarshal() {
@@ -184,6 +193,11 @@ type ServerDetails struct {
// 磁盘概要
Disks string `json:"disks"`
// 主机快照策略数量
SnapshotpolicyCount int `json:"snapshotpolicy_count"`
// 磁盘快照策略数量
DisksSnapshotpolicyCount int `json:"disks_snapshotpolicy_count"`
// 磁盘详情
DisksInfo []GuestDiskInfo `json:"disks_info"`
// 虚拟机Ip列表
@@ -243,6 +257,9 @@ type ServerDetails struct {
// 关联主安全组
Secgroup string `json:"secgroup"`
// 网卡级别安全组
NetworkSecgroups []GuestnetworkSecgroupShortDesc `json:"network_secgroups"`
// 浮动IP
Eip string `json:"eip"`
// 浮动IP类型
@@ -558,12 +575,32 @@ type GuestSetSecgroupInput struct {
SecgroupIds []string `json:"secgroup_ids"`
}
type GuestSetNetworkSecgroupInput struct {
// 安全组Id列表
// 实例必须处于运行,休眠或者关机状态
SecgroupIds []string `json:"secgroup_ids"`
// 虚机网卡 index 或者 mac 地址
NetworkIndex *int `json:"network_index"`
MacAddr string `json:"mac_addr"`
}
type GuestRevokeSecgroupInput struct {
// 安全组Id列表
// 实例必须处于运行,休眠或者关机状态
SecgroupIds []string `json:"secgroup_ids"`
}
type GuestRevokeNetworkSecgroupInput struct {
// 安全组Id列表
// 实例必须处于运行,休眠或者关机状态
SecgroupIds []string `json:"secgroup_ids"`
// 虚机网卡 index 或者 mac 地址
NetworkIndex *int `json:"network_index"`
MacAddr string `json:"mac_addr"`
}
type GuestAssignSecgroupInput struct {
// 安全组Id
// 实例必须处于运行,休眠或者关机状态
@@ -593,6 +630,12 @@ type GuestAddSecgroupInput struct {
SecgroupIds []string `json:"secgroup_ids"`
}
type GuestNetworkAddSecgroupInput struct {
SecgroupIds []string `json:"secgroup_ids"`
NetworkIndex *int `json:"network_index"`
}
type ServerRemoteUpdateInput struct {
// 是否覆盖替换所有标签
ReplaceTags *bool `json:"replace_tags" help:"replace all remote tags"`
@@ -611,7 +654,7 @@ type ServerAssociateEipInput struct {
type ServerCreateEipInput struct {
// 计费方式traffic or bandwidth
ChargeType string `json:"charge_type"`
ChargeType billing_api.TNetChargeType `json:"charge_type"`
// Bandwidth
Bandwidth int64 `json:"bandwidth"`
@@ -728,6 +771,13 @@ func (input ServerDetachnetworkInput) IsForce() bool {
return input.Force != nil && *input.Force
}
type ServerSetNetworkNumQueuesInput struct {
// 虚机网卡 mac addr
MacAddr string `json:"mac_addr"`
// 网卡队列数
NumQueues int `json:"num_queues"`
}
type ServerMigrateForecastInput struct {
PreferHostId string `json:"prefer_host_id"`
// Deprecated
@@ -921,9 +971,10 @@ type GuestJsonDesc struct {
NetworkRoles []string `json:"network_roles"`
Secgroups []*SecgroupJsonDesc `json:"secgroups"`
SecurityRules string `json:"security_rules"`
AdminSecurityRules string `json:"admin_security_rules"`
Secgroups []*SecgroupJsonDesc `json:"secgroups"`
SecurityRules string `json:"security_rules"`
AdminSecurityRules string `json:"admin_security_rules"`
NicSecgroups []*GuestnetworkSecgroupDesc `json:"nic_secgroups"`
ExtraOptions jsonutils.JSONObject `json:"extra_options"`
@@ -1254,9 +1305,80 @@ type ServerSetLiveMigrateParamsInput struct {
}
type ServerNicTrafficLimit struct {
Mac string `json:"mac"`
Mac string `json:"mac"`
RxTrafficLimit *int64 `json:"rx_traffic_limit"`
TxTrafficLimit *int64 `json:"tx_traffic_limit"`
BillingType billing_api.TBillingType `json:"billing_type"`
ChargeType billing_api.TNetChargeType `json:"charge_type"`
}
func (input ServerNicTrafficLimit) Validate(billingType billing_api.TBillingType, chargeType billing_api.TNetChargeType, txLimit, rxLimit int64) (ServerNicTrafficLimit, bool, error) {
var billingChange bool
if len(input.BillingType) > 0 && input.BillingType != billingType {
billingChange = true
billingType = input.BillingType
}
if len(input.ChargeType) > 0 && input.ChargeType != chargeType {
billingChange = true
chargeType = input.ChargeType
}
if billingChange {
if len(input.BillingType) == 0 {
input.BillingType = billingType
}
if len(input.ChargeType) == 0 {
input.ChargeType = chargeType
}
}
if billingType == billing_api.BILLING_TYPE_POSTPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_TRAFFIC {
if txLimit > 0 {
txLimit = 0
input.TxTrafficLimit = &txLimit
} else {
input.TxTrafficLimit = nil
}
if rxLimit > 0 {
rxLimit = 0
input.RxTrafficLimit = &rxLimit
} else {
input.RxTrafficLimit = nil
}
} else if billingType == billing_api.BILLING_TYPE_POSTPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_BANDWIDTH {
return input, billingChange, errors.Wrapf(httperrors.ErrNotImplemented, "billing type %s and charge type %s are not supported", input.BillingType, input.ChargeType)
} else if billingType == billing_api.BILLING_TYPE_PREPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_TRAFFIC {
if txLimit == 0 && input.TxTrafficLimit == nil {
return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "tx traffic limit is required")
}
if rxLimit == 0 && input.RxTrafficLimit == nil {
return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "rx traffic limit is required")
}
if input.TxTrafficLimit != nil && *input.TxTrafficLimit <= 0 {
return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "tx traffic limit must be greater than 0")
}
if input.RxTrafficLimit != nil && *input.RxTrafficLimit <= 0 {
return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "rx traffic limit must be greater than 0")
}
} else if billingType == billing_api.BILLING_TYPE_PREPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_BANDWIDTH {
if txLimit > 0 {
txLimit = 0
input.TxTrafficLimit = &txLimit
} else {
input.TxTrafficLimit = nil
}
if rxLimit > 0 {
rxLimit = 0
input.RxTrafficLimit = &rxLimit
} else {
input.RxTrafficLimit = nil
}
} else {
return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "invalid billing type %s and charge type %s", input.BillingType, input.ChargeType)
}
return input, billingChange, nil
}
type GuestAddSubIpsInfo struct {
@@ -1372,7 +1494,9 @@ type ServerChangeConfigSettings struct {
AutoStart bool `json:"auto_start"`
GuestOnline bool `json:"guest_online"`
SetTrafficLimits []ServerNicTrafficLimit `json:"set_traffic_limits"`
// 设置虚拟网卡的流量上限
SetTrafficLimits []ServerNicTrafficLimit `json:"set_traffic_limits"`
// 重置虚拟网卡的流量上限,并且将网卡的流量归零
ResetTrafficLimits []ServerNicTrafficLimit `json:"reset_traffic_limits"`
SchedDesc jsonutils.JSONObject `json:"sched_desc"`
@@ -1438,7 +1562,7 @@ type ServerChangeBillingTypeInput struct {
// 仅在虚拟机开机或关机状态下调用
// enmu: [postpaid, prepaid]
// required: true
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
}
type ServerPerformStatusInput struct {

View File

@@ -18,6 +18,7 @@ import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
type GuestTemplateInput struct {
@@ -34,7 +35,8 @@ type GuestTemplateInput struct {
ImageType string `json:"image_type"`
ImageId string `json:"image_id"`
InstanceType string `json:"instance_type"`
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
}
type GuestTemplateCreateInput struct {

View File

@@ -21,6 +21,7 @@ import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/onecloud/pkg/cloudcommon/types"
)
@@ -370,7 +371,7 @@ type HostResourceInfo struct {
HostResourceType string `json:"host_resource_type"`
// 宿主机计费类型
HostBillingType string `json:"host_billing_type"`
HostBillingType billing_api.TBillingType `json:"host_billing_type"`
// 宿主机服务状态`
HostServiceStatus string `json:"host_service_status"`

View File

@@ -15,8 +15,9 @@
package compute
const (
HostVpcBridge = "__vpc_bridge__"
HostTapBridge = "__tap_bridge__"
HostVpcBridge = "__vpc_bridge__"
HostTapBridge = "__tap_bridge__"
HostLocalBridge = "brlocal"
)
type SMirrorConfig struct {

View File

@@ -150,6 +150,8 @@ type SnapshotPolicyListInput struct {
OrderBySnapshotCount string `json:"order_by_snapshot_count"`
// 按类型过滤
Type string `json:"type"`
ResourceId []string `json:"resource_id"`
}
type HostnameInput struct {

View File

@@ -31,8 +31,10 @@ type SimpleSnapshot struct {
DiskType string `json:"disk_type"`
// 区域Id
CloudregionId string `json:"cloudregion_id"`
// 快照大小
// 快照大小, MiB
Size int `json:"size"`
// 磁盘大小, MiB
VirtualSize int `json:"virtual_size"`
// 快照状态
Status string `json:"status"`
// 存储类型
@@ -61,8 +63,12 @@ type InstanceSnapshotDetails struct {
Snapshots []SimpleSnapshot `json:"snapshots"`
Properties map[string]string `json:"properties"`
// 主机快照大小
// 主机快照大小, B
Size int `json:"size"`
// 主机快照大小, MiB
SizeMb int `json:"size_mb"`
// 主机磁盘大小, MiB
VirtualSizeMb int `json:"virtual_size_mb"`
}
type InstanceSnapshotListInput struct {

View File

@@ -19,6 +19,7 @@ import (
"yunion.io/x/onecloud/pkg/apis"
"yunion.io/x/onecloud/pkg/apis/billing"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/onecloud/pkg/util/ansible"
)
@@ -181,7 +182,7 @@ type LoadbalancerCreateInput struct {
// 弹性公网IP线路类型
EipBgpType string `json:"eip_bgp_type,omitzero"`
// 弹性公网IP计费类型
EipChargeType string `json:"eip_charge_type,omitempty"`
EipChargeType billing_api.TNetChargeType `json:"eip_charge_type,omitempty"`
// 是否跟随主机删除而自动释放
EipAutoDellocate bool `json:"eip_auto_dellocate,omitempty"`
@@ -200,7 +201,7 @@ type LoadbalancerCreateInput struct {
// 包年包月时长
Duration string `json:"duration"`
// swagger:ignore
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
// swagger:ignore
BillingCycle string `json:"billing_cycle"`
@@ -234,7 +235,7 @@ type LoadbalancerAssociateEipInput struct {
type LoadbalancerCreateEipInput struct {
// 计费方式traffic or bandwidth
ChargeType string `json:"charge_type"`
ChargeType billing_api.TNetChargeType `json:"charge_type"`
// Bandwidth
Bandwidth int64 `json:"bandwidth"`

View File

@@ -21,6 +21,7 @@ import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/apis"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
)
const (
@@ -122,7 +123,7 @@ type NatgatewayCreateInput struct {
// 计费方式
// enum: ["postpaid", "prepaid"]
BillingType string `json:"billing_type"`
BillingType billing_api.TBillingType `json:"billing_type"`
// swagger:ignore
BillingCycle string `json:"billing_cycle"`
@@ -140,7 +141,8 @@ type NatgatewayCreateInput struct {
// 弹性公网IP计费类型
// enum: ["bandwidth", "traffic"]
// default: traffic
EipChargeType string `json:"eip_charge_type,omitempty"`
EipChargeType billing_api.TNetChargeType `json:"eip_charge_type,omitempty"`
EipBgpType string `json:"eip_bgp_type"`
EipAutoDellocate bool `json:"eip_auto_dellocate"`
}

View File

@@ -272,6 +272,9 @@ type SecgroupDetails struct {
// 关联云主机数量, 不包含回收站云主机
GuestCnt int `json:"guest_cnt,allowempty"`
// 关联云主机网卡数量, 不包含回收站云主机
GuestNicCnt int `json:"guest_nic_cnt,allowempty"`
// 关联此安全组的云主机is_system为true数量, , 不包含回收站云主机
SystemGuestCnt int `json:"system_guest_cnt,allowempty"`
@@ -310,6 +313,16 @@ type GuestsecgroupListInput struct {
SecgroupFilterListInput
}
type GuestnetworksecgroupListInput struct {
apis.ResourceBaseListInput
ServerFilterListInput
SecgroupFilterListInput
NetworkIndex *int `json:"network_index"`
IsAdmin bool `json:"is_admin"`
}
type ElasticcachesecgroupListInput struct {
ElasticcacheJointsListInput
SecgroupFilterListInput
@@ -324,6 +337,36 @@ type GuestsecgroupDetails struct {
Secgroup string `json:"secgroup"`
}
type GuestnetworksecgroupDetails struct {
GuestResourceInfo
SGuestsecgroup
SecurityGroupResourceInfo
ProjectId string `json:"tenant_id"`
apis.ProjectizedResourceInfo
// 安全组状态
SecgroupStatus string `json:"secgroup_status"`
// VPC ID
VpcId string `json:"vpc_id"`
Vpc string `json:"vpc"`
NetworkIndex int `json:"network_index"`
GuestNetwork string `json:"guest_network"`
MacAddr string `json:"mac_addr"`
Ifname string `json:"ifname"`
IpAddr string `json:"ip_addr"`
Ip6Addr string `json:"ip_6_addr"`
NetworkId string `json:"network_id"`
NetworkName string `json:"network_name"`
Admin bool `json:"admin"`
}
type ElasticcachesecgroupDetails struct {
ElasticcacheJointResourceDetails
@@ -353,11 +396,12 @@ type SSecurityGroupRef struct {
RdsCnt int `json:"rds_cnt"`
RedisCnt int `json:"redis_cnt"`
LoadbalancerCnt int `json:"loadbalancer_cnt"`
GuestNicCnt int `json:"guest_nic_cnt"`
TotalCnt int `json:"total_cnt"`
}
func (self *SSecurityGroupRef) Sum() {
self.TotalCnt = self.GuestCnt + self.AdminGuestCnt + self.RdsCnt + self.RedisCnt + self.LoadbalancerCnt
self.TotalCnt = self.GuestCnt + self.AdminGuestCnt + self.RdsCnt + self.RedisCnt + self.LoadbalancerCnt + self.GuestNicCnt
}
type SecurityGroupSyncstatusInput struct {

View File

@@ -18,6 +18,12 @@ import (
"yunion.io/x/onecloud/pkg/apis"
)
const (
SERVER_SKU_PROJECT_SRC_KEY = "project_src"
SERVER_SKU_PROJECT_SRC_VALUE_LOCAL = "local"
)
type ServerSkuCreateInput struct {
apis.EnabledStatusStandaloneResourceCreateInput

View File

@@ -36,6 +36,8 @@ type SnapshotCreateInput struct {
Location string `json:"location"`
// swagger:ignore
Size int `json:"size"`
// swagger:ingore
VirtualSize int `json:"virtual_size"`
// swagger:ignore
DiskType string `json:"disk_type"`
// swagger:ignore

View File

@@ -21,4 +21,7 @@ const (
WIRE_STATUS_READY_DEPRECATED = "ready"
WIRE_STATUS_MERGE_NETWORK = "merge_network"
WIRE_STATUS_MERGE_NETWORK_FAILED = "merge_network_failed"
DEFAULT_HOST_LOCAL_WIRE_NAME = "hostlocal"
DEFAULT_HOST_LOCAL_WIRE_ID = "__host_local__"
)

View File

@@ -54,6 +54,20 @@ type SAccessGroupRule struct {
UserAccessType string `json:"user_access_type"`
}
// SAiGateway is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SAiGateway.
type SAiGateway struct {
apis.SVirtualResourceBase
apis.SExternalizedResourceBase
SManagedResourceBase
Authentication bool `json:"authentication"`
CacheInvalidateOnUpdate bool `json:"cache_invalidate_on_update"`
CacheTTL int `json:"cache_ttl"`
CollectLogs bool `json:"collect_logs"`
RateLimitingInterval int `json:"rate_limiting_interval"`
RateLimitingLimit int `json:"rate_limiting_limit"`
RateLimitingTechnique string `json:"rate_limiting_technique"`
}
// SApp is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SApp.
type SApp struct {
apis.SVirtualResourceBase
@@ -105,13 +119,20 @@ type SBaremetalagent struct {
DisableImageCache bool `json:"disable_image_cache"`
}
// SBillingChargeTypeBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SBillingChargeTypeBase.
type SBillingChargeTypeBase struct {
// 计费类型: 流量、带宽
// example: bandwidth
ChargeType string `json:"charge_type"`
}
// SBillingResourceBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SBillingResourceBase.
type SBillingResourceBase struct {
// 计费类型, 按量、包年包月
// example: postpaid
BillingType string `json:"billing_type"`
// 过期时间
SBillingTypeBase
// 包年包月到期时间
ExpiredAt time.Time `json:"expired_at"`
// 到期释放时间
ReleaseAt time.Time `json:"release_at"`
// 计费周期
BillingCycle string `json:"billing_cycle"`
// 是否自动续费
@@ -120,11 +141,16 @@ type SBillingResourceBase struct {
// SBillingResourceCheck is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SBillingResourceCheck.
type SBillingResourceCheck struct {
apis.SResourceBase
ResourceId string `json:"resource_id"`
apis.SVirtualResourceBase
SBillingResourceBase
ResourceType string `json:"resource_type"`
AdvanceDays int `json:"advance_days"`
NotifyNumber int `json:"notify_number"`
}
// SBillingTypeBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SBillingTypeBase.
type SBillingTypeBase struct {
// 计费类型, 按量、包年包月
// example: prepaid, postpaid
BillingType string `json:"billing_type"`
}
// SBucket is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SBucket.
@@ -171,6 +197,16 @@ type SCDNDomain struct {
Referer *cloudprovider.SCDNReferer `json:"referer"`
// 浏览器缓存配置
MaxAge *cloudprovider.SCDNMaxAge `json:"max_age"`
// 是否启用DNSSEC
DNSSECEnabled bool `json:"dnssec_enabled"`
// SSL加密模式
SSLSetting string `json:"ssl_setting"`
// 是否启用HTTPS重写
HTTPSRewrites bool `json:"https_rewrites"`
// 缓存级别
CacheLevel string `json:"cache_level"`
// 浏览器缓存TTL
BrowserCacheTTL int `json:"browser_cache_ttl"`
}
// SCachedimage is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SCachedimage.
@@ -345,6 +381,7 @@ type SCloudregionResourceBase struct {
// SContainer is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SContainer.
type SContainer struct {
apis.SVirtualResourceBase
apis.SExternalizedResourceBase
// GuestId is also the pod id
GuestId string `json:"guest_id"`
// Spec stores all container running options
@@ -550,6 +587,8 @@ type SDisk struct {
SnapshotId string `json:"snapshot_id"`
// 备份Id
BackupId string `json:"backup_id"`
// 设备名称
Device string `json:"device"`
// 文件系统
FsFormat string `json:"fs_format"`
// 文件系统特性
@@ -625,8 +664,11 @@ type SDnsZone struct {
apis.SEnabledResourceBase
apis.SExternalizedResourceBase
SManagedResourceBase
ZoneType string `json:"zone_type"`
ProductType string `json:"product_type"`
NameServers *SNameServers `json:"name_servers"`
OriginalNameServers *SNameServers `json:"original_name_servers"`
ZoneType string `json:"zone_type"`
Registrar string `json:"registrar"`
ProductType string `json:"product_type"`
}
// SDnsZoneResourceBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SDnsZoneResourceBase.
@@ -890,9 +932,10 @@ type SElasticip struct {
AssociateId string `json:"associate_id"`
// 带宽大小
Bandwidth int `json:"bandwidth"`
SBillingChargeTypeBase
// 计费类型: 流量、带宽
// example: bandwidth
ChargeType string `json:"charge_type"`
// ChargeType billing_api.TNetChargeType `width:"64" name:"charge_type" list:"user" create:"required"`
// 线路类型
BgpType string `json:"bgp_type"`
// 是否跟随主机删除而自动释放
@@ -1061,10 +1104,14 @@ type SGuest struct {
QgaStatus string `json:"qga_status"`
// power_states limit in [on, off, unknown]
PowerStates string `json:"power_states"`
// 健康状态, 仅开机中火运行中有效, 目前只支持阿里云
HealthStatus string `json:"health_status"`
// Used for guest rescue
RescueMode bool `json:"rescue_mode"`
// 上次开机时间
LastStartAt time.Time `json:"last_start_at"`
// 资源池,仅vmware指定调度标签时内部使用
ResourcePool string `json:"resource_pool"`
}
// SGuestJointsBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGuestJointsBase.
@@ -1073,6 +1120,43 @@ type SGuestJointsBase struct {
GuestId string `json:"guest_id"`
}
// SGuestNetworkTrafficLog is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGuestNetworkTrafficLog.
type SGuestNetworkTrafficLog struct {
apis.SLogBase
apis.SProjectizedResourceBase
SGuestResourceBase
// IPv4地址
IpAddr string `json:"ip_addr"`
// IPv6地址
Ip6Addr string `json:"ip6_addr"`
RowId int64 `json:"row_id"`
// 下行流量,单位 bytes
RxBytes int64 `json:"rx_bytes"`
// 上行流量,单位 bytes
TxBytes int64 `json:"tx_bytes"`
ReportAt time.Time `json:"report_at"`
State string `json:"state"`
}
// SGuestResourceBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGuestResourceBase.
type SGuestResourceBase struct {
GuestId string `json:"guest_id"`
}
// SGuestScreenDump is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGuestScreenDump.
/* type SGuestScreenDump struct {
apis.SResourceBase
RowId int64 `json:"row_id"`
GuestId string `json:"guest_id"`
Name string `json:"name"`
// s3 config
S3AccessKey string `json:"s3_access_key"`
S3SecretKey string `json:"s3_secret_key"`
S3Endpoint string `json:"s3_endpoint"`
S3BucketName string `json:"s3_bucket_name"`
S3UseSsl bool `json:"s3_use_ssl"`
} */
// SGuestTemplate is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGuestTemplate.
type SGuestTemplate struct {
apis.SSharableVirtualResourceBase
@@ -1154,12 +1238,16 @@ type SGuestnetwork struct {
TeamWith string `json:"team_with"`
// IPv4映射地址当子网属于私有云vpc的时候分配用于访问外网
MappedIpAddr string `json:"mapped_ip_addr"`
// IPv6映射地址当子网属于私有云vpc的时候分配用于访问外网
MappedIp6Addr string `json:"mapped_ip6_addr"`
// 网卡关联的Eip实例
EipId string `json:"eip_id"`
// 是否为缺省路由
IsDefault bool `json:"is_default"`
// 端口映射
PortMappings []*GuestPortMapping `json:"port_mappings"`
SBillingTypeBase
SBillingChargeTypeBase
}
// SGuestsecgroup is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGuestsecgroup.
@@ -1208,6 +1296,8 @@ type SHost struct {
CpuMicrocode string `json:"cpu_microcode"`
// CPU架构
CpuArchitecture string `json:"cpu_architecture"`
// KVM CAP VCPU MAX
KvmCapMaxVcpu int `json:"kvm_cap_max_vcpu"`
// 内存大小,单位Mb
MemSize int `json:"mem_size"`
// 预留内存大小
@@ -1215,7 +1305,8 @@ type SHost struct {
// 内存超分比
MemCmtbound float32 `json:"mem_cmtbound"`
// 页大小
PageSizeKB int `json:"page_size_kb"`
PageSizeKB int `json:"page_size_kb"`
// scheduler cpu-node/numa allocate
EnableNumaAllocate bool `json:"enable_numa_allocate"`
// 存储大小,单位Mb
StorageSize int64 `json:"storage_size"`
@@ -1224,7 +1315,10 @@ type SHost struct {
// 存储驱动类型
StorageDriver string `json:"storage_driver"`
// 存储详情
StorageInfo jsonutils.JSONObject `json:"storage_info"`
StorageInfo jsonutils.JSONObject `json:"storage_info"`
RootPartitionUsedCapacityMb int `json:"root_partition_used_capacity_mb"`
MemoryUsedMb int `json:"memory_used_mb"`
CpuUsagePercent float64 `json:"cpu_usage_percent"`
// IPMI地址
IpmiIp string `json:"ipmi_ip"`
// IPMI详情
@@ -1255,6 +1349,8 @@ type SHost struct {
BootMode string `json:"boot_mode"`
// IPv4地址作为私有云vpc访问外网时的网关
OvnMappedIpAddr string `json:"ovn_mapped_ip_addr"`
// IPv6地址作为私有云vpc访问外网时的网关
OvnMappedIp6Addr string `json:"ovn_mapped_ip6_addr"`
// UEFI详情
UefiInfo jsonutils.JSONObject `json:"uefi_info"`
// 公网Ip地址
@@ -1270,6 +1366,12 @@ type SHostBackupstorage struct {
BackupstorageId string `json:"backupstorage_id"`
}
// SHostDmesgLog is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SHostDmesgLog.
type SHostDmesgLog struct {
apis.SOpsLog
LogLevel string `json:"log_level"`
}
// SHostFile is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SHostFile.
type SHostFile struct {
apis.SInfrasResourceBase
@@ -1309,6 +1411,8 @@ type SHostnetwork struct {
NetworkId string `json:"network_id"`
// IP地址
IpAddr string `json:"ip_addr"`
// IPv6地址
Ip6Addr string `json:"ip6_addr"`
// MAC地址
MacAddr string `json:"mac_addr"`
// VLAN
@@ -1425,7 +1529,7 @@ type SInstanceSnapshot struct {
// 是否保存内存
WithMemory bool `json:"with_memory"`
// 内存文件大小
MemorySizeMB int `json:"memory_size_mb"`
MemorySizeKB int `json:"memory_size_kb"`
// 内存文件所在宿主机
MemoryFileHostId string `json:"memory_file_host_id"`
// 内存文件路径
@@ -1497,6 +1601,10 @@ type SIsolatedDevice struct {
CardPath string `json:"card_path"`
// GPU render path, like /dev/dri/renderDX
RenderPath string `json:"render_path"`
// Nvidia GPU index
Index int `json:"index"`
// Nvidia GPU minor number, parsing from /proc/driver/nvidia/gpus/*/information
DeviceMinor int `json:"device_minor"`
// Is vgpu physical funcion, That means it cannot be attached to guest
// VGPUPhysicalFunction bool `nullable:"true" default:"false" list:"domain" create:"domain_optional"`
// nvidia vgpu config
@@ -1764,7 +1872,9 @@ type SLoadbalancerBackendGroup struct {
apis.SStatusStandaloneResourceBase
apis.SExternalizedResourceBase
SLoadbalancerResourceBase
Type string `json:"type"`
LoadbalancerHealthCheckId string `json:"loadbalancer_health_check_id"`
Scheduler string `json:"scheduler"`
Type string `json:"type"`
}
// SLoadbalancerBackendgroupResourceBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SLoadbalancerBackendgroupResourceBase.
@@ -1813,35 +1923,39 @@ type SLoadbalancerClusterResourceBase struct {
// SLoadbalancerHTTPListener is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SLoadbalancerHTTPListener.
type SLoadbalancerHTTPListener struct {
StickySession string `json:"sticky_session"`
// 会话保持开启状态 on|off
StickySessionType string `json:"sticky_session_type"`
StickySession string `json:"sticky_session"`
// Cookie处理方式 insert(植入cookie)|server(重写cookie)
StickySessionCookie string `json:"sticky_session_cookie"`
StickySessionType string `json:"sticky_session_type"`
// Cookie名称
StickySessionCookieTimeout int `json:"sticky_session_cookie_timeout"`
XForwardedFor bool `json:"xforwarded_for"`
StickySessionCookie string `json:"sticky_session_cookie"`
// 会话超时时间
StickySessionCookieTimeout int `json:"sticky_session_cookie_timeout"`
// 获取客户端真实IP
XForwardedFor bool `json:"xforwarded_for"`
// Gzip数据压缩
Gzip bool `json:"gzip"`
}
// SLoadbalancerHTTPRateLimiter is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SLoadbalancerHTTPRateLimiter.
type SLoadbalancerHTTPRateLimiter struct {
HTTPRequestRate int `json:"http_request_rate"`
// 限定监听接收请示速率
HTTPRequestRate int `json:"http_request_rate"`
// 源IP监听请求最大速率
HTTPRequestRatePerSrc int `json:"http_request_rate_per_src"`
}
// SLoadbalancerHTTPRedirect is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SLoadbalancerHTTPRedirect.
type SLoadbalancerHTTPRedirect struct {
Redirect string `json:"redirect"`
// 跳转类型
RedirectCode int `json:"redirect_code"`
Redirect string `json:"redirect"`
// 跳转HTTP code
RedirectScheme string `json:"redirect_scheme"`
RedirectCode int `json:"redirect_code"`
// 跳转uri scheme
RedirectHost string `json:"redirect_host"`
RedirectScheme string `json:"redirect_scheme"`
// 跳转时变更Host
RedirectHost string `json:"redirect_host"`
// 跳转时变更Path
RedirectPath string `json:"redirect_path"`
}
@@ -1854,23 +1968,40 @@ type SLoadbalancerHTTPSListener struct {
// SLoadbalancerHealthCheck is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SLoadbalancerHealthCheck.
type SLoadbalancerHealthCheck struct {
HealthCheck string `json:"health_check"`
apis.SVirtualResourceBase
apis.SExternalizedResourceBase
SManagedResourceBase
SCloudregionResourceBase
SLoadbalancerHealthChecker
}
// SLoadbalancerHealthChecker is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SLoadbalancerHealthChecker.
type SLoadbalancerHealthChecker struct {
// 健康检查开启状态 on|off
HealthCheckType string `json:"health_check_type"`
HealthCheckDomain string `json:"health_check_domain"`
HealthCheck string `json:"health_check"`
// 健康检查协议 HTTP|TCP
HealthCheckType string `json:"health_check_type"`
// 健康检查域名 yunion.cn
HealthCheckURI string `json:"health_check_uri"`
HealthCheckDomain string `json:"health_check_domain"`
// 健康检查路径 /
HealthCheckURI string `json:"health_check_uri"`
// HTTP正常状态码 http_2xx,http_3xx
HealthCheckHttpCode string `json:"health_check_http_code"`
HealthCheckRise int `json:"health_check_rise"`
// 健康检查方法 GET|POST|HEAD
HealthCheckMethod string `json:"health_check_method"`
// 健康检查端口 80
HealthCheckPort int `json:"health_check_port"`
// 健康检查健康阈值 3秒
HealthCheckFall int `json:"health_check_fall"`
HealthCheckRise int `json:"health_check_rise"`
// 健康检查不健康阈值 15秒
HealthCheckTimeout int `json:"health_check_timeout"`
HealthCheckFall int `json:"health_check_fall"`
// 健康检查超时时间 10秒
HealthCheckInterval int `json:"health_check_interval"`
HealthCheckReq string `json:"health_check_req"`
HealthCheckTimeout int `json:"health_check_timeout"`
// 健康检查间隔时间 5秒
HealthCheckInterval int `json:"health_check_interval"`
// UDP监听健康检查的请求串
HealthCheckReq string `json:"health_check_req"`
// UDP监听健康检查的响应串
HealthCheckExp string `json:"health_check_exp"`
}
@@ -1879,18 +2010,19 @@ type SLoadbalancerListener struct {
apis.SStatusStandaloneResourceBase
apis.SExternalizedResourceBase
SLoadbalancerResourceBase
ListenerType string `json:"listener_type"`
ListenerPort int `json:"listener_port"`
BackendGroupId string `json:"backend_group_id"`
BackendServerPort int `json:"backend_server_port"`
Scheduler string `json:"scheduler"`
SendProxy string `json:"send_proxy"`
ClientRequestTimeout int `json:"client_request_timeout"`
ListenerType string `json:"listener_type"`
ListenerPort int `json:"listener_port"`
BackendGroupId string `json:"backend_group_id"`
BackendServerPort int `json:"backend_server_port"`
Scheduler string `json:"scheduler"`
SendProxy string `json:"send_proxy"`
// 连接请求超时时间
ClientIdleTimeout int `json:"client_idle_timeout"`
ClientRequestTimeout int `json:"client_request_timeout"`
// 连接空闲超时时间
BackendConnectTimeout int `json:"backend_connect_timeout"`
ClientIdleTimeout int `json:"client_idle_timeout"`
// 后端连接超时时间
BackendConnectTimeout int `json:"backend_connect_timeout"`
// 后端连接空闲时间
BackendIdleTimeout int `json:"backend_idle_timeout"`
AclStatus string `json:"acl_status"`
AclType string `json:"acl_type"`
@@ -1900,7 +2032,7 @@ type SLoadbalancerListener struct {
SLoadbalancerUDPListener
SLoadbalancerHTTPListener
SLoadbalancerHTTPSListener
SLoadbalancerHealthCheck
SLoadbalancerHealthChecker
SLoadbalancerHTTPRateLimiter
SLoadbalancerHTTPRedirect
}
@@ -1915,14 +2047,20 @@ type SLoadbalancerListenerResourceBase struct {
type SLoadbalancerListenerRule struct {
apis.SStatusStandaloneResourceBase
apis.SExternalizedResourceBase
SLoadbalancerCertificateResourceBase
SLoadbalancerListenerResourceBase
// 默认转发策略目前只有aws用到其它云都是false
IsDefault bool `json:"is_default"`
IsDefault bool `json:"is_default"`
// 默认后端服务器组
BackendGroupId string `json:"backend_group_id"`
Domain string `json:"domain"`
Path string `json:"path"`
Condition string `json:"condition"`
SLoadbalancerHealthCheck
// 后端服务器组列表
BackendGroups *ListenerRuleBackendGroups `json:"backend_groups"`
// 域名
Domain string `json:"domain"`
Path string `json:"path"`
Condition string `json:"condition"`
RedirectPool *ListenerRuleRedirectPool `json:"redirect_pool"`
SLoadbalancerHealthChecker
// 目前只有腾讯云HTTP、HTTPS类型的健康检查是和规则绑定的。
SLoadbalancerHTTPRateLimiter
SLoadbalancerHTTPRedirect
@@ -2215,10 +2353,7 @@ type SNetwork struct {
GuestIp6Mask byte `json:"guest_ip6_mask"`
// IPv6网关
GuestGateway6 string `json:"guest_gateway6"`
// IPv6域名服务器
GuestDns6 string `json:"guest_dns6"`
GuestDomain6 string `json:"guest_domain6"`
VlanId int `json:"vlan_id"`
VlanId int `json:"vlan_id"`
// 服务器类型
// example: server
ServerType string `json:"server_type"`
@@ -2392,6 +2527,7 @@ type SSSLCertificate struct {
apis.SVirtualResourceBase
apis.SExternalizedResourceBase
SManagedResourceBase
SDnsZoneResourceBase
SDeletePreventableResourceBase
Sans string `json:"sans"`
StartDate time.Time `json:"start_date"`
@@ -2399,7 +2535,6 @@ type SSSLCertificate struct {
Common string `json:"common"`
Country string `json:"country"`
Issuer string `json:"issuer"`
Expired bool `json:"expired"`
IsUpload bool `json:"is_upload"`
EndDate time.Time `json:"end_date"`
Fingerprint string `json:"fingerprint"`
@@ -2664,10 +2799,18 @@ type SSnapshotPolicy struct {
apis.SExternalizedResourceBase
SManagedResourceBase
SCloudregionResourceBase
// 快照保留天数, -1: 表示永久保留
RetentionDays int `json:"retention_days"`
// 1~7, 1 is Monday
// 快照保留数量, 优先级高于 RetentionDays, 且仅对本地IDC资源有效
RetentionCount int `json:"retention_count"`
// 快照类型, 目前支持 disk, server
// disk: 自动磁盘快照策略, 只能关联磁盘
// server: 自动主机快照策略, 只能关联主机
Type string `json:"type"`
// 1~7, 1 is Monday, 7 is Sunday
RepeatWeekdays []int `json:"repeat_weekdays"`
// 0~23
// 0~23, 每小时
// 创建自动快照策略的时间必须与 RepeatWeekdays 对应的创建周期相一致
TimePoints []int `json:"time_points"`
}
@@ -2678,6 +2821,14 @@ type SSnapshotPolicyDisk struct {
SDiskResourceBase
}
// SSnapshotPolicyResource is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SSnapshotPolicyResource.
type SSnapshotPolicyResource struct {
apis.SResourceBase
SnapshotpolicyId string `json:"snapshotpolicy_id"`
ResourceId string `json:"resource_id"`
ResourceType string `json:"resource_type"`
}
// SStorage is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SStorage.
type SStorage struct {
apis.SEnabledStatusInfrasResourceBase
@@ -2876,7 +3027,7 @@ type SWafRegexSet struct {
// SWafRule is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SWafRule.
type SWafRule struct {
apis.SStatusStandaloneResourceBase
apis.SEnabledStatusStandaloneResourceBase
apis.SExternalizedResourceBase
// 规则优先级
Priority int `json:"priority"`
@@ -2884,6 +3035,12 @@ type SWafRule struct {
Action *cloudprovider.DefaultAction `json:"action"`
// 条件
StatementConditon string `json:"statement_conditon"`
// 条件表达式
Expression string `json:"expression"`
// 规则类型
Type string `json:"type"`
// 规则配置
Config jsonutils.JSONObject `json:"config"`
// 规则组的id
WafRuleGroupId string `json:"waf_rule_group_id"`
// 所属waf实例id

View File

@@ -151,14 +151,16 @@ const (
const (
OS_ARCH_ALL = "all"
OS_ARCH_X86 = "x86"
OS_ARCH_ARM = "arm"
OS_ARCH_X86 = "x86"
OS_ARCH_ARM = "arm"
OS_ARCH_RISCV = "riscv"
OS_ARCH_I386 = "i386"
OS_ARCH_X86_32 = "x86_32"
OS_ARCH_X86_64 = "x86_64"
OS_ARCH_AARCH32 = "aarch32"
OS_ARCH_AARCH64 = "aarch64"
OS_ARCH_RISCV32 = "riscv32"
OS_ARCH_RISCV64 = "riscv64"
)
@@ -174,6 +176,11 @@ var (
OS_ARCH_AARCH32,
OS_ARCH_AARCH64,
}
ARCH_RISCV = []string{
OS_ARCH_RISCV,
OS_ARCH_RISCV32,
OS_ARCH_RISCV64,
}
)
func IsARM(osArch string) bool {
@@ -184,6 +191,10 @@ func IsX86(osArch string) bool {
return utils.IsInStringArray(osArch, ARCH_X86)
}
func IsRISCV(osArch string) bool {
return utils.IsInStringArray(osArch, ARCH_RISCV)
}
func IsIllegalSearchDomain(domain string) bool {
switch domain {
case "cloud.onecloud.io":
@@ -202,5 +213,8 @@ func IsSameArch(arch1, arch2 string) bool {
if IsX86(arch1) && IsX86(arch2) {
return true
}
if IsRISCV(arch1) && IsRISCV(arch2) {
return true
}
return false
}

View File

@@ -22,8 +22,18 @@ import (
)
type ContainerKeyValue struct {
Key string `json:"key"`
Value string `json:"value"`
Key string `json:"key"`
Value string `json:"value"`
ValueFrom *ContainerValueSource `json:"value_from"`
}
type ContainerValueSource struct {
Credential *ContainerValueSourceCredential `json:"credential"`
}
type ContainerValueSourceCredential struct {
Id string `json:"id"`
Key string `json:"key"`
}
type ContainerLifecyleHandlerType string
@@ -272,6 +282,22 @@ type ContainerVolumeMountDiskPostImageOverlay struct {
PathMap map[string]string `json:"path_map"`
// 宿主机底层目录映射, key 为 PathMap 的 keyvalue 为 overlay lower 格式,多目录以 ":" 分隔
HostLowerMap map[string]*HostLowerPath `json:"host_lower_map"`
UpperConfig *PostOverlayUpperConfig `json:"upper_config"`
}
type PostOverlayUpperConfigType string
const (
PostOverlayUpperConfigTypeDisk PostOverlayUpperConfigType = "disk"
)
type PostOverlayUpperConfigDisk struct {
SubPath string `json:"sub_path"`
}
type PostOverlayUpperConfig struct {
Type PostOverlayUpperConfigType `json:"type"`
Disk *PostOverlayUpperConfigDisk `json:"disk"`
}
type ContainerVolumeMountDiskPostImageOverlayUnpacker ContainerVolumeMountDiskPostImageOverlay
@@ -285,6 +311,7 @@ func (ov *ContainerVolumeMountDiskPostImageOverlay) UnmarshalJSON(data []byte) e
// 防止 PathMap 被合并,总是用 Unarmshal data 里面的 path_map
ov.PathMap = nov.PathMap
ov.HostLowerMap = nov.HostLowerMap
ov.UpperConfig = nov.UpperConfig
return nil
}
@@ -298,6 +325,8 @@ const (
type ContainerVolumeMountDiskPostOverlay struct {
// 宿主机底层目录
HostLowerDir []string `json:"host_lower_dir"`
// 宿主机上层目录
HostUpperDir string `json:"host_upper_dir"`
// 合并后要挂载到容器的目录
ContainerTargetDir string `json:"container_target_dir"`
Image *ContainerVolumeMountDiskPostImageOverlay `json:"image"`

View File

@@ -73,6 +73,7 @@ type ContainerVolumeMount struct {
type ContainerSpec struct {
apis.ContainerSpec
ImageCredentialToken string `json:"image_credential_token"`
SecretCredentials map[string]string `json:"secret_credentials"`
Rootfs *ContainerRootfs `json:"rootfs"`
VolumeMounts []*ContainerVolumeMount `json:"volume_mounts"`
Devices []*ContainerDevice `json:"devices"`

View File

@@ -19,9 +19,17 @@ type GuestMemorySnapshotRequest struct {
}
type GuestMemorySnapshotResponse struct {
// 内存快照文件路径
MemorySnapshotPath string `json:"memory_snapshot_path"`
SizeMB int64 `json:"size_mb"`
Checksum string `json:"checksum"`
// @deprecated
// swagger:ignore
SizeMB int64 `json:"size_mb" yunion-deprecated-by:"size_kb"`
// 内存快照文件大小, KB
SizeKB int64 `json:"size_kb"`
// 内存快照文件校验和
Checksum string `json:"checksum"`
}
type GuestMemorySnapshotDeleteRequest struct {

View File

@@ -27,6 +27,7 @@ const (
OIDC_CREDENTIAL_TYPE = "oidc"
ENCRYPT_KEY_TYPE = "enc_key"
CONTAINER_IMAGE_TYPE = "container_image"
CONTAINER_SECRET_TYPE = "container_secret"
)
type SAccessKeySecretBlob struct {

View File

@@ -31,6 +31,13 @@ type CredentialUpdateInput struct {
// enabled
Enabled *bool `json:"enabled"`
// 更新 blob 内容(明文,服务端加密后写入 encrypted_blob
Blob string `json:"blob"`
// 由 ValidateUpdateData 在提供 blob 时填充,不允许客户端直接传入
EncryptedBlob string `json:"encrypted_blob"`
KeyHash string `json:"key_hash"`
}
type CredentialCreateInput struct {

View File

@@ -355,10 +355,16 @@ type SUser struct {
// 显示名称,用户登录后显示在右上角菜单入口
Displayname string `json:"displayname"`
// 上次登录时间
// deprecated
// swagger:ignore
LastActiveAt time.Time `json:"last_active_at"`
// 上次用户登录IP
// deprecated
// swagger:ignore
LastLoginIp string `json:"last_login_ip"`
// 上次用户登录方式可能值有webweb控制台cli命令行climcAPIapi
// deprecated
// swagger:ignore
LastLoginSource string `json:"last_login_source"`
// 是否为系统账号,系统账号不会检查密码复杂度,默认不在列表显示
IsSystemAccount *bool `json:"is_system_account,omitempty"`
@@ -370,6 +376,8 @@ type SUser struct {
EnableMfa *bool `json:"enable_mfa,omitempty"`
// 用户的默认语言设置默认是zh_CN
Lang string `json:"lang"`
// 过期时间
ExpiredAt time.Time `json:"expired_at"`
}
// SUserOption is an autogenerated struct via yunion.io/x/onecloud/pkg/keystone/models.SUserOption.

View File

@@ -60,6 +60,8 @@ const (
IMAGE_OS_DISTRO = "os_distribution"
IMAGE_OS_TYPE = "os_type"
IMAGE_OS_VERSION = "os_version"
IMAGE_OS_LANGUAGE = "os_language"
IMAGE_OS_CURRENT_VERSION = "os_current_version"
IMAGE_DISK_FORMAT = "disk_format"
IMAGE_UEFI_SUPPORT = "uefi_support"
IMAGE_BIOS_SUPPORT = "bios_support"

View File

@@ -9,14 +9,20 @@ import (
type LLMImageType string
const (
LLM_IMAGE_TYPE_OLLAMA LLMImageType = "ollama"
LLM_IMAGE_TYPE_DIFY LLMImageType = "dify"
LLM_IMAGE_TYPE_OLLAMA LLMImageType = "ollama"
LLM_IMAGE_TYPE_VLLM LLMImageType = "vllm"
LLM_IMAGE_TYPE_DIFY LLMImageType = "dify"
LLM_IMAGE_TYPE_COMFYUI LLMImageType = "comfyui"
LLM_IMAGE_TYPE_OPENCLAW LLMImageType = "openclaw"
)
var (
LLM_IMAGE_TYPES = sets.NewString(
string(LLM_IMAGE_TYPE_OLLAMA),
string(LLM_IMAGE_TYPE_VLLM),
string(LLM_IMAGE_TYPE_DIFY),
string(LLM_IMAGE_TYPE_COMFYUI),
string(LLM_IMAGE_TYPE_OPENCLAW),
)
)

View File

@@ -4,6 +4,7 @@ import (
"time"
"yunion.io/x/onecloud/pkg/apis"
computeapi "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
)
@@ -47,15 +48,17 @@ type LLMBaseListDetails struct {
type MountedModelInfo struct {
FullName string `json:"fullname"` // 模型全名,如: qwen3:8b
Id string `json:"id"` // 模型ID如: 500a1f067a9f
ModelId string `json:"model_id"` // 模型ID如: 500a1f067a9f
Id string `json:"id"` // 秒装包的 ID 主键
}
type LLMListDetails struct {
LLMBaseListDetails
LLMSku string
LLMSku string `json:"llm_sku"`
LLMType string `json:"llm_type"`
MountedModels []MountedModelInfo
MountedModels []MountedModelInfo `json:"mounted_models"`
}
type LLMBaseCreateInput struct {
@@ -64,8 +67,7 @@ type LLMBaseCreateInput struct {
PreferHost string `json:"prefer_host"`
AutoStart bool `json:"auto_start"`
NetworkType string `json:"network_type"`
NetworkId string `json:"network_id"`
Nets []*computeapi.NetworkConfig `json:"nets"`
BandwidthMB int `json:"bandwidth_mb"`
DebugMode bool `json:"debug_mode"`
@@ -75,8 +77,17 @@ type LLMBaseCreateInput struct {
type LLMCreateInput struct {
LLMBaseCreateInput
LLMSkuId string
LLMImageId string
LLMSkuId string `json:"llm_sku_id"`
LLMImageId string `json:"llm_image_id"`
LLMSpec *LLMSpec `json:"llm_spec,omitempty"`
}
// LLMUpdateInput is the request body for updating an LLM (including llm_spec overrides).
type LLMUpdateInput struct {
apis.VirtualResourceBaseUpdateInput
InstantModelQuotaGb *int `json:"instant_model_quota_gb,omitempty"`
LLMSpec *LLMSpec `json:"llm_spec,omitempty"`
}
type LLMBaseListInput struct {
@@ -99,8 +110,10 @@ type LLMBaseListInput struct {
type LLMListInput struct {
LLMBaseListInput
LLMSku string `json:"llm_sku"`
LLMImage string `json:"llm_image"`
LLMSku string `json:"llm_sku"`
LLMImage string `json:"llm_image"`
LLMTypes []string `json:"llm_types"` // filter by linked SKU's llm_types (e.g. [dify, openclaw])
LLMType string `json:"llm_type"` // filter by linked SKU's llm_type (e.g. dify)
}
type ModelInfo struct {
@@ -171,3 +184,56 @@ func (info LLMMountDirInfo) ToOverlay() apis.ContainerVolumeMountDiskPostOverlay
type LLMSyncStatusInput struct {
}
type LLMRestartInput struct {
}
type LLMRestartTaskInput struct {
LLMId string
ResetDataDisk bool
LLMStatus string
SkuId string
ImageId string
BackupName string
Property []string
RebindVolumeId string
OnlyStop bool
}
type LLMChangeNetworkInput struct {
BandwidthMb int `json:"bandwidth_mb"`
WhitePrefxies []string `json:"white_prefxies"`
}
type LLMVolumeInput struct {
LLMId string `json:"llm_id"`
VolumeId string `json:"volume_id"`
AutoStart bool `json:"auto_start"`
}
type LLMAccessUrlInfo struct {
LoginUrl string `json:"login_url"`
PublicUrl string `json:"public_url"`
InternalUrl string `json:"internal_url"`
}
// LLMAccessInfo is the response for GET /llms/<id>/login-info: login URL and credentials.
type LLMAccessInfo struct {
LLMAccessUrlInfo
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
Extra map[string]string `json:"extra,omitempty"`
}
type LLMProviderModelsInput struct {
URL string `json:"url"`
ProviderType LLMClientType `json:"provider_type"`
}
type LLMProviderModelsOutput struct {
ProviderType LLMClientType `json:"provider_type"`
URL string `json:"url"`
Models []string `json:"models"`
}

View File

@@ -33,15 +33,39 @@ const (
/* 运行 */
LLM_STATUS_RUNNING = "running"
/* 开始解绑磁盘 */
LLM_STATUS_START_UNBIND = "start_unbind"
/* 正在解绑磁盘 */
LLM_STATUS_UNBINDING = "unbinding"
/* 解绑磁盘失败 */
LLM_STATUS_UNBIND_FAIL = "unbind_fail"
/* 开始挂载磁盘 */
LLM_STATUS_START_BIND = "start_bind"
/* 正在挂载磁盘 */
LLM_STATUS_BINDING = "binding"
/* 挂载磁盘失败 */
LLM_STATUS_BIND_FAIL = "bind_fail"
/* 开始重启 */
LLM_STATUS_START_RESTART = "start_restart"
/* 正在重启 */
LLM_STATUS_RESTARTING = "restarting"
/* 重启失败 */
LLM_STATUS_RESTART_FAILED = "restart_fail"
/* 开始删除 */
LLM_STATUS_START_DELETE = "start_delete"
/* 正在删除 */
LLM_STATUS_DELETING = "deleting"
/* 删除失败 */
LLM_STATUS_DELETE_FAILED = "delete_fail"
/* 删除 */
LLM_STATUS_DELETED = "deleted"
LLM_LLM_STATUS_NO_SERVER = "no_server"
LLM_LLM_STATUS_NO_CONTAINER = "no_container"
LLM_STATUS_START_DELETE = "start_delete"
LLM_STATUS_DELETING = "deleting"
LLM_STATUS_DELETE_FAILED = "delete_fail"
)
type TQuickModelMethod string
@@ -55,3 +79,5 @@ const (
const (
LLM_PROBE_INSTANT_MODEl_INTERVAL_SECOND = 120 // 2 minute
)
type LLMEnvKey string

View File

@@ -9,12 +9,20 @@ import (
type LLMContainerType string
const (
LLM_CONTAINER_OLLAMA LLMContainerType = "ollama"
LLM_CONTAINER_OLLAMA LLMContainerType = "ollama"
LLM_CONTAINER_VLLM LLMContainerType = "vllm"
LLM_CONTAINER_DIFY LLMContainerType = "dify"
LLM_CONTAINER_COMFYUI LLMContainerType = "comfyui"
LLM_CONTAINER_OPENCLAW LLMContainerType = "openclaw"
)
var (
LLM_CONTAINER_TYPES = sets.NewString(
string(LLM_CONTAINER_OLLAMA),
string(LLM_CONTAINER_VLLM),
string(LLM_CONTAINER_DIFY),
string(LLM_CONTAINER_COMFYUI),
string(LLM_CONTAINER_OPENCLAW),
)
)

154
pkg/apis/llm/llm_spec.go Normal file
View File

@@ -0,0 +1,154 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package llm
import (
"reflect"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/gotypes"
)
// LLMSpec is the flat spec for LLM SKU: optional ollama/vllm/dify payload. Type is on LLMSku.LLMType.
type LLMSpec struct {
Ollama *LLMSpecOllama `json:"ollama,omitempty"`
Vllm *LLMSpecVllm `json:"vllm,omitempty"`
Dify *LLMSpecDify `json:"dify,omitempty"`
ComfyUI *LLMSpecComfyUI `json:"comfyui,omitempty"`
OpenClaw *LLMSpecOpenClaw `json:"openclaw,omitempty"`
}
func (s *LLMSpec) String() string {
return jsonutils.Marshal(s).String()
}
func (s *LLMSpec) IsZero() bool {
if s == nil {
return true
}
return s.Ollama == nil && s.Vllm == nil && s.Dify == nil && s.ComfyUI == nil && s.OpenClaw == nil
}
// LLMSpecOllama holds type-specific fields for ollama SKUs.
type LLMSpecOllama struct {
}
func (s *LLMSpecOllama) String() string {
return jsonutils.Marshal(s).String()
}
func (s *LLMSpecOllama) IsZero() bool {
if s == nil {
return true
}
return false
}
// LLMSpecVllm holds type-specific fields for vllm SKUs (includes PreferredModel).
type LLMSpecVllm struct {
PreferredModel string `json:"preferred_model"`
CustomizedArgs []*VllmCustomizedArg `json:"customized_args,omitempty"`
}
type VllmCustomizedArg struct {
Key string `json:"key"`
Value string `json:"value"`
}
func (s *LLMSpecVllm) String() string {
return jsonutils.Marshal(s).String()
}
func (s *LLMSpecVllm) IsZero() bool {
if s == nil {
return true
}
return s.PreferredModel == "" && len(s.CustomizedArgs) == 0
}
// LLMSpecDify holds type-specific fields for Dify SKUs (multiple image ids + customized envs).
type LLMSpecDify struct {
PostgresImageId string `json:"postgres_image_id"`
RedisImageId string `json:"redis_image_id"`
NginxImageId string `json:"nginx_image_id"`
DifyApiImageId string `json:"dify_api_image_id"`
DifyPluginImageId string `json:"dify_plugin_image_id"`
DifyWebImageId string `json:"dify_web_image_id"`
DifySandboxImageId string `json:"dify_sandbox_image_id"`
DifySSRFImageId string `json:"dify_ssrf_image_id"`
DifyWeaviateImageId string `json:"dify_weaviate_image_id"`
CustomizedEnvs []*DifyCustomizedEnv `json:"customized_envs,omitempty"`
}
func (s *LLMSpecDify) String() string {
return jsonutils.Marshal(s).String()
}
func (s *LLMSpecDify) IsZero() bool {
if s == nil {
return true
}
return s.PostgresImageId == "" && s.RedisImageId == "" && s.NginxImageId == "" &&
s.DifyApiImageId == "" && s.DifyPluginImageId == "" && s.DifyWebImageId == "" &&
s.DifySandboxImageId == "" && s.DifySSRFImageId == "" && s.DifyWeaviateImageId == "" &&
len(s.CustomizedEnvs) == 0
}
type LLMSpecComfyUI struct {
}
func (s *LLMSpecComfyUI) String() string {
return jsonutils.Marshal(s).String()
}
func (s *LLMSpecComfyUI) IsZero() bool {
if s == nil {
return true
}
return false
}
type LLMSpecCredential struct {
Id string `json:"id"`
ExportKeys []string `json:"export_keys"`
}
type LLMSpecOpenClawProvider struct {
Name string `json:"name"`
Credential *LLMSpecCredential `json:"credential"`
}
type LLMSpecOpenClawChannel struct {
Name string `json:"name"`
Credential *LLMSpecCredential `json:"credential"`
}
type LLMSpecOpenClaw struct {
Providers []*LLMSpecOpenClawProvider `json:"providers"`
Channels []*LLMSpecOpenClawChannel `json:"channels"`
WorkspaceTemplates *LLMSpecOpenClawWorkspaceTemplates `json:"workspace_templates"`
}
type LLMSpecOpenClawWorkspaceTemplates struct {
AgentsMD string `json:"agents_md"`
SoulMD string `json:"soul_md"`
UserMD string `json:"user_md"`
}
func init() {
gotypes.RegisterSerializable(reflect.TypeOf(new(LLMSpec)), func() gotypes.ISerializable {
return new(LLMSpec)
})
}

View File

@@ -60,36 +60,40 @@ func IsLLMClientType(t string) bool {
type MCPAgentListInput struct {
apis.SharableVirtualResourceListInput
LLMDriver string `json:"llm_driver"`
LLMDriver string `json:"llm_driver"`
DefaultAgent *bool `json:"default_agent,omitempty" help:"filter by default agent (true to get the default one)"`
}
type MCPAgentCreateInput struct {
apis.SharableVirtualResourceCreateInput
LLMId string `json:"llm_id" help:"LLM 实例 ID如果提供则自动获取 llm_url"`
LLMUrl string `json:"llm_url" help:"后端大模型的 base 请求地址"`
LLMDriver string `json:"llm_driver" help:"使用的大模型驱动,可以是 ollama 或 openai"`
Model string `json:"model" help:"使用的模型名称"`
ApiKey string `json:"api_key" help:"在 llm_driver 中需要用到的认证"`
McpServer string `json:"mcp_server" help:"mcp 服务器的后端地址"`
LLMId string `json:"llm_id" help:"LLM 实例 ID如果提供则自动获取 llm_url"`
LLMUrl string `json:"llm_url" help:"后端大模型的 base 请求地址"`
LLMDriver string `json:"llm_driver" help:"使用的大模型驱动,可以是 ollama 或 openai"`
Model string `json:"model" help:"使用的模型名称"`
ApiKey string `json:"api_key" help:"在 llm_driver 中需要用到的认证"`
McpServer string `json:"mcp_server" help:"mcp 服务器的后端地址"`
DefaultAgent *bool `json:"default_agent,omitempty" help:"set as default MCP agent (only one can be true globally)"`
}
type MCPAgentUpdateInput struct {
apis.SharableVirtualResourceCreateInput
LLMId *string `json:"llm_id,omitempty" help:"LLM 实例 ID如果提供则自动获取 llm_url"`
LLMUrl *string `json:"llm_url,omitempty" help:"后端大模型的 base 请求地址"`
LLMDriver *string `json:"llm_driver,omitempty" help:"使用的大模型驱动,可以是 ollama 或 openai"`
Model *string `json:"model,omitempty" help:"使用的模型名称"`
ApiKey *string `json:"api_key,omitempty" help:"在 llm_driver 中需要用到的认证"`
McpServer *string `json:"mcp_server,omitempty" help:"mcp 服务器的后端地址"`
LLMId *string `json:"llm_id,omitempty" help:"LLM 实例 ID如果提供则自动获取 llm_url"`
LLMUrl *string `json:"llm_url,omitempty" help:"后端大模型的 base 请求地址"`
LLMDriver *string `json:"llm_driver,omitempty" help:"使用的大模型驱动,可以是 ollama 或 openai"`
Model *string `json:"model,omitempty" help:"使用的模型名称"`
ApiKey *string `json:"api_key,omitempty" help:"在 llm_driver 中需要用到的认证"`
McpServer *string `json:"mcp_server,omitempty" help:"mcp 服务器的后端地址"`
DefaultAgent *bool `json:"default_agent,omitempty" help:"set as default MCP agent (only one can be true globally)"`
}
type MCPAgentDetails struct {
apis.SharableVirtualResourceDetails
LLMId string `json:"llm_id"`
LLMName string `json:"llm_name"`
LLMId string `json:"llm_id"`
LLMName string `json:"llm_name"`
DefaultAgent bool `json:"default_agent"`
}
type LLMToolRequestInput struct {
@@ -98,7 +102,14 @@ type LLMToolRequestInput struct {
}
type LLMMCPAgentRequestInput struct {
Message string `json:"message" help:"message to send to MCP agent"`
Message string `json:"message" help:"message to send to MCP agent"`
History []MCPAgentChatMessage `json:"history" help:"chat history"`
}
type MCPAgentChatMessage struct {
Role string `json:"role"`
Content string `json:"content"`
// ToolCalls []MCPAgentToolCallRecord `json:"tool_calls,omitempty"`
}
// MCPAgentResponse 表示 Agent 响应
@@ -115,6 +126,7 @@ type MCPAgentResponse struct {
// MCPAgentToolCallRecord 记录工具调用
type MCPAgentToolCallRecord struct {
Id string `json:"id,omitempty"`
ToolName string `json:"tool_name"`
Arguments map[string]interface{} `json:"arguments"`
Result string `json:"result"`

View File

@@ -17,10 +17,10 @@ const (
LLM_OLLAMA_HOST_MANIFESTS_DIR = "/manifests"
LLM_OLLAMA_CACHE_DIR = "/.llm_ollama_cache"
LLM_OLLAMA_CACHE_MOUNT_PATH = "/usr/local"
LLM_OLLAMA_LIBRARY_BASE_URL = `https://registry.ollama.ai/v2/library/%s`
LLM_OLLAMA_LIBRARY_BASE_URL = `https://registry.ollama.ai/v2/%s`
LLM_OLLAMA_BASE_PATH = "/root/.ollama/models"
LLM_OLLAMA_BLOBS_DIR = "/blobs"
LLM_OLLAMA_MANIFESTS_BASE_PATH = "/manifests/registry.ollama.ai/library"
LLM_OLLAMA_MANIFESTS_BASE_PATH = "/manifests/registry.ollama.ai"
)
const (

46
pkg/apis/llm/openclaw.go Normal file
View File

@@ -0,0 +1,46 @@
package llm
const (
LLM_OPENCLAW_GATEWAY_TOKEN = LLMEnvKey("OPENCLAW_GATEWAY_TOKEN")
LLM_OPENCLAW_AUTH_USERNAME = LLMEnvKey("AUTH_USERNAME")
LLM_OPENCLAW_CUSTOM_USER = LLMEnvKey("CUSTOM_USER")
LLM_OPENCLAW_AUTH_PASSWORD = LLMEnvKey("AUTH_PASSWORD")
LLM_OPENCLAW_PASSWORD = LLMEnvKey("PASSWORD")
LLM_OPENCLAW_CUSTOM_CONFIG = LLMEnvKey("OPENCLAW_CUSTOM_CONFIG")
LLM_OPENCLAW_CUSTOM_CONFIG_FILE = "/opt/openclaw_base_config.json"
// templates
LLM_OPENCLAW_TEMPLATE_AGENTS_MD_B64 = LLMEnvKey("OPENCLAW_TEMPLATE_AGENTS_MD_B64")
LLM_OPENCLAW_TEMPLATE_SOUL_MD_B64 = LLMEnvKey("OPENCLAW_TEMPLATE_SOUL_MD_B64")
LLM_OPENCLAW_TEMPLATE_USER_MD_B64 = LLMEnvKey("OPENCLAW_TEMPLATE_USER_MD_B64")
)
const (
LLM_OPENCLAW_DEFAULT_PORT = 3001
)
type OpenClawConfig struct {
Browser *OpenClawConfigBrowser `json:"browser"`
Agents *OpenClawConfigAgents `json:"agents"`
}
type OpenClawConfigAgents map[string]*OpenClawConfigAgent
type OpenClawConfigAgent struct {
Model *OpenClawConfigAgentModel `json:"model"`
ImageModel *OpenClawConfigAgentModel `json:"imageModel"`
Workspace string `json:"workspace"`
}
type OpenClawConfigAgentModel struct {
Primary string `json:"primary"`
}
// ref: https://docs.openclaw.ai/tools/browser#configuration
type OpenClawConfigBrowser struct {
Enabled bool `json:"enabled"`
SSRFPolicy map[string]interface{} `json:"ssrfPolicy"`
DefaultProfile string `json:"defaultProfile"`
Headless bool `json:"headless"`
NoSandbox bool `json:"noSandbox"`
}

View File

@@ -116,7 +116,14 @@ type LLMSkuDetails struct {
ImageLabel string
ImageName string
MountedModelDetails []MountedModelInfo `json:"mounted_model_details"`
Template string `json:"template"`
// LLMType 为 SKU 类型ollama/vllm/dify与 llm_spec 一起带出
LLMType string `json:"llm_type"`
// LLMSpec 从 SKU 持久化字段带出,保证 list/show 与 create 一致
LLMSpec *LLMSpec `json:"llm_spec,omitempty"`
}
type MountedAppResourceDetails struct {
@@ -161,23 +168,33 @@ type LLMSkuListInput struct {
apis.SharableVirtualResourceListInput
MountedModelResourceListInput
LLMType string `json:"llm_type"`
LLMType string `json:"llm_type"`
LLMTypes []string `json:"llm_types"`
}
type LLMSkuCreateInput struct {
LLMSKuBaseCreateInput
MountedModelResourceCreateInput
LLMImageId string `json:"llm_image_id"`
LLMType string `json:"llm_type"`
LLMModelName string `json:"llm_model_name"`
LLMImageId string `json:"llm_image_id"`
LLMType string `json:"llm_type"`
// LLMSpec:
// - ollama/vllm: backend builds llm_spec from llm_image_id + mounted_models; for vllm preferred model should be set in llm_spec.vllm.preferred_model.
// - dify: client must send llm_spec with type "dify" and dify payload.
LLMSpec *LLMSpec `json:"llm_spec,omitempty"`
}
type LLMSkuUpdateInput struct {
LLMSkuBaseUpdateInput
MountedModelResourceUpdateInput
LLMImageId string `json:"llm_image_id"`
LLMModelName string `json:"llm_model_name"`
LLMImageId string `json:"llm_image_id"`
// LLMSpec:
// - dify: send full spec to update image ids.
// - ollama/vllm: backend may build from llm_image_id/mounted_models; for vllm preferred model should be set in llm_spec.vllm.preferred_model.
LLMSpec *LLMSpec `json:"llm_spec,omitempty"`
}
// type LLMModelCloneInput struct {
@@ -188,35 +205,35 @@ type LLMSkuUpdateInput struct {
// Request bool `json:"request"`
// }
type DifySkulListInput struct {
apis.SharableVirtualResourceListInput
MountedModelResourceListInput
}
// type DifySkulListInput struct {
// apis.SharableVirtualResourceListInput
// MountedModelResourceListInput
// }
type DifySkuCreateInput struct {
LLMSKuBaseCreateInput
// type DifySkuCreateInput struct {
// LLMSKuBaseCreateInput
PostgresImageId string `json:"postgres_image_id"`
RedisImageId string `json:"redis_image_id"`
NginxImageId string `json:"nginx_image_id"`
DifyApiImageId string `json:"dify_api_image_id"`
DifyPluginImageId string `json:"dify_plugin_image_id"`
DifyWebImageId string `json:"dify_web_image_id"`
DifySandboxImageId string `json:"dify_sandbox_image_id"`
DifySSRFImageId string `json:"dify_ssrf_image_id"`
DifyWeaviateImageId string `json:"dify_weaviate_image_id"`
}
// PostgresImageId string `json:"postgres_image_id"`
// RedisImageId string `json:"redis_image_id"`
// NginxImageId string `json:"nginx_image_id"`
// DifyApiImageId string `json:"dify_api_image_id"`
// DifyPluginImageId string `json:"dify_plugin_image_id"`
// DifyWebImageId string `json:"dify_web_image_id"`
// DifySandboxImageId string `json:"dify_sandbox_image_id"`
// DifySSRFImageId string `json:"dify_ssrf_image_id"`
// DifyWeaviateImageId string `json:"dify_weaviate_image_id"`
// }
type DifySkuUpdateInput struct {
LLMSkuBaseUpdateInput
// type DifySkuUpdateInput struct {
// LLMSkuBaseUpdateInput
PostgresImageId string `json:"postgres_image_id"`
RedisImageId string `json:"redis_image_id"`
NginxImageId string `json:"nginx_image_id"`
DifyApiImageId string `json:"dify_api_image_id"`
DifyPluginImageId string `json:"dify_plugin_image_id"`
DifyWebImageId string `json:"dify_web_image_id"`
DifySandboxImageId string `json:"dify_sandbox_image_id"`
DifySSRFImageId string `json:"dify_ssrf_image_id"`
DifyWeaviateImageId string `json:"dify_weaviate_image_id"`
}
// PostgresImageId string `json:"postgres_image_id"`
// RedisImageId string `json:"redis_image_id"`
// NginxImageId string `json:"nginx_image_id"`
// DifyApiImageId string `json:"dify_api_image_id"`
// DifyPluginImageId string `json:"dify_plugin_image_id"`
// DifyWebImageId string `json:"dify_web_image_id"`
// DifySandboxImageId string `json:"dify_sandbox_image_id"`
// DifySSRFImageId string `json:"dify_ssrf_image_id"`
// DifyWeaviateImageId string `json:"dify_weaviate_image_id"`
// }

View File

@@ -0,0 +1,17 @@
package llm
import "time"
const (
LLM_VLLM = "vllm"
LLM_VLLM_DEFAULT_PORT = 8000
LLM_VLLM_EXEC_PATH = "python3 -m vllm.entrypoints.openai.api_server"
LLM_VLLM_HF_ENDPOINT = "https://hf-mirror.com"
LLM_VLLM_CACHE_DIR = "/root/.cache/huggingface"
LLM_VLLM_BASE_PATH = "/data/models"
LLM_VLLM_MODELS_PATH = "/data/models/huggingface"
LLM_VLLM_HEALTH_CHECK_TIMEOUT = 120 * time.Second
LLM_VLLM_HEALTH_CHECK_INTERVAL = 10 * time.Second
)

View File

@@ -141,6 +141,7 @@ type AlertCreateInput struct {
UsedBy string `json:"used_by"`
// customize info
CustomizeConfig jsonutils.JSONObject `json:"customize_config"`
Reason string `json:"reason"`
}
type MeterCustomizeConfig struct {
@@ -168,6 +169,8 @@ type AlertUpdateInput struct {
NoDataState string `json:"no_data_state"`
// 报警执行错误将当前报警状态设置为对应的状态
ExecutionErrorState string `json:"execution_error_state"`
// 报警原因
Reason string `json:"reason"`
}
type AlertListInput struct {

View File

@@ -70,6 +70,9 @@ type CommonAlertCreateBaseInput struct {
// 角色 id 或者 name
Roles []string `json:"roles"`
// 为 true 时不发送恢复通知OK
DisableNotifyRecovery *bool `json:"disable_notify_recovery"`
// 静默期
SilentPeriod string `json:"silent_period"`
// 报警类型
@@ -155,6 +158,8 @@ type CommonAlertUpdateInput struct {
Channel []string `json:"channel"`
// 通知接受者
Recipients []string `json:"recipients"`
// 为 true 时不发送恢复通知OK
DisableNotifyRecovery *bool `json:"disable_notify_recovery"`
// 静默期
SilentPeriod string `json:"silent_period"`
// systemalert policy may need update through operator
@@ -167,13 +172,14 @@ type CommonAlertDetails struct {
AlertDetails
Period string `json:"period"`
// 报警连续持续周期数
AlertDuration int64 `json:"alert_duration"`
Level string `json:"level"`
NotifierId string `json:"notifier_id"`
Channel []string `json:"channel"`
Recipients []string `json:"recipients"`
RobotIds []string `json:"robot_ids"`
RoleIds []string `json:"role_ids"`
AlertDuration int64 `json:"alert_duration"`
Level string `json:"level"`
NotifierId string `json:"notifier_id"`
Channel []string `json:"channel"`
Recipients []string `json:"recipients"`
RobotIds []string `json:"robot_ids"`
RoleIds []string `json:"role_ids"`
DisableNotifyRecovery bool `json:"disable_notify_recovery"`
// 静默期
SilentPeriod string `json:"silent_period"`
Status string `json:"status"`

View File

@@ -15,6 +15,8 @@
package monitor
import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/apis"
"yunion.io/x/onecloud/pkg/apis/compute"
)
@@ -59,3 +61,8 @@ type MonitorResourceDetails struct {
AttachAlertCount int64 `json:"attach_alert_count"`
Hypervisor string `json:"hypervisor"`
}
type MonitorResourceDoActionInput struct {
Action string `json:"action"`
Data jsonutils.JSONObject `json:"data"`
}

View File

@@ -55,14 +55,15 @@ type MonitorResourceJointCreateInput struct {
}
type MonitorResourceJointDetails struct {
ResName string `json:"res_name"`
ResId string `json:"res_id"`
ResType string `json:"res_type"`
AlertName string `json:"alert_name"`
AlertRule jsonutils.JSONObject `json:"alert_rule"`
Level string `json:"level"`
SendState string `json:"send_state"`
State string `json:"state"`
IsSetShield bool `json:"is_set_shield"`
AlertCount int `json:"alert_count"`
MonitorResourceObjectId string `json:"monitor_resource_object_id"`
ResName string `json:"res_name"`
ResId string `json:"res_id"`
ResType string `json:"res_type"`
AlertName string `json:"alert_name"`
AlertRule jsonutils.JSONObject `json:"alert_rule"`
Level string `json:"level"`
SendState string `json:"send_state"`
State string `json:"state"`
IsSetShield bool `json:"is_set_shield"`
AlertCount int `json:"alert_count"`
}

View File

@@ -31,6 +31,7 @@ type NotificationTemplateConfig struct {
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Description string `json:"description"`
Reason string `json:"reason"`
Priority string `json:"priority"`
Level string `json:"level"`
IsRecovery bool `json:"is_recovery"`

View File

@@ -313,3 +313,42 @@ func (c CdfQueryDataSet) Less(i, j int) bool {
type CdfQueryOutput struct {
Data CdfQueryDataSet
}
// ResourceMetricsQueryInput 批量查询资源监控数据的输入参数
type ResourceMetricsQueryInput struct {
// 资源类型: "host" 或 "guest"
ResType string `json:"res_type"`
// 资源 ID 列表
ResIds []string `json:"res_ids"`
// 查询开始时间(默认: 1小时前
StartTime time.Time `json:"start_time"`
// 查询结束时间(默认: now
EndTime time.Time `json:"end_time"`
// 查询间隔(默认: 5m
Interval string `json:"interval"`
}
// ResourceMetricValues 单个资源的监控数据
type ResourceMetricValues struct {
// CPU 使用率 (%)
CpuUsage *float64 `json:"cpu_usage"`
// 内存使用率 (%)
MemUsage *float64 `json:"mem_usage"`
// 磁盘使用率 (%)
DiskUsage *float64 `json:"disk_usage"`
// 磁盘读速率 (Bps)
DiskReadRate *float64 `json:"disk_read_rate"`
// 磁盘写速率 (Bps)
DiskWriteRate *float64 `json:"disk_write_rate"`
// 网络入流量 (bps)
NetInRate *float64 `json:"net_in_rate"`
// 网络出流量 (bps)
NetOutRate *float64 `json:"net_out_rate"`
// 告警状态: init/attach/alerting
AlertState string `json:"alert_state"`
}
// ResourceMetricsQueryOutput 批量查询资源监控数据的输出
type ResourceMetricsQueryOutput struct {
ResourceMetrics map[string]ResourceMetricValues `json:"resource_metrics"`
}

View File

@@ -60,14 +60,6 @@ type SAlertDashBoard struct {
Refresh string `json:"refresh"`
}
// SAlertDashboardPanel is an autogenerated struct via yunion.io/x/onecloud/pkg/monitor/models.SAlertDashboardPanel.
type SAlertDashboardPanel struct {
apis.SVirtualJointResourceBase
DashboardId string `json:"dashboard_id"`
PanelId string `json:"panel_id"`
Index int `json:"index"`
}
// SAlertPanel is an autogenerated struct via yunion.io/x/onecloud/pkg/monitor/models.SAlertPanel.
type SAlertPanel struct {
apis.SStatusStandaloneResourceBase
@@ -127,11 +119,6 @@ type SDataSource struct {
IsDefault *bool `json:"is_default,omitempty"`
}
// SMeterAlert is an autogenerated struct via yunion.io/x/onecloud/pkg/monitor/models.SMeterAlert.
type SMeterAlert struct {
SV1Alert
}
// SMetric is an autogenerated struct via yunion.io/x/onecloud/pkg/monitor/models.SMetric.
type SMetric struct {
apis.SVirtualJointResourceBase
@@ -215,8 +202,3 @@ type SNotification struct {
Settings jsonutils.JSONObject `json:"settings"`
LastSendNotification time.Time `json:"last_send_notification"`
}
// SV1Alert is an autogenerated struct via yunion.io/x/onecloud/pkg/monitor/models.SV1Alert.
type SV1Alert struct {
SAlert
}

View File

@@ -162,6 +162,7 @@ type SendParams struct {
Header jsonutils.JSONObject
Body jsonutils.JSONObject
MsgKey string
SecretKey string `json:"secret_key"`
DomainId string
RemoteTemplateParam SRemoteTemplateParam
GroupKey string

View File

@@ -139,6 +139,7 @@ const (
TOPIC_RESOURCE_VM_INTEGRITY_CHECK = "vm_integrity"
TOPIC_RESOURCE_PROJECT = "project"
TOPIC_RESOURCE_CLOUDPHONE = "cloudphone"
TOPIC_RESOURCE_LLM = "llm"
SUBSCRIBER_TYPE_ROLE = "role"
SUBSCRIBER_TYPE_ROBOT = "robot"

View File

@@ -93,6 +93,10 @@ var (
ActionAttach SAction = "attach"
// 卸载
ActionDetach SAction = "detach"
// 宿主机宕机
ActionHostDown SAction = "host_down"
// 宕机自动迁移
ActionHostDownAutoMigrate SAction = "host_down_auto_migrate"
// 透传设备创建
ActionIsolatedDeviceCreate SAction = "isolated_device_create"
// 透传设备更新

View File

@@ -21,6 +21,10 @@ import (
"yunion.io/x/onecloud/pkg/apis"
)
const (
WEBHOOK_SIGNATURE_HEADER = "X-Auth-Token"
)
type RobotCreateInput struct {
apis.SharableVirtualResourceCreateInput
apis.EnabledBaseResourceCreateInput
@@ -37,6 +41,7 @@ type RobotCreateInput struct {
Header jsonutils.JSONObject `json:"header"`
Body jsonutils.JSONObject `json:"body"`
MsgKey string `json:"msg_key"`
SecretKey string `json:"secret_key"`
UseTemplate tristate.TriState `json:"use_template"`
}
@@ -63,8 +68,9 @@ type RobotUpdateInput struct {
Address string `json:"address"`
// description: Language preference
// example: en
Lang string `json:"lang"`
Header jsonutils.JSONObject `json:"header"`
Body jsonutils.JSONObject `json:"body"`
MsgKey string `json:"msg_key"`
Lang string `json:"lang"`
Header jsonutils.JSONObject `json:"header"`
Body jsonutils.JSONObject `json:"body"`
MsgKey string `json:"msg_key"`
SecretKey string `json:"secret_key"`
}

View File

@@ -42,4 +42,5 @@ const (
SANGFOR = "sangfor"
CNWARE = "cnware"
KSYUN = "ksyun"
ECLOUD = "ecloud"
)

View File

@@ -17,7 +17,8 @@ package yunionconf
import "yunion.io/x/onecloud/pkg/apis"
const (
SERVICE_TYPE = apis.SERVICE_TYPE_YUNIONCONF
SERVICE_TYPE = apis.SERVICE_TYPE_YUNIONCONF
SERVICE_VERSION = ""
)
const (

View File

@@ -0,0 +1,31 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package yunionconf
import "yunion.io/x/onecloud/pkg/apis"
type TagListInput struct {
apis.InfrasResourceBaseListInput
}
type TagDetails struct {
apis.InfrasResourceBaseDetails
}
type TagCreateInput struct {
apis.InfrasResourceBaseCreateInput
Values []string `json:"values"`
}

View File

@@ -295,6 +295,8 @@ type SStandaloneAnonResourceBase struct {
// 是否是模拟资源, 部分从公有云上同步的资源并不真实存在, 例如宿主机
// list 接口默认不会返回这类资源,除非显示指定 is_emulate=true 过滤参数
IsEmulated bool `json:"is_emulated"`
// 用以组织架构变更通知其他服务权限变更
OrgNodeMd5 string `json:"org_node_md5"`
}
// SStandaloneResourceBase is an autogenerated struct via yunion.io/x/onecloud/pkg/cloudcommon/db.SStandaloneResourceBase.

View File

@@ -111,13 +111,6 @@ func SendXmlWithIndent(w http.ResponseWriter, hdr http.Header, obj interface{},
func SendStream(w http.ResponseWriter, isPartial bool, hdr http.Header, stream io.ReadCloser, sizeBytes int64) error {
defer stream.Close()
if isPartial {
log.Debugf("send partial 206")
w.WriteHeader(206)
} else {
log.Debugf("send full 200")
w.WriteHeader(200)
}
for k, v := range hdr {
if k != "Content-Length" {
log.Debugf("send %s %s", k, v)
@@ -128,6 +121,13 @@ func SendStream(w http.ResponseWriter, isPartial bool, hdr http.Header, stream i
log.Debugf("send content-length %d", sizeBytes)
w.Header().Set("Content-Length", strconv.FormatInt(sizeBytes, 10))
}
if isPartial {
log.Debugf("send partial 206")
w.WriteHeader(206)
} else {
log.Debugf("send full 200")
w.WriteHeader(200)
}
offset := 0
buf := make([]byte, 4096)
for sizeBytes <= 0 || int64(offset) < sizeBytes {

View File

@@ -381,28 +381,18 @@ func (task *sBaremetalPrepareTask) findAdminNic(cli *ssh.Client, nicsInfo []*typ
return -1, nil, errors.Error("admin nic not found???")
}
func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo) error {
adminNic := task.baremetal.GetAdminNic()
if adminNic == nil || (adminNic != nil && !adminNic.LinkUp) {
adminIdx, adminNicDev, err := task.findAdminNic(cli, i.nicsInfo)
if err != nil {
return errors.Wrap(err, "task.findAdminNic")
}
accessIp := cli.GetConfig().Host
err = task.sendNicInfo(ctx, adminNicDev, adminIdx, api.NIC_TYPE_ADMIN, false, accessIp, true)
if err != nil {
return errors.Wrap(err, "send Admin Nic Info")
}
adminNic = task.baremetal.GetNicByMac(adminNicDev.Mac)
}
// collect params
func (task *sBaremetalPrepareTask) doUpdateBmInfo(
ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo,
bmName, accessIp, accessMac string,
) error {
updateInfo := make(map[string]interface{})
oname := fmt.Sprintf("BM%s", strings.Replace(adminNic.Mac, ":", "", -1))
if task.baremetal.GetName() == oname {
updateInfo["name"] = fmt.Sprintf("BM-%s", strings.Replace(i.ipmiInfo.IpAddr, ".", "-", -1))
if bmName != "" {
updateInfo["name"] = bmName
}
updateInfo["access_ip"] = accessIp
if accessMac != "" {
updateInfo["access_mac"] = accessMac
}
updateInfo["access_ip"] = adminNic.IpAddr
updateInfo["access_mac"] = adminNic.Mac
updateInfo["cpu_architecture"] = i.architecture
updateInfo["cpu_count"] = i.cpuInfo.Count
updateInfo["node_count"] = i.dmiCpuInfo.Nodes
@@ -436,19 +426,6 @@ func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Cl
return errors.Wrap(err, "send isolated devices info")
}
}
// XXX do not change nic order anymore
// for i := range nicsInfo {
// if nicsInfo[i].Mac.String() == adminNic.GetMac().String() {
// if i != 0 {
// nicsInfo = append(nicsInfo[i:], nicsInfo[0:i]...)
// }
// break
// }
// }
// err = task.removeAllNics()
// if err != nil {
// return err
// }
removedMacs := task.removeObsoleteNics(i)
for idx := range removedMacs {
err = task.removeNicInfo(ctx, removedMacs[idx])
@@ -464,6 +441,31 @@ func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Cl
return errors.Wrap(err, "task.sendNicInfo")
}
}
return nil
}
func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo) error {
adminNic := task.baremetal.GetAdminNic()
if adminNic == nil || (adminNic != nil && !adminNic.LinkUp) {
adminIdx, adminNicDev, err := task.findAdminNic(cli, i.nicsInfo)
if err != nil {
return errors.Wrap(err, "task.findAdminNic")
}
accessIp := cli.GetConfig().Host
err = task.sendNicInfo(ctx, adminNicDev, adminIdx, api.NIC_TYPE_ADMIN, false, accessIp, true)
if err != nil {
return errors.Wrap(err, "send Admin Nic Info")
}
adminNic = task.baremetal.GetNicByMac(adminNicDev.Mac)
}
oname := fmt.Sprintf("BM%s", strings.Replace(adminNic.Mac, ":", "", -1))
if task.baremetal.GetName() != oname {
oname = ""
}
err := task.doUpdateBmInfo(ctx, cli, i, oname, adminNic.IpAddr, adminNic.Mac)
if err != nil {
return err
}
if o.Options.EnablePxeBoot && task.baremetal.EnablePxeBoot() {
for _, nicInfo := range i.nicsInfo {
if nicInfo.Mac.String() != adminNic.GetMac().String() && nicInfo.Up != nil && *nicInfo.Up {

View File

@@ -287,36 +287,15 @@ func (s *sBaremetalRegisterTask) updateIpmiInfo(ctx context.Context, cli *ssh.Cl
}
func (s *sBaremetalRegisterTask) updateBmInfo(ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo, registered bool) error {
updateInfo := make(map[string]interface{})
updateInfo["access_ip"] = s.RemoteIp
updateInfo["cpu_count"] = i.cpuInfo.Count
updateInfo["node_count"] = i.dmiCpuInfo.Nodes
updateInfo["cpu_desc"] = i.cpuInfo.Model
updateInfo["cpu_mhz"] = i.cpuInfo.Freq
updateInfo["cpu_cache"] = i.cpuInfo.Cache
updateInfo["mem_size"] = i.memInfo.Total
updateInfo["storage_driver"] = i.storageDriver
updateInfo["storage_info"] = i.diskInfo
updateInfo["sys_info"] = i.sysInfo
updateInfo["sn"] = i.sysInfo.SN
size, diskType := s.collectDiskInfo(i.diskInfo)
updateInfo["storage_size"] = size
updateInfo["storage_type"] = diskType
updateData := jsonutils.Marshal(updateInfo)
updateData.(*jsonutils.JSONDict).Update(i.ipmiInfo.ToPrepareParams())
_, err := modules.Hosts.Update(s.getClientSession(), s.baremetal.GetId(), updateData)
accessMac := ""
if s.accessNic != nil {
accessMac = s.accessNic.Mac.String()
}
err := s.doUpdateBmInfo(ctx, cli, i, "", s.RemoteIp, accessMac)
if err != nil {
log.Errorf("Update baremetal info error: %v", err)
}
if err := s.sendStorageInfo(size); err != nil {
log.Errorf("sendStorageInfo error: %v", err)
}
for idx := range i.nicsInfo {
err = s.sendNicInfo(ctx, i.nicsInfo[idx], idx, "", false, "", false)
if err != nil {
log.Errorf("Send nicinfo idx: %d, %#v error: %v", idx, i.nicsInfo[idx], err)
}
log.Errorf("failed do update bminfo %s", err)
}
if registered {
return nil
}

View File

@@ -29,6 +29,7 @@ import (
"yunion.io/x/pkg/util/sets"
"yunion.io/x/pkg/utils"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
"yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/httperrors"
)
@@ -247,6 +248,12 @@ func ParseDiskConfig(diskStr string, idx int) (*compute.DiskConfig, error) {
return nil, errors.Errorf("invalid preallocation %s, allow choices: %s", str, compute.DISK_PREALLOCATIONS)
}
diskConfig.Preallocation = str
case "auto_delete":
v, err := strconv.ParseBool(str)
if err != nil {
return nil, errors.Wrapf(err, "parse disk auto_delete %s", str)
}
diskConfig.AutoDelete = &v
default:
return nil, errors.Errorf("invalid disk description %s", p)
}
@@ -328,6 +335,8 @@ func ParseNetworkConfig(desc string, idx int) (*compute.NetworkConfig, error) {
}
netConfig.Addresses6[i] = addr6.String()
}
} else if strings.HasPrefix(p, "secgroups=") {
netConfig.Secgroups = strings.Split(p[len("secgroups="):], ",")
} else if p == "require_designated_ip" {
netConfig.RequireDesignatedIP = true
} else if p == "random_exit" {
@@ -357,8 +366,10 @@ func ParseNetworkConfig(desc string, idx int) (*compute.NetworkConfig, error) {
netConfig.Driver = p
} else if strings.HasPrefix(p, "num-queues=") {
netConfig.NumQueues, _ = strconv.Atoi(p[len("num-queues="):])
} else if strings.HasPrefix(p, "billing-type=") {
netConfig.BillingType = billing_api.ParseBillingType(p[len("billing-type="):])
} else if strings.HasPrefix(p, "charge-type=") {
netConfig.ChargeType = p[len("charge-type="):]
netConfig.ChargeType = billing_api.ParseNetChargeType(p[len("charge-type="):])
} else if regutils.MatchSize(p) {
bw, err := fileutils.GetSizeMb(p, 'M', 1000)
if err != nil {

View File

@@ -62,6 +62,12 @@ func ListQueryByArchitecture(q *sqlchemy.SQuery, fieldKey string, archs []string
sqlchemy.Equals(q.Field(fieldKey), apis.OS_ARCH_AARCH32),
sqlchemy.Equals(q.Field(fieldKey), apis.OS_ARCH_AARCH64),
))
} else if arch == apis.OS_ARCH_RISCV {
conditions = append(conditions, sqlchemy.OR(
sqlchemy.Startswith(q.Field(fieldKey), arch),
sqlchemy.Equals(q.Field(fieldKey), apis.OS_ARCH_RISCV32),
sqlchemy.Equals(q.Field(fieldKey), apis.OS_ARCH_RISCV64),
))
} else {
conditions = append(conditions, sqlchemy.Startswith(q.Field(fieldKey), arch))
}

View File

@@ -271,6 +271,7 @@ const (
ACT_GUEST_SCREEN_DUMP = "guest_screen_dump"
ACT_HOST_MAINTENANCE = "host_maintenance"
ACT_HOST_DOWN = "host_down"
ACT_HOST_DOWN_AUTO_MIGRATE = "host_down_auto_migrate"
ACT_UPLOAD_OBJECT = "upload_obj"
ACT_DELETE_OBJECT = "delete_obj"

View File

@@ -48,6 +48,10 @@ type SResourceBaseManager struct {
SModelBaseManager
}
func (model *SResourceBase) GetCreatedAt() time.Time {
return model.CreatedAt
}
func NewResourceBaseManager(dt interface{}, tableName string, keyword string, keywordPlural string) SResourceBaseManager {
return SResourceBaseManager{NewModelBaseManager(dt, tableName, keyword, keywordPlural)}
}

Some files were not shown because too many files have changed in this diff Show More