fix(agent-call): support automatic spot pricing

This commit is contained in:
2026-09-13 12:56:41 +08:00
parent 3d206f7f20
commit d4fa33477d
2 changed files with 16 additions and 4 deletions
+8 -4
View File
@@ -216,15 +216,18 @@ def create_params(cfg):
raise CloudError(
"creation requires approved image/type/VSwitch/security group/SSH KeyPair"
)
spot_strategy = cfg.get("spot_strategy", "SpotWithPriceLimit")
if spot_strategy not in ("SpotWithPriceLimit", "SpotAsPriceGo"):
raise CloudError("spot_strategy must be SpotWithPriceLimit or SpotAsPriceGo")
price = cfg.get("spot_price_limit")
if (
if spot_strategy == "SpotWithPriceLimit" and (
isinstance(price, bool)
or not isinstance(price, (int, float))
or not math.isfinite(price)
or price <= 0
):
raise CloudError(
"a positive, finite spot_price_limit approved by the owner is required"
"a positive, finite spot_price_limit is required for SpotWithPriceLimit"
)
disk = cfg.get("system_disk_gib", 40)
if isinstance(disk, bool) or not isinstance(disk, int) or not 40 <= disk <= 200:
@@ -241,14 +244,15 @@ def create_params(cfg):
"InstanceName": cfg["project_tag"],
"InstanceChargeType": "PostPaid",
"InternetMaxBandwidthOut": 0,
"SpotStrategy": "SpotWithPriceLimit",
"SpotPriceLimit": price,
"SpotStrategy": spot_strategy,
"SystemDisk.Category": cfg.get("system_disk_category", "cloud_essd"),
"SystemDisk.Size": disk,
"SystemDisk.PerformanceLevel": cfg.get("system_disk_performance_level", "PL1"),
"Tag.1.Key": "project",
"Tag.1.Value": cfg["project_tag"],
}
if spot_strategy == "SpotWithPriceLimit":
params["SpotPriceLimit"] = price
user_data_file = cfg.get("user_data_file")
if user_data_file is not None:
if not isinstance(user_data_file, str) or not user_data_file.strip():