Skip to content

Commit 9c45909

Browse files
Staging v0.11.22 with k8s validation skip option
2 parents ea62d3c + d632011 commit 9c45909

7 files changed

Lines changed: 48 additions & 22 deletions

File tree

assets/k8sclusterinfo.yaml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,10 @@ k8scluster:
116116
# ap-northeast-1,ap-northeast-2,ap-southeast-1,ap-southeast-3,ap-southeast-5,us-west-1,us-east-1,eu-central-1,eu-west-1,cn-beijing,cn-hongkong,cn-shanghai,cn-huhehaote,cn-heyuan,cn-wulanchabu,cn-guangzhou
117117
- region: [common]
118118
available:
119-
# Versions 1.33 and 1.34 are officially released but not yet fully supported by Alibaba Cloud API
120-
# CB-Spider fails with "failed to get valid runtime version" error when creating clusters with these versions
121-
# This is due to incomplete runtime metadata availability in Alibaba Cloud's DescribeKubernetesVersionMetadata API
122-
# Use 1.32 or 1.31 until Alibaba Cloud fully deploys these versions across all regions
123-
# - name: "1.34"
124-
# id: "1.34.3-aliyun.1"
125-
# - name: "1.33"
126-
# id: "1.33.3-aliyun.1"
119+
- name: "1.34"
120+
id: "1.34.1-aliyun.1"
121+
- name: "1.33"
122+
id: "1.33.3-aliyun.1"
127123
- name: "1.32"
128124
id: "1.32.7-aliyun.1"
129125
- name: "1.31"

docker-compose.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ services:
2424

2525
# CB-Tumblebug
2626
cb-tumblebug:
27-
image: cloudbaristaorg/cb-tumblebug:0.11.21
27+
image: cloudbaristaorg/cb-tumblebug:0.11.22
2828
container_name: cb-tumblebug
2929
build:
3030
context: .
@@ -164,7 +164,7 @@ services:
164164

165165
# CB-Spider
166166
cb-spider:
167-
image: cloudbaristaorg/cb-spider:0.11.18
167+
image: cloudbaristaorg/cb-spider:0.11.19
168168
container_name: cb-spider
169169
# build:
170170
# context: ../cb-spider
@@ -199,7 +199,7 @@ services:
199199
# CB-MapUI
200200
# This is the Map-based client for CB-Tumblebug.
201201
cb-mapui:
202-
image: cloudbaristaorg/cb-mapui:0.11.20
202+
image: cloudbaristaorg/cb-mapui:0.11.21
203203
container_name: cb-mapui
204204
labels:
205205
# Explicitly tell Traefik to expose this container

src/core/infra/provisioning.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3473,7 +3473,7 @@ func checkCommonResAvailableForK8sNodeGroupDynamicReq(connName string, dReq *mod
34733473
}
34743474

