fix zstack storagecache error

This commit is contained in:
ioito
2019-06-18 17:55:56 +08:00
parent bd42b054bc
commit f67becbdaf
9 changed files with 55 additions and 30 deletions
+1
View File
@@ -99,6 +99,7 @@ func (host *SHost) GetIStorages() ([]cloudprovider.ICloudStorage, error) {
}
istorages := []cloudprovider.ICloudStorage{}
for i := 0; i < len(storages); i++ {
storages[i].region = host.zone.region
switch storages[i].Type {
case StorageTypeLocal:
localStorages, err := host.zone.region.getILocalStorages(storages[i].UUID, host.UUID)
+16 -8
View File
@@ -22,6 +22,7 @@ import (
"sort"
"time"
"github.com/pkg/errors"
"yunion.io/x/onecloud/pkg/util/imagetools"
"yunion.io/x/jsonutils"
@@ -183,13 +184,20 @@ func (image *SImage) GetCreateTime() time.Time {
}
func (region *SRegion) GetImage(imageId string) (*SImage, error) {
image := &SImage{storageCache: region.getStorageCache()}
return image, region.client.getResource("images", imageId, image)
image := &SImage{}
err := region.client.getResource("images", imageId, image)
if err != nil {
return nil, errors.Wrapf(err, "region.GetImage")
}
return image, nil
}
func (region *SRegion) GetImages(imageId string) ([]SImage, error) {
func (region *SRegion) GetImages(zoneId string, imageId string) ([]SImage, error) {
images := []SImage{}
params := []string{"q=system=false"}
if len(zoneId) > 0 {
params = append(params, "q=backupStorage.zone.uuid="+zoneId)
}
if len(imageId) > 0 {
params = append(params, "q=uuid="+imageId)
}
@@ -199,8 +207,8 @@ func (region *SRegion) GetImages(imageId string) ([]SImage, error) {
return images, region.client.listAll("images", params, &images)
}
func (region *SRegion) GetBackupStorageUUID() ([]string, error) {
imageServers, err := region.GetImageServers("")
func (region *SRegion) GetBackupStorageUUID(zondId string) ([]string, error) {
imageServers, err := region.GetImageServers(zondId, "")
if err != nil {
return nil, err
}
@@ -212,8 +220,8 @@ func (region *SRegion) GetBackupStorageUUID() ([]string, error) {
return []string{servers[0].UUID}, nil
}
func (region *SRegion) CreateImage(imageName, format, osType, desc string, reader io.Reader, size int64) (*SImage, error) {
backupStorageUUIDs, err := region.GetBackupStorageUUID()
func (region *SRegion) CreateImage(zoneId string, imageName, format, osType, desc string, reader io.Reader, size int64) (*SImage, error) {
backupStorageUUIDs, err := region.GetBackupStorageUUID(zoneId)
if err != nil {
return nil, err
}
@@ -250,7 +258,7 @@ func (region *SRegion) CreateImage(imageName, format, osType, desc string, reade
body := multipart.NewReader(reader, "", imageName)
image := &SImage{storageCache: region.getStorageCache()}
image := &SImage{}
err = region.client.create("images", jsonutils.Marshal(parmas), image)
if err != nil {
return nil, err
+4 -1
View File
@@ -47,7 +47,7 @@ func (v ImageServers) Less(i, j int) bool {
return true
}
func (region *SRegion) GetImageServers(zoneId string) ([]SImageServer, error) {
func (region *SRegion) GetImageServers(zoneId, serverId string) ([]SImageServer, error) {
servers := []SImageServer{}
params := []string{"q=state=Enabled", "q=status=Connected"}
if SkipEsxi {
@@ -56,5 +56,8 @@ func (region *SRegion) GetImageServers(zoneId string) ([]SImageServer, error) {
if len(zoneId) > 0 {
params = append(params, "q=zone.uuid="+zoneId)
}
if len(serverId) > 0 {
params = append(params, "q=uuid="+serverId)
}
return servers, region.client.listAll("backup-storage", params, &servers)
}
+9 -8
View File
@@ -35,8 +35,6 @@ type SRegion struct {
izones []cloudprovider.ICloudZone
ivpcs []cloudprovider.ICloudVpc
storageCache *SStoragecache
}
func (region *SRegion) GetClient() *SZStackClient {
@@ -127,12 +125,15 @@ func (region *SRegion) GetIStoragecacheById(id string) (cloudprovider.ICloudStor
}
func (region *SRegion) GetIStoragecaches() ([]cloudprovider.ICloudStoragecache, error) {
region.storageCache = &SStoragecache{region: region}
return []cloudprovider.ICloudStoragecache{region.storageCache}, nil
}
func (region *SRegion) getStorageCache() *SStoragecache {
return &SStoragecache{region: region}
zones, err := region.GetZones("")
if err != nil {
return nil, err
}
icaches := []cloudprovider.ICloudStoragecache{}
for i := 0; i < len(zones); i++ {
icaches = append(icaches, &SStoragecache{ZoneId: zones[i].UUID, region: region})
}
return icaches, nil
}
func (region *SRegion) GetIVpcById(vpcId string) (cloudprovider.ICloudVpc, error) {
+4 -2
View File
@@ -23,10 +23,11 @@ import (
func init() {
type ImageListOptions struct {
ZoneId string
ImageId string
}
shellutils.R(&ImageListOptions{}, "image-list", "List images", func(cli *zstack.SRegion, args *ImageListOptions) error {
images, err := cli.GetImages(args.ImageId)
images, err := cli.GetImages(args.ZoneId, args.ImageId)
if err != nil {
return err
}
@@ -35,6 +36,7 @@ func init() {
})
type ImageCreateOptions struct {
ZONE string
FILE string
FORMAT string `choices:"qcow2|raw|iso"`
PLATFORM string `choices:"Linux|Windows|Other"`
@@ -51,7 +53,7 @@ func init() {
if err != nil {
return err
}
image, err := cli.CreateImage(args.FILE, args.FORMAT, args.PLATFORM, args.Desc, f, finfo.Size())
image, err := cli.CreateImage(args.ZONE, args.FILE, args.FORMAT, args.PLATFORM, args.Desc, f, finfo.Size())
if err != nil {
return err
}
+3 -2
View File
@@ -21,10 +21,11 @@ import (
func init() {
type ImageServerListOptions struct {
ZoneId string
ZoneId string
ServerId string
}
shellutils.R(&ImageServerListOptions{}, "image-server-list", "List image servers", func(cli *zstack.SRegion, args *ImageServerListOptions) error {
servers, err := cli.GetImageServers(args.ZoneId)
servers, err := cli.GetImageServers(args.ZoneId, args.ServerId)
if err != nil {
return err
}
+1 -2
View File
@@ -210,8 +210,7 @@ func (storage *SStorage) GetEnabled() bool {
}
func (storage *SStorage) GetIStoragecache() cloudprovider.ICloudStoragecache {
storage.region.GetIStoragecaches()
return storage.region.storageCache
return &SStoragecache{ZoneId: storage.ZoneUUID, region: storage.region}
}
func (storage *SStorage) CreateIDisk(name string, sizeGb int, desc string) (cloudprovider.ICloudDisk, error) {
+11 -2
View File
@@ -182,8 +182,17 @@ func (storage *SLocalStorage) GetEnabled() bool {
}
func (storage *SLocalStorage) GetIStoragecache() cloudprovider.ICloudStoragecache {
storage.region.GetIStoragecaches()
return storage.region.storageCache
cache := &SStoragecache{region: storage.region}
host, _ := storage.region.GetHost(storage.HostUUID)
if host != nil {
cache.ZoneId = host.ZoneUUID
} else {
_storage, _ := storage.region.GetStorage(storage.primaryStorageID)
if _storage != nil {
cache.ZoneId = _storage.ZoneUUID
}
}
return cache
}
func (storage *SLocalStorage) CreateIDisk(name string, sizeGb int, desc string) (cloudprovider.ICloudDisk, error) {
+6 -5
View File
@@ -31,6 +31,7 @@ import (
)
type SStoragecache struct {
ZoneId string
region *SRegion
}
@@ -39,11 +40,11 @@ func (scache *SStoragecache) GetMetadata() *jsonutils.JSONDict {
}
func (scache *SStoragecache) GetId() string {
return fmt.Sprintf("%s-%s", scache.region.client.providerID, scache.region.GetId())
return fmt.Sprintf("%s-%s/%s", scache.region.client.providerID, scache.region.GetId(), scache.ZoneId)
}
func (scache *SStoragecache) GetName() string {
return fmt.Sprintf("%s-%s", scache.region.client.providerName, scache.region.GetId())
return fmt.Sprintf("%s-%s/%s", scache.region.client.providerName, scache.region.GetId(), scache.ZoneId)
}
func (scache *SStoragecache) GetStatus() string {
@@ -55,7 +56,7 @@ func (scache *SStoragecache) Refresh() error {
}
func (scache *SStoragecache) GetGlobalId() string {
return fmt.Sprintf("%s-%s", scache.region.client.providerID, scache.region.GetGlobalId())
return scache.GetId()
}
func (scache *SStoragecache) IsEmulated() bool {
@@ -63,7 +64,7 @@ func (scache *SStoragecache) IsEmulated() bool {
}
func (scache *SStoragecache) GetIImages() ([]cloudprovider.ICloudImage, error) {
images, err := scache.region.GetImages("")
images, err := scache.region.GetImages(scache.ZoneId, "")
if err != nil {
return nil, err
}
@@ -118,7 +119,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To
log.Infof("meta data %s", meta)
size, _ := meta.Int("size")
img, err := self.region.CreateImage(image.ImageName, string(qemuimg.QCOW2), image.OsType, "", reader, size)
img, err := self.region.CreateImage(self.ZoneId, image.ImageName, string(qemuimg.QCOW2), image.OsType, "", reader, size)
if err != nil {
return "", err
}