github.com/sacloud/iaas-api-go@v1.12.0/internal/define/container_registry.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 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 define 16 17 import ( 18 "net/http" 19 20 "github.com/sacloud/iaas-api-go/internal/define/names" 21 "github.com/sacloud/iaas-api-go/internal/define/ops" 22 "github.com/sacloud/iaas-api-go/internal/dsl" 23 "github.com/sacloud/iaas-api-go/internal/dsl/meta" 24 "github.com/sacloud/iaas-api-go/naked" 25 "github.com/sacloud/iaas-api-go/types" 26 ) 27 28 const ( 29 containerRegistryAPIName = "ContainerRegistry" 30 containerRegistryAPIPathName = "commonserviceitem" 31 ) 32 33 var containerRegistryAPI = &dsl.Resource{ 34 Name: containerRegistryAPIName, 35 PathName: containerRegistryAPIPathName, 36 PathSuffix: dsl.CloudAPISuffix, 37 IsGlobal: true, 38 Operations: dsl.Operations{ 39 // find 40 ops.FindCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, findParameter, containerRegistryView), 41 42 // create 43 ops.CreateCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, containerRegistryCreateParam, containerRegistryView), 44 45 // read 46 ops.ReadCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, containerRegistryView), 47 48 // update 49 ops.UpdateCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, containerRegistryUpdateParam, containerRegistryView), 50 // updateSettings 51 ops.UpdateCommonServiceItemSettings(containerRegistryAPIName, containerRegistryUpdateSettingsNakedType, containerRegistryUpdateSettingsParam, containerRegistryView), 52 53 // delete 54 ops.Delete(containerRegistryAPIName), 55 56 // list users 57 { 58 ResourceName: containerRegistryAPIName, 59 Name: "ListUsers", 60 PathFormat: dsl.IDAndSuffixPathFormat("containerregistry/users"), 61 Method: http.MethodGet, 62 Arguments: dsl.Arguments{ 63 dsl.ArgumentID, 64 }, 65 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 66 Type: meta.Static(naked.ContainerRegistryUsers{}), 67 Name: containerRegistryAPIName, 68 }), 69 Results: dsl.Results{ 70 { 71 SourceField: containerRegistryAPIName, 72 DestField: containerRegistryUserListView.Name, 73 Model: containerRegistryUserListView, 74 }, 75 }, 76 }, 77 // Add User 78 { 79 ResourceName: containerRegistryAPIName, 80 Name: "AddUser", 81 PathFormat: dsl.IDAndSuffixPathFormat("containerregistry/users"), 82 Method: http.MethodPost, 83 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 84 Type: containerRegistryUserNakedType, 85 Name: containerRegistryAPIName, 86 }), 87 Arguments: dsl.Arguments{ 88 dsl.ArgumentID, 89 dsl.MappableArgument("param", containerRegistryUserCreateParam, containerRegistryAPIName), 90 }, 91 }, 92 // Update User 93 { 94 ResourceName: containerRegistryAPIName, 95 Name: "UpdateUser", 96 PathFormat: dsl.IDAndSuffixPathFormat("containerregistry/users/{{.username}}"), 97 Method: http.MethodPut, 98 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 99 Type: containerRegistryUserNakedType, 100 Name: containerRegistryAPIName, 101 }), 102 Arguments: dsl.Arguments{ 103 dsl.ArgumentID, 104 &dsl.Argument{ 105 Name: "username", 106 Type: meta.TypeString, 107 }, 108 dsl.MappableArgument("param", containerRegistryUserUpdateParam, containerRegistryAPIName), 109 }, 110 }, 111 // delete certificates 112 { 113 ResourceName: containerRegistryAPIName, 114 Name: "DeleteUser", 115 PathFormat: dsl.IDAndSuffixPathFormat("containerregistry/users/{{.username}}"), 116 Method: http.MethodDelete, 117 Arguments: dsl.Arguments{ 118 dsl.ArgumentID, 119 &dsl.Argument{ 120 Name: "username", 121 Type: meta.TypeString, 122 }, 123 }, 124 }, 125 }, 126 } 127 128 var ( 129 containerRegistryNakedType = meta.Static(naked.ContainerRegistry{}) 130 containerRegistryUpdateSettingsNakedType = meta.Static(naked.ContainerRegistrySettingsUpdate{}) 131 containerRegistryUserNakedType = meta.Static(naked.ContainerRegistryUser{}) 132 133 containerRegistryView = &dsl.Model{ 134 Name: containerRegistryAPIName, 135 NakedType: containerRegistryNakedType, 136 Fields: []*dsl.FieldDesc{ 137 fields.ID(), 138 fields.Name(), 139 fields.Description(), 140 fields.Tags(), 141 fields.Availability(), 142 fields.IconID(), 143 fields.CreatedAt(), 144 fields.ModifiedAt(), 145 146 // settings 147 fields.ContainerRegistryAccessLevel(), 148 fields.ContainerRegistryVirtualDomain(), 149 fields.SettingsHash(), 150 151 // status 152 fields.ContainerRegistrySubDomainLabel(), 153 fields.ContainerRegistryFQDN(), 154 }, 155 } 156 157 containerRegistryCreateParam = &dsl.Model{ 158 Name: names.CreateParameterName(containerRegistryAPIName), 159 NakedType: containerRegistryNakedType, 160 ConstFields: []*dsl.ConstFieldDesc{ 161 { 162 Name: "Class", 163 Type: meta.TypeString, 164 Tags: &dsl.FieldTags{ 165 MapConv: "Provider.Class", 166 }, 167 Value: `"containerregistry"`, 168 }, 169 }, 170 Fields: []*dsl.FieldDesc{ 171 // common fields 172 fields.Name(), 173 fields.Description(), 174 fields.Tags(), 175 fields.IconID(), 176 177 // settings 178 fields.ContainerRegistryAccessLevel(), 179 fields.ContainerRegistryVirtualDomain(), 180 // status 181 fields.ContainerRegistrySubDomainLabel(), 182 }, 183 } 184 185 containerRegistryUpdateParam = &dsl.Model{ 186 Name: names.UpdateParameterName(containerRegistryAPIName), 187 NakedType: containerRegistryNakedType, 188 Fields: []*dsl.FieldDesc{ 189 // common fields 190 fields.Name(), 191 fields.Description(), 192 fields.Tags(), 193 fields.IconID(), 194 195 // settings 196 fields.ContainerRegistryAccessLevel(), 197 fields.ContainerRegistryVirtualDomain(), 198 // settings hash 199 fields.SettingsHash(), 200 }, 201 } 202 203 containerRegistryUpdateSettingsParam = &dsl.Model{ 204 Name: names.UpdateSettingsParameterName(containerRegistryAPIName), 205 NakedType: containerRegistryNakedType, 206 Fields: []*dsl.FieldDesc{ 207 // settings 208 fields.ContainerRegistryAccessLevel(), 209 fields.ContainerRegistryVirtualDomain(), 210 // settings hash 211 fields.SettingsHash(), 212 }, 213 } 214 215 containerRegistryUserListView = &dsl.Model{ 216 Name: containerRegistryAPIName + "Users", 217 NakedType: meta.Static(naked.ContainerRegistryUsers{}), 218 Fields: []*dsl.FieldDesc{ 219 { 220 Name: "Users", 221 Type: &dsl.Model{ 222 Name: containerRegistryAPIName + "User", 223 NakedType: meta.Static(naked.ContainerRegistryUser{}), 224 IsArray: true, 225 Fields: []*dsl.FieldDesc{ 226 fields.Def("UserName", meta.TypeString), 227 fields.Def("Permission", meta.Static(types.EContainerRegistryPermission(""))), 228 }, 229 }, 230 }, 231 }, 232 } 233 containerRegistryUserCreateParam = &dsl.Model{ 234 Name: names.CreateParameterName(containerRegistryAPIName + "User"), 235 NakedType: meta.Static(naked.ContainerRegistryUser{}), 236 Fields: []*dsl.FieldDesc{ 237 fields.Def("UserName", meta.TypeString), 238 fields.Def("Password", meta.TypeString), 239 fields.Def("Permission", meta.Static(types.EContainerRegistryPermission(""))), 240 }, 241 } 242 containerRegistryUserUpdateParam = &dsl.Model{ 243 Name: names.UpdateParameterName(containerRegistryAPIName + "User"), 244 NakedType: meta.Static(naked.ContainerRegistryUser{}), 245 Fields: []*dsl.FieldDesc{ 246 fields.Def("Password", meta.TypeString), 247 fields.Def("Permission", meta.Static(types.EContainerRegistryPermission(""))), 248 }, 249 } 250 )