34753475
// getK8sClusterReqFromDynamicReq is func to get K8sClusterReq from K8sClusterDynamicReq
3476-
func getK8sClusterReqFromDynamicReq(reqID string, nsId string, dReq *model.K8sClusterDynamicReq) (*model.K8sClusterReq, error) {
3476+
func getK8sClusterReqFromDynamicReq(reqID string, nsId string, dReq *model.K8sClusterDynamicReq, skipVersionCheck bool) (*model.K8sClusterReq, error) {
34773477
onDemand := true
34783478

34793479
emptyK8sReq := &model.K8sClusterReq{}
@@ -3487,10 +3487,24 @@ func getK8sClusterReqFromDynamicReq(reqID string, nsId string, dReq *model.K8sCl
34873487
}
34883488
k8sngReq.SpecId = specInfo.Id
34893489

3490-
k8sRecVersion, err := getK8sRecommendVersion(specInfo.ProviderName, specInfo.RegionName, dReq.Version)
3491-
if err != nil {
3492-
log.Err(err).Msg("")
3493-
return emptyK8sReq, err
3490+
var k8sRecVersion string
3491+
if skipVersionCheck {
3492+
// Use the requested version directly without validation
3493+
k8sRecVersion = dReq.Version
3494+
if k8sRecVersion == "" {
3495+
// If skipVersionCheck is true, an explicit version must be provided
3496+
err := fmt.Errorf("skipVersionCheck is true but no version is specified; an explicit version must be provided")
3497+
log.Err(err).Msg("")
3498+
return emptyK8sReq, err
3499+
}
3500+
log.Warn().Msgf("K8sCluster version validation skipped for version: %s (dynamic)", k8sRecVersion)
3501+
} else {
3502+
// Normal validation path
3503+
k8sRecVersion, err = getK8sRecommendVersion(specInfo.ProviderName, specInfo.RegionName, dReq.Version)
3504+
if err != nil {
3505+
log.Err(err).Msg("")
3506+
return emptyK8sReq, err
3507+
}
34943508
}
34953509

34963510
// If ConnectionName is specified by the request, Use ConnectionName from the request
@@ -3648,7 +3662,7 @@ func getK8sClusterReqFromDynamicReq(reqID string, nsId string, dReq *model.K8sCl
36483662
}
36493663

36503664
// CreateK8sClusterDynamic is func to create K8sCluster obeject and deploy requested K8sCluster and NodeGroup in a dynamic way
3651-
func CreateK8sClusterDynamic(reqID string, nsId string, dReq *model.K8sClusterDynamicReq, deployOption string) (*model.K8sClusterInfo, error) {
3665+
func CreateK8sClusterDynamic(reqID string, nsId string, dReq *model.K8sClusterDynamicReq, deployOption string, skipVersionCheck bool) (*model.K8sClusterInfo, error) {
36523666
emptyK8sCluster := &model.K8sClusterInfo{}
36533667
err := common.CheckString(nsId)
36543668
if err != nil {
@@ -3673,7 +3687,7 @@ func CreateK8sClusterDynamic(reqID string, nsId string, dReq *model.K8sClusterDy
36733687
}
36743688

36753689
//If not, generate default resources dynamically.
3676-
k8sReq, err := getK8sClusterReqFromDynamicReq(reqID, nsId, dReq)
3690+
k8sReq, err := getK8sClusterReqFromDynamicReq(reqID, nsId, dReq, skipVersionCheck)
36773691
if err != nil {
36783692
log.Err(err).Msg("Failed to get shared resources for dynamic K8sCluster creation")
36793693
return emptyK8sCluster, err
@@ -3706,8 +3720,7 @@ func CreateK8sClusterDynamic(reqID string, nsId string, dReq *model.K8sClusterDy
37063720
option = "hold"
37073721
}
37083722

3709-
// Default: version check is enabled (skipVersionCheck = false)
3710-
skipVersionCheck := false
3723+
// skipVersionCheck parameter is passed from function argument
37113724
return resource.CreateK8sCluster(nsId, k8sReq, option, skipVersionCheck)
37123725
}
37133726

src/interface/rest/docs/docs.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3816,6 +3816,13 @@ const docTemplate = `{
38163816
"name": "option",
38173817
"in": "query"
38183818
},
3819+
{
3820+
"type": "string",
3821+
"default": "false",
3822+
"description": "Skip Kubernetes version validation (use for testing with unlisted versions)",
3823+
"name": "skipVersionCheck",
3824+
"in": "query"
3825+
},
38193826
{
38203827
"type": "string",
38213828
"description": "Custom request ID",

src/interface/rest/docs/swagger.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/interface/rest/docs/swagger.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2995,6 +2995,13 @@ paths:
29952995
type: string
29962996
enum:
29972997
- hold
2998+
- name: skipVersionCheck
2999+
in: query
3000+
description: Skip Kubernetes version validation (use for testing with unlisted
3001+
versions)
3002+
schema:
3003+
type: string
3004+
default: "false"
29983005
- name: x-request-id
29993006
in: header
30003007
description: Custom request ID

src/interface/rest/server/resource/k8scluster.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ func RestPostK8sClusterDynamicCheckRequest(c echo.Context) error {
585585
// @Param nsId path string true "Namespace ID" default(default)
586586
// @Param k8sClusterDyanmicReq body model.K8sClusterDynamicReq true "Request body to provision K8sCluster dynamically. <br> Must include specId and imageId info. <br> (ex: {name: k8scluster01, imageId: azure+koreacentral+ubuntu22.04, specId: azure+koreacentral+Standard_B2s}]}) <br> You can use /k8sClusterRecommendNode and /k8sClusterDynamicCheckRequest to get it. <br> Check the guide: https://github.com/cloud-barista/cb-tumblebug/discussions/1913"
587587
// @Param option query string false "Option for K8sCluster creation" Enums(hold)
588+
// @Param skipVersionCheck query string false "Skip Kubernetes version validation (use for testing with unlisted versions)" default(false)
588589
// @Param x-request-id header string false "Custom request ID"
589590
// @Success 200 {object} model.K8sClusterInfo
590591
// @Failure 404 {object} model.SimpleMsg
@@ -595,14 +596,16 @@ func RestPostK8sClusterDynamic(c echo.Context) error {
595596

596597
nsId := c.Param("nsId")
597598
optionFlag := c.QueryParam("option")
599+
skipVersionCheckStr := c.QueryParam("skipVersionCheck")
600+
skipVersionCheck := skipVersionCheckStr == "true"
598601

599602
req := &model.K8sClusterDynamicReq{}
600603
if err := c.Bind(req); err != nil {
601604
log.Warn().Err(err).Msg("invalid request")
602605
return clientManager.EndRequestWithLog(c, err, nil)
603606
}
604607

605-
result, err := infra.CreateK8sClusterDynamic(reqID, nsId, req, optionFlag)
608+
result, err := infra.CreateK8sClusterDynamic(reqID, nsId, req, optionFlag, skipVersionCheck)
606609
if err != nil {
607610
log.Error().Err(err).Msg("failed to create K8sCluster dynamically")
608611
return clientManager.EndRequestWithLog(c, err, nil)

0 commit comments

Comments
 (0)