github.com/IBM-Blockchain/fabric-operator@v1.0.4/controllers/ibporderer/predicate.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 ibporderer 20 21 import ( 22 "reflect" 23 24 current "github.com/IBM-Blockchain/fabric-operator/api/v1beta1" 25 commoninit "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/common" 26 "github.com/IBM-Blockchain/fabric-operator/version" 27 ) 28 29 type Update struct { 30 specUpdated bool 31 statusUpdated bool 32 overridesUpdated bool 33 tlsCertUpdated bool 34 ecertUpdated bool 35 ordererTagUpdated bool 36 restartNeeded bool 37 ecertReenrollNeeded bool 38 tlscertReenrollNeeded bool 39 ecertNewKeyReenroll bool 40 tlscertNewKeyReenroll bool 41 deploymentUpdated bool 42 mspUpdated bool 43 ecertEnroll bool 44 tlscertEnroll bool 45 tlsCertCreated bool 46 ecertCreated bool 47 migrateToV2 bool 48 migrateToV24 bool 49 nodeOUUpdated bool 50 imagesUpdated bool 51 fabricVersionUpdated bool 52 // update GetUpdateStackWithTrues when new fields are added 53 } 54 55 func (u *Update) Detected() bool { 56 return u.specUpdated || 57 u.statusUpdated || 58 u.overridesUpdated || 59 u.tlsCertUpdated || 60 u.ecertUpdated || 61 u.ordererTagUpdated || 62 u.restartNeeded || 63 u.ecertReenrollNeeded || 64 u.tlscertReenrollNeeded || 65 u.ecertNewKeyReenroll || 66 u.tlscertNewKeyReenroll || 67 u.deploymentUpdated || 68 u.mspUpdated || 69 u.ecertEnroll || 70 u.migrateToV2 || 71 u.migrateToV24 || 72 u.nodeOUUpdated || 73 u.imagesUpdated || 74 u.fabricVersionUpdated 75 } 76 77 func (u *Update) SpecUpdated() bool { 78 return u.specUpdated 79 } 80 81 func (u *Update) StatusUpdated() bool { 82 return u.statusUpdated 83 } 84 85 func (u *Update) ConfigOverridesUpdated() bool { 86 return u.overridesUpdated 87 } 88 89 func (u *Update) TLSCertUpdated() bool { 90 return u.tlsCertUpdated 91 } 92 93 func (u *Update) EcertUpdated() bool { 94 return u.ecertUpdated 95 } 96 97 func (u *Update) OrdererTagUpdated() bool { 98 return u.ordererTagUpdated 99 } 100 101 func (u *Update) CertificateUpdated() bool { 102 return u.tlsCertUpdated || u.ecertUpdated 103 } 104 105 func (u *Update) GetUpdatedCertType() commoninit.SecretType { 106 if u.tlsCertUpdated { 107 return commoninit.TLS 108 } else if u.ecertUpdated { 109 return commoninit.ECERT 110 } 111 return "" 112 } 113 114 func (u *Update) RestartNeeded() bool { 115 return u.restartNeeded 116 } 117 118 func (u *Update) EcertReenrollNeeded() bool { 119 return u.ecertReenrollNeeded 120 } 121 122 func (u *Update) TLScertReenrollNeeded() bool { 123 return u.tlscertReenrollNeeded 124 } 125 126 func (u *Update) EcertNewKeyReenroll() bool { 127 return u.ecertNewKeyReenroll 128 } 129 130 func (u *Update) TLScertNewKeyReenroll() bool { 131 return u.tlscertNewKeyReenroll 132 } 133 134 func (u *Update) EcertEnroll() bool { 135 return u.ecertEnroll 136 } 137 138 func (u *Update) TLScertEnroll() bool { 139 return u.tlscertEnroll 140 } 141 142 func (u *Update) DeploymentUpdated() bool { 143 return u.deploymentUpdated 144 } 145 146 func (u *Update) MSPUpdated() bool { 147 return u.mspUpdated 148 } 149 150 func (u *Update) TLSCertCreated() bool { 151 return u.tlsCertCreated 152 } 153 154 func (u *Update) EcertCreated() bool { 155 return u.ecertCreated 156 } 157 158 func (u *Update) CertificateCreated() bool { 159 return u.tlsCertCreated || u.ecertCreated 160 } 161 162 func (u *Update) GetCreatedCertType() commoninit.SecretType { 163 if u.tlsCertCreated { 164 return commoninit.TLS 165 } else if u.ecertCreated { 166 return commoninit.ECERT 167 } 168 return "" 169 } 170 171 func (u *Update) CryptoBackupNeeded() bool { 172 return u.ecertEnroll || 173 u.tlscertEnroll || 174 u.ecertReenrollNeeded || 175 u.ecertNewKeyReenroll || 176 u.tlscertReenrollNeeded || 177 u.tlscertNewKeyReenroll || 178 u.mspUpdated 179 } 180 181 func (u *Update) MigrateToV2() bool { 182 return u.migrateToV2 183 } 184 185 func (u *Update) MigrateToV24() bool { 186 return u.migrateToV24 187 } 188 189 func (u *Update) NodeOUUpdated() bool { 190 return u.nodeOUUpdated 191 } 192 193 func (u *Update) GetUpdateStackWithTrues() string { 194 stack := "" 195 196 if u.specUpdated { 197 stack += "specUpdated " 198 } 199 if u.statusUpdated { 200 stack += "statusUpdated " 201 } 202 if u.overridesUpdated { 203 stack += "overridesUpdated " 204 } 205 if u.tlsCertUpdated { 206 stack += "tlsCertUpdated " 207 } 208 if u.ecertUpdated { 209 stack += "ecertUpdated " 210 } 211 if u.ordererTagUpdated { 212 stack += "ordererTagUpdated " 213 } 214 if u.restartNeeded { 215 stack += "restartNeeded " 216 } 217 if u.ecertReenrollNeeded { 218 stack += "ecertReenrollNeeded " 219 } 220 if u.tlscertReenrollNeeded { 221 stack += "tlscertReenrollNeeded " 222 } 223 if u.ecertNewKeyReenroll { 224 stack += "ecertNewKeyReenroll " 225 } 226 if u.tlscertNewKeyReenroll { 227 stack += "tlscertNewKeyReenroll " 228 } 229 230 if u.deploymentUpdated { 231 stack += "deploymentUpdated " 232 } 233 if u.mspUpdated { 234 stack += "mspUpdated " 235 } 236 if u.ecertEnroll { 237 stack += "ecertEnroll " 238 } 239 if u.tlscertEnroll { 240 stack += "tlscertEnroll " 241 } 242 if u.tlsCertCreated { 243 stack += "tlsCertCreated " 244 } 245 if u.ecertCreated { 246 stack += "ecertCreated " 247 } 248 if u.migrateToV2 { 249 stack += "migrateToV2 " 250 } 251 if u.migrateToV24 { 252 stack += "migrateToV24 " 253 } 254 if u.nodeOUUpdated { 255 stack += "nodeOUUpdated " 256 } 257 if u.imagesUpdated { 258 stack += "imagesUpdated " 259 } 260 if u.fabricVersionUpdated { 261 stack += "fabricVersionUpdated " 262 } 263 264 if len(stack) == 0 { 265 stack = "emptystack " 266 } 267 268 return stack 269 } 270 271 // ImagesUpdated returns true if images updated 272 func (u *Update) ImagesUpdated() bool { 273 return u.imagesUpdated 274 } 275 276 // FabricVersionUpdated returns true if fabric version updated 277 func (u *Update) FabricVersionUpdated() bool { 278 return u.fabricVersionUpdated 279 } 280 281 func imagesUpdated(old, new *current.IBPOrderer) bool { 282 if new.Spec.Images != nil { 283 if old.Spec.Images == nil { 284 return true 285 } 286 287 if old.Spec.Images != nil { 288 return !reflect.DeepEqual(old.Spec.Images, new.Spec.Images) 289 } 290 } 291 292 return false 293 } 294 295 func fabricVersionUpdated(old, new *current.IBPOrderer) bool { 296 return old.Spec.FabricVersion != new.Spec.FabricVersion 297 } 298 299 func fabricVersionUpdatedTo149plusOr221plus(old, new *current.IBPOrderer) bool { 300 newVersion := version.String(new.Spec.FabricVersion) 301 newMajorVersion := version.GetMajorReleaseVersion(new.Spec.FabricVersion) 302 oldVersion := version.String(old.Spec.FabricVersion) 303 oldMajorVersion := version.GetMajorReleaseVersion(old.Spec.FabricVersion) 304 305 if old.Spec.FabricVersion != new.Spec.FabricVersion { 306 if oldVersion == version.Unsupported || (oldMajorVersion == version.V1 && oldVersion.LessThan("1.4.9")) { 307 if newMajorVersion == version.V1 { 308 if newVersion.Equal("1.4.9") || newVersion.GreaterThan("1.4.9") { 309 return true 310 } 311 } else if newMajorVersion == version.V2 { 312 if newVersion.Equal("2.2.1") || newVersion.GreaterThan("2.2.1") { 313 return true 314 } 315 } 316 } else if oldMajorVersion == version.V2 && oldVersion.LessThan("2.2.1") { 317 if newVersion.Equal("2.2.1") || newVersion.GreaterThan("2.2.1") { 318 return true 319 } 320 } 321 } 322 323 return false 324 }