Skip to content

Commit 01b1001

Browse files
authored
Merge pull request #162 from ioito/hotfix/qx-image-version
fix: add image version
2 parents 89717d9 + 1a66ca5 commit 01b1001

2 files changed

Lines changed: 65 additions & 10 deletions

File tree

util/imagetools/image_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,22 @@ func TestNormalizeImageInfo(t *testing.T) {
165165
OsLang: "",
166166
OsArch: "x86_64",
167167
},
168+
{
169+
Name: "win7",
170+
OsDistro: "Windows",
171+
OsType: osprofile.OS_TYPE_WINDOWS,
172+
OsVersion: "7",
173+
OsLang: "",
174+
OsArch: "x86_64",
175+
},
176+
{
177+
Name: "win7_cn_x86_template",
178+
OsDistro: "Windows",
179+
OsType: osprofile.OS_TYPE_WINDOWS,
180+
OsVersion: "7",
181+
OsLang: "zh_CN",
182+
OsArch: "x86_32",
183+
},
168184
{
169185
Name: "rocky9.5-s1-chrony-tppadm-20250418-image",
170186
OsDistro: "Rocky Linux",
@@ -173,6 +189,38 @@ func TestNormalizeImageInfo(t *testing.T) {
173189
OsLang: "",
174190
OsArch: "x86_64",
175191
},
192+
{
193+
Name: "rocky9-base-image-20250418",
194+
OsDistro: "Rocky Linux",
195+
OsType: osprofile.OS_TYPE_LINUX,
196+
OsVersion: "9",
197+
OsLang: "",
198+
OsArch: "x86_64",
199+
},
200+
{
201+
Name: "almalinux9-aarch64-generic",
202+
OsDistro: "AlmaLinux",
203+
OsType: osprofile.OS_TYPE_LINUX,
204+
OsVersion: "9",
205+
OsLang: "",
206+
OsArch: "aarch64",
207+
},
208+
{
209+
Name: "Alibaba Cloud Linux 3 LTS 64bit",
210+
OsDistro: "Alibaba Cloud Linux",
211+
OsType: osprofile.OS_TYPE_LINUX,
212+
OsVersion: "3",
213+
OsLang: "",
214+
OsArch: "x86_64",
215+
},
216+
{
217+
Name: "Anolis OS 8 aarch64",
218+
OsDistro: "Anolis OS",
219+
OsType: osprofile.OS_TYPE_LINUX,
220+
OsVersion: "8",
221+
OsLang: "",
222+
OsArch: "aarch64",
223+
},
176224
}
177225

