github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/update/opensearch/opensearch_update.go (about) 1 // Copyright (c) 2022, 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package opensearch 5 6 import ( 7 "github.com/onsi/ginkgo/v2" 8 9 "time" 10 11 vmov1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1" 12 vzapi "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1" 13 "github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/common" 14 "github.com/verrazzano/verrazzano/tests/e2e/pkg" 15 "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/framework" 16 "github.com/verrazzano/verrazzano/tests/e2e/pkg/update" 17 corev1 "k8s.io/api/core/v1" 18 "k8s.io/apimachinery/pkg/api/resource" 19 ) 20 21 const ( 22 waitTimeout = 20 * time.Minute 23 pollingInterval = 10 * time.Second 24 ) 25 26 type OpensearchCleanUpModifier struct { 27 } 28 29 type OpensearchAllNodeRolesModifier struct { 30 } 31 32 func (u OpensearchCleanUpModifier) ModifyCR(cr *vzapi.Verrazzano) { 33 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 34 } 35 36 type OpensearchMasterNodeGroupModifier struct { 37 NodeReplicas int32 38 NodeMemory string 39 NodeStorage string 40 } 41 42 type OpenSearchPlugins struct { 43 Enabled bool 44 InstanceList string 45 } 46 47 type OpensearchIngestNodeGroupModifier struct { 48 NodeReplicas int32 49 NodeMemory string 50 NodeStorage string 51 } 52 53 type OpensearchDataNodeGroupModifier struct { 54 NodeReplicas int32 55 NodeStorage string 56 NodeMemory string 57 } 58 59 type OpensearchDuplicateNodeGroupModifier struct { 60 Name string 61 } 62 63 func (u OpensearchMasterNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 64 if cr.Spec.Components.Elasticsearch == nil { 65 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 66 } 67 cr.Spec.Components.Elasticsearch.Nodes = 68 append(cr.Spec.Components.Elasticsearch.Nodes, 69 vzapi.OpenSearchNode{ 70 Name: string(vmov1.MasterRole), 71 Replicas: &u.NodeReplicas, 72 Roles: []vmov1.NodeRole{vmov1.MasterRole}, 73 Resources: newResources(u.NodeMemory), 74 Storage: newNodeStorage(u.NodeStorage), 75 }, 76 ) 77 } 78 79 func (u OpenSearchPlugins) ModifyCR(cr *vzapi.Verrazzano) { 80 if cr.Spec.Components.Elasticsearch == nil { 81 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 82 } 83 cr.Spec.Components.Elasticsearch.Plugins = vmov1.OpenSearchPlugins{} 84 cr.Spec.Components.Elasticsearch.Plugins = 85 vmov1.OpenSearchPlugins{ 86 Enabled: u.Enabled, 87 InstallList: []string{u.InstanceList}, 88 } 89 } 90 91 func (u OpensearchIngestNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 92 if cr.Spec.Components.Elasticsearch == nil { 93 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 94 } 95 cr.Spec.Components.Elasticsearch.Nodes = 96 append(cr.Spec.Components.Elasticsearch.Nodes, 97 vzapi.OpenSearchNode{ 98 Name: string(vmov1.IngestRole), 99 Replicas: &u.NodeReplicas, 100 Roles: []vmov1.NodeRole{vmov1.MasterRole, vmov1.IngestRole}, 101 Storage: newNodeStorage(u.NodeStorage), 102 Resources: newResources(u.NodeMemory), 103 }, 104 ) 105 } 106 107 func (u OpensearchDataNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 108 if cr.Spec.Components.Elasticsearch == nil { 109 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 110 } 111 cr.Spec.Components.Elasticsearch.Nodes = 112 append(cr.Spec.Components.Elasticsearch.Nodes, 113 vzapi.OpenSearchNode{ 114 Name: string(vmov1.DataRole), 115 Replicas: &u.NodeReplicas, 116 Roles: []vmov1.NodeRole{vmov1.MasterRole, vmov1.DataRole}, 117 Storage: newNodeStorage(u.NodeStorage), 118 Resources: newResources(u.NodeMemory), 119 }, 120 ) 121 } 122 123 func (u OpensearchDuplicateNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 124 if cr.Spec.Components.Elasticsearch == nil { 125 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 126 } 127 arg := vzapi.InstallArgs{ 128 Name: "nodes.master.replicas", 129 Value: "1", 130 } 131 cr.Spec.Components.Elasticsearch.ESInstallArgs = []vzapi.InstallArgs{ 132 arg, 133 arg, 134 } 135 } 136 137 func (u OpensearchAllNodeRolesModifier) ModifyCR(cr *vzapi.Verrazzano) { 138 if cr.Spec.Components.Elasticsearch == nil { 139 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 140 } 141 cr.Spec.Components.Elasticsearch.Nodes = 142 append(cr.Spec.Components.Elasticsearch.Nodes, 143 vzapi.OpenSearchNode{ 144 Name: string(vmov1.MasterRole), 145 Replicas: common.Int32Ptr(3), 146 Roles: []vmov1.NodeRole{vmov1.MasterRole, vmov1.DataRole, vmov1.IngestRole}, 147 Storage: newNodeStorage("2Gi"), 148 Resources: newResources("512Mi"), 149 }, 150 ) 151 } 152 func newNodeStorage(size string) *vzapi.OpenSearchNodeStorage { 153 storage := new(vzapi.OpenSearchNodeStorage) 154 storage.Size = size 155 return storage 156 } 157 158 func newResources(requestMemory string) *corev1.ResourceRequirements { 159 memoryReq, err := resource.ParseQuantity(requestMemory) 160 if err != nil { 161 pkg.Log(pkg.Error, err.Error()) 162 return nil 163 } 164 resourceRequirements := new(corev1.ResourceRequirements) 165 resourceRequirements.Requests = make(corev1.ResourceList) 166 resourceRequirements.Requests[corev1.ResourceMemory] = memoryReq 167 return resourceRequirements 168 } 169 170 // Initialize the Test Framework 171 var t = framework.NewTestFramework("update opensearch") 172 173 var afterSuite = t.AfterSuiteFunc(func() { 174 m := OpensearchAllNodeRolesModifier{} 175 update.UpdateCRWithRetries(m, pollingInterval, waitTimeout) 176 }) 177 178 var _ = ginkgo.AfterSuite(afterSuite)