Compare commits

..

571 Commits

Author SHA1 Message Date
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
Jian Qiu
0cbdf68df3 fix: notify receiver update precedure recode (#24100)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-01-20 00:16:06 +08:00
wanyaoqi
28bbdd3061 fix(host): ensure scsi pci addr on add scsi disk (#24097) 2026-01-19 20:16:30 +08:00
cwz_eikoh
8c20fb7e3d Automated cherry pick of #23906: feature(llm): adapt frontend (#24095)
* feature(llm): add llm-list details, add autostart for llm-save-instant-model

* fix(llm): adjust some interfaces

* fix: name-dup problem when create llm

* fix: install instant-model by id rather than modelID

* fix(llm): add llm_id for mcp-agent

* feature(llm): move network from sku to instance

* feature(llm): add LLMType for llm-image

* feature(llm): add gpuMemoryRequired & ollama-registry yaml

* feature(llm): add url-get interface

* feature(llm): support mcp in mcp-agent-chat

* fix(llm): abstract ollama registry
2026-01-19 18:06:18 +08:00
屈轩
5904eaf042 fix(region): vendor update (#24092) 2026-01-19 14:21:46 +08:00
Jian Qiu
378177ad2f fix: user filter revisit (#24089)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-01-19 10:51:20 +08:00
Zexi Li
86a6a816af fix(telegraf-raid-plugin): working for victoria metrics (#24085) 2026-01-15 17:20:39 +08:00
Jian Qiu
a321c89e5f fix: detailed apigateway auth failure log (#24077)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-01-15 10:13:28 +08:00
Zexi Li
dd76886d51 fix(host): compatible with telegraf 1.36 and add ipmi_sensor conf (#24082)
* fix(host): compatible with telegraf 1.36 and add ipmi_sensor conf

* feat(monitor): add ipmi_sensor metric
2026-01-15 10:06:58 +08:00
屈轩
29809ce265 fix(region): vendor update (#24080) 2026-01-14 14:05:28 +08:00
屈轩
eb33cdbe4a fix(glance): avoid context warnning (#24074) 2026-01-14 10:54:52 +08:00
屈轩
cfde0396c3 fix(region): avoid panic when update user resource (#24071) 2026-01-13 18:20:57 +08:00
屈轩
a640fb3d60 fix(common): skip octet-stream warnning (#24068) 2026-01-13 18:20:35 +08:00
Zexi Li
f1f66fbed1 feat(monitor): delta reducer (#24063) 2026-01-12 17:27:32 +08:00
屈轩
35649ce641 fix(region): remove useless mod (#24061) 2026-01-12 14:12:19 +08:00
cwz_eikoh
0ff02020e7 Automated cherry pick of #24025: feature(llm): add mcp-agent (#24026)
* feature(llm): add mcp-agent

* feature(llm): support openai in llm_client

* feature(llm): chat-stream demo
2026-01-12 10:46:06 +08:00
屈轩
e1e91c0248 fix(region): host schedtag sync (#24056) 2026-01-11 18:33:44 +08:00
屈轩
f9c73f53c3 fix(region): allow batch resize disk (#24050) 2026-01-09 14:04:52 +08:00
Zexi Li
7bd4869998 fix(monitor): top query of monitor_resource_alert (#24052) 2026-01-09 12:10:17 +08:00
屈轩
97becd57ba fix(monitor): optimized common alert list (#24043) 2026-01-09 10:09:53 +08:00
wanyaoqi
399bfcb2e2 fix(host): add query id on detect qemu machine info (#24046) 2026-01-09 08:24:42 +08:00
屈轩
3eba59982c fix(monitor): optimized monitor resource list (#24039) 2026-01-08 15:23:28 +08:00
屈轩
5e50483cbc fix(region): support order by snapshot (#24036) 2026-01-08 11:14:00 +08:00
Zexi Li
317497d6c2 fix(monitor): resource id deduplication of alert record (#24032) 2026-01-07 11:15:51 +08:00
屈轩
e7dee4e9a0 fix(monitor): show alert count (#24028) 2026-01-07 10:03:13 +08:00
Zexi Li
2a82c99942 feat(host): mount post overlay layers by shortest path order (#24012)
* fix(host): mount and umount order for post overlay

- support host_lower_map for post overlay image

* feat(host): tar dirs of pod with include patterns
2026-01-06 20:02:58 +08:00
Zexi Li
35b17d1d7c fix(monitor): fill resource ids of the cloud account (#24029) 2026-01-06 19:44:18 +08:00
wanyaoqi
518f81ba69 fix(region): guest batch create isolated devices add host lock (#24013) 2026-01-06 18:10:49 +08:00
Jian Qiu
8fb0236de5 fix: endpoint mode slave (#24023)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2026-01-06 18:05:27 +08:00
屈轩
c1cd91e01c fix(region): show pretty error (#24021) 2026-01-06 10:29:39 +08:00
屈轩
27500ca14e fix(cloudmon): optimized account balance metric collect (#24011) 2025-12-30 19:56:59 +08:00
屈轩
ec0d44e1bc fix(region): add billing resource check (#24008) 2025-12-30 18:47:27 +08:00
cwz_eikoh
0137096ba8 feature(mcp-server): add InitAuth & userCred (#24006) 2025-12-30 10:36:53 +08:00
wanyaoqi
6c66130f16 fix(region,host,host-deployer): add win11 tpm support (#23951) 2025-12-29 11:18:46 +08:00
wanyaoqi
cb155ebcbb fix(scheduler): correct mem_free = (mem_total - mem_reserved) * mem_cmtbound (#23983) 2025-12-29 11:17:38 +08:00
wanyaoqi
89c836518b fix(climc): host set memory commit bound incorrect params (#23974) 2025-12-29 11:02:19 +08:00
wanyaoqi
62ab0616ff fix(glance): image disk_format use String2ImageFormat (#23990) 2025-12-29 11:01:01 +08:00
Jian Qiu
572d83f146 fix: change OutOfResource http status code to 507 (#23987)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-12-29 10:59:10 +08:00
屈轩
e2bd696ac6 fix(monitor): alert filter by owner (#24001) 2025-12-29 10:15:45 +08:00
屈轩
faeb5685be fix(region): show host cpu and mem usage (#23998) 2025-12-25 21:58:00 +08:00
屈轩
49088da817 fix(region): ksyun create vm params (#23996) 2025-12-25 10:32:40 +08:00
屈轩
dd5dc038cd fix(region): vendor update (#23994) 2025-12-24 19:45:10 +08:00
屈轩
b8e70e1142 fix(region): update private cloud host cpu and mem usage by cloudmon (#23984) 2025-12-24 19:21:21 +08:00
Zexi Li
29dc02f484 fix(host): make disk mount point shared for unshared post overlay (#23980) 2025-12-24 15:33:31 +08:00
屈轩
4dd9e26225 fix(region): show guest nic index (#23958) 2025-12-24 11:33:36 +08:00
Zexi Li
17882cca3f fix(host): quote include paths when before executing tar (#23969) 2025-12-23 18:11:57 +08:00
Jian Qiu
d0383ff1ab feature: assume user login support (#23963)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-12-23 13:54:23 +08:00
Zexi Li
3293def16a feat(host): add debug info when restoring backup to disk (#23962) 2025-12-23 12:02:49 +08:00
wanyaoqi
e20f46f7ed Automated cherry pick of #23930: Automated cherry pick of #23725: feat(baremetal-agent): Linux PCIE disk support mdadm soft raid (#23931)
* feat(baremetal-agent): Linux PCIE disk support mdadm soft raid

* fix(baremeta-agent): soft raid support intel imsm

* fix: update baremetal-agent base
2025-12-22 13:29:25 +08:00
wanyaoqi
a8e8641c75 fix(scheduler,host): sort numa node by numa distance check memsize (#23922) 2025-12-22 11:43:51 +08:00
wanyaoqi
2085d9dfa5 fix(region): guest usage by arch (#23955) 2025-12-22 11:42:48 +08:00
Jian Qiu
2c45df0895 fix: host compat with ovs in container (#23945)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-12-22 11:41:01 +08:00
Jian Qiu
5a15d84685 fix: host flush addrs instead of reset interface (#23948)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-12-18 01:14:39 +08:00
屈轩
3e49aac8f6 fix(region): cloudpods pod (#23946) 2025-12-17 16:29:00 +08:00
cwz_eikoh
09b5ecbce0 Automated cherry pick of #23928: feature(llm): add llm-instant-model-import (#23929)
* feature(llm): add llm-instant-model-import

* fix(llm): can't delete llm while deploy faile

* feature(llm): add instant-model-import to instant-model-create
2025-12-17 13:34:07 +08:00
屈轩
8554c93b0f fix(region): disable sync schedtags (#23942) 2025-12-16 20:40:55 +08:00
屈轩
6b6147777c fix(region): disable cloudpods auto create project (#23937) 2025-12-15 15:51:38 +08:00
屈轩
ddcd72716c fix(region): add provider info for sync log (#23932) 2025-12-15 13:47:19 +08:00
Zexi Li
67d743296d fix(monitor): meter alert panic (#23920) 2025-12-12 10:20:13 +08:00
屈轩
4fbe43192d fix(region): aliyun system disk size (#23926) 2025-12-12 10:19:34 +08:00
Jian Qiu
16f15ac0fc fix: backup storage edit external url (#23916)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-12-09 19:43:54 +08:00
Jian Qiu
eca000b52e fix: splitable not function due to empty datefield (#23908)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-12-09 13:34:26 +08:00
屈轩
3a2ab9e73d fix(region): vendor update (#23904) 2025-12-07 16:00:55 +08:00
屈轩
7a5a2c549a fix(region): baidu storage info (#23902) 2025-12-05 16:20:46 +08:00
cwz_eikoh
9ac509e55b Automated cherry pick of #23898: Feature/pre quick model (#23899)
* feat: add preinstall for quick-models

* fix: drop error when duplicate blobs
2025-12-05 10:33:55 +08:00
Zexi Li
4ca1fbfda5 fix(host): ensure a single file dir when mounting (#23896) 2025-12-04 13:54:08 +08:00
cwz_eikoh
80287d6b4d Automated cherry pick of #23769: [Feature] llm model 使用 post_overlay 功能实现秒装挂载模型 (#23888)
* feat(llm): add probed-package

* feat(llm): add llm-save-instant-app

* feat(llm): add some llm-instant-app options

* fix(llm): change app to model

* fix(llm): rename origin model to sku

* feat(llm): add llm-quick-models

* fix(llm): saved paths for instant model

* fix(llm): fix quick-install-model

---------

Co-authored-by: Zexi Li <zexi.li@icloud.com>
2025-12-03 16:27:19 +08:00
Zexi Li
7015962121 fix(monitor): filter baremetal host for no data query (#23893) 2025-12-03 16:24:35 +08:00
Zexi Li
1a87bb18c9 fix(apigateway): load llm (#23886) 2025-12-03 16:21:04 +08:00
屈轩
af85cca1d6 fix(region): optimized backend sync (#23890) 2025-12-03 15:14:17 +08:00
屈轩
8d9740f149 fix(region): aliyun vnc addr (#23884) 2025-12-03 14:04:16 +08:00
Zexi Li
2dd1d6fc26 fix(host): remove empty files used bind mount (#23881) 2025-12-02 19:34:00 +08:00
wanyaoqi
ce338f180a fix(host,host-deployer): host-deployer add password quality check (#23875) 2025-12-02 17:02:34 +08:00
Zexi Li
6869eca040 feat(monitor): 支持指定过去时间段返回报警资源最多的top5监控策略 (#23878)
* feat(monitor): 支持指定过去时间段返回报警资源最多的top5监控策略

* feat(monitor): 支持指定过去时间段返回报警数量最多的top5资源

* feat(monitor): 支持指定过去时间段某监控策略下各监控指标报警资源最多的top5资源

* feat(monitor): 支持获取过去时间段各项目下报警资源数量
2025-12-02 15:47:54 +08:00
屈轩
4666b00bda fix: update host-deploy base image (#23871) 2025-12-01 11:41:13 +08:00
屈轩
154673e6a3 fix(region): vendor update (#23868) 2025-11-30 17:22:22 +08:00
Zexi Li
0cd633046f fix(monitor): filter alertrecords by alert_name and res_name (#23864) 2025-11-28 18:58:24 +08:00
屈轩
f0980d7817 fix(region): vendor update (#23859) 2025-11-27 20:35:44 +08:00
wanyaoqi
2b0a7ac265 Automated cherry pick of #23846: Fix/host misc fix (#23847)
* fix(host): host register return wrong error value

* fix(host): host handlers use gotypes check ret value is nil
2025-11-27 19:19:31 +08:00
Zexi Li
79166f9aaa fix(monitor): alert shield is not working (#23861) 2025-11-27 19:18:37 +08:00
屈轩
0ec78aaa8a fix(keystone): change token AuditIds width (#23851) 2025-11-27 17:19:37 +08:00
Zexi Li
8622137834 fix(monitor): threshold_range message (#23855) 2025-11-27 16:47:24 +08:00
Zexi Li
4a7b6af08a feat(monitor): support threashold range (#23849) 2025-11-27 14:59:55 +08:00
Zexi Li
41ba24f4b5 feat(climc): support --ouput option for pprof command (#23840) 2025-11-27 14:18:35 +08:00
屈轩
11dc0d46a2 fix(region): vendor update (#23844) 2025-11-26 16:57:01 +08:00
Jian Qiu
fbdf305ff5 fix: generic guest delete task (#23837)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-26 01:01:11 +08:00
wanyaoqi
2d30cb862f fix(region,host): perform screendump no save to s3 (#23827) 2025-11-26 01:00:38 +08:00
wanyaoqi
c712a848a5 fix(region): disk take snapshot check backing snapshot is merged (#23833) 2025-11-26 00:59:14 +08:00
屈轩
01c97c0df6 fix(region): support vmware resource pool (#23829) 2025-11-25 19:07:32 +08:00
Zexi Li
c3f9b88faa feat(monitor): get records of monitor_resource_alert (#23822) 2025-11-24 21:34:20 +08:00
屈轩
a49e7437bd fix(region): vendor update (#23820) 2025-11-24 14:20:51 +08:00
Jian Qiu
491cde2257 fix: validate policy role delete condition (#23813)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-21 12:04:20 +08:00
Zexi Li
b28bdf43e4 fix(monitor): alerting level (#23800) 2025-11-21 10:26:41 +08:00
Jian Qiu
4afbf46da1 fix: region-dns not support dameng dialect (#23805)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-21 09:55:20 +08:00
屈轩
6a0c361ea3 fix(region): snapshot policy resource purge (#23807) 2025-11-20 23:42:22 +08:00
Zexi Li
80b5a7c04a fix(monitor): title of notification by language context (#23788) 2025-11-20 20:11:34 +08:00
屈轩
729a523260 fix(monitor): avoid panic (#23795) 2025-11-20 18:43:12 +08:00
屈轩
3e7c73677e fix(host): format sLsusbTree field content json tag (#23791)
Co-authored-by: 云原生驿站 <33771248+CloudCourierStation@users.noreply.github.com>
2025-11-20 18:26:16 +08:00
Zexi Li
f12c22e7b6 fix(monitor): check if LastSendNotification is zero (#23781) 2025-11-20 18:03:45 +08:00
屈轩
2fee1b6aea fix(region): migrate snapshot policy resource (#23789) 2025-11-20 17:38:15 +08:00
屈轩
32d4820a63 fix(cloudmon): account balance metric with tenant_id (#23785) 2025-11-20 14:22:28 +08:00
屈轩
15c7a825bf fix(cloudmon): avoid undetected new resources (#23778) 2025-11-20 10:48:36 +08:00
Zexi Li
985995c684 fix(baremetal-agent): msdos typo in grub configuration (#23775) 2025-11-20 10:39:09 +08:00
屈轩
52f2d801c1 fix: support build rpm/deb of riscv64 (#23771)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-19 17:39:54 +08:00
屈轩
a0f9484770 fix: support risc-v (#23770) 2025-11-19 17:20:26 +08:00
Jian Qiu
19b0997ab6 fix: diskbackup fail to syncstatus on offline backend (#23765)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-19 10:48:51 +08:00
Jian Qiu
6274e21053 fix: export/import disk backup (#23760)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-18 23:49:39 +08:00
Zexi Li
3ba6c1b3ff fix(host): use directory of single file as post_overlay lower (#23756) 2025-11-18 16:34:48 +08:00
Zexi Li
9099f682fb feat(monitor): set alert_channel to metata (#23754) 2025-11-18 12:52:37 +08:00
屈轩
a0d28c214f fix(region): esxi vm folder (#23752) 2025-11-17 18:14:02 +08:00
屈轩
fccf389a53 fix(region): server sku create status (#23749) 2025-11-17 17:01:08 +08:00
wanyaoqi
8a68f5d7d4 feat(region,host): host dmesg collect (#23746) 2025-11-17 15:44:42 +08:00
Jian Qiu
51fddda1bd fix: filter schedtags by zones (#23743)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-15 18:30:33 +08:00
Jian Qiu
65e0f4414e feature: user expired_at attribute support (#23727)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-14 10:53:39 +08:00
Zexi Li
c33dc74019 feat(cloudcommon): add ExtraHook steps to joint model (#23722) 2025-11-14 10:50:39 +08:00
wanyaoqi
705fe7a5d9 fix(host): thrown errors on disk fromatfs (#23729) 2025-11-14 10:40:49 +08:00
Zexi Li
91617dc81b fix(host): SHostPingTask was stuck by calling docker command (#23732) 2025-11-13 20:18:55 +08:00
屈轩
f668f496dc fix(region): scope resource (#23736) 2025-11-13 14:43:45 +08:00
屈轩
69831485a3 feat: Cloudpods basic service image RISC-V support (#23724)
This patch enables cloudpos basic service image to be built on RISC-V
platforms and support build script to work on RISC-V platforms.

Signed-off-by: Jinyu Zhao <1813479822@qq.com>
Co-authored-by: Jinyu Zhao <1813479822@qq.com>
2025-11-12 11:44:05 +08:00
cwz_eikoh
8d4595be87 fix(region): add kvm_delete_task (#23698) 2025-11-11 16:32:33 +08:00
wanyaoqi
fcb72e304b fix(region,scheduler): check is BIOS boot request on uefi predicate (#23718) 2025-11-11 13:45:18 +08:00
Zexi Li
30b7deb9f5 fix(baremetal): power status of server is not synced (#23687) 2025-11-10 09:56:29 +08:00
Jian Qiu
a191da0a77 fix: log change bandwidth event (#23713)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-10 09:48:40 +08:00
Jian Qiu
dfbd89c9db fix: vm nic charge type support (#23703)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-07 10:53:04 +08:00
cwz_eikoh
f53caeb6d1 fix(region): add finish for DependencyTopoGraph (#23710) 2025-11-07 10:20:31 +08:00
cwz_eikoh
bf4f1755c8 fix(llm): don't rely on polling (#23709) 2025-11-07 10:19:37 +08:00
Zexi Li
9bb6e3eb1b fix(host): clear previous usage metrics when any container stopped of pod (#23704) 2025-11-06 20:55:43 +08:00
屈轩
33938c6c01 fix(torrent): vendor update for support risc-v (#23701) 2025-11-06 20:21:14 +08:00
屈轩
4f1bb2a871 fix(region): allow delete server sku (#23694) 2025-11-05 18:20:20 +08:00
屈轩
7abcd04f16 fix(region): add device for disk (#23691) 2025-11-05 16:23:29 +08:00
屈轩
2cae726280 fix(scheduler): sku predicate with empty zone id (#23685) 2025-11-04 20:56:34 +08:00
Zexi Li
16aa081789 fix(baremetal-agent): chose root disk by pci path (#23681) 2025-11-04 20:09:39 +08:00
Jian Qiu
45de538d15 fix: rename check when change project (#23677)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-11-04 16:08:09 +08:00
cwz_eikoh
a05b793b81 feat(region): pod containers start in dependency order (#23669) 2025-11-04 10:38:33 +08:00
屈轩
7df775f07c fix(region): optimized aws server sku sync (#23674) 2025-11-03 22:32:17 +08:00
屈轩
ec3c9f3a20 fix(region): metadata filter by value (#23671) 2025-11-03 19:24:33 +08:00
Zexi Li
e2e79cd7cc fix(host): upload container status when not created (#23666) 2025-11-03 15:53:44 +08:00
屈轩
68675541ff fix(region): optimzed server sku sync (#23663) 2025-11-03 15:13:45 +08:00
屈轩
9ee0e83747 fix(region): disk filter by server (#23659) 2025-11-01 13:32:27 +08:00
屈轩
4068843773 fix(region): optimized filter sku by zone (#23656) 2025-11-01 13:04:49 +08:00
屈轩
c4b719628b fix(region): vendor update (#23653) 2025-11-01 13:03:59 +08:00
cwz_eikoh
66afa2f141 Automated cherry pick of #23620: feat(llm): add network id and network type for llm-model (#23621)
* feat(llm): add network id and network type for llm-model

* fix(llm):portmapping of model network only works when network mode is hostlocal
2025-10-31 10:21:51 +08:00
Zexi Li
51bdf0c655 Automated cherry pick of #23642: fix(scheduler): enable profiling (#23647)
* fix(scheduler): enable profiling

* feat(scheduler): cache NetworkAdditionalWire
2025-10-31 10:19:50 +08:00
屈轩
5fc5c5b330 fix(region): sku cpu mem sync (#23649) 2025-10-30 22:33:39 +08:00
屈轩
1c61483bc1 fix(region): filter disks by server list (#23644) 2025-10-30 17:24:41 +08:00
屈轩
79c45568c7 fix(region): vendor update (#23639) 2025-10-30 10:06:23 +08:00
Zexi Li
002b37f6a1 fix(host): move the hostInstance.Init() step after InitAuth (#23624) 2025-10-29 14:00:33 +08:00
Jian Qiu
6a18b70168 fix: task remote notify (#23627)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-29 12:17:27 +08:00
屈轩
bbf0991bb3 fix(cmd): show mcp server update cmd (#23629) 2025-10-28 18:35:01 +08:00
屈轩
1052eb4451 fix(mcp): add dockerfile for mcp server (#23619) 2025-10-28 15:23:20 +08:00
屈轩
07ce88c828 fix(mcp): cherry pick 4.0 (#23617) 2025-10-28 15:22:48 +08:00
屈轩
29585a8af6 fix(region): set ksyun tag (#23611) 2025-10-24 22:54:09 +08:00
Zexi Li
06258859d8 chore(ci): turn off goimports-check rule (#23606) 2025-10-24 15:48:44 +08:00
Zexi Li
2bbd1f792c Automated cherry pick of #23282: [OSPP]feature: Auto deploy llm and dify (#23601)
* feat(llm): add llm-create

* fix(llm): fix llm-create, add llm-list & llm-show

* fix(llm): format file names

* fear(llm): add exec stream

* fear(llm): init llm model cache

* fix(llm): move llm model cache to LocalImageCache

* feat(llm): auto clean model cache

* fix(llm): auto clean tmp model cache

* feat(dify): init dify-create

* fix(dify): change dify default registry

* feat: support create model with gguf file

* feat(llm): support more modelfile option for gguf file

* feat(dify): init user customize dify parameters

* feat: update llm as a service in climc

* fix: delete llm from region service

* feat: init llm service (with error)

* fix: resolve errors (task cant callback yet)

* feat: add PerformRequestHostActionByOtherService for container

* fix: make llm service usable

* feat: delete llm and dify after guest deleted

* feat(llm): add llm-image

* feat(llm): add llm-model

* feat: mv old llm to ollama

* feat(llm): init llm-batch-create(can not run)

* fix(llm): make llm-create usable

* fix(llm): add pull-model step

* feat(llm): add list and delete

* fix(llm): ollama pull official model don't rely on host & region's code any more

* feat(llm): add dify-model

* fix: remove llm's code in host & compute

* fix: remove remain code in compute

* feat(llm): Abstract out and reuse the llm_model logic

* feat(llm): abstract llm_base from llm

* fix(llm): make dify usable

* feat(llm): add sync_dify_images.sh

* fix(llm): format import

* feat(llm): support start & stop for llm and dify

* feat(llm): add model-update

* fix(llm): gendocgo

---------

Co-authored-by: cwz <cwz_eikoh@163.com>
2025-10-24 13:29:40 +08:00
Jian Qiu
56b41893ec fix: rpm/deb support postinst/preinst/prerm/postrm hooks (#23596)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-23 01:03:18 +08:00
Jian Qiu
cb0729f672 fix: suport bulding multi-arch rpm deb (#23570)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-22 23:53:16 +08:00
屈轩
e6ec61cab1 fix(keystone): fetch domain user count (#23591) 2025-10-22 16:25:54 +08:00
wanyaoqi
35e34f019a fix(region,host,scheduler): add check kvm cpu max on cpu predicate (#23538) 2025-10-22 15:07:22 +08:00
Zexi Li
b352d0cc92 feat(region,host): support nvidia GPU CDI configuration (#23566) 2025-10-22 15:04:08 +08:00
cwz_eikoh
56e938ee2e feat(container): container-restart (#23588) 2025-10-22 14:59:49 +08:00
屈轩
a9649db617 fix(region): support ocean base (#23587) 2025-10-22 14:43:32 +08:00
屈轩
b1ef423c2a fix(region): disable cloudprovider when sync lost (#23582) 2025-10-22 11:30:23 +08:00
屈轩
8da753833d fix(region): vendor update (#23579) 2025-10-22 11:12:17 +08:00
Zexi Li
16b3d220f4 feat(region): allow containers to be created with auto_start param (#23572) 2025-10-21 17:20:52 +08:00
屈轩
dc5884b361 fix(region): adjust the ip_addr character length (#23563) 2025-10-21 10:45:11 +08:00
Jian Qiu
77c471322a fix: container memory.high ratio support (#23558)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-21 09:32:57 +08:00
屈轩
584b3291cd fix(glance): add notify for image create (#23553) 2025-10-16 14:30:48 +08:00
wanyaoqi
f5a6465629 fix(webconsole): baremteasl ipmi sol instance_name hide password (#23533) 2025-10-16 00:02:42 +08:00
wanyaoqi
de05e8cc4a fix(host): host probe isoalted device return jsonarray (#23544) 2025-10-16 00:01:36 +08:00
屈轩
a839607802 fix(region): valid essd pl0 disk resize (#23546) 2025-10-15 17:25:06 +08:00
屈轩
6251e28e52 fix(region): vendor update (#23540) 2025-10-15 10:57:52 +08:00
屈轩
3591e9a15f fix(region): support change storage type (#23530) 2025-10-14 16:59:21 +08:00
屈轩
84e8b83aab fix(region): healt status (#23525) 2025-10-13 18:51:04 +08:00
屈轩
cd3190d80f fix(keystone): distribute permissions when the organization changes (#23502) 2025-10-13 18:49:45 +08:00
屈轩
b60346b97f fix(region): private zone create status (#23521) 2025-10-13 18:05:27 +08:00
wanyaoqi
d3c64b8054 fix(host): ensure host wire marshal nil value (#23507) 2025-10-12 11:04:35 +08:00
屈轩
914c1a1971 fix(region): server sku create with region id (#23509) 2025-10-11 16:54:47 +08:00
wanyaoqi
13ce2252ce fix(region,glance,host-deployer): guest image support bios boot mode detect (#23375) 2025-10-11 10:20:54 +08:00
Zexi Li
3bdfb00850 fix(baremetal): ensure the execution of the BaremetalServerDestroyTask (#23497) 2025-10-09 17:07:35 +08:00
Jian Qiu
bc7cc1ad07 fix: ignore e2fsck errors if retcode < 4 (#23489)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-09 16:31:40 +08:00
wanyaoqi
dd7602e628 fix(host): disk resize error input params (#23493) 2025-10-09 13:27:44 +08:00
Jian Qiu
7fe4ac72fe fix: network manager keyfile static routes (#23480)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-08 13:18:34 +08:00
Jian Qiu
55e586121d fix: support network manager connection profiles (#23468)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-03 09:25:14 +08:00
Jian Qiu
144ee48cec fix: default cloud region init error (#23475)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-10-03 06:34:24 +08:00
屈轩
b3a3d170e2 fix(region): vendor update (#23459) 2025-09-30 15:09:43 +08:00
屈轩
ebdcabe330 fix(region): host order by virt cpu (#23457) 2025-09-30 13:19:16 +08:00
Jian Qiu
e504d0d4e3 fix: hostman master nic may be nil (#23450)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-30 11:18:23 +08:00
Jian Qiu
00ee68c716 fix: s3 common options (#23444)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-29 19:22:25 +08:00
Jian Qiu
c6bf60722b fix: disable password history unique check by default (#23438)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-29 15:47:40 +08:00
wanyaoqi
8e6e30d57f fix(region,baremetal): ipv6 baremetal register support (#23422) 2025-09-29 15:22:22 +08:00
Jian Qiu
1f31c00819 fix: backup task worker count in host configmap (#23427)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-29 15:20:38 +08:00
屈轩
a704ab1cea fix(cloudevent): options changed with etcd (#23433) 2025-09-29 12:24:15 +08:00
屈轩
b90abee236 fix(region): vendor update (#23416) 2025-09-28 18:04:03 +08:00
wanyaoqi
ee471da787 fix(host-deployer): update host-deployer-base to 1.4.11 (#23413) 2025-09-28 17:26:03 +08:00
Zexi Li
4e1d8f2a98 fix(region,host): sync server status by upload guest status api (#23408) 2025-09-28 17:24:04 +08:00
屈轩
65492d196c fix(region): vendor update (#23405) 2025-09-28 14:58:55 +08:00
wanyaoqi
af73e7e93a Automated cherry pick of #23374: fix(region,host): guest add vnc screen dump support (#23377)
* fix(host): update nic confs inside vm on qga delete nics

Signed-off-by: wanyaoqi <wanyaoqi@yunion.cn>

* fix(region,host): guest add vnc screen dump support

---------

Signed-off-by: wanyaoqi <wanyaoqi@yunion.cn>
2025-09-27 12:06:12 +08:00
wanyaoqi
59089c6792 Automated cherry pick of #23386: fix(host-deployer): allow growpart on primary partition (#23394)
* fix(host): init cgroup ignore disable cgroup option

* fix(host-deployer): allow growpart on primary partition
2025-09-27 12:02:06 +08:00
Zexi Li
9a19621da0 fix(host): unmount post overlay dir without accquire cached image (#23402) 2025-09-27 07:43:35 +08:00
屈轩
85ad508d83 fix(region): vendor update (#23398) 2025-09-26 18:05:24 +08:00
屈轩
e67f8392a7 fix(region): support cnware (#23389) 2025-09-26 14:45:37 +08:00
屈轩
c9ece3e7de fix(region): vendor update (#23383) 2025-09-26 13:53:39 +08:00
wanyaoqi
b6329b5c23 fix(host-deployer): loop dev resize diskfs umounted and f2fs support (#23358) 2025-09-24 18:52:48 +08:00
Zexi Li
b7a3ed9e27 fix(host): clear the rootfs of container before starting (#23361) 2025-09-24 18:52:06 +08:00
Jian Qiu
d591b7991b fix: network filter by ip error for dameng (#23364)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-24 18:45:07 +08:00
Jian Qiu
e05112b3f6 fix: auto cleanup obsolete password records (#23371)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-24 18:35:38 +08:00
屈轩
bef839cc7b fix(region): vendor update (#23368) 2025-09-24 17:22:23 +08:00
Zexi Li
6c7bb1a1b1 feat(region,host): clean no persistent rootfs (#23354) 2025-09-22 18:10:12 +08:00
屈轩
efe0d135b2 fix(region): add expired release notify hour options (#23351) 2025-09-22 10:58:13 +08:00
Jian Qiu
185332fa28 fix: host backup task worker limit (#23347)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-22 09:48:20 +08:00
Jian Qiu
64fa9f1675 fix: linux sshd_config support (#23342)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-20 00:39:27 +08:00
Zexi Li
60a57b1e1b fix(scheduler): watch serversku (#23328) 2025-09-19 23:49:32 +08:00
屈轩
8ac435af8e fix(region): rds backup sync (#23306) 2025-09-19 23:47:32 +08:00
wanyaoqi
c436fde002 fix(host,host-deployer): support lvm disk resize (#23334)
- add resize lvm disk support
- support qga online resize disk partitions and filesystems
2025-09-19 23:46:03 +08:00
Jian Qiu
f4bcb7ffdf fix: check os_arch when server rebuilding root (#23338)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-19 23:44:31 +08:00
屈轩
38d1d0f766 fix(region): disk reset webhook (#23326) 2025-09-18 15:08:21 +08:00
屈轩
f8001de546 fix(notify): optimized workwx access token expired time (#23323) 2025-09-18 14:55:18 +08:00
Zexi Li
bd731ca958 fix(monitor): diffTagKeys are empty when only one series in results (#23311) 2025-09-18 07:49:17 +08:00
屈轩
6c4a1a3628 fix: upgrade goimports (#23321) 2025-09-17 22:08:03 +08:00
屈轩
5387fc03f8 fix(region): remove debug sql (#23318) 2025-09-17 16:54:47 +08:00
屈轩
37c3db52b9 fix(cloudmon): alert metric with tenant id (#23315) 2025-09-17 16:40:21 +08:00
屈轩
976f0f0bf4 fix(climc): sku create params (#23301) 2025-09-15 15:33:40 +08:00
wanyaoqi
f446f86e9f fix(region): virtual isolated device balance on guest start (#23049) 2025-09-15 11:58:23 +08:00
屈轩
4428791397 fix(region): support gcp shared vpc and image (#23296) 2025-09-12 23:03:31 +08:00
Zexi Li
314fb8f08e feat(host): hide host files mounted to container (#23293) 2025-09-12 18:55:06 +08:00
屈轩
331231ce1a fix(monitor): history alert report (#23280) 2025-09-12 15:27:20 +08:00
Zexi Li
a8e4ecfa5a fix(host,region): container rootfs use sub directory (#23290) 2025-09-12 15:08:07 +08:00
Zexi Li
51bec5644e fix(monitor): fetch total alert resources from monitor_resource_alert (#23275) 2025-09-10 19:17:29 +08:00
屈轩
092a0c2239 fix(region): update cloudprovider external id (#23272) 2025-09-10 18:59:47 +08:00
Jian Qiu
82bfb4cea1 fix: ipv6 ra should be sent periodically (#23259)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-10 18:59:09 +08:00
Jian Qiu
e35ca851a7 fix: image self check status (#23250)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-10 18:57:27 +08:00
屈轩
aba6378177 fix(region): support hyperdisk for gcp (#23269) 2025-09-10 15:34:34 +08:00
Zexi Li
abda8b0400 fix(climc): monitor-alertrecords-total-alert command (#23266) 2025-09-10 14:24:52 +08:00
屈轩
606112ea44 fix(region): sync cloudpods ipmi ip addr (#23264) 2025-09-09 20:52:56 +08:00
屈轩
aca997796d fix(region): cloudpods ipmi info sync (#23262) 2025-09-09 19:27:52 +08:00
屈轩
df7d2d3d80 fix(region): sync cloudpods baremetal isolated device (#23257) 2025-09-09 18:40:38 +08:00
屈轩
42fb3e1327 fix(region): sync cloudpods host storage info (#23255) 2025-09-09 16:00:02 +08:00
屈轩
031e54b81e fix(region): retention server by tag (#23248) 2025-09-08 17:59:59 +08:00
屈轩
f990fe0ba3 fix(region): support retention server by tags (#23246) 2025-09-08 16:27:31 +08:00
屈轩
28dff24e44 fix(region): support retention server by tag (#23244) 2025-09-08 15:45:34 +08:00
屈轩
932e12ae87 fix: upgrade go 1.24 (#23242) 2025-09-05 18:26:42 +08:00
屈轩
7e60f49d4a fix(region): snapshot policy unbind disks (#23239) 2025-09-04 16:57:58 +08:00
屈轩
cbe77a29e2 fix(region): sync prepaid disk expired time (#23236) 2025-09-04 16:47:09 +08:00
屈轩
9ea05affbf fix(region): add disk change billing type log (#23232) 2025-09-03 20:16:38 +08:00
屈轩
56825a3cd9 fix(region): add kafka and mongodb capability (#23229) 2025-09-03 19:44:34 +08:00
屈轩
0e04ce4371 fix(region): distinct cloudprovider fields (#23227) 2025-09-03 15:03:18 +08:00
wanyaoqi
fe36e13dc7 fix(host): live migrate compat ipv6 (#23214) 2025-09-03 05:49:54 +08:00
Jian Qiu
fdf9195e8c fix: fail to delete cas idp due to readonly domain (#23217)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-03 05:48:43 +08:00
Jian Qiu
f72104ce60 fix: image s3 direct download option (#23220)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-03 05:47:32 +08:00
Jian Qiu
73ddbd4048 fix: network filter by ipv6 address (#23223)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-09-03 05:46:44 +08:00
屈轩
2f474ff911 fix(region): support more scheme keypair (#23196) 2025-09-02 14:45:03 +08:00
Zexi Li
3edd8dd65b feat(host): add SdnFetchDataFromComputeService option (#23207) 2025-09-01 23:15:40 +08:00
屈轩
cbf4310cab fix(region): avoid change to the same config sku not effective (#23203) 2025-09-01 11:43:01 +08:00
Jian Qiu
f2d77ad487 fix: too many recursive locks when batch create (#23198)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-29 23:08:07 +08:00
wanyaoqi
f491efc498 fix(host): update nic desc on nic changed (#23180) 2025-08-28 10:07:18 +08:00
wanyaoqi
bd719d99c0 feat(region,hostdeployer): add f2fs feature support (#23183) 2025-08-28 10:05:51 +08:00
屈轩
9f037c1baf fix(region): add cloud_env filter for cachedimages (#23191) 2025-08-27 18:34:36 +08:00
Jian Qiu
9b6a13037c fix: guest ipv6 vip (#23187)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-27 18:07:44 +08:00
Jian Qiu
3b6949fe78 fix: dhcpv6 should nack confirm if addr changed (#23169)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-26 15:35:31 +08:00
wanyaoqi
023309c1cf fix(region,host): ipv6 change addr (#23171) 2025-08-26 15:34:27 +08:00
屈轩
7bfdae3c45 fix(keystone): show ldap url (#23174) 2025-08-26 14:28:39 +08:00
屈轩
6ea9447a92 fix(keystone): upgrade ldap version (#23166) 2025-08-26 13:28:40 +08:00
Jian Qiu
cef3b9effb fix: deploy gai.conf if both v4 and v6 present (#23161)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-25 18:19:27 +08:00
Zexi Li
e30d669d19 feat(host): support single file to use post overlay (#23159) 2025-08-25 11:48:01 +08:00
屈轩
38872edae2 fix(region): optimized cached image list (#23154) 2025-08-22 15:43:23 +08:00
wanyaoqi
cff38d74ec feat(region,host,host-deployer): f2fs filesystem support (#23118) 2025-08-22 09:06:31 +08:00
wanyaoqi
f1f01ea823 fix(host): run ifdown script on guest delete (#23102) 2025-08-22 09:03:54 +08:00
Zexi Li
66587b4e52 fix(region): update the image status to save_fail when OnImageSavedFailed (#23140) 2025-08-21 18:12:24 +08:00
wanyaoqi
206a4b5b19 fix(scheduler): add session usage timeout options (#23143) 2025-08-21 18:10:51 +08:00
屈轩
90f479bafc fix(region): dns zone registrar charset (#23150) 2025-08-21 11:34:42 +08:00
屈轩
1df9c11501 fix(region): add change_config status for aigateway (#23138) 2025-08-20 17:05:34 +08:00
屈轩
79561cd8ef fix(region): avoid update guest disable_delete attribute error when host id is empty (#23135) 2025-08-20 16:21:24 +08:00
Zexi Li
435344ee1d fix(baremetal): update the grub auto configuration to fix the aarch64 disk boot (#23132) 2025-08-20 15:11:31 +08:00
屈轩
15d079f966 fix(region): sync lb eip (#23125) 2025-08-20 14:13:59 +08:00
Zexi Li
90aef7ef0c feat(region): fix ISO size display (#23128)
SGuestcdrom.Size is Byte, not MB

Co-authored-by: happygame <happygame1024@gmail.com>
2025-08-20 12:08:23 +08:00
Zexi Li
390feec8ec fix(baremetal-agent): error occurred when removing logical volumes on the arm64 host (#23122) 2025-08-20 12:00:19 +08:00
屈轩
911694c9fe fix(region): sync dns zone ns info (#23116) 2025-08-19 17:28:32 +08:00
屈轩
73199002c3 fix(region): sync eip associate resource (#23112) 2025-08-19 14:54:49 +08:00
屈轩
0dc21f1b69 fix(region): allow update vpc network cidr (#23110) 2025-08-19 14:38:53 +08:00
屈轩
f593f7f660 fix(region): add storage filter for snapshot (#23108) 2025-08-18 14:57:55 +08:00
wanyaoqi
046a6ac6cb fix(host): persistent ceph config for qemu connection (#23089) 2025-08-16 14:47:00 +08:00
Jian Qiu
7733907f9b fix: webconsole skip refererer check by default (#23092)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-16 14:45:45 +08:00
wanyaoqi
b43953fc29 fix(vpcagent): dhcp enable default gateway on default network (#23097) 2025-08-16 14:44:39 +08:00
屈轩
5f708fe816 fix(scheduledtask): force sync account (#23085) 2025-08-14 19:36:10 +08:00
Zexi Li
69056db01a fix(region): filter host by ips (#23083) 2025-08-14 18:35:28 +08:00
wanyaoqi
d48bab9ddd Automated cherry pick of #23072: fix(host): cephutil and nbd ipv6 compat (#23073)
* fix(region,host,host-image): host-image and qemu-nbd compat ipv6

* fix(host,host-deployer): cephutils add ipv6 compat
2025-08-14 18:34:44 +08:00
屈轩
d10a322aec fix(region): server snapshot policy (#23078) 2025-08-14 10:42:35 +08:00
屈轩
f694fead2e fix(region): dns record policy type (#23076) 2025-08-13 17:49:22 +08:00
屈轩
d4b04f3f2e fix(region): The eip displays the internal ip address of the virtual machine (#23068) 2025-08-12 09:59:08 +08:00
wanyaoqi
6d633b5647 feat(host): container cpufreq realtime simulate (#23051) 2025-08-11 10:24:28 +08:00
Jian Qiu
b7870e0453 fix: ipv6 compatibility issues fixes 20250809 (#23061)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-10 10:07:50 +08:00
Jian Qiu
4eb90fc442 fix: task obj_type and object nullable and default empty (#23059)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-10 08:46:59 +08:00
wanyaoqi
35093fb7a7 fix(host): lvm guest reload disk before delete snapshot (#23053) 2025-08-08 20:57:24 +08:00
Jian Qiu
9a3871014e fix: filter guest by multiple ips with exact match (#23039)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-08 17:56:10 +08:00
Zexi Li
b4e3d17178 fix(host): 修复 loop 设备被其它进程创建而导致分配失败的问题 (#23041) 2025-08-08 17:51:20 +08:00
Jian Qiu
4fa4cadb69 fix: host metrics tag add hypervisor (#23034)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-07 22:26:11 +08:00
Jian Qiu
d0ec6885d6 fix: ipv6-only mode compatibility fixes (#23031)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-06 22:02:08 +08:00
屈轩
634bdf7b90 fix(region): support lb health check sync status (#23029) 2025-08-06 17:37:44 +08:00
屈轩
117efad40d fix(region): disk update tag (#23025) 2025-08-06 15:52:11 +08:00
Jian Qiu
35aaafc09f fix: always update hostname for rhel-like os (#23017)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-06 01:06:23 +08:00
wanyaoqi
421a3e9e87 fix(region,host): host nic add default secret ipv4 address (#23015) 2025-08-02 23:07:07 +08:00
Jian Qiu
fbefeae06f fix: host network ipv6 support (#23013)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-08-02 12:15:07 +08:00
Zexi Li
ef04ac2dac feat(region): list gpu by index and device_minor (#23012) 2025-08-01 18:46:22 +08:00
屈轩
52d54cfc00 fix(region): support lb health check (#23009) 2025-08-01 18:38:41 +08:00
Zexi Li
33936c937c feat(region,host): upload index and minor info of a nvidia GPU (#23005) 2025-08-01 10:36:11 +08:00
Zexi Li
3b2632fb26 feat(region,host): auto create the file or dir of hostPath (#23001) 2025-07-31 14:01:06 +08:00
屈轩
412413c2f5 fix(region): cloudflare redirect pool (#22998) 2025-07-30 20:17:44 +08:00
屈轩
0970725598 fix(region): cloudflare lb backend operation (#22996) 2025-07-30 19:02:30 +08:00
屈轩
1012991176 fix(region): support cloudflare lb (#22993) 2025-07-30 14:51:48 +08:00
Jian Qiu
120725c311 fix: unify guest sync status and upload status procedure (#22983)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-30 10:38:11 +08:00
Jian Qiu
ea88b81f3f fix: inconsist checksum between image and its same format subimage (#22987)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-30 01:44:10 +08:00
wanyaoqi
c26ad31c8d fix(host,glance): only target qcow2 set cluster size on image convert (#22979) 2025-07-30 00:43:15 +08:00
Jian Qiu
4b0f3b4dd1 fix: glance converts all queued subimages, regardless of format (#22971)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-29 10:26:09 +08:00
wanyaoqi
5a3bc2acb6 fix(host): set qemuimg convert cluster_size 64k on compat image (#22965) 2025-07-29 00:01:10 +08:00
Jian Qiu
4080c2ddfb fix: set default worker parameter (#22958)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-28 14:12:18 +08:00
Jian Qiu
10a2c41d37 fix: host clean image with regards of container image deps (#22955)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-26 08:50:17 +08:00
wanyaoqi
a196b19b0c fix(region): iso boot do not check boot mode (#22950) 2025-07-26 02:26:55 +08:00
wanyaoqi
50519e9099 fix(host): host init no numa node (#22945) 2025-07-25 00:32:50 +08:00
屈轩
44c487eeb1 fix(region): init guest secgroup (#22941) 2025-07-24 17:15:56 +08:00
Zexi Li
1a7327c244 feat(host): 保存容器 volume 镜像时设置 min_disk 大小 (#22932) 2025-07-23 20:24:38 +08:00
屈轩
f5839b560e fix(region): add guest billing type for disk (#22936) 2025-07-23 18:53:48 +08:00
wanyaoqi
3e0231ae31 fix(region): ipv6 change ipaddr (#22924) 2025-07-23 09:29:18 +08:00
屈轩
003de57c91 fix(region): host order (#22927) 2025-07-22 15:20:01 +08:00
屈轩
ddb64eaf2e fix(region): vendor update (#22920) 2025-07-21 17:33:36 +08:00
屈轩
8248bcd67e fix(region): support ssl delete (#22912) 2025-07-16 19:55:21 +08:00
Jian Qiu
39a3918bb8 fix: dhcpv6 client id change by slice overwritten (#22906)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-16 16:19:27 +08:00
屈轩
47d9f2f434 fix(region): add is expired for certificate (#22908) 2025-07-16 15:36:00 +08:00
Zexi Li
5bdf4d1d30 fix(scheduler): netinterface cache is not informed (#22901) 2025-07-15 19:59:43 +08:00
Jian Qiu
3e5e6e175c fix: deploy ipv6 scripts fixes (#22900)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-15 18:59:42 +08:00
wanyaoqi
42e58b4996 feat(region,host-deployer): ipv6 only guest support (#22897) 2025-07-15 16:21:49 +08:00
wanyaoqi
a071cd2287 fix(host): check storage id is correct on src migrate prepare (#22892)
correct disk storage id on dest migrate prepare
2025-07-15 16:12:57 +08:00
屈轩
66748dbfcd fix(region): ssl create with zone info (#22889) 2025-07-14 18:32:15 +08:00
屈轩
d27c9be330 fix(region): ssl certificate create (#22887) 2025-07-14 16:06:22 +08:00
Jian Qiu
ea8f6c8221 fix: host metrics error for missing ip (#22883)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-12 18:00:46 +08:00
Jian Qiu
c6f84dfa94 fix: dhcpv6 support phase 3 (#22881)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-12 12:10:31 +08:00
屈轩
382c2bc6cd fix(region): add sort for host (#22877) 2025-07-11 19:08:59 +08:00
Zexi Li
598f68a7e9 fix(region): allow stopping the container in probe_failed status (#22873) 2025-07-11 10:42:07 +08:00
Jian Qiu
967d52f874 fix: host no default routes due to empty ipv6 addr (#22871)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-10 22:34:07 +08:00
wanyaoqi
d1dcfc9ed3 fix(region): do not set guest to resuce status on guest running (#22867) 2025-07-10 22:11:11 +08:00
屈轩
ebd7298d0d fix(region): 修复本地到期释放功能和资源同步冲突 (#22860) 2025-07-10 19:37:58 +08:00
Jian Qiu
992c5f498e fix: dhcpv6 support, phase 2 (#22852)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-09 14:41:34 +08:00
wanyaoqi
570b371290 fix(host): add check mem dev is null on guest setup (#22848) 2025-07-09 14:16:08 +08:00
屈轩
0b6a23e2fb fix(region): 避免删除虚拟机时,未能正常删除后挂载的磁盘 (#22841) 2025-07-07 14:46:10 +08:00
Zexi Li
da501a34d8 feat(host): support pod post cleanup configuration (#22839) 2025-07-04 17:12:22 +08:00
屈轩
34fd2c5ca4 fix(region): create disk with tags (#22833) 2025-07-04 17:08:05 +08:00
屈轩
afe4afe095 fix(region): vendor update (#22828) 2025-07-03 15:16:35 +08:00
屈轩
9121720e21 fix: compatible with other os netutils (#22826) 2025-07-03 15:01:44 +08:00
Jian Qiu
b527b1ad6b fix: dhcpv6 support, initial support (#22823)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-07-03 14:37:17 +08:00
屈轩
bdcbc15cf5 fix(region): vendor update for sync mongodb ip addr (#22817) 2025-07-03 05:33:12 +08:00
wanyaoqi
397f165d37 fix(host): set arm guest max mems to host mem (#22814) 2025-07-03 05:32:20 +08:00
wanyaoqi
f29a1d8567 fix(host): enable qemu cap detect (#22799) 2025-07-03 05:30:45 +08:00
wanyaoqi
47a9fa3505 fix(region): host calculate set mem_cmt_bound 1 on host enable hugepage (#22810) 2025-07-03 05:29:20 +08:00
wanyaoqi
7df2a43d22 fix(host): qemuimg convert add cluster_size (#22792) 2025-07-03 05:27:35 +08:00
屈轩
826f4df8f7 fix(region): vendor update (#22806) 2025-07-02 21:01:57 +08:00
屈轩
7cee63907b fix(esxi-agent): avoid esxi cache image error (#22803) 2025-07-02 19:25:32 +08:00
Zexi Li
0e50049ab1 fix(host): adjuest max loop device count to 512 (#22788) 2025-07-01 15:25:26 +08:00
屈轩
975f4ed864 fix(region): add ai gateway (#22785) 2025-06-27 22:38:21 +08:00
屈轩
5643619a7c fix(region): vendor update for cdn attribute (#22778) 2025-06-24 17:43:09 +08:00
屈轩
3e35ea56df fix(notify): support dingtalk robot sign (#22767) 2025-06-23 16:59:40 +08:00
屈轩
1ba251f053 fix(cloudmon): cloudpods collect metric interval (#22764) 2025-06-23 16:17:24 +08:00
屈轩
25d1b699c9 fix(region): vendor update for aliyun alb and nlb (#22762) 2025-06-23 10:30:26 +08:00
屈轩
19143c134a fix(region): sync remove backend group (#22759) 2025-06-20 19:38:27 +08:00
Zexi Li
27a8e098d6 feat(region,host): support port mapping rule (#22756) 2025-06-20 19:17:04 +08:00
屈轩
cb12c9fe1c fix(region): support skip sync server by tag value (#22754) 2025-06-20 18:40:35 +08:00
屈轩
fc2603ce4d fix(region): vendor update (#22750) 2025-06-20 18:12:44 +08:00
Jian Qiu
d9c5d5657e fix: task filter by owner sql revisit (#22746)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-06-20 16:06:27 +08:00
屈轩
b6b5c6041b fix(region): ssl certificate purge (#22743) 2025-06-19 17:53:10 +08:00
Jian Qiu
c1345560bb fix: use goid to identify differnt goroutine (#22740)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-06-19 14:50:47 +08:00
屈轩
8448395003 fix(region): waf rule create (#22738) 2025-06-18 20:06:16 +08:00
Zexi Li
5058f02538 Automated cherry pick of #22729: Monitor worker alert (#22730)
* fix(monitor): GetMetricMeasurement 接口只查询过去30m的数据

避免数据过多导致 victoria-metrics 报错

* fix(monitor): wildchar of alert group by field
2025-06-18 14:25:43 +08:00
屈轩
31b766a7d6 fix(region): lb listener rule associate backend group (#22734) 2025-06-18 14:15:01 +08:00
Zexi Li
650acf4ea9 fix: panic when there is no secondary IP on the host. (#22726)
Co-authored-by: glzjin <glzjin2015@gmail.com>
2025-06-17 11:15:01 +08:00
屈轩
1322a21445 fix(region): vendor update (#22725) 2025-06-16 20:07:32 +08:00
屈轩
fb26af0566 fix(region): vendor update for lb multi eip sync (#22720) 2025-06-16 17:17:27 +08:00
wanyaoqi
af0559ac35 fix(region,host): add auto merge snapshots options, preallocation options (#22713) 2025-06-13 15:19:50 +08:00
Zexi Li
72f68dd541 fix(host): dirty shutdown pod is not auto started (#22705) 2025-06-10 10:18:31 +08:00
Jian Qiu
ae09aa3c82 fix: remove cgo deps for ioctl (#22701)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-06-07 08:42:14 +08:00
屈轩
b677cef407 fix(region): vendor update (#22698) 2025-06-06 19:22:45 +08:00
屈轩
9ae9879c56 fix(region): enable cloud dns record (#22695) 2025-06-06 18:32:01 +08:00
Jian Qiu
2f8c719f03 fix: http perf stats monitor (#22689)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-06-06 18:12:16 +08:00
Zexi Li
712059cedb fix(host): marshal update status input inside error (#22692) 2025-06-06 17:27:51 +08:00
屈轩
4bbc651732 fix(region): waf rule enable disable (#22688) 2025-06-06 14:53:25 +08:00
Jian Qiu
24e525926b fix: update vendor release/4.0 20250606 (#22685)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-06-06 14:23:50 +08:00
wanyaoqi
119140fe93 fix(host): pass decoded userdata to host-deployer (#22681) 2025-06-05 23:50:51 +08:00
屈轩
1b45c3d174 fix(region): vendor update (#22678) 2025-06-05 19:28:02 +08:00
Zexi Li
9675f1d4e4 fix(host): change mount context timeout to 30s (#22676) 2025-06-05 18:40:30 +08:00
Jian Qiu
e7e13552d9 fix: cloudmon high cpu loads for bucket probing (#22658)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-06-05 17:51:26 +08:00
屈轩
91ad8f038e fix(region): vendor update (#22670) 2025-06-04 17:37:36 +08:00
Zexi Li
c5e70ed1aa fix(scheduler): wrong sort order of instance group selection (#22666) 2025-06-04 14:27:30 +08:00
Zexi Li
cdd46c490d feat(host): containerd snapshot rootfs service (#22661) 2025-06-04 11:00:42 +08:00
Zexi Li
1d69a15372 fix(host): sync container crash status (#22655) 2025-06-03 20:16:12 +08:00
Zexi Li
5237beb197 fix(host): retry stopping container forcibly (#22650) 2025-06-03 17:12:07 +08:00
Zexi Li
ffdf7a3a6e fix(host): losetup package initialization order (#22652) 2025-06-03 13:39:30 +08:00
Jian Qiu
c835c87afc fix: update vendor to fix keystone user join project not found (#22645)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-31 18:47:54 +08:00
Jian Qiu
58e2ea41af fix: disk statu sync recover (#22633)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-31 09:04:25 +08:00
Jian Qiu
addbe7f9ea fix: bucket perform mon random string generation consume high cpu load (#22639)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-31 09:03:21 +08:00
wanyaoqi
618722bc16 fix(host): change log level to debug on get numa node faild (#22641) 2025-05-31 09:01:55 +08:00
Zexi Li
fd0c96e6f9 refactor(region,host): container status management (#22635) 2025-05-30 17:48:42 +08:00
wanyaoqi
5a17a9e37b feat(host-deployer): deploy vlan subinterface on baremetal hypervisor (#22629)
- host-deployer add deploy vlan subinterface on baremetal hypervisor
- fix baremetal-agent cache image parse input data
2025-05-30 10:32:01 +08:00
wanyaoqi
44ed13473a feat(region,host,host-deployer): support set uefi boot order (#22560) 2025-05-30 10:31:03 +08:00
wanyaoqi
d8b00188a0 feat(region,host): qga deploy network config on attach nics (#22548) 2025-05-30 10:29:48 +08:00
屈轩
0b61ca0432 fix(region): vendor update (#22624) 2025-05-29 11:23:02 +08:00
屈轩
b9a9151555 fix(region): secgroup rule filter (#22619) 2025-05-28 18:38:37 +08:00
wanyaoqi
17db7be134 fix(host): qemu extra params format (#22609) 2025-05-27 13:34:48 +08:00
屈轩
892431d5b9 fix(region): update qcloud storage type (#22615) 2025-05-27 12:44:12 +08:00
屈轩
3d36c293e5 fix(region): add region driver for cloudflare (#22606) 2025-05-26 16:22:25 +08:00
Jian Qiu
3ff50f0d11 fix: tar ignore error revisit (#22604)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-26 12:35:10 +08:00
Jian Qiu
6144325daf fix: container save image with leading prefix (#22602)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-26 12:34:48 +08:00
Zexi Li
bf3b83870c fix: ignore init loop device error (#22601)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-26 11:36:09 +08:00
wanyaoqi
62b7eea828 fix(host): check min_free_kbytes size is enough (#22592) 2025-05-24 01:11:09 +08:00
Zexi Li
4e07811e2f fix(monitor): not filter status tag key (#22596) 2025-05-23 09:59:43 +08:00
Zexi Li
f819e021b3 feat(host): loop device manager (#22590) 2025-05-22 13:24:24 +08:00
屈轩
3224eac821 fix(cloudmon): add vm_ip metric for vm (#22586) 2025-05-22 10:53:59 +08:00
屈轩
a1fce125da fix(cloudmon): vm metrics with ips (#22583) 2025-05-22 10:41:11 +08:00
屈轩
aa0a6b58d3 fix(region): add filter for secgroup rule (#22580) 2025-05-21 19:27:29 +08:00
屈轩
0c9a44e279 fix(region): add account info for sec rules (#22577) 2025-05-21 18:40:18 +08:00
Zexi Li
4dd92825a8 fix(host): ignore internal stopped event of primary container (#22574) 2025-05-21 16:23:17 +08:00
屈轩
30a319fe5e fix(region): allow create public server sku (#22571) 2025-05-21 14:43:28 +08:00
Zexi Li
faf35a6879 fix(host): status of stopping primary container (#22568) 2025-05-21 12:23:33 +08:00
屈轩
4520b54a5b fix(region): init aliyun storage medium type (#22564) 2025-05-20 21:48:33 +08:00
wanyaoqi
fa53aea075 fix error when create vm with ceph disk (#22561)
Co-authored-by: liangkaijun <liangkaijun52013@gmail.com>
2025-05-20 21:28:00 +08:00
Jian Qiu
36b5532b04 feature: monitor bucket formance and resource status (#22553)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-19 22:28:32 +08:00
Zexi Li
01ab43941e fix(host): clean loop device before deleting (#22558) 2025-05-19 19:47:28 +08:00
屈轩
249569be9f fix(region): user sync with ctx (#22555) 2025-05-19 18:09:26 +08:00
Jian Qiu
db0b275772 fix: host files not initialized when host reboot (#22551)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-19 01:57:58 +08:00
wanyaoqi
e6bb86c934 fix: vendor update 2505013 (#22521) 2025-05-19 01:50:32 +08:00
屈轩
c53f707089 fix(region): vendor update (#22544) 2025-05-16 11:19:49 +08:00
屈轩
ef36176130 fix(region): guest disk iops (#22542) 2025-05-15 15:46:12 +08:00
屈轩
edd11ea1cd fix(region): show correct disk iops (#22538) 2025-05-15 12:48:51 +08:00
屈轩
4ad7d635bc fix(region): change disk billing type (#22533) 2025-05-15 11:48:26 +08:00
Zexi Li
18604b46b1 feat(region,host): change ownership of post overlay merged dir (#22525) 2025-05-13 19:52:52 +08:00
屈轩
4609c543c9 fix(region): add dns brand (#22523) 2025-05-13 16:30:57 +08:00
屈轩
779559dbdc fix(region): add proxied for dns record (#22514) 2025-05-12 17:52:46 +08:00
Zexi Li
27c6c82b82 fix(monitor): return measurements info from db directly (#22512) 2025-05-12 17:17:36 +08:00
屈轩
fa99905bf6 fix(common): avoid empty context (#22509) 2025-05-12 16:21:18 +08:00
屈轩
608e4edb4e fix(region): add cloudflare const (#22507) 2025-05-12 14:10:58 +08:00
屈轩
43c646b537 fix(notify): support notify with robotids (#22503) 2025-05-09 21:23:07 +08:00
屈轩
ad798d7bbe fix(notify): optimized notify error msg (#22501) 2025-05-09 17:35:17 +08:00
屈轩
238458066a fix(region): vendor update (#22498) 2025-05-09 14:56:01 +08:00
屈轩
90a8b10401 fix(common): obj id cache (#22495) 2025-05-09 14:50:24 +08:00
Jian Qiu
46195f72ee fix: hostfile delete validation (#22493)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-08 23:50:06 +08:00
屈轩
05829a225a fix(region): vendor update (#22491) 2025-05-08 18:36:31 +08:00
屈轩
f0858ce4d2 fix(common): policy tag filter cache (#22485) 2025-05-08 15:56:57 +08:00
Jian Qiu
cc3477415d fix: host files support (#22481)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
2025-05-07 11:28:47 +08:00
4338 changed files with 359438 additions and 531157 deletions

View File

@@ -13,7 +13,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Install check tools
shell: bash

View File

@@ -22,7 +22,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -20,7 +20,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -21,7 +21,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -19,7 +19,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -23,7 +23,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -19,7 +19,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -23,7 +23,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -23,7 +23,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -23,7 +23,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -24,7 +24,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -20,7 +20,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -23,7 +23,7 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: '1.26.3'
go-version: '1.25'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2

View File

@@ -4,42 +4,14 @@ on:
schedule:
- cron: "0 0 * * *"
permissions:
issues: write
jobs:
issue-check-inactive:
runs-on: ubuntu-latest
steps:
- name: Label inactive issues as stale
env:
GH_TOKEN: ${{ github.token }}
INACTIVE_DAY: "30"
INACTIVE_LABEL: "stale"
EXCLUDE_LABEL: "announcement"
run: |
set -euo pipefail
cutoff="$(date -u -d "${INACTIVE_DAY} days ago" +%Y-%m-%dT%H:%M:%SZ)"
gh issue list \
--repo "${{ github.repository }}" \
--state open \
--limit 1000 \
--json number,labels,updatedAt \
| jq -c \
--arg cutoff "$cutoff" \
--arg inactive "$INACTIVE_LABEL" \
--arg exclude "$EXCLUDE_LABEL" \
'
.[]
| select(.updatedAt < $cutoff)
| select([.labels[].name] | index($exclude) | not)
| select([.labels[].name] | index($inactive) | not)
' \
| while IFS= read -r issue; do
number="$(echo "$issue" | jq -r .number)"
echo "Marking issue #${number} as ${INACTIVE_LABEL}"
gh issue edit "$number" \
--repo "${{ github.repository }}" \
--add-label "$INACTIVE_LABEL"
done
- name: check-inactive
uses: actions-cool/issues-helper@v2
with:
actions: 'check-inactive'
inactive-label: 'stale'
inactive-day: 30
exclude-labels: 'announcement'

View File

@@ -4,41 +4,17 @@ on:
schedule:
- cron: "0 1 * * *"
permissions:
issues: write
jobs:
issue-close-require:
runs-on: ubuntu-latest
steps:
- name: Close inactive issues awaiting user feedback
env:
GH_TOKEN: ${{ github.token }}
INACTIVE_DAY: "7"
run: |
set -euo pipefail
cutoff="$(date -u -d "${INACTIVE_DAY} days ago" +%Y-%m-%dT%H:%M:%SZ)"
body="$(cat <<'EOF'
If you do not provide feedback for more than 37 days, we will close the issue and you can either reopen it or submit a new issue.
- name: need reproduce
uses: actions-cool/issues-helper@v2
with:
actions: 'close-issues'
labels: 'stale,state/awaiting user feedback'
inactive-day: 7
body: |
If you do not provide feedback for more than 37 days, we will close the issue and you can either reopen it or submit a new issue.
您超过 37 天未反馈信息,我们将关闭该 issue如有需求您可以重新打开或者提交新的 issue。
EOF
)"
# Trim leading indentation from heredoc lines for a cleaner comment.
body="$(printf '%s\n' "$body" | sed 's/^[[:space:]]*//')"
gh issue list \
--repo "${{ github.repository }}" \
--state open \
--label "stale" \
--label "state/awaiting user feedback" \
--limit 1000 \
--json number,updatedAt \
| jq -c --arg cutoff "$cutoff" '.[] | select(.updatedAt < $cutoff)' \
| while IFS= read -r issue; do
number="$(echo "$issue" | jq -r .number)"
echo "Closing issue #${number}"
gh issue close "$number" \
--repo "${{ github.repository }}" \
--comment "$body"
done
您超过 37 天未反馈信息,我们将关闭该 issue如有需求您可以重新打开或者提交新的 issue。

View File

@@ -4,19 +4,13 @@ on:
issues:
types: [closed]
permissions:
issues: write
jobs:
issue-closed-remove-labels:
runs-on: ubuntu-latest
if: "!contains(github.event.issue.labels.*.name, 'stale')"
steps:
- name: Remove state labels when issue that hasn't stale label is closed
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--remove-label "state/awaiting processing" \
--remove-label "state/awaiting user feedback" || true
- name: Remove statle labels when issue that hasn't stale label is closed
uses: actions-cool/issues-helper@v2
with:
actions: 'remove-labels'
labels: 'state/awaiting processing,state/awaiting user feedback'

View File

@@ -4,48 +4,35 @@ on:
name: Add issues workflow labels
permissions:
issues: write
jobs:
add-label-if-is-author:
runs-on: ubuntu-latest
if: (github.event.issue.user.id == github.event.comment.user.id) && !github.event.issue.pull_request && (github.event.issue.state == 'open')
steps:
- name: Add require handle label
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--add-label "state/awaiting processing"
uses: actions-cool/issues-helper@v2
with:
actions: 'add-labels'
labels: 'state/awaiting processing'
- name: Remove require reply label
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--remove-label "state/awaiting user feedback" \
--remove-label "stale" || true
uses: actions-cool/issues-helper@v2
with:
actions: 'remove-labels'
labels: 'state/awaiting user feedback,stale'
add-label-if-not-author:
runs-on: ubuntu-latest
if: (github.event.issue.user.id != github.event.comment.user.id) && !github.event.issue.pull_request && (github.event.issue.state == 'open') && (!contains(github.event.comment.body, '/keep-state'))
steps:
- name: Add require reply label
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--add-label "state/awaiting user feedback"
- name: Add require replay label
uses: actions-cool/issues-helper@v2
with:
actions: 'add-labels'
labels: 'state/awaiting user feedback'
- name: Remove require handle label
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--remove-label "state/awaiting processing" \
--remove-label "stale" || true
uses: actions-cool/issues-helper@v2
with:
actions: 'remove-labels'
labels: 'state/awaiting processing,stale'

View File

@@ -4,30 +4,22 @@ on:
issues:
types: [opened, reopened]
permissions:
issues: write
jobs:
issue-open-add-labels:
runs-on: ubuntu-latest
if: ${{ !github.event.issue.pull_request }}
steps:
- name: Add labels
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--add-label "state/awaiting processing"
uses: actions-cool/issues-helper@v2
if: ${{ !github.event.comment.pull_request.pull_request }}
with:
actions: 'add-labels'
labels: 'state/awaiting processing'
- name: Remove require reply label
env:
GH_TOKEN: ${{ github.token }}
run: |
gh issue edit "${{ github.event.issue.number }}" \
--repo "${{ github.repository }}" \
--remove-label "state/awaiting user feedback" \
--remove-label "stale" || true
uses: actions-cool/issues-helper@v2
with:
actions: 'remove-labels'
labels: 'state/awaiting user feedback,stale'
notify-author-comment:
runs-on: ubuntu-latest

View File

@@ -185,7 +185,6 @@ y18n-lang := en-US,zh-CN
y18n-packages := \
yunion.io/x/onecloud/cmd/apigateway \
yunion.io/x/onecloud/cmd/keystone \
yunion.io/x/onecloud/cmd/llm \
yunion.io/x/onecloud/cmd/monitor \
yunion.io/x/onecloud/cmd/region \
yunion.io/x/onecloud/cmd/yunionconf \
@@ -261,7 +260,7 @@ dep:
@echo "$$depDeprecated"
@$(MAKE) mod
RELEASE_BRANCH:=master
RELEASE_BRANCH:=release/4.0.2
GOPROXY ?= direct
mod:

View File

@@ -8,7 +8,7 @@ endif
ModBaseName:=$(notdir $(ModName))
DockerImageRegistry?=registry.cn-beijing.aliyuncs.com
DockerImageAlpineBuild?=$(DockerImageRegistry)/yunionio/alpine-build:3.23-go-1.26.3-0
DockerImageAlpineBuild?=$(DockerImageRegistry)/yunionio/alpine-build:3.22.2-go-1.24.9-0
EnvIf=$(if $($(1)),$(1)=$($(1)))

View File

@@ -9,9 +9,7 @@
<img src="https://v1.cloudpods.org/images/cloudpods_logo_green.png" alt="Cloudpods" height="100">
Cloudpods是一个开源的Golang实现的云原生的融合多云/混合云的云平台,也就是一个云上之云”。Cloudpods不仅可以管理本地的虚拟机和物理机资源还可以管理多个云平台和云账号。Cloudpods隐藏了这些异构基础设施资源的数据模型和API的差异对外暴露了一套统一的API允许用户就像用一个云一样地访问多云。从而大大降低了访问多云的复杂度提升了管理多云的效率。
Cloudpods还提供了 **AI 云**一个面向大语言模型LLM推理与 AI 容器应用的统一管理平台,帮助企业在同一平台完成 AI 工作负载的部署、调度与运维,与 Cloudpods 私有云/多云资源体系无缝集成。
Cloudpods是一个开源的Golang实现的云原生的融合多云/混合云的云平台,也就是一个云上之云”。Cloudpods不仅可以管理本地的虚拟机和物理机资源还可以管理多个云平台和云账号。Cloudpods隐藏了这些异构基础设施资源的数据模型和API的差异对外暴露了一套统一的API允许用户就像用一个云一样地访问多云。从而大大降低了访问多云的复杂度提升了管理多云的效率。
## 谁需要Cloudpods?
@@ -20,25 +18,12 @@ Cloudpods还提供了 **AI 云**一个面向大语言模型LLM推理与
* 将VMware vSphere虚拟化集群转换为一个可以自服务的私有云平台
* 在混合云的场景,能够在一个界面访问私有云和公有云
* 通过一个集中的入口访问分布在多个公有云平台上的多个账号
* 当前只使用一个公有云账号但希望将来使用多云的用户
* 需要部署和管理 LLM 推理服务及 AI 容器应用,并需要 GPU 调度支持的用户
* 当前只使用一个公有云账号但希望将来使用多云的用户
## 功能
请访问[产品介绍](https://www.cloudpods.org/docs/introduction/)页面了解详细信息。
### AI 云
* **AI 推理服务**:部署和管理 LLM 推理实例(支持 Ollama、vLLM、SGLang 等),支持 GPU 调度、模型挂载与推理服务地址分配。
* **AI 应用管理**:一站式部署 LLM 应用编排、智能体助手、图像生成等 AI 容器应用。
* **模型库**:统一管理模型来源、版本与缓存,支持多实例复用、离线分发,避免重复下载。
* **模板与镜像**:通过模板定义 CPU/内存/GPU 等资源规格,通过镜像管理容器运行环境,实现标准化交付。
* **GPU 运维**GPU 设备自动探测与注册,支持 NVIDIA/CUDA 环境的统一配置与管理。
支持的 AI 工作负载:
* AI 推理Ollama、vLLM、SGLang
* AI 应用OpenClaw、Dify、ComfyUI、Hermes Agent
### 支持的云平台
* 公有云:
@@ -52,38 +37,29 @@ Cloudpods还提供了 **AI 云**一个面向大语言模型LLM推理与
* 天翼云
* 移动云
* 京东云
* 火山引擎
* 百度云
* 金山云
* 青云
* Oracle Cloud
* 联通云
* 私有云:
* OpenStack
* ZStack
* Alibaba Cloud Apsara (阿里飞天)
* Alibaba Cloud Aspara (阿里飞天)
* Huawei HCSO (华为HCSO)
* Nutanix
* BingoCloud
* OceanBase
* 本地基础设施资源:
* 基于 KVM 实现的轻量级私有云
* VMware vSphere vCenter/ESXi
* Proxmox VE
* 裸金属 (IPMI, Redfish API)
* 对象存储 (Minio, Ceph, XSky)
* VMWare vSphere vCenter/ESXi
* Baremetals (IPMI, Redfish API)
* Object storages (Minio, Ceph, XSky)
* NAS (Ceph)
### 支持的云资源
* 服务器实例、磁盘、网卡、网络、VPC、存储、宿主机、二层网络、快照、快照策略、安全组、弹性 IP、SSH 密钥对、镜像
* 负载均衡实例、监听、后端服务器组、后端服务器、TLS 证书、访问控制
* 对象存储:存储桶、对象
* NAS:文件系统、权限组、挂载点
* RDS:实例、账号、备份、数据库、参数、权限
* 弹性缓存:实例、账号、备份、参数
* DNSDNS 区域、DNS 记录
* VPCVPCVPC 对等连接、跨 VPC 网络、NAT 网关、DNAT/SNAT 规则、路由表、路由条目
* Servers: instances, disks, network interfaces, networks, vpcs, storages, hosts, wires, snapshots, snapshot policies, security groups, elastic IPs, SSH keypairs, images
* Load Balancers: instances, listeners, backend groups, backends, TLS certificates, ACLs
* Object Storage: buckets, objects
* NAS: file_systems, access_groups, mount_targets
* RDS: instances, accounts, backups, databases, parameters, privileges
* Elastic Cache: instances, accounts, backups, parameters
* DNS: DNS zones, DNS records
* VPC: VPCs, VPC peering, inter-VPC network, NAT gateway, DNAT/SNAT rules, route tables, route entries
## 安装部署

View File

@@ -11,34 +11,19 @@
Cloudpods is a cloud-native open source unified multi/hybrid-cloud platform developed with Golang, i.e. Cloudpods is *a cloud on clouds*. Cloudpods is able to manage not only on-premise KVM/baremetals, but also resources from many cloud accounts across many cloud providers. It hides the differences of underlying cloud providers and exposes one set of APIs that allow programatically interacting with these many clouds.
Cloudpods also provides **AI Cloud**, a unified management platform for large language model (LLM) inference and AI container applications, helping enterprises deploy, schedule, and operate AI workloads on a single platform, seamlessly integrated with the Cloudpods private cloud / multi-cloud resource ecosystem.
## Who needs Cloudpods?
* Those who need a simple solution to virtualize a few physical servers into a private cloud
* Those who need a compact and fully automatic baremetal lift-cycle management solution
* Those who want to turn a VMware vSphere virtualization cluster into a private cloud
* Those who need a cohesive view of both public and private cloud in a hybrid cloud setup
* Those who need a centric portal to access multiple accounts from multiple public clouds
* Those who need a centric portal to access multiple acccounts from multiple public clouds
* Those who is currently using a single cloud account, but will not lose the possibility to adopt multicloud strategy
* Those who need to deploy and manage LLM inference services and AI container applications with GPU support
## Features
See [Introduction](https://www.cloudpods.org/docs/introduction/) for details.
### AI Cloud
* **AI Inference Services**: Deploy and manage LLM inference instances (Ollama, vLLM, SGLang, and more) with GPU scheduling, model mounting, and inference service address allocation.
* **AI Application Management**: One-stop deployment of LLM application orchestration, agent assistants, image generation, and other AI container applications.
* **Model Library**: Unified management of model sources, versions, and caches, supporting multi-instance reuse and offline distribution.
* **Templates and Images**: Define resource specifications (CPU/memory/GPU) through templates, manage container runtime environments through images.
* **GPU Operations**: Automatic GPU device detection and registration, unified NVIDIA/CUDA environment configuration and management.
Supported AI workloads:
* AI Inference: Ollama, vLLM, SGLang
* AI Applications: OpenClaw, Dify, ComfyUI, Hermes Agent
### Supported cloud providers
* Public Clouds:
@@ -52,24 +37,15 @@ Supported AI workloads:
* Ctyun (China Telecom)
* ECloud (China Mobile)
* JDCloud
* Volcengine
* Baidu Cloud
* Kingsoft Cloud
* QingCloud
* Oracle Cloud
* China Unicom Cloud
* Private Clouds:
* OpenStack
* ZStack
* Alibaba Cloud Apsara
* Alibaba Cloud Aspara
* Huawei HCSO
* Nutanix
* BingoCloud
* OceanBase
* On-premise resources:
* Lightweight private cloud built on KVM
* VMware vSphere vCenter/ESXi
* Proxmox VE
* VMWare vSphere vCenter/ESXi
* Baremetals (IPMI, Redfish API)
* Object storages (Minio, Ceph, XSky)
* NAS (Ceph)
@@ -108,7 +84,7 @@ Please check this [issue](https://github.com/yunionio/cloudpods/issues/11427) fo
## Changelog
See [Release Notes](https://www.cloudpods.org/en/docs/release-notes/) and [Changelog](https://www.cloudpods.org/en/docs/development/changelog/) for details.
See [Relase Notes](https://www.cloudpods.org/en/docs/release-notes/) and [Changelog](https://www.cloudpods.org/en/docs/development/changelog/) for details.
## Contribution
@@ -121,3 +97,4 @@ Apache License 2.0. See [LICENSE](./LICENSE).
## AI-generated doc
[DeepWiki](https://deepwiki.com/yunionio/cloudpods) provides an amazing AI-generated doc of this project, you may refer to it for more detailed and comprehensive understanding of codes.

View File

@@ -1 +0,0 @@
DESCRIPTION="Yunion Cloud AI Proxy Service"

View File

@@ -79,8 +79,6 @@ echo "# Yunion RPM spec
%global pkgname yunion-$PKG
%global homedir /var/run/%{owner}
%global use_systemd $SERVICE
%global debug_package %{nil}
%global __strip /usr/bin/eu-strip
Name: %{pkgname}
Version: $VERSION

View File

@@ -1,3 +0,0 @@
FROM registry.cn-beijing.aliyuncs.com/yunionio/onecloud-base:v3.22.2-0
ADD ./_output/alpine-build/bin/aiproxy /opt/yunion/bin/aiproxy

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.5 /opt/yunion/playbook /opt/yunion/playbook
COPY --from=registry.cn-beijing.aliyuncs.com/yunionio/file-repo:v0.5.5 /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/baremetal-base:v0.3.9-20260724.0
FROM registry.cn-beijing.aliyuncs.com/yunionio/baremetal-base:v0.3.9-20251215.0
LABEL maintainer="Zexi Li <lizexi@yunionyun.com>"

View File

@@ -1,8 +1,8 @@
#RUN yum install -y https://iso.yunion.cn/vm-images/baremetal-pxerom-1.1.0-21092209.x86_64.rpm
#RUN yum install -y http://192.168.23.50:8083/baremetal-pxerom-1.1.0-21092209.x86_64.rpm
FROM registry.cn-beijing.aliyuncs.com/yunionio/yunionos:v4.0.0-20251203.0 as yunionos
FROM registry.cn-beijing.aliyuncs.com/yunionio/yunionos:v4.0.0-20251201.0 as yunionos
FROM registry.cn-beijing.aliyuncs.com/cloudpods/centos:8 as grub-stage
FROM centos:8 as grub-stage
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

View File

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

View File

@@ -1,7 +1,6 @@
REGISTRY ?= "registry.cn-beijing.aliyuncs.com/yunionio"
DOCKER_BUILD = docker build -t $(REGISTRY)
DOCKER_BUILDX = docker buildx build --platform linux/arm64,linux/amd64,linux/riscv64 --push -t $(REGISTRY)
DOCKER_BUILDX_BM = docker buildx build --platform linux/arm64,linux/amd64 --push -t $(REGISTRY)
debian10-base:
@@ -41,7 +40,7 @@ WEBCONSOLE_BASE_VERSION_3-22-2 = 3.22.2-1
webconsole-base:
$(DOCKER_BUILDX)/webconsole-base:$(WEBCONSOLE_BASE_VERSION_3-22-2) -f ./Dockerfile.webconsole-base .
BAREMETAL_BASE_VERSION = v0.3.9-20260724.0
BAREMETAL_BASE_VERSION = v0.3.9-20251112.1
FEDORA_RISCV64_VERSION = 42
fedora-riscv64-base:
@@ -54,9 +53,8 @@ baremetal-base-riscv: fedora-riscv64-base
$(DOCKER_BUILDX)/baremetal-base:$(BAREMETAL_BASE_VERSION) -f ./Dockerfile.baremetal-base-riscv .
#docker push $(REGISTRY)/baremetal-base:$(BAREMETAL_BASE_VERSION)
# TODO: support riscv64 for baremetal-base
baremetal-base:
$(DOCKER_BUILDX_BM)/baremetal-base:$(BAREMETAL_BASE_VERSION) -f ./Dockerfile.baremetal-base .
$(DOCKER_BUILDX)/baremetal-base:$(BAREMETAL_BASE_VERSION) -f ./Dockerfile.baremetal-base .
#docker push $(REGISTRY)/baremetal-base:$(BAREMETAL_BASE_VERSION)
TORRENT_VERSION = 20210815.0

View File

@@ -1,7 +1,9 @@
策略名称: {{.name}}
触发时间: {{.start_time}}
报警级别: {{.level}}
触发条件: {{.description | unescaped}}
触发条件:{{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}}

View File

@@ -1,7 +1,9 @@
AlertName: {{.name}}
Time: {{.start_time}}
Level: {{.level}}
TriggerCondition: {{.description | unescaped}}
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}}

View File

@@ -1,26 +0,0 @@
// 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 (
"yunion.io/x/onecloud/pkg/aiproxy/service"
"yunion.io/x/onecloud/pkg/util/atexit"
)
func main() {
defer atexit.Handle()
service.StartService()
}

View File

@@ -17,7 +17,6 @@ package main
import (
"yunion.io/x/onecloud/cmd/climc/entry"
_ "yunion.io/x/onecloud/cmd/climc/shell"
_ "yunion.io/x/onecloud/cmd/climc/shell/aiproxy"
_ "yunion.io/x/onecloud/cmd/climc/shell/ansible"
_ "yunion.io/x/onecloud/cmd/climc/shell/apimap"
_ "yunion.io/x/onecloud/cmd/climc/shell/cloudevent"

View File

@@ -1,31 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiKeys)
cmd.Create(new(apoptions.AiKeyCreateOptions))
cmd.List(new(apoptions.AiKeyListOptions))
cmd.Show(new(apoptions.AiKeyShowOptions))
cmd.Update(new(apoptions.AiKeyUpdateOptions))
cmd.Delete(new(apoptions.AiKeyDeleteOptions))
registerEnableDisable(cmd)
}

View File

@@ -1,31 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiModels)
cmd.Create(new(apoptions.AiModelCreateOptions))
cmd.List(new(apoptions.AiModelListOptions))
cmd.Show(new(apoptions.AiModelShowOptions))
cmd.Update(new(apoptions.AiModelUpdateOptions))
cmd.Delete(new(apoptions.AiModelDeleteOptions))
registerEnableDisable(cmd)
}

View File

@@ -1,35 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
"yunion.io/x/onecloud/pkg/mcclient/options"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiProviders)
cmd.Create(new(apoptions.AiProviderCreateOptions))
cmd.List(new(apoptions.AiProviderListOptions))
cmd.Show(new(apoptions.AiProviderShowOptions))
cmd.Update(new(apoptions.AiProviderUpdateOptions))
cmd.Delete(new(apoptions.AiProviderDeleteOptions))
cmd.PerformClass("test-connectivity", new(apoptions.AiProviderTestConnectivityOptions))
cmd.Perform("test-connectivity", new(options.BaseIdOptions))
cmd.Perform("set-models", new(apoptions.AiProviderSetModelsOptions))
registerEnableDisable(cmd)
}

View File

@@ -1,32 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiProxyNodes)
cmd.Create(new(apoptions.AiProxyNodeCreateOptions))
cmd.List(new(apoptions.AiProxyNodeListOptions))
cmd.Show(new(apoptions.AiProxyNodeShowOptions))
cmd.Update(new(apoptions.AiProxyNodeUpdateOptions))
cmd.Delete(new(apoptions.AiProxyNodeDeleteOptions))
registerEnableDisable(cmd)
cmd.PerformClass("register", new(apoptions.AiProxyNodeRegisterOptions))
}

View File

@@ -1,55 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/modulebase"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AIProxyUsage)
cmd.ClassShow(new(apoptions.AiProxyUsageOverviewOptions))
cmd.ClassShow(new(apoptions.AiProxyUsageAnalysisOptions))
cmd.RunWithDesc("event-list", "List ai_proxy_usage events", new(apoptions.AiProxyUsageEventListOptions),
func(s *mcclient.ClientSession, args *apoptions.AiProxyUsageEventListOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := apmodules.AIProxyUsage.Get(s, args.GetId(), params)
if err != nil {
return err
}
shell.PrintList(modulebase.JSON2ListResult(ret), []string{
"id",
"timestamp",
"model",
"provider",
"source",
"api_key_label",
"input_tokens",
"output_tokens",
"total_tokens",
"latency_ms",
"result",
"status_code",
})
return nil
})
}

View File

@@ -1,32 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiRoutings)
cmd.Create(new(apoptions.AiRoutingCreateOptions))
cmd.List(new(apoptions.AiRoutingListOptions))
cmd.Show(new(apoptions.AiRoutingShowOptions))
cmd.Update(new(apoptions.AiRoutingUpdateOptions))
cmd.Delete(new(apoptions.AiRoutingDeleteOptions))
cmd.Perform("set-models", new(apoptions.AiRoutingSetModelsOptions))
registerEnableDisable(cmd)
}

View File

@@ -1,30 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiRoutingModels)
cmd.Create(new(apoptions.AiRoutingModelCreateOptions))
cmd.List(new(apoptions.AiRoutingModelListOptions))
cmd.Show(new(apoptions.AiRoutingModelShowOptions))
cmd.Update(new(apoptions.AiRoutingModelUpdateOptions))
cmd.Delete(new(apoptions.AiRoutingModelDeleteOptions))
}

View File

@@ -1,31 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
apmodules "yunion.io/x/onecloud/pkg/mcclient/modules/aiproxy"
apoptions "yunion.io/x/onecloud/pkg/mcclient/options/aiproxy"
)
func init() {
cmd := shell.NewResourceCmd(&apmodules.AiVirtualKeys)
cmd.Create(new(apoptions.AiVirtualKeyCreateOptions))
cmd.List(new(apoptions.AiVirtualKeyListOptions))
cmd.Show(new(apoptions.AiVirtualKeyShowOptions))
cmd.Update(new(apoptions.AiVirtualKeyUpdateOptions))
cmd.Delete(new(apoptions.AiVirtualKeyDeleteOptions))
registerEnableDisable(cmd)
}

View File

@@ -1,26 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/pkg/aiproxy/codexconfig"
"yunion.io/x/onecloud/pkg/mcclient"
)
func init() {
R(&codexconfig.Options{}, "ai-codex-config", "Generate Codex CLI config for aiproxy", func(s *mcclient.ClientSession, args *codexconfig.Options) error {
return codexconfig.Run(s, args)
})
}

View File

@@ -1,21 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
)
var R = shell.R

View File

@@ -1,16 +0,0 @@
// 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 aiproxy registers climc commands for the aiproxy service.
package aiproxy // import "yunion.io/x/onecloud/cmd/climc/shell/aiproxy"

View File

@@ -1,25 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/cmd/climc/shell"
baseoptions "yunion.io/x/onecloud/pkg/mcclient/options"
)
func registerEnableDisable(cmd *shell.ResourceCmd) {
cmd.Perform("enable", new(baseoptions.BaseIdOptions))
cmd.Perform("disable", new(baseoptions.BaseIdOptions))
}

View File

@@ -1,26 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/pkg/aiproxy/ft"
"yunion.io/x/onecloud/pkg/mcclient"
)
func init() {
R(&ft.AnthropicOptions{}, "ai-test-anthropic", "Run aiproxy Anthropic Messages API E2E test", func(s *mcclient.ClientSession, args *ft.AnthropicOptions) error {
return ft.RunAnthropicTest(s, args)
})
}

View File

@@ -1,26 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/pkg/aiproxy/ft"
"yunion.io/x/onecloud/pkg/mcclient"
)
func init() {
R(&ft.ChatOptions{}, "ai-test-chat", "Run aiproxy OpenAI chat E2E test", func(s *mcclient.ClientSession, args *ft.ChatOptions) error {
return ft.RunChatTest(s, args)
})
}

View File

@@ -1,26 +0,0 @@
// 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 aiproxy
import (
"yunion.io/x/onecloud/pkg/aiproxy/ft"
"yunion.io/x/onecloud/pkg/mcclient"
)
func init() {
R(&ft.ProviderCreateOptions{}, "ai-test-provider-create", "Create custom ai_provider and verify", func(s *mcclient.ClientSession, args *ft.ProviderCreateOptions) error {
return ft.RunProviderCreateTest(s, args)
})
}

View File

@@ -19,7 +19,7 @@ import (
"yunion.io/x/onecloud/pkg/mcclient"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/ansible"
options "yunion.io/x/onecloud/pkg/mcclient/options/ansible"
"yunion.io/x/onecloud/pkg/mcclient/options"
)
func init() {

View File

@@ -56,9 +56,6 @@ func init() {
})
R(&options.MeshNetworkUpdateOptions{}, "meshnetwork-update", "Update mesh network", func(s *mcclient.ClientSession, opts *options.MeshNetworkUpdateOptions) error {
params, err := base_options.StructToParams(opts)
if err != nil {
return err
}
mn, err := modules.MeshNetworks.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -56,9 +56,6 @@ func init() {
})
R(&options.RouterUpdateOptions{}, "router-update", "Update router", func(s *mcclient.ClientSession, opts *options.RouterUpdateOptions) error {
params, err := base_options.StructToParams(opts)
if err != nil {
return err
}
router, err := modules.Routers.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -56,9 +56,6 @@ func init() {
})
R(&options.RouteUpdateOptions{}, "router-route-update", "Update router route", func(s *mcclient.ClientSession, opts *options.RouteUpdateOptions) error {
params, err := base_options.StructToParams(opts)
if err != nil {
return err
}
router, err := modules.Routes.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -56,9 +56,6 @@ func init() {
})
R(&options.RuleUpdateOptions{}, "router-rule-update", "Update router rule", func(s *mcclient.ClientSession, opts *options.RuleUpdateOptions) error {
params, err := base_options.StructToParams(opts)
if err != nil {
return err
}
router, err := modules.Rules.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -103,5 +103,4 @@ func init() {
cmd.Perform("enable-image-cache", new(AgentEnableImageCacheOpt))
cmd.Perform("disable-image-cache", new(AgentDisableImageCacheOpt))
cmd.Delete(new(AgentDeleteOpt))
cmd.Get("app-options", &options.BaseIdOptions{})
}

View File

@@ -58,7 +58,7 @@ func init() {
type HostNetworkDetailOptions struct {
HOST string `help:"ID or Name of Host"`
NETWORK string `help:"ID or Name of Network"`
NETWORK string `help:"ID or Name of Wire"`
}
R(&HostNetworkDetailOptions{}, "host-network-show", "Show baremetal network details", func(s *mcclient.ClientSession, args *HostNetworkDetailOptions) error {
result, err := modules.Baremetalnetworks.Get(s, args.HOST, args.NETWORK, nil)

View File

@@ -24,7 +24,7 @@ func init() {
cmd := shell.NewResourceCmd(&modules.Cloudaccounts).WithKeyword("cloud-account")
cmd.List(&options.CloudaccountListOptions{})
cmd.Show(&options.CloudaccountShowOptions{})
cmd.Show(&options.SCloudAccountIdOptions{})
cmd.Delete(&options.SCloudAccountIdOptions{})
cmd.Update(&options.SCloudAccountUpdateBaseOptions{})
// cmd.PerformClassWithKeyword("preparenets-vmware", "prepare-nets", &options.SVMwareCloudAccountPrepareNetsOptions{})
@@ -41,7 +41,6 @@ func init() {
cmd.CreateWithKeyword("create-hcs", &options.SHCSAccountCreateOptions{})
cmd.CreateWithKeyword("create-hcsop", &options.SHcsOpCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-ucloud", &options.SUcloudCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-rockbase", &options.SRockbaseAccountCreateOptions{})
cmd.CreateWithKeyword("create-volcengine", &options.SVolcengineCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-zstack", &options.SZStackCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-s3", &options.SS3CloudAccountCreateOptions{})
@@ -77,7 +76,6 @@ func init() {
cmd.UpdateWithKeyword("update-hcso", &options.SHCSOAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-hcs", &options.SHCSAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-ucloud", &options.SUcloudCloudAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-rockbase", &options.SRockbaseAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-volcengine", &options.SVolcengineCloudAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-zstack", &options.SZStackCloudAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-s3", &options.SS3CloudAccountUpdateOptions{})
@@ -109,7 +107,6 @@ func init() {
cmd.PerformWithKeyword("update-credential-hcso", "update-credential", &options.SHCSOAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("update-credential-hcs", "update-credential", &options.SHCSOAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("update-credential-ucloud", "update-credential", &options.SUcloudCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("update-credential-rockbase", "update-credential", &options.SRockbaseAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("update-credential-volcengine", "update-credential", &options.SVolcengineCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("update-credential-zstack", "update-credential", &options.SZStackCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("update-credential-s3", "update-credential", &options.SS3CloudAccountUpdateCredentialOptions{})
@@ -135,7 +132,6 @@ func init() {
cmd.PerformWithKeyword("test-connectivity-openstack", "test-connectivity", &options.SOpenStackCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("test-connectivity-huawei", "test-connectivity", &options.SHuaweiCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("test-connectivity-ucloud", "test-connectivity", &options.SUcloudCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("test-connectivity-rockbase", "test-connectivity", &options.SRockbaseAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("test-connectivity-volcengine", "test-connectivity", &options.SVolcengineCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("test-connectivity-zstack", "test-connectivity", &options.SZStackCloudAccountUpdateCredentialOptions{})
cmd.PerformWithKeyword("test-connectivity-s3", "test-connectivity", &options.SS3CloudAccountUpdateCredentialOptions{})

View File

@@ -26,7 +26,7 @@ import (
func init() {
type CloudproviderRegionListOptions struct {
options.BaseListOptions
Region string `help:"ID or Name of Region"`
Region string `help:"ID or Name of Host"`
Capability []string `help:"capability filter" choices:"project|compute|network|loadbalancer|objectstore|rds|cache|event"`
}

View File

@@ -34,18 +34,15 @@ func init() {
cmd.Perform("purge", &compute.CloudregionPurgeOptions{})
type CloudregionListOptions struct {
_ struct{} `mcp-desc:"【创建流程中的中间步骤】本工具不能完成创建。指定云厂商时必须传 provider例如创建阿里云provider=[\"Aliyun\"]。创建虚拟机时必须 usable=trueMCP 默认注入)。查完后继续 capability/镜像/sku最后 climc_server_create。严禁只查区域后停止"`
options.BaseListOptions
Usable *bool `help:"只列网络可用的区域;创建虚拟机时必须为 trueMCP 默认注入 usable=true" mcp:"true"`
UsableVpc *bool `help:"List regions where VPC are usable" mcp:"true"`
Service string `help:"List regions which service has available skus" choices:"dbinstances|servers|elasticcaches" mcp:"true"`
ReadOnly *bool `help:"List regions with read only account"`
Usable *bool `help:"List regions where networks are usable"`
UsableVpc *bool `help:"List regions where VPC are usable"`
Service string `help:"List regions which service has available skus" choices:"dbinstances|servers|elasticcaches"`
City string `help:"List regions in the specified city" mcp:"true"`
City string `help:"List regions in the specified city"`
Capability []string `help:"capability filter" choices:"project|compute|network|loadbalancer|objectstore|rds|cache|event" mcp:"true"`
Capability []string `help:"capability filter" choices:"project|compute|network|loadbalancer|objectstore|rds|cache|event"`
DistinctField string `help:"list the specified distinct field, e.g. city, region"`
@@ -151,7 +148,7 @@ func init() {
Desc string `help:"Description" json:"description" token:"desc"`
Latitude float32 `help:"region geographical location - latitude"`
Longitude float32 `help:"region geographical location - longitude"`
City string `help:"region geographical location - city, e.g. Beijing, Frankfurt"`
City string `help:"region geograpical location - city, e.g. Beijing, Frankfurt"`
CountryCode string `help:"region geographical location - ISO country code, e.g. CN"`
}
R(&CloudregionCreateOptions{}, "cloud-region-create", "Create a cloud region", func(s *mcclient.ClientSession, args *CloudregionCreateOptions) error {
@@ -194,7 +191,7 @@ func init() {
Desc string `help:"Description of the region" json:"description" token:"desc"`
Latitude float32 `help:"region geographical location - latitude"`
Longitude float32 `help:"region geographical location - longitude"`
City string `help:"region geographical location - city, e.g. Beijing, Frankfurt"`
City string `help:"region geograpical location - city, e.g. Beijing, Frankfurt"`
CountryCode string `help:"region geographical location - ISO country code, e.g. CN"`
}
R(&CloudregionUpdateOptions{}, "cloud-region-update", "Update a cloud region", func(s *mcclient.ClientSession, args *CloudregionUpdateOptions) error {
@@ -226,18 +223,13 @@ func init() {
})
type CloudregionCapabiltyOptions struct {
_ struct{} `mcp-desc:"【创建流程中的中间步骤】查询区域能力尤其是可用磁盘存储类型storage_types2 / system_storage_types。公有云创建前必须调用ID 用 climc_cloud_region_list 返回的 id。从返回中选系统盘 backend如 cloud_essd、cloud_ssd写入 disk 的 backend=。查完继续镜像/网络/sku最后 climc_server_create"`
ID string `help:"ID or name of cloud region to check必须用 cloud-region-list 的 id" json:"-" mcp:"required"`
Domain string `help:"cloud region domain" mcp:"true"`
ID string `help:"ID or name of cloud region to check" json:"-"`
Domain string `help:"cloud region domain"`
ShowEmulated bool `help:"show emulated cloud region"`
}
R(&CloudregionCapabiltyOptions{}, "cloud-region-capability", "Show region's capacibilities", func(s *mcclient.ClientSession, args *CloudregionCapabiltyOptions) error {
query, err := options.StructToParams(args)
if err != nil {
return err
}
result, err := modules.Cloudregions.GetSpecific(s, args.ID, "capability", query)
if err != nil {
return err

View File

@@ -24,7 +24,7 @@ var (
R = shell.R
printList = shell.PrintList
printObject = shell.PrintObject
printBatchResults = shell.PrintBatchResults
printBatchResults = printutils.PrintJSONBatchResults
InvalidUpdateError = shell.InvalidUpdateError
printObjectRecursive = printutils.PrintJSONObjectRecursive

View File

@@ -19,7 +19,6 @@ import (
"io/ioutil"
"os"
"os/exec"
"path"
"strings"
"github.com/ghodss/yaml"
@@ -32,7 +31,6 @@ import (
"yunion.io/x/onecloud/pkg/mcclient"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
options "yunion.io/x/onecloud/pkg/mcclient/options/compute"
"yunion.io/x/onecloud/pkg/util/fileutils2"
"yunion.io/x/onecloud/pkg/util/pod/stream/cp"
)
@@ -139,18 +137,15 @@ func init() {
return nil
})
copyToContainer := func(s *mcclient.ClientSession, src, dst string, rawFile bool) error {
parts := strings.Split(dst, ":")
R(new(options.ContainerCopyOptions), "container-cp", "Container copy", func(s *mcclient.ClientSession, opts *options.ContainerCopyOptions) error {
parts := strings.Split(opts.CONTAINER_ID_FILE, ":")
if len(parts) != 2 {
return fmt.Errorf("invalid container id: %s", dst)
return fmt.Errorf("invalid container id: %s", opts.CONTAINER_ID_FILE)
}
if rawFile {
if fileutils2.IsDir(src) {
return fmt.Errorf("source path cannot be a directory when raw file is true: %s", src)
}
fr, err := os.Open(src)
if opts.RawFile {
fr, err := os.Open(opts.SRC_FILE)
if err != nil {
return errors.Wrapf(err, "open file: %v", src)
return errors.Wrapf(err, "open file: %v", opts.SRC_FILE)
}
defer fr.Close()
if err := modules.Containers.CopyTo(s, parts[0], parts[1], fr); err != nil {
@@ -158,24 +153,22 @@ func init() {
}
return nil
} else {
return cp.NewCopy().CopyToContainer(s, src, cp.ContainerFileOpt{
return cp.NewCopy().CopyToContainer(s, opts.SRC_FILE, cp.ContainerFileOpt{
ContainerId: parts[0],
File: parts[1],
})
}
}
copyFromContainer := func(s *mcclient.ClientSession, src, dst string, rawFile bool) error {
parts := strings.Split(src, ":")
})
R(new(options.ContainerCopyOptions), "container-cp-from", "Container copy", func(s *mcclient.ClientSession, opts *options.ContainerCopyOptions) error {
parts := strings.Split(opts.SRC_FILE, ":")
if len(parts) != 2 {
return fmt.Errorf("invalid container id: %s", src)
return fmt.Errorf("invalid container id: %s", opts.CONTAINER_ID_FILE)
}
ctrId := parts[0]
ctrFile := parts[1]
destFile := dst
if fileutils2.IsDir(destFile) {
destFile = path.Join(destFile, path.Base(ctrFile))
}
if rawFile {
destFile := opts.CONTAINER_ID_FILE
if opts.RawFile {
fw, err := os.Create(destFile)
if err != nil {
return errors.Wrapf(err, "open file: %v", destFile)
@@ -191,37 +184,5 @@ func init() {
File: ctrFile,
}, destFile)
}
}
R(new(options.ContainerCopyOptions), "container-cp", "Container copy", func(s *mcclient.ClientSession, opts *options.ContainerCopyOptions) error {
if strings.Contains(opts.SRC, ":") && !strings.Contains(opts.DST, ":") {
// copy from container to host
err := copyFromContainer(s, opts.SRC, opts.DST, opts.RawFile)
if err != nil {
return errors.Wrapf(err, "copy from container to host")
}
return nil
} else if !strings.Contains(opts.SRC, ":") && strings.Contains(opts.DST, ":") {
// copy from host to container
err := copyToContainer(s, opts.SRC, opts.DST, opts.RawFile)
if err != nil {
return errors.Wrapf(err, "copy to container")
}
return nil
} else if strings.Contains(opts.SRC, ":") && strings.Contains(opts.DST, ":") {
// copy from container to container
return fmt.Errorf("copy from container to container is not supported")
} else {
return fmt.Errorf("copy between local files is not supported")
}
})
R(new(options.ContainerCopyFromOptions), "container-cp-from", "Container copy", func(s *mcclient.ClientSession, opts *options.ContainerCopyFromOptions) error {
err := copyFromContainer(s, opts.CONTAINER_ID_PATH, opts.DST_PATH, opts.RawFile)
if err != nil {
return errors.Wrapf(err, "copy from container to host")
}
return nil
})
}

View File

@@ -29,7 +29,7 @@ func init() {
cmd.List(&compute.DBInstanceListOptions{})
cmd.Create(&compute.DBInstanceCreateOptions{})
cmd.Update(&compute.DBInstanceUpdateOptions{})
cmd.Show(&compute.DBInstanceShowOptions{})
cmd.Show(&compute.DBInstanceIdOptions{})
cmd.Delete(&compute.DBInstanceDeleteOptions{})
cmd.Perform("renew", &compute.DBInstanceRenewOptions{})
cmd.Perform("change-config", &compute.DBInstanceChangeConfigOptions{})

View File

@@ -42,7 +42,7 @@ import (
func init() {
cmd := shell.NewResourceCmd(&modules.Disks)
cmd.List(&compute_options.DiskListOptions{})
cmd.Show(&compute_options.DiskShowOptions{})
cmd.Show(&compute_options.DiskIdOptions{})
cmd.Perform("public", &compute_options.DiskIdOptions{})
cmd.Perform("private", &compute_options.DiskIdOptions{})
cmd.Perform("syncstatus", &compute_options.DiskIdOptions{})
@@ -55,7 +55,13 @@ func init() {
cmd.Perform("change-billing-type", new(compute_options.DiskChangeBillingTypeOptions))
cmd.Perform("change-storage-type", &compute_options.DiskChangeStorageTypeOptions{})
R(&compute_options.DiskDeleteOptions{}, "disk-delete", "Delete a disk", func(s *mcclient.ClientSession, args *compute_options.DiskDeleteOptions) error {
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"`
DeleteSnapshots bool `help:"Delete disk snapshots before delete disk"`
}
R(&DiskDeleteOptions{}, "disk-delete", "Delete a disk", func(s *mcclient.ClientSession, args *DiskDeleteOptions) error {
params := jsonutils.NewDict()
if args.OverridePendingDelete {
params.Add(jsonutils.JSONTrue, "override_pending_delete")
@@ -94,7 +100,7 @@ func init() {
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"`
AutoReset *bool `help:"Enable auto reset disk after guest shutdown"`
AutoReset *bool `help:"Enable auto reset disk after geust shutdown"`
}
R(&DiskUpdateOptions{}, "disk-update", "Update property of a virtual disk", func(s *mcclient.ClientSession, args *DiskUpdateOptions) error {
params := jsonutils.NewDict()
@@ -167,7 +173,11 @@ func init() {
return nil
})
R(&compute_options.DiskResizeOptions{}, "disk-resize", "Resize a disk", func(s *mcclient.ClientSession, args *compute_options.DiskResizeOptions) error {
type DiskResizeOptions struct {
DISK string `help:"ID or name of disk"`
SIZE string `help:"Size of disk"`
}
R(&DiskResizeOptions{}, "disk-resize", "Resize a disk", func(s *mcclient.ClientSession, args *DiskResizeOptions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.SIZE), "size")
disk, err := modules.Disks.PerformAction(s, args.DISK, "resize", params)
@@ -179,7 +189,7 @@ func init() {
})
type DiskResetOptions struct {
DISK string `help:"ID or name of disk"`
SNAPSHOT string `help:"Snapshot ID of disk"`
SNAPSHOT string `help:"snapshots ID of disk"`
AutoStart bool `help:"Autostart guest"`
}
R(&DiskResetOptions{}, "disk-reset", "Resize a disk", func(s *mcclient.ClientSession, args *DiskResetOptions) error {
@@ -235,9 +245,9 @@ func init() {
type DiskChangeOwnerOptions struct {
ID string `help:"Disk to change owner" json:"-"`
PROJECT string `help:"Project ID or name" json:"tenant"`
PROJECT string `help:"Project ID or change" json:"tenant"`
}
R(&DiskChangeOwnerOptions{}, "disk-change-owner", "Change owner project of a disk", func(s *mcclient.ClientSession, opts *DiskChangeOwnerOptions) error {
R(&DiskChangeOwnerOptions{}, "disk-change-owner", "Change owner porject of a disk", func(s *mcclient.ClientSession, opts *DiskChangeOwnerOptions) error {
params, err := options.StructToParams(opts)
if err != nil {
return err

View File

@@ -27,7 +27,7 @@ import (
func init() {
cmd := shell.NewResourceCmd(&modules.ElasticCache).WithKeyword("elastic-cache")
cmd.List(&compute.ElasticCacheListOptions{})
cmd.Show(&compute.ElasticCacheShowOptions{})
cmd.Show(&compute.ElasticCacheIdOption{})
cmd.Create(&compute.ElasticCacheCreateOptions{})
cmd.Delete(&compute.ElasticCacheIdOption{})
cmd.Perform("restart", &compute.ElasticCacheIdOption{})

View File

@@ -27,7 +27,7 @@ func init() {
cmd.Create(&compute.EipCreateOptions{})
cmd.Delete(&options.BaseIdOptions{})
cmd.Update(&compute.EipUpdateOptions{})
cmd.Show(&compute.EipShowOptions{})
cmd.Show(&options.BaseShowOptions{})
cmd.Perform("purge", &options.BaseIdOptions{})
cmd.Perform("associate", &compute.EipAssociateOptions{})
cmd.Perform("dissociate", &compute.EipDissociateOptions{})

View File

@@ -36,7 +36,7 @@ import (
func init() {
cmd := shell.NewResourceCmd(&modules.Hosts)
cmd.List(&compute.HostListForMcpOptions{})
cmd.List(&compute.HostListOptions{})
cmd.GetMetadata(&options.BaseIdOptions{})
cmd.GetProperty(&compute.HostStatusStatisticsOptions{})
cmd.Update(&compute.HostUpdateOptions{})
@@ -77,7 +77,6 @@ func init() {
stats, _ := data.GetArray("workers")
printList(&printutils.ListResult{Data: stats}, nil)
}, &options.BaseIdOptions{})
cmd.Get("api-stats", &options.BaseIdOptions{})
cmd.Get("tap-config", &options.BaseIdOptions{})
cmd.GetWithCustomShow("nics", func(data jsonutils.JSONObject) {
results := printutils.ListResult{}

View File

@@ -1,31 +0,0 @@
// 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 compute
import (
"yunion.io/x/onecloud/cmd/climc/shell"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
"yunion.io/x/onecloud/pkg/mcclient/options/compute"
)
func init() {
cmd := shell.NewResourceCmd(&modules.IpSets)
cmd.List(&compute.IpSetListOptions{})
cmd.Show(&compute.IpSetIdOptions{})
cmd.Create(&compute.IpSetCreateOptions{})
cmd.Update(&compute.IpSetUpdateOptions{})
cmd.Delete(&compute.IpSetIdOptions{})
cmd.Perform("syncstatus", &compute.IpSetIdOptions{})
}

View File

@@ -26,12 +26,8 @@ func init() {
cmd.List(&compute.DeviceListOptions{})
cmd.Update(&compute.DeviceUpdateOptions{})
cmd.Show(&compute.DeviceShowOptions{})
cmd.Create(&compute.DeviceCreateOptions{})
cmd.BatchDelete(&compute.DeviceDeleteOptions{})
cmd.BatchPerform("purge", &compute.DevicePurgeOptions{})
cmd.Perform("public", &options.SharableResourcePublicOptions{})
cmd.Perform("private", &options.BaseIdOptions{})
scmd := shell.NewResourceCmd(&modules.ServerIsolatedDevices)
scmd.List(&compute.ServerDeviceListOptions{})
}

View File

@@ -25,7 +25,7 @@ func init() {
cmd := shell.NewResourceCmd(&modules.Kafkas)
cmd.List(&compute.KafkaListOptions{})
cmd.Update(&compute.KafkaUpdateOptions{})
cmd.Show(&compute.KafkaShowOptions{})
cmd.Show(&compute.KafkaIdOption{})
cmd.Get("topics", &options.BaseIdOptions{})
cmd.Delete(&compute.KafkaIdOption{})
cmd.Perform("syncstatus", &compute.KafkaIdOption{})

View File

@@ -97,9 +97,6 @@ func init() {
})
R(&options.LoadbalancerAgentUpdateOptions{}, "lbagent-update", "Update lbagent", func(s *mcclient.ClientSession, opts *options.LoadbalancerAgentUpdateOptions) error {
params, err := opts.Params()
if err != nil {
return err
}
lbagent, err := modules.LoadbalancerAgents.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -55,9 +55,6 @@ func init() {
})
R(&options.LoadbalancerBackendUpdateOptions{}, "lbbackend-update", "Update lbbackend", func(s *mcclient.ClientSession, opts *options.LoadbalancerBackendUpdateOptions) error {
params, err := opts.Params()
if err != nil {
return err
}
lbbackend, err := modules.LoadbalancerBackends.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -54,9 +54,6 @@ func init() {
})
R(&options.LoadbalancerListenerRuleUpdateOptions{}, "lblistenerrule-update", "Update lblistenerrule", func(s *mcclient.ClientSession, opts *options.LoadbalancerListenerRuleUpdateOptions) error {
params, err := opts.Params()
if err != nil {
return err
}
lblistenerrule, err := modules.LoadbalancerListenerRules.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -87,9 +87,6 @@ func init() {
})
R(&options.LoadbalancerListenerUpdateOptions{}, "lblistener-update", "Update lblistener", func(s *mcclient.ClientSession, opts *options.LoadbalancerListenerUpdateOptions) error {
params, err := opts.Params()
if err != nil {
return err
}
lblistener, err := modules.LoadbalancerListeners.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -25,7 +25,7 @@ func init() {
cmd := shell.NewResourceCmd(&modules.MongoDB)
cmd.List(&compute.MongoDBListOptions{})
cmd.Update(&compute.MongoDBUpdateOptions{})
cmd.Show(&compute.MongoDBShowOptions{})
cmd.Show(&options.BaseIdOptions{})
cmd.Delete(&options.BaseIdOptions{})
cmd.Get("backups", &options.BaseIdOptions{})
cmd.Perform("syncstatus", &options.BaseIdOptions{})

View File

@@ -25,7 +25,7 @@ import (
func init() {
type NetworkinterfaceNetworkListOptions struct {
Networkinterface string `help:"ID or Name of Networkinterface"`
Networkinterface string `help:"ID or Name of Server"`
Network string `help:"Network ID or name"`
}
R(&NetworkinterfaceNetworkListOptions{}, "networkinterface-network-list", "List server network pairs", func(s *mcclient.ClientSession, args *NetworkinterfaceNetworkListOptions) error {

View File

@@ -212,7 +212,7 @@ func init() {
type NetworkChangeOwnerOptions struct {
ID string `help:"Network to change owner" json:"-"`
PROJECT string `help:"Project ID or name" json:"tenant"`
PROJECT string `help:"Project ID or change" json:"tenant"`
}
R(&NetworkChangeOwnerOptions{}, "network-change-owner", "Change owner project of a network", func(s *mcclient.ClientSession, args *NetworkChangeOwnerOptions) error {
params, err := options.StructToParams(args)

View File

@@ -57,9 +57,6 @@ func init() {
})
R(&options.ProxySettingUpdateOptions{}, "proxysetting-update", "Update proxysetting", func(s *mcclient.ClientSession, opts *options.ProxySettingUpdateOptions) error {
params, err := options.StructToParams(opts)
if err != nil {
return err
}
proxysetting, err := modules.ProxySettings.Update(s, opts.ID, params)
if err != nil {
return err

View File

@@ -24,10 +24,10 @@ import (
func init() {
type NetworkReserveIPOptions struct {
NETWORK string `help:"ID or name of network"`
NETWORK string `help:"IP or name of network"`
NOTES string `help:"Why reserve this IP"`
IPS []string `help:"IPs to reserve"`
Duration string `help:"reservation duration, e.g. 1D, 1H, 2M"`
Duration string `help:"reservation duration, e.g. 1I, 1H, 2M"`
Status string `help:"ip status"`
}
R(&NetworkReserveIPOptions{}, "network-reserve-ip", "Reserve an IP address from pool", func(s *mcclient.ClientSession, args *NetworkReserveIPOptions) error {
@@ -49,7 +49,7 @@ func init() {
})
type NetworkReleaseReservedIPOptions struct {
NETWORK string `help:"ID or name of network"`
NETWORK string `help:"IP or name of network"`
IP string `help:"IP to release"`
}
R(&NetworkReleaseReservedIPOptions{}, "network-release-reserved-ip", "Release a reserved IP into pool", func(s *mcclient.ClientSession, args *NetworkReleaseReservedIPOptions) error {

View File

@@ -49,9 +49,6 @@ func init() {
R(&ScalingPolicyListOptions{}, "scaling-policy-list", "List Scaling Policy", func(s *mcclient.ClientSession,
args *ScalingPolicyListOptions) error {
params, err := options.ListStructToParams(args)
if err != nil {
return err
}
policies, err := modules.ScalingPolicy.List(s, params)
if err != nil {
return err

View File

@@ -17,14 +17,15 @@ package compute
import (
"yunion.io/x/onecloud/cmd/climc/shell"
modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
"yunion.io/x/onecloud/pkg/mcclient/options"
"yunion.io/x/onecloud/pkg/mcclient/options/compute"
)
func init() {
cmd := shell.NewResourceCmd(&modules.SecGroupRules).WithKeyword("secgroup-rule")
cmd.List(&compute.SecGroupRulesListOptions{})
cmd.Show(&compute.SecGroupRuleShowOptions{})
cmd.Delete(&compute.SecGroupRuleDeleteOptions{})
cmd.Show(&options.BaseShowOptions{})
cmd.Delete(&options.BaseIdOptions{})
cmd.Create(&compute.SecGroupRulesCreateOptions{})
cmd.Update(&compute.SecGroupRulesUpdateOptions{})
}

View File

@@ -25,9 +25,9 @@ func init() {
cmd := shell.NewResourceCmd(&modules.SecGroups)
cmd.List(&options.SecgroupListOptions{})
cmd.Create(&options.SecgroupCreateOptions{})
cmd.Show(&options.SecgroupShowOptions{})
cmd.Show(&options.SecgroupIdOptions{})
cmd.Update(&baseoptions.BaseUpdateOptions{})
cmd.Delete(&options.SecgroupDeleteOptions{})
cmd.Delete(&options.SecgroupIdOptions{})
cmd.Perform("public", &options.SecgroupIdOptions{})
cmd.Perform("syncstatus", &options.SecgroupIdOptions{})
cmd.Perform("private", &options.SecgroupIdOptions{})

View File

@@ -77,10 +77,22 @@ func init() {
type ServerDiskUpdateOptions struct {
SERVER string `help:"ID or Name of server"`
DISK string `help:"ID or Name of Disk"`
Driver string `help:"Driver of vDisk" choices:"virtio|ide|sata|scsi|pvscsi"`
Cache string `help:"Cache mode of vDisk" choices:"writethrough|none|writeback|directsync"`
Aio string `help:"Asynchronous IO mode of vDisk" choices:"native|threads"`
Index int64 `help:"Index of vDisk" default:"-1"`
}
R(&ServerDiskUpdateOptions{}, "server-disk-update", "Update details of a virtual disk of a virtual server", func(s *mcclient.ClientSession, args *ServerDiskUpdateOptions) error {
params := jsonutils.NewDict()
if len(args.Driver) > 0 {
params.Add(jsonutils.NewString(args.Driver), "driver")
}
if len(args.Cache) > 0 {
params.Add(jsonutils.NewString(args.Cache), "cache_mode")
}
if len(args.Aio) > 0 {
params.Add(jsonutils.NewString(args.Aio), "aio_mode")
}
if args.Index >= 0 {
params.Add(jsonutils.NewInt(args.Index), "index")
}
@@ -113,12 +125,10 @@ func init() {
})
type ServerAttachDiskOptions struct {
_ struct{} `mcp-desc:"将已有硬盘挂载到虚机。SERVER/DISK 为 id/name可选 driver。先 climc_server_list + climc_disk_list"`
SERVER string `help:"ID or name of server"`
DISK string `help:"ID or name of disk to attach"`
Driver string `help:"Disk driver" choices:"virtio|ide|scsi" mcp:"true"`
Cache string `help:"Cache mode" choices:"writeback|none|writethrough" mcp:"true"`
DISK string `help:"ID of name of disk to attach"`
Driver string `help:"Driver" choices:"virtio|ide|scsi"`
Cache string `help:"Cache mode" choices:"writeback|none|writethrought"`
}
R(&ServerAttachDiskOptions{}, "server-attach-disk", "Attach an existing virtual disks to a virtual server", func(s *mcclient.ClientSession, args *ServerAttachDiskOptions) error {
params := jsonutils.NewDict()
@@ -138,11 +148,9 @@ func init() {
})
type ServerDetachDiskOptions struct {
_ struct{} `mcp-desc:"从虚机卸载硬盘。SERVER/DISK 为 id/name可选 delete-disk。先 climc_server_list / climc_disk_list"`
SERVER string `help:"ID or name of server"`
DISK string `help:"ID or name of disk to detach"`
DeleteDisk bool `help:"Delete the disk after detach (ignored if disk has auto_delete)" mcp:"true"`
DeleteDisk bool `help:"Delete disk if the disk not has flag of auto_delete when detached"`
}
R(&ServerDetachDiskOptions{}, "server-detach-disk", "Detach a disk from a virtual server", func(s *mcclient.ClientSession, args *ServerDetachDiskOptions) error {
params := jsonutils.NewDict()

View File

@@ -23,15 +23,15 @@ import (
func init() {
type ServerAttachDeviceOptions struct {
SERVER string `help:"ID or name of server"`
DEVICE string `help:"ID of isolated device to attach"`
GpuType string `help:"Type of GPU to attach to" choices:"HPC|VGA"`
SERVER string `help:"ID or name of server"`
DEVICE string `help:"ID of isolated device to attach"`
Type string `help:"Device type" choices:"GPU-HPC|GPU-VGA|PCI"`
}
R(&ServerAttachDeviceOptions{}, "server-attach-isolated-device", "Attach an existing isolated device to a virtual server", func(s *mcclient.ClientSession, args *ServerAttachDeviceOptions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.DEVICE), "device")
if args.GpuType != "" {
params.Add(jsonutils.NewString(args.GpuType), "gpu_type")
if len(args.Type) > 0 {
params.Add(jsonutils.NewString(args.Type), "dev_type")
}
srv, err := modules.Servers.PerformAction(s, args.SERVER, "attach-isolated-device", params)
if err != nil {
@@ -42,18 +42,12 @@ func init() {
})
type ServerDetachDeviceOptions struct {
SERVER string `help:"ID or name of server"`
DEVICE string `help:"ID of isolated device to detach"`
INDEX int `help:"Index of isolated device to detach"`
IsForce bool `help:"Force detach isolated device"`
SERVER string `help:"ID or name of server"`
DEVICE string `help:"ID of isolated device to attach"`
}
R(&ServerDetachDeviceOptions{}, "server-detach-isolated-device", "Detach a isolated device from a virtual server", func(s *mcclient.ClientSession, args *ServerDetachDeviceOptions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.DEVICE), "device")
params.Add(jsonutils.NewInt(int64(args.INDEX)), "index")
if args.IsForce {
params.Set("is_force", jsonutils.JSONTrue)
}
srv, err := modules.Servers.PerformAction(s, args.SERVER, "detach-isolated-device", params)
if err != nil {
return err

View File

@@ -96,7 +96,7 @@ func init() {
type ServerNetworkUpdateOptions struct {
SERVER string `help:"ID or Name of Server"`
NETWORK string `help:"ID or Name of Network"`
NETWORK string `help:"ID or Name of Wire"`
Mac string `help:"Mac of NIC"`
Driver string `help:"Driver model of vNIC" choices:"virtio|e1000|vmxnet3|rtl8139"`
Index int64 `help:"Index of NIC" default:"-1"`
@@ -144,10 +144,7 @@ func init() {
type ServerNetworkBWOptions struct {
SERVER string `help:"ID or Name of server"`
MACORIP string `help:"IP, Mac, or Index of NIC"`
BW int64 `help:"Bandwidth in Mbps"`
Tx int64 `help:"Tx bandwidth in Mbps"`
Rx int64 `help:"Rx bandwidth in Mbps"`
BW int64 `help:"Bandwidth in Mbps"`
}
R(&ServerNetworkBWOptions{}, "server-change-bandwidth", "Change server network bandwidth in Mbps", func(s *mcclient.ClientSession, args *ServerNetworkBWOptions) error {
params := jsonutils.NewDict()
@@ -165,8 +162,6 @@ func init() {
return fmt.Errorf("Please specify Ip or Mac")
}
params.Add(jsonutils.NewInt(args.BW), "bandwidth")
params.Add(jsonutils.NewInt(args.Tx), "tx_bw_limit")
params.Add(jsonutils.NewInt(args.Rx), "rx_bw_limit")
server, err := modules.Servers.PerformAction(s, args.SERVER, "change-bandwidth", params)
if err != nil {
return err
@@ -205,7 +200,7 @@ func init() {
Reserve bool `help:"Put the release IP address into reserved address pool"`
Force bool `help:"detach server network by force"`
}
R(&ServerDetachNetworkOptions{}, "server-detach-network", "Detach the virtual network from a virtual server", func(s *mcclient.ClientSession, args *ServerDetachNetworkOptions) error {
R(&ServerDetachNetworkOptions{}, "server-detach-network", "Detach the virtual network fron a virtual server", func(s *mcclient.ClientSession, args *ServerDetachNetworkOptions) error {
params := jsonutils.NewDict()
// params.Add(jsonutils.NewString(args.NETWORK), "net_id")
if args.Reserve {

View File

@@ -127,9 +127,8 @@ func init() {
cmd.Perform("update-sub-ips", &options.ServerUpdateSubIpsOptions{})
cmd.BatchPerform("restore-virtual-isolated-devices", &options.ServerIdsOptions{})
cmd.BatchPerform("set-os-info", &options.ServerSetOSInfoOptions{})
// 与 server-start 复用参数时单独包一层,避免继承 mcp-desc 被注册为 MCP tool
cmd.BatchPerform("start-rescue", &options.ServerStartRescueOptions{})
cmd.BatchPerform("stop-rescue", &options.ServerStopRescueOptions{})
cmd.BatchPerform("start-rescue", &options.ServerStartOptions{})
cmd.BatchPerform("stop-rescue", &options.ServerStartOptions{})
cmd.BatchPerform("sync-os-info", &options.ServerIdsOptions{})
cmd.BatchPerform("set-root-disk-matcher", &options.ServerSetRootDiskMatcher{})
cmd.Perform("disable-auto-merge-snapshot", &options.ServerDisableAutoMergeSnapshot{})
@@ -139,7 +138,6 @@ func init() {
cmd.Perform("kickstart-complete", &options.ServerKickstartCompleteOptions{})
cmd.Get("kickstart", new(options.ServerIdOptions))
cmd.Get("vnc", new(options.ServerVncOptions))
cmd.Get("modification-types", new(options.ServerIdOptions))
cmd.Get("desc", new(options.ServerIdOptions))
cmd.Get("status", new(options.ServerIdOptions))
cmd.Get("iso", new(options.ServerIdOptions))
@@ -159,7 +157,6 @@ func init() {
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.Perform("change-disk-driver", new(options.ServerChangeDiskDriverOptions))
cmd.GetProperty(&options.ServerStatusStatisticsOptions{})
cmd.GetProperty(&options.ServerProjectStatisticsOptions{})
@@ -223,8 +220,6 @@ func init() {
params.Eip = opts.Eip
params.EipChargeType = billing_api.ParseNetChargeType(opts.EipChargeType)
params.EipBw = opts.EipBw
params.EipTxBw = opts.EipTxBw
params.EipRxBw = opts.EipRxBw
server, err := modules.Servers.Create(s, params.JSON(params))
if err != nil {
@@ -294,7 +289,7 @@ func init() {
type ServerDiskSnapshotOptions struct {
SERVER string `help:"server ID or Name"`
DISK string `help:"Disk ID for snapshot creation"`
DISK string `help:"create snapshot disk id"`
SNAPSHOTNAME string `help:"Snapshot name"`
}
R(&ServerDiskSnapshotOptions{}, "server-disk-create-snapshot", "Task server disk snapshot", func(s *mcclient.ClientSession, args *ServerDiskSnapshotOptions) error {
@@ -734,7 +729,7 @@ func init() {
type ServerSnapshotAndClone struct {
ID string `help:"ID or name of VM" json:"-"`
NAME string `help:"New instance name" json:"name"`
NAME string `help:"Newly instance name" json:"name"`
AutoStart bool `help:"Auto start new guest"`
AllowDelete bool `help:"Allow new guest delete" json:"-"`
Count int `help:"Guest count"`
@@ -773,7 +768,7 @@ func init() {
ID string `help:"ID or name of server"`
Save string `help:"save xml into this file"`
}
R(&ServerJnlpOptions{}, "server-jnlp", "Get baremetal server jnlp file content", func(s *mcclient.ClientSession, args *ServerJnlpOptions) error {
R(&ServerJnlpOptions{}, "server-jnlp", "Get baremetal server jnlp file contentn", func(s *mcclient.ClientSession, args *ServerJnlpOptions) error {
spec, err := modules.Servers.GetSpecific(s, args.ID, "jnlp", nil)
if err != nil {
return err

View File

@@ -30,5 +30,4 @@ func init() {
cmd.Create(&options.ServerSkusCreateOptions{})
cmd.Update(&options.ServerSkusUpdateOptions{})
cmd.ClassShow(&options.ServerSkusListOptions{})
cmd.PerformClass("batch-update-price", &options.ServerSkusBatchUpdatePriceOptions{})
}

View File

@@ -24,18 +24,16 @@ import (
func init() {
type SnapshotsListOptions struct {
_ struct{} `mcp-desc:"列出磁盘快照。可用 disk/server/disk-type 过滤"`
options.BaseListOptions
Disk string `help:"Disk snapshots" json:"disk_id" mcp:"true"`
FakeDeleted bool `help:"Show fake deleted snapshot or not" mcp:"true"`
Disk string `help:"Disk snapshots" json:"disk_id"`
FakeDeleted bool `help:"Show fake deleted snapshot or not"`
Local *bool `help:"Show local snapshots"`
Share *bool `help:"Show shared snapshots"`
DiskType string `help:"Filter by disk type" choices:"sys|data" mcp:"true"`
Server string `help:"Filter by server" json:"server_id" mcp:"true"`
Unused bool `mcp:"true"`
StorageId string `help:"Filter by storage id" mcp:"true"`
DiskType string `help:"Filter by disk type" choices:"sys|data"`
Server string `help:"Filter by server" json:"server_id"`
Unused bool
StorageId string `help:"Filter by storage id"`
OrderByGuest string
OrderByDiskName string

View File

@@ -32,7 +32,7 @@ func init() {
HostType string `help:"Host type filter" choices:"baremetal|hypervisor|esxi|kubelet|hyperv"`
Gpu bool `help:"Only show gpu devices"`
Zone string `help:"Filter by zone id or name"`
Occupied bool `help:"show occupied host" json:"-"`
Occupied bool `help:"show occupid host" json:"-"`
}
R(&ListOptions{}, "spec", "List all kinds of model specs", func(s *mcclient.ClientSession, args *ListOptions) error {
var params *jsonutils.JSONDict
@@ -76,7 +76,7 @@ func init() {
DiskSpec []string `help:"Disk spec string, like 'Linux_adapter0_HDD_111Gx4'"`
Nic int64 `help:"#Nics count of host" metavar:"<NIC_COUNT>"`
GpuModel []string `help:"GPU model, like 'GeForce GTX 1050 Ti'"`
Occupied bool `help:"Show occupied host" json:"-"`
Occupied bool `help:"Show occupid host" json:"-"`
Manufacture string `help:"Manufacture of host"`
Model string `help:"Model of host"`
}

View File

@@ -31,19 +31,17 @@ import (
)
type GeneralUsageOptions struct {
_ struct{} `mcp-desc:"资源用量汇总usages/general-usage。报表「资源概览」用本工具不要用各资源 list 凑。项目级传 project=项目名/id域级传 project-domain平台级 scope=system。返回 servers/rds/cache/loadbalancer/buckets/eip/snapshot/vpcs/networks/ports 及 running_servers、disks.attached 等"`
HostType []string `help:"Host types" choices:"hypervisor|baremetal|esxi|xen|kubelet|hyperv|aliyun|azure|aws|huawei|qcloud|openstack|ucloud|zstack|google|ctyun|cnware"`
Provider []string `help:"Provider" choices:"OneCloud|VMware|Aliyun|Azure|Aws|Qcloud|Huawei|OpenStack|Ucloud|VolcEngine|ZStack|Google|Ctyun|CNWare"`
Brand []string `help:"Brands" choices:"OneCloud|VMware|Aliyun|Azure|Aws|Qcloud|Huawei|OpenStack|Ucloud|VolcEngine|ZStack|Google|Ctyun|CNWare"`
Project string `help:"show usage of specified project"`
HostType []string `help:"Host types" choices:"hypervisor|baremetal|esxi|xen|kubelet|hyperv|aliyun|azure|aws|huawei|qcloud|openstack|ucloud|zstack|google|ctyun|cnware" mcp:"true"`
Provider []string `help:"Provider" choices:"OneCloud|VMware|Aliyun|Azure|Aws|Qcloud|Huawei|OpenStack|Ucloud|VolcEngine|ZStack|Google|Ctyun|CNWare" mcp:"true"`
Brand []string `help:"Brands" choices:"OneCloud|VMware|Aliyun|Azure|Aws|Qcloud|Huawei|OpenStack|Ucloud|VolcEngine|ZStack|Google|Ctyun|CNWare" mcp:"true"`
Project string `help:"show usage of specified project" mcp:"true"`
ProjectDomain string `help:"show usage of specified domain"`
ProjectDomain string `help:"show usage of specified domain" mcp:"true"`
CloudEnv string `help:"show usage of specified cloudenv" choices:"public|private|onpremise"`
Scope string `help:"show usage of specified privilege scope" choices:"system|domain|project"`
CloudEnv string `help:"show usage of specified cloudenv" choices:"public|private|onpremise" mcp:"true"`
Scope string `help:"show usage of specified privilege scope" choices:"system|domain|project" mcp:"true"`
Refresh bool `help:"force refresh usage statistics" mcp:"true"`
Refresh bool `help:"force refresh usage statistics"`
}
func fetchHostTypeOptions(args *GeneralUsageOptions) *jsonutils.JSONDict {

View File

@@ -57,9 +57,6 @@ func init() {
}
var result *printutils.ListResult
result, err = modules.DevToolCronjobs.List(s, params)
if err != nil {
return err
}
printList(result, modules.DevToolCronjobs.GetColumns(s))
return nil
})

View File

@@ -50,9 +50,6 @@ func init() {
}
var result *printutils.ListResult
result, err = modules.DevToolTemplates.List(s, params)
if err != nil {
return err
}
printList(result, modules.DevToolTemplates.GetColumns(s))
return nil
})

View File

@@ -25,15 +25,15 @@ import (
)
type BaseEventListOptions struct {
Scope string `help:"RBAC scope" choices:"project|domain|system"`
Scope string `help:"scope" choices:"project|domain|system"`
Since string `help:"Show logs since specific date" metavar:"DATETIME"`
Until string `help:"Show logs until specific date" metavar:"DATETIME"`
Limit int64 `help:"Limit number of logs" default:"20"`
Offset int64 `help:"Offset for pagination"`
Offset int64 `help:"Offset"`
Ascending bool `help:"Ascending order"`
Descending bool `help:"Descending order"`
OrderBy string `help:"order by specific field"`
Action []string `help:"Filter by log action"`
Action []string `help:"Log action"`
User string `help:"filter by operator user"`
Project string `help:"filter by operator user's project"`

View File

@@ -22,9 +22,9 @@ import (
var (
R = shell.R
printList = shell.PrintList
printObject = shell.PrintObject
printBatchResults = shell.PrintBatchResults
printList = printutils.PrintJSONList
printObject = printutils.PrintJSONObject
printBatchResults = printutils.PrintJSONBatchResults
InvalidUpdateError = shell.InvalidUpdateError
printObjectRecursive = printutils.PrintJSONObjectRecursive

View File

@@ -28,7 +28,7 @@ import (
func init() {
type CredentialListOptions struct {
Scope string `help:"RBAC scope" choices:"project|domain|system"`
Scope string `help:"scope" choices:"project|domain|system"`
Type string `help:"credential type" choices:"totp|recovery_secret|aksk|enc_key|container_image"`
User string `help:"filter by user"`
UserDomain string `help:"the domain of user"`

View File

@@ -32,12 +32,10 @@ func init() {
cmd.GetProperty(&identity_options.DomainGetPropertyTagValuePairOptions{})
cmd.GetProperty(&identity_options.DomainGetPropertyTagValueTreeOptions{})
type DomainShowOptions struct {
_ struct{} `mcp-desc:"查询域详情。ID 可用 climc_domain_list 返回的 id/name"`
type DomainDetailOptions struct {
ID string `help:"ID or domain"`
}
R(&DomainShowOptions{}, "domain-show", "Show detail of domain", func(s *mcclient.ClientSession, args *DomainShowOptions) error {
R(&DomainDetailOptions{}, "domain-show", "Show detail of domain", func(s *mcclient.ClientSession, args *DomainDetailOptions) error {
result, err := modules.Domains.Get(s, args.ID, nil)
if err != nil {
return err
@@ -45,12 +43,7 @@ func init() {
printObject(result)
return nil
})
type DomainDeleteOptions struct {
_ struct{} `mcp-desc:"删除域。若尚不知 id先用 climc_domain_list 定位;确认域下无项目/用户后再删"`
ID string `help:"ID or domain"`
}
R(&DomainDeleteOptions{}, "domain-delete", "Delete a domain", func(s *mcclient.ClientSession, args *DomainDeleteOptions) error {
R(&DomainDetailOptions{}, "domain-delete", "Delete a domain", func(s *mcclient.ClientSession, args *DomainDetailOptions) error {
objId, err := modules.Domains.GetId(s, args.ID, nil)
if err != nil {
return err
@@ -79,14 +72,12 @@ func init() {
}) */
type DomainCreateOptions struct {
_ struct{} `mcp-desc:"创建域。NAME 必填;可选 displayname/desc/enabled"`
NAME string `help:"Name of domain"`
Desc string `help:"Description" mcp:"true"`
Enabled bool `help:"Set the domain enabled" mcp:"true"`
Disabled bool `help:"Set the domain disabled" mcp:"true"`
Desc string `help:"Description"`
Enabled bool `help:"Set the domain enabled"`
Disabled bool `help:"Set the domain disabled"`
Displayname string `help:"display name" mcp:"true"`
Displayname string `help:"display name"`
}
R(&DomainCreateOptions{}, "domain-create", "Create a new domain", func(s *mcclient.ClientSession, args *DomainCreateOptions) error {
params := jsonutils.NewDict()

View File

@@ -775,17 +775,4 @@ func init() {
printObject(result)
return nil
})
type IdentityProviderGetPropertyAttributeNamesOptions struct {
DRIVER string `help:"driver of idp to query" json:"driver" choices:"oidc|oauth2|saml|cas"`
TEMPLATE string `help:"template of idp to query" json:"template"`
}
R(&IdentityProviderGetPropertyAttributeNamesOptions{}, "idp-attribute-names", "Get property attribute names of a idp", func(s *mcclient.ClientSession, args *IdentityProviderGetPropertyAttributeNamesOptions) error {
result, err := modules.IdentityProviders.Get(s, "attribute-names", jsonutils.Marshal(args))
if err != nil {
return err
}
printObject(result)
return nil
})
}

View File

@@ -43,10 +43,8 @@ func init() {
cmd.PerformClass("clean", &identity_options.ProjectCleanOptions{})
type ProjectShowOptions struct {
_ struct{} `mcp-desc:"查询项目详情。ID 可用 climc_project_list 返回的 id/name跨域时可传 domain"`
ID string `help:"ID or Name of project"`
Domain string `help:"Domain" mcp:"true"`
Domain string `help:"Domain"`
}
R(&ProjectShowOptions{}, "project-show", "Show details of project", func(s *mcclient.ClientSession, args *ProjectShowOptions) error {
query := jsonutils.NewDict()
@@ -64,13 +62,7 @@ func init() {
printObject(result)
return nil
})
type ProjectDeleteOptions struct {
_ struct{} `mcp-desc:"删除项目。若尚不知 id先用 climc_project_list 定位;跨域时可传 domain"`
ID string `help:"ID or Name of project"`
Domain string `help:"Domain" mcp:"true"`
}
R(&ProjectDeleteOptions{}, "project-delete", "Delete a project", func(s *mcclient.ClientSession, args *ProjectDeleteOptions) error {
R(&ProjectShowOptions{}, "project-delete", "Delete a project", func(s *mcclient.ClientSession, args *ProjectShowOptions) error {
query := jsonutils.NewDict()
if len(args.Domain) > 0 {
domainId, err := modules.Domains.GetId(s, args.Domain, nil)
@@ -91,14 +83,12 @@ func init() {
})
type ProjectCreateOptions struct {
_ struct{} `mcp-desc:"创建项目。NAME 必填;可选 domain/displayname/desc"`
NAME string `help:"Name of new project"`
Displayname string `help:"display name" mcp:"true"`
Domain string `help:"Domain" mcp:"true"`
Desc string `help:"Description" mcp:"true"`
Enabled bool `help:"Project is enabled" mcp:"true"`
Disabled bool `help:"Project is disabled" mcp:"true"`
Displayname string `help:"display name"`
Domain string `help:"Domain"`
Desc string `help:"Description"`
Enabled bool `help:"Project is enabled"`
Disabled bool `help:"Project is disabled"`
}
R(&ProjectCreateOptions{}, "project-create", "Create a project", func(s *mcclient.ClientSession, args *ProjectCreateOptions) error {
params := jsonutils.NewDict()

View File

@@ -37,11 +37,11 @@ func init() {
RoleDomain string `help:"Domain for role"`
Limit int64 `help:"maximal returned number of rows"`
Offset int64 `help:"offset index of returned results"`
Users []string `help:"filter by user id or name"`
Groups []string `help:"filter by group id or name"`
Roles []string `help:"filter by role id or name"`
Projects []string `help:"filter by project id or name"`
Domains []string `help:"filter by domain id or name"`
Users []string `help:"fitler by user id or name"`
Groups []string `help:"fitler by group id or name"`
Roles []string `help:"fitler by role id or name"`
Projects []string `help:"fitler by project id or name"`
Domains []string `help:"fitler by domain id or name"`
ProjectDomainId string
ProjectDomains []string `help:"filter by project's domain id or name"`

View File

@@ -64,14 +64,12 @@ func init() {
return nil
})*/
type UserShowOptions struct {
_ struct{} `mcp-desc:"查询用户详情。ID 可用 climc_user_list 返回的 id/name跨域时可传 domain"`
type UserDetailOptions struct {
ID string `help:"ID of user"`
Domain string `help:"Domain" mcp:"true"`
System bool `help:"show system user" mcp:"true"`
Domain string `help:"Domain"`
System bool `help:"show system user"`
}
R(&UserShowOptions{}, "user-show", "Show details of user", func(s *mcclient.ClientSession, args *UserShowOptions) error {
R(&UserDetailOptions{}, "user-show", "Show details of user", func(s *mcclient.ClientSession, args *UserDetailOptions) error {
query := jsonutils.NewDict()
if len(args.Domain) > 0 {
domainId, err := modules.Domains.GetId(s, args.Domain, nil)
@@ -91,14 +89,7 @@ func init() {
return nil
})
type UserDeleteOptions struct {
_ struct{} `mcp-desc:"删除用户。若尚不知 id先用 climc_user_list 定位;跨域时可传 domain"`
ID string `help:"ID of user"`
Domain string `help:"Domain" mcp:"true"`
System bool `help:"show system user" mcp:"true"`
}
R(&UserDeleteOptions{}, "user-delete", "Delete user", func(s *mcclient.ClientSession, args *UserDeleteOptions) error {
R(&UserDetailOptions{}, "user-delete", "Delete user", func(s *mcclient.ClientSession, args *UserDetailOptions) error {
query := jsonutils.NewDict()
if len(args.Domain) > 0 {
domainId, err := modules.Domains.GetId(s, args.Domain, nil)
@@ -118,11 +109,6 @@ func init() {
return nil
})
type UserDetailOptions struct {
ID string `help:"ID of user"`
Domain string `help:"Domain"`
System bool `help:"show system user"`
}
R(&UserDetailOptions{}, "user-project-list", "List projects of user", func(s *mcclient.ClientSession, args *UserDetailOptions) error {
query := jsonutils.NewDict()
if len(args.Domain) > 0 {
@@ -184,31 +170,29 @@ func init() {
})
type UserCreateOptions struct {
_ struct{} `mcp-desc:"创建用户。NAME 必填;建议传 password可选 domain/email/mobile/displayname"`
NAME string `help:"Name of the new user"`
Domain string `help:"Domain" mcp:"true"`
Desc string `help:"Description" mcp:"true"`
Password *string `help:"Password" mcp:"true"`
Displayname string `help:"Displayname" mcp:"true"`
Email string `help:"Email" mcp:"true"`
Mobile string `help:"Mobile" mcp:"true"`
Enabled bool `help:"Enabled" mcp:"true"`
Disabled bool `help:"Disabled" mcp:"true"`
Domain string `help:"Domain"`
Desc string `help:"Description"`
Password *string `help:"Password"`
Displayname string `help:"Displayname"`
Email string `help:"Email"`
Mobile string `help:"Mobile"`
Enabled bool `help:"Enabled"`
Disabled bool `help:"Disabled"`
SkipPasswordComplexityCheck bool `help:"skip password complexity check" mcp:"true"`
SkipPasswordComplexityCheck bool `help:"do password complexity check, default is false"`
// DefaultProject string `help:"Default project"`
SystemAccount bool `help:"is a system account?" mcp:"true"`
NoWebConsole bool `help:"disallow web console access" mcp:"true"`
EnableMfa bool `help:"enable TOTP mfa" mcp:"true"`
SystemAccount bool `help:"is a system account?"`
NoWebConsole bool `help:"allow web console access"`
EnableMfa bool `help:"enable TOTP mfa"`
IdpId string `help:"Id of identity provider to link with" mcp:"true"`
IdpEntityId string `help:"Entity id of identity provider to link with" mcp:"true"`
IdpId string `help:"Id of identity provider to link with"`
IdpEntityId string `help:"Entity id of identity provider to link with"`
Lang string `help:"user default language" mcp:"true"`
Lang string `help:"user default language"`
Expire string `help:"user expired at" mcp:"true"`
Expire string `help:"user expired at"`
}
R(&UserCreateOptions{}, "user-create", "Create a user", func(s *mcclient.ClientSession, args *UserCreateOptions) error {
params := jsonutils.NewDict()

View File

@@ -22,9 +22,9 @@ import (
var (
R = shell.R
printList = shell.PrintList
printObject = shell.PrintObject
printBatchResults = shell.PrintBatchResults
printList = printutils.PrintJSONList
printObject = printutils.PrintJSONObject
printBatchResults = printutils.PrintJSONBatchResults
InvalidUpdateError = shell.InvalidUpdateError
printObjectRecursive = printutils.PrintJSONObjectRecursive

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