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 &current.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: &current.CAImages{
    50  				CAImage:     integration.CaImage,
    51  				CATag:       integration.CaTag,
    52  				CAInitImage: integration.InitImage,
    53  				CAInitTag:   integration.InitTag,
    54  			},
    55  			Resources: &current.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 := &current.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: &current.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: &current.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: &current.PeerStorages{
   158  				Peer: &current.StorageSpec{
   159  					Size: "150Mi",
   160  				},
   161  				StateDB: &current.StorageSpec{
   162  					Size: "1Gi",
   163  				},
   164  			},
   165  			Ingress: current.Ingress{
   166  				TlsSecretName: "tlssecret",
   167  			},
   168  			Secret: &current.SecretSpec{
   169  				Enrollment: &current.EnrollmentSpec{
   170  					Component: &current.Enrollment{
   171  						CAHost: caHost,
   172  						CAPort: "443",
   173  						CAName: "ca",
   174  						CATLS: &current.CATLS{
   175  							CACert: tlsCert,
   176  						},
   177  						EnrollID:     peerUsername,
   178  						EnrollSecret: "peerpw",
   179  						AdminCerts:   []string{adminCert, adminCert},
   180  					},
   181  					TLS: &current.Enrollment{
   182  						CAHost: caHost,
   183  						CAPort: "443",
   184  						CAName: "tlsca",
   185  						CATLS: &current.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 := &current.EnrollmentSpec{
   231  		Component: &current.Enrollment{
   232  			CAHost: caHost,
   233  			CAPort: "443",
   234  			CAName: "ca",
   235  			CATLS: &current.CATLS{
   236  				CACert: tlsCert,
   237  			},
   238  			EnrollID:     ordererUsername,
   239  			EnrollSecret: "ordererpw",
   240  		},
   241  		TLS: &current.Enrollment{
   242  			CAHost: caHost,
   243  			CAPort: "443",
   244  			CAName: "tlsca",
   245  			CATLS: &current.CATLS{
   246  				CACert: tlsCert,
   247  			},
   248  			EnrollID:     ordererUsername,
   249  			EnrollSecret: "ordererpw",
   250  		},
   251  	}
   252  
   253  	cr := &current.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: &current.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  				&current.SecretSpec{
   280  					Enrollment: enrollment,
   281  				},
   282  				&current.SecretSpec{
   283  					Enrollment: enrollment,
   284  				},
   285  				&current.SecretSpec{
   286  					Enrollment: enrollment,
   287  				},
   288  			},
   289  			Resources: &current.OrdererResources{
   290  				Orderer: resourceReq,
   291  			},
   292  			FabricVersion:  integration.FabricVersion + "-1",
   293  			ConfigOverride: &runtime.RawExtension{Raw: configBytes},
   294  		},
   295  	}
   296  
   297  	return cr, nil
   298  }