diff --git a/cmd/climc/shell/image/images.go b/cmd/climc/shell/image/images.go index f8b81bce54..c47ceb477b 100644 --- a/cmd/climc/shell/image/images.go +++ b/cmd/climc/shell/image/images.go @@ -120,6 +120,7 @@ func addImageOptionalOptions(s *mcclient.ClientSession, params *jsonutils.JSONDi } if len(args.OsArch) > 0 { params.Add(jsonutils.NewString(args.OsArch), "properties", "os_arch") + params.Add(jsonutils.NewString(args.OsArch), "os_arch") } if len(args.OsLang) > 0 { params.Add(jsonutils.NewString(args.OsLang), "properties", "os_language") diff --git a/pkg/image/models/images.go b/pkg/image/models/images.go index 30bba15449..a423e06f7b 100644 --- a/pkg/image/models/images.go +++ b/pkg/image/models/images.go @@ -1349,6 +1349,9 @@ func isActive(localPath string, size int64, chksum string, fastHash string, useF log.Errorf("size mistmatch: %s", localPath) return false } + if len(chksum) == 0 || len(fastHash) == 0 { + return true + } if useFastHash && len(fastHash) > 0 { fhash, err := fileutils2.FastCheckSum(localPath) if err != nil { @@ -1654,6 +1657,12 @@ func (image *SImage) updateImageInfo( userCred mcclient.TokenCredential, imageInfo *deployapi.ImageInfo, ) error { + if image.OsArch != imageInfo.OsInfo.Arch { + db.Update(image, func() error { + image.OsArch = imageInfo.OsInfo.Arch + return nil + }) + } imageProperties := jsonutils.Marshal(imageInfo.OsInfo).(*jsonutils.JSONDict) imageProperties.Set(api.IMAGE_OS_ARCH, jsonutils.NewString(imageInfo.OsInfo.Arch)) imageProperties.Set(api.IMAGE_OS_TYPE, jsonutils.NewString(imageInfo.OsType)) @@ -1950,7 +1959,7 @@ func (img *SImage) Pipeline(ctx context.Context, userCred mcclient.TokenCredenti needChecksum = true } } - if needChecksum { + if needChecksum || len(img.Checksum) == 0 || len(img.FastHash) == 0 { err := img.updateChecksum() if err != nil { return errors.Wrap(err, "updateChecksum")