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)