github.com/IBM-Blockchain/fabric-operator@v1.0.4/integration/helper/crspecs.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 helper 20 21 import ( 22 "encoding/json" 23 24 current "github.com/IBM-Blockchain/fabric-operator/api/v1beta1" 25 "github.com/IBM-Blockchain/fabric-operator/integration" 26 commonapi "github.com/IBM-Blockchain/fabric-operator/pkg/apis/common" 27 v1orderer "github.com/IBM-Blockchain/fabric-operator/pkg/apis/orderer/v1" 28 v2orderer "github.com/IBM-Blockchain/fabric-operator/pkg/apis/orderer/v2" 29 v2peer "github.com/IBM-Blockchain/fabric-operator/pkg/apis/peer/v2" 30 v2ordererconfig "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/orderer/config/v2" 31 32 corev1 "k8s.io/api/core/v1" 33 "k8s.io/apimachinery/pkg/api/resource" 34 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 35 "k8s.io/apimachinery/pkg/runtime" 36 ) 37 38 func Org1CACR(namespace, domain string) *current.IBPCA { 39 return ¤t.IBPCA{ 40 ObjectMeta: metav1.ObjectMeta{ 41 Name: "org1ca", 42 Namespace: namespace, 43 }, 44 Spec: current.IBPCASpec{ 45 License: current.License{ 46 Accept: true, 47 }, 48 ImagePullSecrets: []string{"regcred"}, 49 Images: ¤t.CAImages{ 50 CAImage: integration.CaImage, 51 CATag: integration.CaTag, 52 CAInitImage: integration.InitImage, 53 CAInitTag: integration.InitTag, 54 }, 55 Resources: ¤t.CAResources{ 56 CA: &corev1.ResourceRequirements{ 57 Requests: corev1.ResourceList{ 58 corev1.ResourceCPU: resource.MustParse("50m"), 59 corev1.ResourceMemory: resource.MustParse("100M"), 60 corev1.ResourceEphemeralStorage: resource.MustParse("100M"), 61 }, 62 Limits: corev1.ResourceList{ 63 corev1.ResourceCPU: resource.MustParse("50m"), 64 corev1.ResourceMemory: resource.MustParse("100M"), 65 corev1.ResourceEphemeralStorage: resource.MustParse("1G"), 66 }, 67 }, 68 }, 69 Zone: "select", 70 Region: "select", 71 Domain: domain, 72 FabricVersion: integration.FabricVersion + "-1", 73 }, 74 } 75 } 76 77 func Org1PeerCR(namespace, domain, peerUsername, tlsCert, caHost, adminCert string) (*current.IBPPeer, error) { 78 resourceReq := &corev1.ResourceRequirements{ 79 Requests: corev1.ResourceList{ 80 corev1.ResourceCPU: resource.MustParse("100m"), 81 corev1.ResourceMemory: resource.MustParse("200M"), 82 corev1.ResourceEphemeralStorage: resource.MustParse("100M"), 83 }, 84 Limits: corev1.ResourceList{ 85 corev1.ResourceCPU: resource.MustParse("100m"), 86 corev1.ResourceMemory: resource.MustParse("200M"), 87 corev1.ResourceEphemeralStorage: resource.MustParse("1G"), 88 }, 89 } 90 91 configOverride := v2peer.Core{ 92 Peer: v2peer.Peer{ 93 ID: "testPeerID", 94 }, 95 } 96 configBytes, err := json.Marshal(configOverride) 97 if err != nil { 98 return nil, err 99 } 100 101 cr := ¤t.IBPPeer{ 102 TypeMeta: metav1.TypeMeta{ 103 Kind: "IBPPeer", 104 }, 105 ObjectMeta: metav1.ObjectMeta{ 106 Name: "org1peer", 107 Namespace: namespace, 108 }, 109 Spec: current.IBPPeerSpec{ 110 License: current.License{ 111 Accept: true, 112 }, 113 MSPID: "Org1MSP", 114 Region: "select", 115 Zone: "select", 116 ImagePullSecrets: []string{"regcred"}, 117 Images: ¤t.PeerImages{ 118 CouchDBImage: integration.CouchdbImage, 119 CouchDBTag: integration.CouchdbTag, 120 GRPCWebImage: integration.GrpcwebImage, 121 GRPCWebTag: integration.GrpcwebTag, 122 PeerImage: integration.PeerImage, 123 PeerTag: integration.PeerTag, 124 PeerInitImage: integration.InitImage, 125 PeerInitTag: integration.InitTag, 126 }, 127 Domain: domain, 128 Resources: ¤t.PeerResources{ 129 DinD: &corev1.ResourceRequirements{ 130 Requests: corev1.ResourceList{ 131 corev1.ResourceCPU: resource.MustParse("500m"), 132 corev1.ResourceMemory: resource.MustParse("1G"), 133 corev1.ResourceEphemeralStorage: resource.MustParse("100M"), 134 }, 135 Limits: corev1.ResourceList{ 136 corev1.ResourceCPU: resource.MustParse("500m"), 137 corev1.ResourceMemory: resource.MustParse("1G"), 138 corev1.ResourceEphemeralStorage: resource.MustParse("1G"), 139 }, 140 }, 141 CouchDB: &corev1.ResourceRequirements{ 142 Requests: corev1.ResourceList{ 143 corev1.ResourceCPU: resource.MustParse("200m"), 144 corev1.ResourceMemory: resource.MustParse("400M"), 145 corev1.ResourceEphemeralStorage: resource.MustParse("100M"), 146 }, 147 Limits: corev1.ResourceList{ 148 corev1.ResourceCPU: resource.MustParse("200m"), 149 corev1.ResourceMemory: resource.MustParse("400M"), 150 corev1.ResourceEphemeralStorage: resource.MustParse("1G"), 151 }, 152 }, 153 FluentD: resourceReq, 154 GRPCProxy: resourceReq, 155 Peer: resourceReq, 156 }, 157 Storage: ¤t.PeerStorages{ 158 Peer: ¤t.StorageSpec{ 159 Size: "150Mi", 160 }, 161 StateDB: ¤t.StorageSpec{ 162 Size: "1Gi", 163 }, 164 }, 165 Ingress: current.Ingress{ 166 TlsSecretName: "tlssecret", 167 }, 168 Secret: ¤t.SecretSpec{ 169 Enrollment: ¤t.EnrollmentSpec{ 170 Component: ¤t.Enrollment{ 171 CAHost: caHost, 172 CAPort: "443", 173 CAName: "ca", 174 CATLS: ¤t.CATLS{ 175 CACert: tlsCert, 176 }, 177 EnrollID: peerUsername, 178 EnrollSecret: "peerpw", 179 AdminCerts: []string{adminCert, adminCert}, 180 }, 181 TLS: ¤t.Enrollment{ 182 CAHost: caHost, 183 CAPort: "443", 184 CAName: "tlsca", 185 CATLS: ¤t.CATLS{ 186 CACert: tlsCert, 187 }, 188 EnrollID: peerUsername, 189 EnrollSecret: "peerpw", 190 }, 191 }, 192 }, 193 ConfigOverride: &runtime.RawExtension{Raw: configBytes}, 194 FabricVersion: integration.FabricVersion + "-1", 195 }, 196 } 197 198 return cr, nil 199 } 200 201 func OrdererCR(namespace, domain, ordererUsername, tlsCert, caHost string) (*current.IBPOrderer, error) { 202 resourceReq := &corev1.ResourceRequirements{ 203 Requests: corev1.ResourceList{ 204 corev1.ResourceCPU: resource.MustParse("200m"), 205 corev1.ResourceMemory: resource.MustParse("400M"), 206 corev1.ResourceEphemeralStorage: resource.MustParse("100M"), 207 }, 208 Limits: corev1.ResourceList{ 209 corev1.ResourceCPU: resource.MustParse("200m"), 210 corev1.ResourceMemory: resource.MustParse("400M"), 211 corev1.ResourceEphemeralStorage: resource.MustParse("1G"), 212 }, 213 } 214 215 configOverride := v2ordererconfig.Orderer{ 216 Orderer: v2orderer.Orderer{ 217 General: v2orderer.General{ 218 Keepalive: v1orderer.Keepalive{ 219 ServerMinInterval: commonapi.MustParseDuration("30h"), 220 }, 221 }, 222 }, 223 } 224 225 configBytes, err := json.Marshal(configOverride) 226 if err != nil { 227 return nil, err 228 } 229 230 enrollment := ¤t.EnrollmentSpec{ 231 Component: ¤t.Enrollment{ 232 CAHost: caHost, 233 CAPort: "443", 234 CAName: "ca", 235 CATLS: ¤t.CATLS{ 236 CACert: tlsCert, 237 }, 238 EnrollID: ordererUsername, 239 EnrollSecret: "ordererpw", 240 }, 241 TLS: ¤t.Enrollment{ 242 CAHost: caHost, 243 CAPort: "443", 244 CAName: "tlsca", 245 CATLS: ¤t.CATLS{ 246 CACert: tlsCert, 247 }, 248 EnrollID: ordererUsername, 249 EnrollSecret: "ordererpw", 250 }, 251 } 252 253 cr := ¤t.IBPOrderer{ 254 ObjectMeta: metav1.ObjectMeta{ 255 Name: "ibporderer1", 256 Namespace: namespace, 257 }, 258 Spec: current.IBPOrdererSpec{ 259 License: current.License{ 260 Accept: true, 261 }, 262 ClusterSize: 3, 263 OrdererType: "etcdraft", 264 SystemChannelName: "testchainid", 265 OrgName: "orderermsp", 266 MSPID: "orderermsp", 267 ImagePullSecrets: []string{"regcred"}, 268 GenesisProfile: "Initial", 269 Domain: domain, 270 Images: ¤t.OrdererImages{ 271 GRPCWebImage: integration.GrpcwebImage, 272 GRPCWebTag: integration.GrpcwebTag, 273 OrdererImage: integration.OrdererImage, 274 OrdererTag: integration.OrdererTag, 275 OrdererInitImage: integration.InitImage, 276 OrdererInitTag: integration.InitTag, 277 }, 278 ClusterSecret: []*current.SecretSpec{ 279 ¤t.SecretSpec{ 280 Enrollment: enrollment, 281 }, 282 ¤t.SecretSpec{ 283 Enrollment: enrollment, 284 }, 285 ¤t.SecretSpec{ 286 Enrollment: enrollment, 287 }, 288 }, 289 Resources: ¤t.OrdererResources{ 290 Orderer: resourceReq, 291 }, 292 FabricVersion: integration.FabricVersion + "-1", 293 ConfigOverride: &runtime.RawExtension{Raw: configBytes}, 294 }, 295 } 296 297 return cr, nil 298 }