178226
for _, image := range images {

util/imagetools/imagetools.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func normalizeOsDistribution(osDist string, imageName string) string {
156156
return OS_DIST_KYLIN
157157
} else if strings.Contains(osDist, "uos") {
158158
return OS_DIST_UOS
159-
} else if strings.Contains(osDist, "windows") || regexp.MustCompile(".+win(xp|7|8|10|11|2003|2008|2012|2016|2019|2022)*").MatchString(osDist) {
159+
} else if strings.Contains(osDist, "windows") || regexp.MustCompile("(^|[^a-z0-9])win(xp|7|8|10|11|2003|2008|2012|2016|2019|2022)([^a-z0-9]|$)").MatchString(osDist) {
160160
for _, ver := range []string{"2003", "2008", "2012", "2016", "2019", "2022"} {
161161
if strings.Contains(osDist, ver) {
162162
return OS_DIST_WINDOWS_SERVER
@@ -197,18 +197,18 @@ var imageVersions = map[string][]string{
197197
OS_DIST_OPEN_EULER: {"2.0 SP1", "2.0 SP2", "2.0 SP3", "2.0 SP8", "3.0", "22.03", "23.09"},
198198
OS_DIST_EULER_OS: {"2"},
199199
// 阿里云Linux:补充1代和2/3代版本
200-
OS_DIST_ALIYUN: {"1", "2.1903", "3.2104", "3.2304"},
200+
OS_DIST_ALIYUN: {"1", "2.1903", "2", "3.2104", "3.2304", "3"},
201201

202202
// 阿里云轻量版:补充完整版本
203-
OS_DIST_ALIBABA_CLOUD_LINUX: {"2.1903", "3.2104", "3.2304", "3.2404"},
203+
OS_DIST_ALIBABA_CLOUD_LINUX: {"2.1903", "2", "3.2104", "3.2304", "3.2404", "3"},
204204
// 龙蜥OS:补充7/8系列完整小版本
205-
OS_DIST_ANOLIS: {"7.6", "7.9", "8.2", "8.4", "8.6", "8.8", "9.0", "9.2"},
205+
OS_DIST_ANOLIS: {"7.6", "7.9", "7", "8.2", "8.4", "8.6", "8.8", "8", "9.0", "9.2", "9"},
206206
// Rocky Linux:补充8/9全系列小版本
207-
OS_DIST_ROCKY_LINUX: {"8.5", "8.6", "8.7", "8.8", "8.9", "8.10", "9.0", "9.1", "9.2", "9.3", "9.4", "9.5"},
207+
OS_DIST_ROCKY_LINUX: {"8.5", "8.6", "8.7", "8.8", "8.9", "8.10", "8", "9.0", "9.1", "9.2", "9.3", "9.4", "9.5", "9"},
208208
// Fedora:补充近年主流版本(33到40)
209209
OS_DIST_FEDORA: {"33", "34", "35", "36", "37", "38", "39", "40"},
210210
// AlmaLinux:补充8/9全系列
211-
OS_DIST_ALMA_LINUX: {"8.5", "8.6", "8.7", "8.8", "8.9", "8.10", "9.0", "9.1", "9.2", "9.3", "9.4", "9.5"},
211+
OS_DIST_ALMA_LINUX: {"8.5", "8.6", "8.7", "8.8", "8.9", "8.10", "8", "9.0", "9.1", "9.2", "9.3", "9.4", "9.5", "9"},
212212
// Amazon Linux:补充1/2/2023版本
213213
OS_DIST_AMAZON_LINUX: {"2022", "2023", "1", "2"},
214214

@@ -242,7 +242,7 @@ func normalizeOsVersion(imageName string, osDist string, osVersion string) strin
242242
parts = append(parts, fmt.Sprintf(`(?P<verstr>%s[.\d]*)`, version), "")
243243
regexpStr := strings.Join(parts, `[\s-_]*`)
244244
m := regexp.MustCompile(regexpStr).FindAllStringSubmatch(strings.ToLower(imageName), -1)
245-
if m != nil && len(m) > 0 && len(m[0]) > 1 {
245+
if len(m) > 0 && len(m[0]) > 1 {
246246
verStr := m[0][1]
247247
if strings.HasPrefix(verStr, version) && len(verStr) > len(version) && !strings.HasPrefix(verStr, version+".") {
248248
verStr = version + "." + verStr[len(version):]
@@ -251,11 +251,18 @@ func normalizeOsVersion(imageName string, osDist string, osVersion string) strin
251251
}
252252
}
253253
}
254-
for i := len(versions) - 1; i > 0; i-- {
255-
if strings.Contains(imageName, versions[i]) {
256-
return versions[i]
254+
imageNameLower := strings.ToLower(imageName)
255+
bestMatch := ""
256+
for i := 0; i < len(versions); i++ {
257+
version := strings.ToLower(versions[i])
258+
pattern := fmt.Sprintf(`(^|[^0-9])%s([^0-9]|$)`, regexp.QuoteMeta(version))
259+
if regexp.MustCompile(pattern).MatchString(imageNameLower) && len(versions[i]) > len(bestMatch) {
260+
bestMatch = versions[i]
257261
}
258262
}
263+
if len(bestMatch) > 0 {
264+
return bestMatch
265+
}
259266
}
260267
return ""
261268
}

0 commit comments

Comments
 (0)