yunion.io/x/cloudmux@v0.3.10-0-alpha.1/pkg/multicloud/hcso/client/modules/mod_images.go (about) 1 // Copyright 2019 Yunion 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package modules 16 17 import ( 18 "yunion.io/x/jsonutils" 19 20 "yunion.io/x/onecloud/pkg/httperrors" 21 "yunion.io/x/cloudmux/pkg/multicloud/hcso/client/manager" 22 "yunion.io/x/cloudmux/pkg/multicloud/hcso/client/requests" 23 ) 24 25 type SImageManager struct { 26 SResourceManager 27 } 28 29 type imageProject struct { 30 projectId string 31 } 32 33 // image创建接口若非默认project,需要在header中指定X-Project-ID。url中未携带project信息(与其他接口相比有一点特殊) 34 // 绕过了ResourceManager中的projectid。直接在发送json请求前注入X-Project-ID 35 func (self *imageProject) Process(request requests.IRequest) { 36 request.AddHeaderParam("X-Project-Id", self.projectId) 37 } 38 39 func NewImageManager(cfg manager.IManagerConfig) *SImageManager { 40 var requestHook imageProject 41 if len(cfg.GetProjectId()) > 0 { 42 requestHook = imageProject{projectId: cfg.GetProjectId()} 43 } 44 45 return &SImageManager{SResourceManager: SResourceManager{ 46 SBaseManager: NewBaseManager2(cfg, &requestHook), 47 ServiceName: ServiceNameIMS, 48 Region: cfg.GetRegionId(), 49 ProjectId: "", 50 version: "v2", 51 Keyword: "image", 52 KeywordPlural: "images", 53 54 ResourceKeyword: "cloudimages", 55 }} 56 } 57 58 //https://support.huaweicloud.com/api-ims/zh-cn_topic_0020091566.html 59 func (self *SImageManager) Get(id string, querys map[string]string) (jsonutils.JSONObject, error) { 60 if querys == nil { 61 querys = make(map[string]string, 0) 62 } 63 64 querys["id"] = id 65 // 这里默认使用private 66 // if t, exists := querys["__imagetype"]; !exists || len(t) == 0 { 67 // querys["__imagetype"] = "private" 68 // } 69 70 ret, err := self.ListInContext(nil, querys) 71 if err != nil { 72 return nil, err 73 } 74 75 if ret.Data == nil || len(ret.Data) == 0 { 76 return nil, httperrors.NewNotFoundError("image %s not found", id) 77 } 78 79 return ret.Data[0], nil 80 } 81 82 // https://support.huaweicloud.com/api-ims/zh-cn_topic_0020092108.html 83 // 删除image只能用这个manager 84 func NewOpenstackImageManager(cfg manager.IManagerConfig) *SImageManager { 85 var requestHook imageProject 86 if len(cfg.GetProjectId()) > 0 { 87 requestHook = imageProject{projectId: cfg.GetProjectId()} 88 } 89 90 return &SImageManager{SResourceManager: SResourceManager{ 91 SBaseManager: NewBaseManager2(cfg, &requestHook), 92 ServiceName: ServiceNameIMS, 93 Region: cfg.GetRegionId(), 94 ProjectId: "", 95 version: "v2", 96 Keyword: "image", 97 KeywordPlural: "images", 98 99 ResourceKeyword: "images", 100 }} 101 }