pkg/plan/mock/generator.go (164 lines of code) (raw):
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package planmock
import (
"github.com/elastic/cloud-sdk-go/pkg/models"
"github.com/elastic/cloud-sdk-go/pkg/util/ec"
)
// GenerateConfig is a helper used to create a DeploymentGetResponse to be
// used for tests. It provides a generic implementation so all deployment
// resoource types can be generated a plan log and tracked.
type GenerateConfig struct {
// If omitted, a random ID will be auto-generated.
ID string
Elasticsearch []GeneratedResourceConfig
EnterpriseSearch []GeneratedResourceConfig
Kibana []GeneratedResourceConfig
Apm []GeneratedResourceConfig
IntegrationsServer []GeneratedResourceConfig
Appsearch []GeneratedResourceConfig
}
// GeneratedResourceConfig is used to construct a deployment resource plan
// with the plan log steps specified.
type GeneratedResourceConfig struct {
// If omitted, a random ID will be auto-generated.
ID string
// If omitted, it'll default to "main-<kind>"
RefID string
// Current plan logs.
CurrentLog []*models.ClusterPlanStepInfo
// Pending plan logs.
PendingLog []*models.ClusterPlanStepInfo
// Histoory plan logs.
HistoryLog []*models.ClusterPlanStepInfo
}
// Generate creates a DeploymentGetResponse to mock the plan tracker. See the
// configuration options in the GenerateConfig struct.
func Generate(cfg GenerateConfig) *models.DeploymentGetResponse {
var id = cfg.ID
if id == "" {
id = ec.RandomResourceID()
}
return &models.DeploymentGetResponse{
ID: ec.String(id),
Resources: &models.DeploymentResources{
Apm: generateApmResourceInfo(cfg.Apm),
IntegrationsServer: generateIntegrationsServerResourceInfo(cfg.IntegrationsServer),
Kibana: generateKibanaResourceInfo(cfg.Kibana),
Elasticsearch: generateElasticsearchResourceInfo(cfg.Elasticsearch),
Appsearch: generateAppSearchResourceInfo(cfg.Appsearch),
EnterpriseSearch: generateEnterpriseSearchResourceInfo(cfg.EnterpriseSearch),
},
}
}
func generateApmResourceInfo(c []GeneratedResourceConfig) []*models.ApmResourceInfo {
var resInfo = make([]*models.ApmResourceInfo, 0, len(c))
for _, gen := range c {
var info models.ApmResourceInfo
info.ID = &gen.ID
if gen.ID == "" {
info.ID = ec.String(ec.RandomResourceID())
}
info.RefID = &gen.RefID
if gen.RefID == "" {
info.RefID = ec.String("main-apm")
}
info.Info = &models.ApmInfo{PlanInfo: &models.ApmPlansInfo{
Pending: &models.ApmPlanInfo{PlanAttemptLog: gen.PendingLog},
Current: &models.ApmPlanInfo{PlanAttemptLog: gen.CurrentLog},
History: []*models.ApmPlanInfo{{PlanAttemptLog: gen.HistoryLog}},
}}
resInfo = append(resInfo, &info)
}
return resInfo
}
func generateIntegrationsServerResourceInfo(c []GeneratedResourceConfig) []*models.IntegrationsServerResourceInfo {
var resInfo = make([]*models.IntegrationsServerResourceInfo, 0, len(c))
for _, gen := range c {
var info models.IntegrationsServerResourceInfo
info.ID = &gen.ID
if gen.ID == "" {
info.ID = ec.String(ec.RandomResourceID())
}
info.RefID = &gen.RefID
if gen.RefID == "" {
info.RefID = ec.String("main-integrations_server")
}
info.Info = &models.IntegrationsServerInfo{PlanInfo: &models.IntegrationsServerPlansInfo{
Pending: &models.IntegrationsServerPlanInfo{PlanAttemptLog: gen.PendingLog},
Current: &models.IntegrationsServerPlanInfo{PlanAttemptLog: gen.CurrentLog},
History: []*models.IntegrationsServerPlanInfo{{PlanAttemptLog: gen.HistoryLog}},
}}
resInfo = append(resInfo, &info)
}
return resInfo
}
func generateAppSearchResourceInfo(c []GeneratedResourceConfig) []*models.AppSearchResourceInfo {
var resInfo = make([]*models.AppSearchResourceInfo, 0, len(c))
for _, gen := range c {
var info models.AppSearchResourceInfo
info.ID = &gen.ID
if gen.ID == "" {
info.ID = ec.String(ec.RandomResourceID())
}
info.RefID = &gen.RefID
if gen.RefID == "" {
info.RefID = ec.String("main-appsearch")
}
info.Info = &models.AppSearchInfo{PlanInfo: &models.AppSearchPlansInfo{
Pending: &models.AppSearchPlanInfo{PlanAttemptLog: gen.PendingLog},
Current: &models.AppSearchPlanInfo{PlanAttemptLog: gen.CurrentLog},
History: []*models.AppSearchPlanInfo{{PlanAttemptLog: gen.HistoryLog}},
}}
resInfo = append(resInfo, &info)
}
return resInfo
}
func generateEnterpriseSearchResourceInfo(c []GeneratedResourceConfig) []*models.EnterpriseSearchResourceInfo {
var resInfo = make([]*models.EnterpriseSearchResourceInfo, 0, len(c))
for _, gen := range c {
var info models.EnterpriseSearchResourceInfo
info.ID = &gen.ID
if gen.ID == "" {
info.ID = ec.String(ec.RandomResourceID())
}
info.RefID = &gen.RefID
if gen.RefID == "" {
info.RefID = ec.String("main-enterprise_search")
}
info.Info = &models.EnterpriseSearchInfo{PlanInfo: &models.EnterpriseSearchPlansInfo{
Pending: &models.EnterpriseSearchPlanInfo{PlanAttemptLog: gen.PendingLog},
Current: &models.EnterpriseSearchPlanInfo{PlanAttemptLog: gen.CurrentLog},
History: []*models.EnterpriseSearchPlanInfo{{PlanAttemptLog: gen.HistoryLog}},
}}
resInfo = append(resInfo, &info)
}
return resInfo
}
func generateKibanaResourceInfo(c []GeneratedResourceConfig) []*models.KibanaResourceInfo {
var resInfo = make([]*models.KibanaResourceInfo, 0, len(c))
for _, gen := range c {
var info models.KibanaResourceInfo
info.ID = &gen.ID
if gen.ID == "" {
info.ID = ec.String(ec.RandomResourceID())
}
info.RefID = &gen.RefID
if gen.RefID == "" {
info.RefID = ec.String("main-kibana")
}
info.Info = &models.KibanaClusterInfo{PlanInfo: &models.KibanaClusterPlansInfo{
Pending: &models.KibanaClusterPlanInfo{PlanAttemptLog: gen.PendingLog},
Current: &models.KibanaClusterPlanInfo{PlanAttemptLog: gen.CurrentLog},
History: []*models.KibanaClusterPlanInfo{{PlanAttemptLog: gen.HistoryLog}},
}}
resInfo = append(resInfo, &info)
}
return resInfo
}
func generateElasticsearchResourceInfo(c []GeneratedResourceConfig) []*models.ElasticsearchResourceInfo {
var resInfo = make([]*models.ElasticsearchResourceInfo, 0, len(c))
for _, gen := range c {
var info models.ElasticsearchResourceInfo
info.ID = &gen.ID
if gen.ID == "" {
info.ID = ec.String(ec.RandomResourceID())
}
info.RefID = &gen.RefID
if gen.RefID == "" {
info.RefID = ec.String("main-elasticsearch")
}
info.Info = &models.ElasticsearchClusterInfo{PlanInfo: &models.ElasticsearchClusterPlansInfo{
Pending: &models.ElasticsearchClusterPlanInfo{PlanAttemptLog: gen.PendingLog},
Current: &models.ElasticsearchClusterPlanInfo{PlanAttemptLog: gen.CurrentLog},
History: []*models.ElasticsearchClusterPlanInfo{{PlanAttemptLog: gen.HistoryLog}},
}}
resInfo = append(resInfo, &info)
}
return resInfo
}