github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/apis/deployer/deployer.go (about) 1 /* 2 * Copyright contributors to the Hyperledger Fabric Operator project 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at: 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package deployer 20 21 import ( 22 current "github.com/IBM-Blockchain/fabric-operator/api/v1beta1" 23 "github.com/IBM-Blockchain/fabric-operator/pkg/util/image" 24 corev1 "k8s.io/api/core/v1" 25 ) 26 27 type Config struct { 28 ClusterType string `json:"clusterType"` 29 Domain string `json:"domain"` 30 DashboardURL string `json:"dashboardurl"` 31 Database Database `json:"db"` 32 Loglevel string `json:"loglevel"` 33 Port int `json:"port"` 34 TLS TLSConfig `json:"tls"` 35 Auth BasicAuth `json:"auth"` 36 Namespace string `json:"namespace"` 37 Defaults *Defaults `json:"defaults"` 38 Versions *Versions `json:"versions"` 39 ImagePullSecrets []string `json:"imagePullSecrets"` 40 ServiceConfig ServiceConfig `json:"serviceConfig"` 41 CRN *current.CRN `json:"crn"` 42 Timeouts *Timeouts `json:"timeouts"` 43 OtherImages *OtherImages `json:"otherImages"` 44 ServiceAccount string `json:"serviceAccount"` 45 UseTags *bool `json:"usetags"` 46 } 47 48 type Versions struct { 49 CA map[string]VersionCA `json:"ca"` 50 Peer map[string]VersionPeer `json:"peer"` 51 Orderer map[string]VersionOrderer `json:"orderer"` 52 } 53 54 type VersionCA struct { 55 Default bool `json:"default"` 56 Version string `json:"version"` 57 Image CAImages `json:"image,omitempty"` 58 } 59 60 type VersionOrderer struct { 61 Default bool `json:"default"` 62 Version string `json:"version"` 63 Image OrdererImages `json:"image,omitempty"` 64 } 65 type VersionPeer struct { 66 Default bool `json:"default"` 67 Version string `json:"version"` 68 Image PeerImages `json:"image,omitempty"` 69 } 70 71 // CAImages is the list of images to be used in CA deployment 72 type CAImages struct { 73 // CAImage is the name of the CA image 74 CAImage string `json:"caImage,omitempty"` 75 76 // CATag is the tag of the CA image 77 CATag string `json:"caTag,omitempty"` 78 79 // CADigest is the digest tag of the CA image 80 CADigest string `json:"caDigest,omitempty"` 81 82 // CAInitImage is the name of the Init image 83 CAInitImage string `json:"caInitImage,omitempty"` 84 85 // CAInitTag is the tag of the Init image 86 CAInitTag string `json:"caInitTag,omitempty"` 87 88 // CAInitDigest is the digest tag of the Init image 89 CAInitDigest string `json:"caInitDigest,omitempty"` 90 91 // HSMImage is the name of the HSM image 92 HSMImage string `json:"hsmImage,omitempty"` 93 94 // HSMTag is the tag of the HSM image 95 HSMTag string `json:"hsmTag,omitempty"` 96 97 // HSMDigest is the tag of the HSM image 98 HSMDigest string `json:"hsmDigest,omitempty"` 99 100 // EnrollerImage is the name of the init image for crypto generation 101 EnrollerImage string `json:"enrollerImage,omitempty"` 102 103 // EnrollerTag is the tag of the init image for crypto generation 104 EnrollerTag string `json:"enrollerTag,omitempty"` 105 106 // EnrollerDigest is the digest tag of the init image for crypto generation 107 EnrollerDigest string `json:"enrollerDigest,omitempty"` 108 } 109 110 // PeerImages is the list of images to be used in peer deployment 111 type PeerImages struct { 112 // PeerInitImage is the name of the peer init image 113 PeerInitImage string `json:"peerInitImage,omitempty"` 114 115 // PeerInitTag is the tag of the peer init image 116 PeerInitTag string `json:"peerInitTag,omitempty"` 117 118 // PeerInitDigest is the digest tag of the peer init image 119 PeerInitDigest string `json:"peerInitDigest,omitempty"` 120 121 // PeerImage is the name of the peer image 122 PeerImage string `json:"peerImage,omitempty"` 123 124 // PeerTag is the tag of the peer image 125 PeerTag string `json:"peerTag,omitempty"` 126 127 // PeerDigest is the digest tag of the peer image 128 PeerDigest string `json:"peerDigest,omitempty"` 129 130 // DindImage is the name of the dind image 131 DindImage string `json:"dindImage,omitempty"` 132 133 // DindTag is the tag of the dind image 134 DindTag string `json:"dindTag,omitempty"` 135 136 // DindDigest is the digest tag of the dind image 137 DindDigest string `json:"dindDigest,omitempty"` 138 139 // GRPCWebImage is the name of the grpc web proxy image 140 GRPCWebImage string `json:"grpcwebImage,omitempty"` 141 142 // GRPCWebTag is the tag of the grpc web proxy image 143 GRPCWebTag string `json:"grpcwebTag,omitempty"` 144 145 // GRPCWebDigest is the digest tag of the grpc web proxy image 146 GRPCWebDigest string `json:"grpcwebDigest,omitempty"` 147 148 // FluentdImage is the name of the fluentd logger image 149 FluentdImage string `json:"fluentdImage,omitempty"` 150 151 // FluentdTag is the tag of the fluentd logger image 152 FluentdTag string `json:"fluentdTag,omitempty"` 153 154 // FluentdDigest is the digest tag of the fluentd logger image 155 FluentdDigest string `json:"fluentdDigest,omitempty"` 156 157 // CouchDBImage is the name of the couchdb image 158 CouchDBImage string `json:"couchdbImage,omitempty"` 159 160 // CouchDBTag is the tag of the couchdb image 161 CouchDBTag string `json:"couchdbTag,omitempty"` 162 163 // CouchDBDigest is the digest tag of the couchdb image 164 CouchDBDigest string `json:"couchdbDigest,omitempty"` 165 166 // CCLauncherImage is the name of the chaincode launcher image 167 CCLauncherImage string `json:"chaincodeLauncherImage,omitempty"` 168 169 // CCLauncherTag is the tag of the chaincode launcher image 170 CCLauncherTag string `json:"chaincodeLauncherTag,omitempty"` 171 172 // CCLauncherDigest is the digest tag of the chaincode launcher image 173 CCLauncherDigest string `json:"chaincodeLauncherDigest,omitempty"` 174 175 // FileTransferImage is the name of the file transfer image 176 FileTransferImage string `json:"fileTransferImage,omitempty"` 177 178 // FileTransferTag is the tag of the file transfer image 179 FileTransferTag string `json:"fileTransferTag,omitempty"` 180 181 // FileTransferDigest is the digest tag of the file transfer image 182 FileTransferDigest string `json:"fileTransferDigest,omitempty"` 183 184 // BuilderImage is the name of the builder image 185 BuilderImage string `json:"builderImage,omitempty"` 186 187 // BuilderTag is the tag of the builder image 188 BuilderTag string `json:"builderTag,omitempty"` 189 190 // BuilderDigest is the digest tag of the builder image 191 BuilderDigest string `json:"builderDigest,omitempty"` 192 193 // GoEnvImage is the name of the goenv image 194 GoEnvImage string `json:"goEnvImage,omitempty"` 195 196 // GoEnvTag is the tag of the goenv image 197 GoEnvTag string `json:"goEnvTag,omitempty"` 198 199 // GoEnvDigest is the digest tag of the goenv image 200 GoEnvDigest string `json:"goEnvDigest,omitempty"` 201 202 // JavaEnvImage is the name of the javaenv image 203 JavaEnvImage string `json:"javaEnvImage,omitempty"` 204 205 // JavaEnvTag is the tag of the javaenv image 206 JavaEnvTag string `json:"javaEnvTag,omitempty"` 207 208 // JavaEnvDigest is the digest tag of the javaenv image 209 JavaEnvDigest string `json:"javaEnvDigest,omitempty"` 210 211 // NodeEnvImage is the name of the nodeenv image 212 NodeEnvImage string `json:"nodeEnvImage,omitempty"` 213 214 // NodeEnvTag is the tag of the nodeenv image 215 NodeEnvTag string `json:"nodeEnvTag,omitempty"` 216 217 // NodeEnvDigest is the digest tag of the nodeenv image 218 NodeEnvDigest string `json:"nodeEnvDigest,omitempty"` 219 220 // HSMImage is the name of the hsm image 221 HSMImage string `json:"hsmImage,omitempty"` 222 223 // HSMTag is the tag of the hsm image 224 HSMTag string `json:"hsmTag,omitempty"` 225 226 // HSMDigest is the digest tag of the hsm image 227 HSMDigest string `json:"hsmDigest,omitempty"` 228 229 // EnrollerImage is the name of the init image for crypto generation 230 EnrollerImage string `json:"enrollerImage,omitempty"` 231 232 // EnrollerTag is the tag of the init image for crypto generation 233 EnrollerTag string `json:"enrollerTag,omitempty"` 234 235 // EnrollerDigest is the digest tag of the init image for crypto generation 236 EnrollerDigest string `json:"enrollerDigest,omitempty"` 237 } 238 239 // OrdererImages is the list of images to be used in orderer deployment 240 type OrdererImages struct { 241 // OrdererInitImage is the name of the orderer init image 242 OrdererInitImage string `json:"ordererInitImage,omitempty"` 243 244 // OrdererInitTag is the tag of the orderer init image 245 OrdererInitTag string `json:"ordererInitTag,omitempty"` 246 247 // OrdererInitDigest is the digest tag of the orderer init image 248 OrdererInitDigest string `json:"ordererInitDigest,omitempty"` 249 250 // OrdererImage is the name of the orderer image 251 OrdererImage string `json:"ordererImage,omitempty"` 252 253 // OrdererTag is the tag of the orderer image 254 OrdererTag string `json:"ordererTag,omitempty"` 255 256 // OrdererDigest is the digest tag of the orderer image 257 OrdererDigest string `json:"ordererDigest,omitempty"` 258 259 // GRPCWebImage is the name of the grpc web proxy image 260 GRPCWebImage string `json:"grpcwebImage,omitempty"` 261 262 // GRPCWebTag is the tag of the grpc web proxy image 263 GRPCWebTag string `json:"grpcwebTag,omitempty"` 264 265 // GRPCWebDigest is the digest tag of the grpc web proxy image 266 GRPCWebDigest string `json:"grpcwebDigest,omitempty"` 267 268 // HSMImage is the name of the hsm image 269 HSMImage string `json:"hsmImage,omitempty"` 270 271 // HSMTag is the tag of the hsm image 272 HSMTag string `json:"hsmTag,omitempty"` 273 274 // HSMDigest is the digest tag of the hsm image 275 HSMDigest string `json:"hsmDigest,omitempty"` 276 277 // EnrollerImage is the name of the init image for crypto generation 278 EnrollerImage string `json:"enrollerImage,omitempty"` 279 280 // EnrollerTag is the tag of the init image for crypto generation 281 EnrollerTag string `json:"enrollerTag,omitempty"` 282 283 // EnrollerDigest is the digest tag of the init image for crypto generation 284 EnrollerDigest string `json:"enrollerDigest,omitempty"` 285 } 286 287 type Defaults struct { 288 Storage *Storage `json:"storage"` 289 Resources *Resources `json:"resources"` 290 } 291 292 type Storage struct { 293 Peer *current.PeerStorages `json:"peer"` 294 CA *current.CAStorages `json:"ca"` 295 Orderer *current.OrdererStorages `json:"orderer"` 296 } 297 298 type Resources struct { 299 Peer *current.PeerResources `json:"peer"` 300 CA *current.CAResources `json:"ca"` 301 Orderer *current.OrdererResources `json:"orderer"` 302 } 303 304 type ServiceConfig struct { 305 Type corev1.ServiceType `json:"type"` 306 } 307 308 // IndividualDatabase describes the initialization of databases 309 type IndividualDatabase struct { 310 Name string `json:"name"` 311 DesignDocs []string `json:"designdocs"` 312 } 313 314 // Database is connection details to connect to couchdb database 315 type Database struct { 316 ConnectionURL string `json:"connectionurl"` 317 Components IndividualDatabase `json:"components"` 318 CreateDB bool `json:"createdb"` 319 } 320 321 // TLSConfig is to configure the tls server 322 type TLSConfig struct { 323 Enabled bool `json:"enabled"` 324 ListenAddress string `json:"listenaddress"` 325 CertPath string `json:"certpath"` 326 KeyPath string `json:"keypath"` 327 } 328 329 // BasicAuth provides implementation to store basic auth info 330 type BasicAuth struct { 331 Username string `json:"username"` 332 Password string `json:"password"` 333 } 334 335 type Timeouts struct { 336 Deployment int `json:"componentDeploy"` 337 APIServer int `json:"apiServer"` 338 } 339 340 // OtherImages contains other images and tags required to run deployer. 341 type OtherImages struct { 342 // MustgatherImage is the name of the mustgather image 343 MustgatherImage string `json:"mustgatherImage,omitempty"` 344 345 // MustgatherTag is the tag of the mustgatherTag image 346 MustgatherTag string `json:"mustgatherTag,omitempty"` 347 348 // MustgatherDigest is the tag of the mustgatherDigest image 349 MustgatherDigest string `json:"mustgatherDigest,omitempty"` 350 } 351 352 // ConsoleImages is the list of images to be used in console deployment 353 type ConsoleImages struct { 354 // ConsoleInitImage is the name of the console init image 355 ConsoleInitImage string `json:"consoleInitImage,omitempty"` 356 // ConsoleInitTag is the tag of the console init image 357 ConsoleInitTag string `json:"consoleInitTag,omitempty"` 358 // ConsoleInitDigest is the digest of the console init image 359 ConsoleInitDigest string `json:"consoleInitDigest,omitempty"` 360 361 // ConsoleImage is the name of the console image 362 ConsoleImage string `json:"consoleImage,omitempty"` 363 // ConsoleTag is the tag of the console image 364 ConsoleTag string `json:"consoleTag,omitempty"` 365 // ConsoleDigest is the digest of the console image 366 ConsoleDigest string `json:"consoleDigest,omitempty"` 367 368 // ConfigtxlatorImage is the name of the configtxlator image 369 ConfigtxlatorImage string `json:"configtxlatorImage,omitempty"` 370 // ConfigtxlatorTag is the tag of the configtxlator image 371 ConfigtxlatorTag string `json:"configtxlatorTag,omitempty"` 372 // ConfigtxlatorDigest is the digest of the configtxlator image 373 ConfigtxlatorDigest string `json:"configtxlatorDigest,omitempty"` 374 375 // DeployerImage is the name of the deployer image 376 DeployerImage string `json:"deployerImage,omitempty"` 377 // DeployerTag is the tag of the deployer image 378 DeployerTag string `json:"deployerTag,omitempty"` 379 // DeployerDigest is the digest of the deployer image 380 DeployerDigest string `json:"deployerDigest,omitempty"` 381 382 // CouchDBImage is the name of the couchdb image 383 CouchDBImage string `json:"couchdbImage,omitempty"` 384 // CouchDBTag is the tag of the couchdb image 385 CouchDBTag string `json:"couchdbTag,omitempty"` 386 // CouchDBDigest is the digest of the couchdb image 387 CouchDBDigest string `json:"couchdbDigest,omitempty"` 388 389 // MustgatherImage is the name of the mustgather image 390 MustgatherImage string `json:"mustgatherImage,omitempty"` 391 // MustgatherTag is the tag of the mustgather image 392 MustgatherTag string `json:"mustgatherTag,omitempty"` 393 // MustgatherDigest is the digest of the mustgather image 394 MustgatherDigest string `json:"mustgatherDigest,omitempty"` 395 } 396 397 func (v *Versions) Override(requestedVersions *Versions, registryURL string, arch string) { 398 if requestedVersions == nil { 399 return 400 } 401 402 if len(requestedVersions.CA) != 0 { 403 CAVersions := map[string]VersionCA{} 404 for key, _ := range requestedVersions.CA { 405 var caConfig VersionCA 406 requestedCAVersion := requestedVersions.CA[key] 407 caConfig.Image.Override(&requestedCAVersion.Image, registryURL, arch) 408 caConfig.Default = requestedCAVersion.Default 409 caConfig.Version = requestedCAVersion.Version 410 CAVersions[key] = caConfig 411 } 412 v.CA = CAVersions 413 } 414 415 if len(requestedVersions.Peer) != 0 { 416 PeerVersions := map[string]VersionPeer{} 417 for key, _ := range requestedVersions.Peer { 418 var peerConfig VersionPeer 419 requestedPeerVersion := requestedVersions.Peer[key] 420 peerConfig.Image.Override(&requestedPeerVersion.Image, registryURL, arch) 421 peerConfig.Default = requestedPeerVersion.Default 422 peerConfig.Version = requestedPeerVersion.Version 423 PeerVersions[key] = peerConfig 424 } 425 v.Peer = PeerVersions 426 } 427 428 if len(requestedVersions.Orderer) != 0 { 429 OrdererVersions := map[string]VersionOrderer{} 430 for key, _ := range requestedVersions.Orderer { 431 var ordererConfig VersionOrderer 432 requestedOrdererVersion := requestedVersions.Orderer[key] 433 ordererConfig.Image.Override(&requestedOrdererVersion.Image, registryURL, arch) 434 ordererConfig.Default = requestedOrdererVersion.Default 435 ordererConfig.Version = requestedOrdererVersion.Version 436 OrdererVersions[key] = ordererConfig 437 } 438 v.Orderer = OrdererVersions 439 } 440 } 441 442 // Override will look at requested images and use those to override default image 443 // values. Override also format the image tag to include arch for non-sha based 444 // tags. 445 func (i *CAImages) Override(requested *CAImages, registryURL string, arch string) { 446 // If requested is nil, we are only interested in properly prepending registry 447 // URL to the image and with overriding default values so a empty struct is initialized. 448 if requested == nil { 449 requested = &CAImages{} 450 } 451 452 // Images 453 i.CAInitImage = image.GetImage(registryURL, i.CAInitImage, requested.CAInitImage) 454 i.CAImage = image.GetImage(registryURL, i.CAImage, requested.CAImage) 455 i.HSMImage = image.GetImage(registryURL, i.HSMImage, requested.HSMImage) 456 i.EnrollerImage = image.GetImage(registryURL, i.EnrollerImage, requested.EnrollerImage) 457 458 // Tags 459 i.CAInitTag = image.GetTag(arch, i.CAInitTag, requested.CAInitTag) 460 i.CATag = image.GetTag(arch, i.CATag, requested.CATag) 461 i.HSMTag = image.GetTag(arch, i.HSMTag, requested.HSMTag) 462 i.EnrollerTag = image.GetTag(arch, i.EnrollerTag, requested.EnrollerTag) 463 464 // Digests 465 i.CAInitDigest = image.GetTag(arch, i.CAInitDigest, requested.CAInitDigest) 466 i.CADigest = image.GetTag(arch, i.CADigest, requested.CADigest) 467 i.HSMDigest = image.GetTag(arch, i.HSMDigest, requested.HSMDigest) 468 i.EnrollerDigest = image.GetTag(arch, i.EnrollerDigest, requested.EnrollerDigest) 469 } 470 471 func (i *PeerImages) Override(requested *PeerImages, registryURL string, arch string) { 472 if requested == nil { 473 requested = &PeerImages{} 474 } 475 476 // Images 477 i.PeerInitImage = image.GetImage(registryURL, i.PeerInitImage, requested.PeerInitImage) 478 i.PeerImage = image.GetImage(registryURL, i.PeerImage, requested.PeerImage) 479 i.CouchDBImage = image.GetImage(registryURL, i.CouchDBImage, requested.CouchDBImage) 480 i.DindImage = image.GetImage(registryURL, i.DindImage, requested.DindImage) 481 i.GRPCWebImage = image.GetImage(registryURL, i.GRPCWebImage, requested.GRPCWebImage) 482 i.FluentdImage = image.GetImage(registryURL, i.FluentdImage, requested.FluentdImage) 483 i.CCLauncherImage = image.GetImage(registryURL, i.CCLauncherImage, requested.CCLauncherImage) 484 i.FileTransferImage = image.GetImage(registryURL, i.FileTransferImage, requested.FileTransferImage) 485 i.BuilderImage = image.GetImage(registryURL, i.BuilderImage, requested.BuilderImage) 486 i.GoEnvImage = image.GetImage(registryURL, i.GoEnvImage, requested.GoEnvImage) 487 i.JavaEnvImage = image.GetImage(registryURL, i.JavaEnvImage, requested.JavaEnvImage) 488 i.NodeEnvImage = image.GetImage(registryURL, i.NodeEnvImage, requested.NodeEnvImage) 489 i.HSMImage = image.GetImage(registryURL, i.HSMImage, requested.HSMImage) 490 i.EnrollerImage = image.GetImage(registryURL, i.EnrollerImage, requested.EnrollerImage) 491 492 // Tags 493 i.PeerInitTag = image.GetTag(arch, i.PeerInitTag, requested.PeerInitTag) 494 i.PeerTag = image.GetTag(arch, i.PeerTag, requested.PeerTag) 495 i.CouchDBTag = image.GetTag(arch, i.CouchDBTag, requested.CouchDBTag) 496 i.DindTag = image.GetTag(arch, i.DindTag, requested.DindTag) 497 i.GRPCWebTag = image.GetTag(arch, i.GRPCWebTag, requested.GRPCWebTag) 498 i.FluentdTag = image.GetTag(arch, i.FluentdTag, requested.FluentdTag) 499 i.CCLauncherTag = image.GetTag(arch, i.CCLauncherTag, requested.CCLauncherTag) 500 i.FileTransferTag = image.GetTag(arch, i.FileTransferTag, requested.FileTransferTag) 501 i.BuilderTag = image.GetTag(arch, i.BuilderTag, requested.BuilderTag) 502 i.GoEnvTag = image.GetTag(arch, i.GoEnvTag, requested.GoEnvTag) 503 i.JavaEnvTag = image.GetTag(arch, i.JavaEnvTag, requested.JavaEnvTag) 504 i.NodeEnvTag = image.GetTag(arch, i.NodeEnvTag, requested.NodeEnvTag) 505 i.HSMTag = image.GetTag(arch, i.HSMTag, requested.HSMTag) 506 i.EnrollerTag = image.GetTag(arch, i.EnrollerTag, requested.EnrollerTag) 507 508 // Digests 509 i.PeerInitDigest = image.GetTag(arch, i.PeerInitDigest, requested.PeerInitDigest) 510 i.PeerDigest = image.GetTag(arch, i.PeerDigest, requested.PeerDigest) 511 i.CouchDBDigest = image.GetTag(arch, i.CouchDBDigest, requested.CouchDBDigest) 512 i.DindDigest = image.GetTag(arch, i.DindDigest, requested.DindDigest) 513 i.GRPCWebDigest = image.GetTag(arch, i.GRPCWebDigest, requested.GRPCWebDigest) 514 i.FluentdDigest = image.GetTag(arch, i.FluentdDigest, requested.FluentdDigest) 515 i.CCLauncherDigest = image.GetTag(arch, i.CCLauncherDigest, requested.CCLauncherDigest) 516 i.FileTransferDigest = image.GetTag(arch, i.FileTransferDigest, requested.FileTransferDigest) 517 i.BuilderDigest = image.GetTag(arch, i.BuilderDigest, requested.BuilderDigest) 518 i.GoEnvDigest = image.GetTag(arch, i.GoEnvDigest, requested.GoEnvDigest) 519 i.JavaEnvDigest = image.GetTag(arch, i.JavaEnvDigest, requested.JavaEnvDigest) 520 i.NodeEnvDigest = image.GetTag(arch, i.NodeEnvDigest, requested.NodeEnvDigest) 521 i.HSMDigest = image.GetTag(arch, i.HSMDigest, requested.HSMDigest) 522 i.EnrollerDigest = image.GetTag(arch, i.EnrollerDigest, requested.EnrollerDigest) 523 } 524 525 func (i *OrdererImages) Override(requested *OrdererImages, registryURL string, arch string) { 526 if requested == nil { 527 requested = &OrdererImages{} 528 } 529 // Images 530 i.GRPCWebImage = image.GetImage(registryURL, i.GRPCWebImage, requested.GRPCWebImage) 531 i.OrdererInitImage = image.GetImage(registryURL, i.OrdererInitImage, requested.OrdererInitImage) 532 i.OrdererImage = image.GetImage(registryURL, i.OrdererImage, requested.OrdererImage) 533 i.HSMImage = image.GetImage(registryURL, i.HSMImage, requested.HSMImage) 534 i.EnrollerImage = image.GetImage(registryURL, i.EnrollerImage, requested.EnrollerImage) 535 536 // Tags 537 i.GRPCWebTag = image.GetTag(arch, i.GRPCWebTag, requested.GRPCWebTag) 538 i.OrdererInitTag = image.GetTag(arch, i.OrdererInitTag, requested.OrdererInitTag) 539 i.OrdererTag = image.GetTag(arch, i.OrdererTag, requested.OrdererTag) 540 i.HSMTag = image.GetTag(arch, i.HSMTag, requested.HSMTag) 541 i.EnrollerTag = image.GetTag(arch, i.EnrollerTag, requested.EnrollerTag) 542 543 // Digests 544 i.GRPCWebDigest = image.GetTag(arch, i.GRPCWebDigest, requested.GRPCWebDigest) 545 i.OrdererInitDigest = image.GetTag(arch, i.OrdererInitDigest, requested.OrdererInitDigest) 546 i.OrdererDigest = image.GetTag(arch, i.OrdererDigest, requested.OrdererDigest) 547 i.HSMDigest = image.GetTag(arch, i.HSMDigest, requested.HSMDigest) 548 i.EnrollerDigest = image.GetTag(arch, i.EnrollerDigest, requested.EnrollerDigest) 549 }