From 7473d7aef4f616729a1c242256f8208194db1be9 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Wed, 30 Mar 2022 17:21:37 +0300 Subject: [PATCH 01/13] add to kibana.yml --- internal/profile/_static/kibana_config_8x.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/profile/_static/kibana_config_8x.yml b/internal/profile/_static/kibana_config_8x.yml index b202a91fee..b6a66f37fe 100644 --- a/internal/profile/_static/kibana_config_8x.yml +++ b/internal/profile/_static/kibana_config_8x.yml @@ -13,6 +13,8 @@ xpack.fleet.agents.fleet_server.hosts: ["http://fleet-server:8220"] xpack.encryptedSavedObjects.encryptionKey: "12345678901234567890123456789012" +xpack.cloudSecurityPosture.enabled: true + xpack.fleet.packages: - name: system version: latest @@ -43,4 +45,4 @@ xpack.fleet.agentPolicies: - name: fleet_server-1 id: default-fleet-server package: - name: fleet_server \ No newline at end of file + name: fleet_server From 896be85d9ce6185ac6e848eaed85c9be12d7fac9 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Wed, 30 Mar 2022 17:31:29 +0300 Subject: [PATCH 02/13] remove newline --- internal/profile/_static/kibana_config_8x.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/profile/_static/kibana_config_8x.yml b/internal/profile/_static/kibana_config_8x.yml index b6a66f37fe..0434eb80ce 100644 --- a/internal/profile/_static/kibana_config_8x.yml +++ b/internal/profile/_static/kibana_config_8x.yml @@ -45,4 +45,4 @@ xpack.fleet.agentPolicies: - name: fleet_server-1 id: default-fleet-server package: - name: fleet_server + name: fleet_server \ No newline at end of file From d4ec8bf17a6b55a28d0eb4395ee80de106bffb18 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 14:25:38 +0300 Subject: [PATCH 03/13] add 80 config file --- internal/profile/_static/kibana_config_80.yml | 46 ++++++++++++++++ internal/profile/profile.go | 23 ++++---- internal/profile/static.go | 22 ++++++++ internal/stack/variants.go | 8 ++- internal/stack/variants_test.go | 55 +++++++++++++++++++ 5 files changed, 142 insertions(+), 12 deletions(-) create mode 100644 internal/profile/_static/kibana_config_80.yml create mode 100644 internal/stack/variants_test.go diff --git a/internal/profile/_static/kibana_config_80.yml b/internal/profile/_static/kibana_config_80.yml new file mode 100644 index 0000000000..db754f4ed8 --- /dev/null +++ b/internal/profile/_static/kibana_config_80.yml @@ -0,0 +1,46 @@ +server.name: kibana +server.host: "0.0.0.0" + +elasticsearch.hosts: [ "http://elasticsearch:9200" ] +elasticsearch.serviceAccountToken: "AAEAAWVsYXN0aWMva2liYW5hL2VsYXN0aWMtcGFja2FnZS1raWJhbmEtdG9rZW46b2x4b051SWNRa0tYMHdXazdLWmFBdw" + +monitoring.ui.container.elasticsearch.enabled: true + +xpack.fleet.registryUrl: "http://package-registry:8080" +xpack.fleet.agents.enabled: true +xpack.fleet.agents.elasticsearch.hosts: ["http://elasticsearch:9200"] +xpack.fleet.agents.fleet_server.hosts: ["http://fleet-server:8220"] + +xpack.encryptedSavedObjects.encryptionKey: "12345678901234567890123456789012" + +xpack.fleet.packages: + - name: system + version: latest + - name: elastic_agent + version: latest + - name: fleet_server + version: latest +xpack.fleet.agentPolicies: + - name: Elastic-Agent (elastic-package) + id: elastic-agent-managed-ep + is_default: true + is_managed: false + namespace: default + monitoring_enabled: + - logs + - metrics + package_policies: + - name: system-1 + id: default-system + package: + name: system + - name: Fleet Server (elastic-package) + id: fleet-server-policy + is_default_fleet_server: true + is_managed: false + namespace: default + package_policies: + - name: fleet_server-1 + id: default-fleet-server + package: + name: fleet_server \ No newline at end of file diff --git a/internal/profile/profile.go b/internal/profile/profile.go index 1c5262ff7e..568d35ee8b 100644 --- a/internal/profile/profile.go +++ b/internal/profile/profile.go @@ -36,16 +36,19 @@ type configFile string // managedProfileFiles is the list of all files managed in a profile // If you create a new file that's managed by a profile, it needs to go in this list var managedProfileFiles = map[configFile]NewConfig{ - ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, - ElasticAgent8xEnvFile: newElasticAgent8xEnv, - ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, - ElasticsearchConfig8xFile: newElasticsearchConfig8x, - KibanaConfigDefaultFile: newKibanaConfigDefault, - KibanaConfig8xFile: newKibanaConfig8x, - PackageRegistryDockerfileFile: newPackageRegistryDockerfile, - PackageRegistryConfigFile: newPackageRegistryConfig, - SnapshotFile: newSnapshotFile, - PackageProfileMetaFile: createProfileMetadata, + ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, + ElasticAgent80VirtualEnvFile: newElasticAgent8xEnv, + ElasticAgent8xEnvFile: newElasticAgent8xEnv, + ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, + ElasticsearchConfig80VirtualFile: newElasticsearchConfig8x, + ElasticsearchConfig8xFile: newElasticsearchConfig8x, + KibanaConfigDefaultFile: newKibanaConfigDefault, + KibanaConfig80File: newKibanaConfig80, + KibanaConfig8xFile: newKibanaConfig8x, + PackageRegistryDockerfileFile: newPackageRegistryDockerfile, + PackageRegistryConfigFile: newPackageRegistryConfig, + SnapshotFile: newSnapshotFile, + PackageProfileMetaFile: createProfileMetadata, } // NewConfigProfile creates a new config profile manager diff --git a/internal/profile/static.go b/internal/profile/static.go index ff2ed10d6f..57292737e1 100644 --- a/internal/profile/static.go +++ b/internal/profile/static.go @@ -39,6 +39,20 @@ func newKibanaConfigDefault(_ string, profilePath string) (*simpleFile, error) { }, nil } +// KibanaConfig80File is the Kibana config file for 8.0 stack family +const KibanaConfig80File configFile = "kibana.config.80.yml" + +//go:embed _static/kibana_config_80.yml +var kibanaConfig80Yml string + +func newKibanaConfig80(_ string, profilePath string) (*simpleFile, error) { + return &simpleFile{ + name: string(KibanaConfig80File), + path: filepath.Join(profilePath, profileStackPath, string(KibanaConfig80File)), + body: kibanaConfig80Yml, + }, nil +} + // KibanaConfig8xFile is the Kibana config file for 8.x stack family const KibanaConfig8xFile configFile = "kibana.config.8x.yml" @@ -67,6 +81,10 @@ func newElasticsearchConfigDefault(_ string, profilePath string) (*simpleFile, e }, nil } +// ElasticsearchConfig80VirtualFile is the Elasticsearch virtual config file name for 8.0 stack family. +// This file does not exist, since it's identical to the 8x config file. +const ElasticsearchConfig80VirtualFile configFile = "elasticsearch.config.80.yml" + // ElasticsearchConfig8xFile is the Elasticsearch config file for 8.x stack family const ElasticsearchConfig8xFile configFile = "elasticsearch.config.8x.yml" @@ -117,6 +135,10 @@ func newPackageRegistryDockerfile(_ string, profilePath string) (*simpleFile, er }, nil } +// ElasticAgent80VirtualEnvFile is the .env for the 80 stack. +// This file does not exist, since it's identical to the 8x env file. +const ElasticAgent80VirtualEnvFile configFile = "elastic-agent.80.env" + // ElasticAgent8xEnvFile is the .env for the 8x stack. const ElasticAgent8xEnvFile configFile = "elastic-agent.8x.env" diff --git a/internal/stack/variants.go b/internal/stack/variants.go index a069b30531..80efa4ad11 100644 --- a/internal/stack/variants.go +++ b/internal/stack/variants.go @@ -10,15 +10,19 @@ import ( ) // stackVariantAsEnv function returns a stack variant based on the given stack version. -// We identified two variants: +// We identified three variants: // * default, covers all of 7.x branches -// * 8x, supports different configuration options in Kibana +// * 80, covers stack versions 8.0.0 to 8.1.x +// * 8x, supports different configuration options in Kibana, covers stack versions 8.2.0+ func stackVariantAsEnv(version string) string { return fmt.Sprintf("STACK_VERSION_VARIANT=%s", selectStackVersion(version)) } func selectStackVersion(version string) string { if strings.HasPrefix(version, "8.") { + if len(version) > 2 && (int(version[2])-'0') < 2 { + return "80" + } return "8x" } return "default" diff --git a/internal/stack/variants_test.go b/internal/stack/variants_test.go new file mode 100644 index 0000000000..e5ed437037 --- /dev/null +++ b/internal/stack/variants_test.go @@ -0,0 +1,55 @@ +package stack + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSelectStackVersion_NoVersion(t *testing.T) { + var version string + selected := selectStackVersion(version) + assert.Equal(t, selected, "default") +} + +func TestSelectStackVersion_OlderStack(t *testing.T) { + version := "7.14.99-SNAPSHOT" + selected := selectStackVersion(version) + assert.Equal(t, selected, "default") +} + +func TestSelectStackVersion_80(t *testing.T) { + version := "8.0.33" + selected := selectStackVersion(version) + assert.Equal(t, selected, "80") +} + +func TestSelectStackVersion_81(t *testing.T) { + version := "8.1.99-SNAPSHOT" + selected := selectStackVersion(version) + assert.Equal(t, selected, "80") +} + +func TestSelectStackVersion_82(t *testing.T) { + version := "8.2.3" + selected := selectStackVersion(version) + assert.Equal(t, selected, "8x") +} + +func TestSelectStackVersion_82plus(t *testing.T) { + version := "8.5.0-SNAPSHOT" + selected := selectStackVersion(version) + assert.Equal(t, selected, "8x") +} + +func TestSelectStackVersion_8dot(t *testing.T) { + version := "8." + selected := selectStackVersion(version) + assert.Equal(t, selected, "8x") +} + +func TestSelectStackVersion_8(t *testing.T) { + version := "8" + selected := selectStackVersion(version) + assert.Equal(t, selected, "default") +} From d8f79cc6e6b91b0ee06e6753f9435aac80c6923a Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 14:34:43 +0300 Subject: [PATCH 04/13] fix license --- internal/stack/variants_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/stack/variants_test.go b/internal/stack/variants_test.go index e5ed437037..192f793d4d 100644 --- a/internal/stack/variants_test.go +++ b/internal/stack/variants_test.go @@ -1,3 +1,7 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + package stack import ( From 1faa0bd6554e38e65f3330abf601c810bc39235a Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 15:12:50 +0300 Subject: [PATCH 05/13] use symlinks --- internal/profile/_static/elastic-agent_80.env | 1 + .../_static/elasticsearch_config_80.yml | 1 + internal/profile/profile.go | 26 +++++++-------- internal/profile/static.go | 32 +++++++++++++++---- 4 files changed, 41 insertions(+), 19 deletions(-) create mode 120000 internal/profile/_static/elastic-agent_80.env create mode 120000 internal/profile/_static/elasticsearch_config_80.yml diff --git a/internal/profile/_static/elastic-agent_80.env b/internal/profile/_static/elastic-agent_80.env new file mode 120000 index 0000000000..725b0099b8 --- /dev/null +++ b/internal/profile/_static/elastic-agent_80.env @@ -0,0 +1 @@ +elastic-agent_8x.env \ No newline at end of file diff --git a/internal/profile/_static/elasticsearch_config_80.yml b/internal/profile/_static/elasticsearch_config_80.yml new file mode 120000 index 0000000000..7c4cfb43ed --- /dev/null +++ b/internal/profile/_static/elasticsearch_config_80.yml @@ -0,0 +1 @@ +elasticsearch_config_8x.yml \ No newline at end of file diff --git a/internal/profile/profile.go b/internal/profile/profile.go index 568d35ee8b..b0bfa4d475 100644 --- a/internal/profile/profile.go +++ b/internal/profile/profile.go @@ -36,19 +36,19 @@ type configFile string // managedProfileFiles is the list of all files managed in a profile // If you create a new file that's managed by a profile, it needs to go in this list var managedProfileFiles = map[configFile]NewConfig{ - ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, - ElasticAgent80VirtualEnvFile: newElasticAgent8xEnv, - ElasticAgent8xEnvFile: newElasticAgent8xEnv, - ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, - ElasticsearchConfig80VirtualFile: newElasticsearchConfig8x, - ElasticsearchConfig8xFile: newElasticsearchConfig8x, - KibanaConfigDefaultFile: newKibanaConfigDefault, - KibanaConfig80File: newKibanaConfig80, - KibanaConfig8xFile: newKibanaConfig8x, - PackageRegistryDockerfileFile: newPackageRegistryDockerfile, - PackageRegistryConfigFile: newPackageRegistryConfig, - SnapshotFile: newSnapshotFile, - PackageProfileMetaFile: createProfileMetadata, + ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, + ElasticAgent80EnvFile: newElasticAgent80Env, + ElasticAgent8xEnvFile: newElasticAgent8xEnv, + ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, + ElasticsearchConfig80File: newElasticsearchConfig80, + ElasticsearchConfig8xFile: newElasticsearchConfig8x, + KibanaConfigDefaultFile: newKibanaConfigDefault, + KibanaConfig80File: newKibanaConfig80, + KibanaConfig8xFile: newKibanaConfig8x, + PackageRegistryDockerfileFile: newPackageRegistryDockerfile, + PackageRegistryConfigFile: newPackageRegistryConfig, + SnapshotFile: newSnapshotFile, + PackageProfileMetaFile: createProfileMetadata, } // NewConfigProfile creates a new config profile manager diff --git a/internal/profile/static.go b/internal/profile/static.go index 57292737e1..cb5409128d 100644 --- a/internal/profile/static.go +++ b/internal/profile/static.go @@ -81,9 +81,19 @@ func newElasticsearchConfigDefault(_ string, profilePath string) (*simpleFile, e }, nil } -// ElasticsearchConfig80VirtualFile is the Elasticsearch virtual config file name for 8.0 stack family. -// This file does not exist, since it's identical to the 8x config file. -const ElasticsearchConfig80VirtualFile configFile = "elasticsearch.config.80.yml" +// ElasticsearchConfig80File is the Elasticsearch config file for 8.0 stack family +const ElasticsearchConfig80File configFile = "elasticsearch.config.80.yml" + +//go:embed _static/elasticsearch_config_80.yml +var elasticsearchConfig80Yml string + +func newElasticsearchConfig80(_ string, profilePath string) (*simpleFile, error) { + return &simpleFile{ + name: string(ElasticsearchConfig80File), + path: filepath.Join(profilePath, profileStackPath, string(ElasticsearchConfig80File)), + body: elasticsearchConfig80Yml, + }, nil +} // ElasticsearchConfig8xFile is the Elasticsearch config file for 8.x stack family const ElasticsearchConfig8xFile configFile = "elasticsearch.config.8x.yml" @@ -135,9 +145,19 @@ func newPackageRegistryDockerfile(_ string, profilePath string) (*simpleFile, er }, nil } -// ElasticAgent80VirtualEnvFile is the .env for the 80 stack. -// This file does not exist, since it's identical to the 8x env file. -const ElasticAgent80VirtualEnvFile configFile = "elastic-agent.80.env" +// ElasticAgent80EnvFile is the .env for the 80 stack. +const ElasticAgent80EnvFile configFile = "elastic-agent.80.env" + +//go:embed _static/elastic-agent_80.env +var elasticAgent80Env string + +func newElasticAgent80Env(_ string, profilePath string) (*simpleFile, error) { + return &simpleFile{ + name: string(ElasticAgent80EnvFile), + path: filepath.Join(profilePath, profileStackPath, string(ElasticAgent80EnvFile)), + body: elasticAgent80Env, + }, nil +} // ElasticAgent8xEnvFile is the .env for the 8x stack. const ElasticAgent8xEnvFile configFile = "elastic-agent.8x.env" From f3dc19d9f171b3f1d01fbae36ad7c017e1a71f64 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 15:19:57 +0300 Subject: [PATCH 06/13] Revert "use symlinks" This reverts commit 1faa0bd6554e38e65f3330abf601c810bc39235a. --- internal/profile/_static/elastic-agent_80.env | 1 - .../_static/elasticsearch_config_80.yml | 1 - internal/profile/profile.go | 26 +++++++-------- internal/profile/static.go | 32 ++++--------------- 4 files changed, 19 insertions(+), 41 deletions(-) delete mode 120000 internal/profile/_static/elastic-agent_80.env delete mode 120000 internal/profile/_static/elasticsearch_config_80.yml diff --git a/internal/profile/_static/elastic-agent_80.env b/internal/profile/_static/elastic-agent_80.env deleted file mode 120000 index 725b0099b8..0000000000 --- a/internal/profile/_static/elastic-agent_80.env +++ /dev/null @@ -1 +0,0 @@ -elastic-agent_8x.env \ No newline at end of file diff --git a/internal/profile/_static/elasticsearch_config_80.yml b/internal/profile/_static/elasticsearch_config_80.yml deleted file mode 120000 index 7c4cfb43ed..0000000000 --- a/internal/profile/_static/elasticsearch_config_80.yml +++ /dev/null @@ -1 +0,0 @@ -elasticsearch_config_8x.yml \ No newline at end of file diff --git a/internal/profile/profile.go b/internal/profile/profile.go index b0bfa4d475..568d35ee8b 100644 --- a/internal/profile/profile.go +++ b/internal/profile/profile.go @@ -36,19 +36,19 @@ type configFile string // managedProfileFiles is the list of all files managed in a profile // If you create a new file that's managed by a profile, it needs to go in this list var managedProfileFiles = map[configFile]NewConfig{ - ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, - ElasticAgent80EnvFile: newElasticAgent80Env, - ElasticAgent8xEnvFile: newElasticAgent8xEnv, - ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, - ElasticsearchConfig80File: newElasticsearchConfig80, - ElasticsearchConfig8xFile: newElasticsearchConfig8x, - KibanaConfigDefaultFile: newKibanaConfigDefault, - KibanaConfig80File: newKibanaConfig80, - KibanaConfig8xFile: newKibanaConfig8x, - PackageRegistryDockerfileFile: newPackageRegistryDockerfile, - PackageRegistryConfigFile: newPackageRegistryConfig, - SnapshotFile: newSnapshotFile, - PackageProfileMetaFile: createProfileMetadata, + ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, + ElasticAgent80VirtualEnvFile: newElasticAgent8xEnv, + ElasticAgent8xEnvFile: newElasticAgent8xEnv, + ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, + ElasticsearchConfig80VirtualFile: newElasticsearchConfig8x, + ElasticsearchConfig8xFile: newElasticsearchConfig8x, + KibanaConfigDefaultFile: newKibanaConfigDefault, + KibanaConfig80File: newKibanaConfig80, + KibanaConfig8xFile: newKibanaConfig8x, + PackageRegistryDockerfileFile: newPackageRegistryDockerfile, + PackageRegistryConfigFile: newPackageRegistryConfig, + SnapshotFile: newSnapshotFile, + PackageProfileMetaFile: createProfileMetadata, } // NewConfigProfile creates a new config profile manager diff --git a/internal/profile/static.go b/internal/profile/static.go index cb5409128d..57292737e1 100644 --- a/internal/profile/static.go +++ b/internal/profile/static.go @@ -81,19 +81,9 @@ func newElasticsearchConfigDefault(_ string, profilePath string) (*simpleFile, e }, nil } -// ElasticsearchConfig80File is the Elasticsearch config file for 8.0 stack family -const ElasticsearchConfig80File configFile = "elasticsearch.config.80.yml" - -//go:embed _static/elasticsearch_config_80.yml -var elasticsearchConfig80Yml string - -func newElasticsearchConfig80(_ string, profilePath string) (*simpleFile, error) { - return &simpleFile{ - name: string(ElasticsearchConfig80File), - path: filepath.Join(profilePath, profileStackPath, string(ElasticsearchConfig80File)), - body: elasticsearchConfig80Yml, - }, nil -} +// ElasticsearchConfig80VirtualFile is the Elasticsearch virtual config file name for 8.0 stack family. +// This file does not exist, since it's identical to the 8x config file. +const ElasticsearchConfig80VirtualFile configFile = "elasticsearch.config.80.yml" // ElasticsearchConfig8xFile is the Elasticsearch config file for 8.x stack family const ElasticsearchConfig8xFile configFile = "elasticsearch.config.8x.yml" @@ -145,19 +135,9 @@ func newPackageRegistryDockerfile(_ string, profilePath string) (*simpleFile, er }, nil } -// ElasticAgent80EnvFile is the .env for the 80 stack. -const ElasticAgent80EnvFile configFile = "elastic-agent.80.env" - -//go:embed _static/elastic-agent_80.env -var elasticAgent80Env string - -func newElasticAgent80Env(_ string, profilePath string) (*simpleFile, error) { - return &simpleFile{ - name: string(ElasticAgent80EnvFile), - path: filepath.Join(profilePath, profileStackPath, string(ElasticAgent80EnvFile)), - body: elasticAgent80Env, - }, nil -} +// ElasticAgent80VirtualEnvFile is the .env for the 80 stack. +// This file does not exist, since it's identical to the 8x env file. +const ElasticAgent80VirtualEnvFile configFile = "elastic-agent.80.env" // ElasticAgent8xEnvFile is the .env for the 8x stack. const ElasticAgent8xEnvFile configFile = "elastic-agent.8x.env" From 569c710926705e6cb280236ac1d2c98c5f0ba6c6 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 16:06:16 +0300 Subject: [PATCH 07/13] virtual files --- internal/profile/profile.go | 26 ++++++++--------- internal/profile/static.go | 58 +++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 34 deletions(-) diff --git a/internal/profile/profile.go b/internal/profile/profile.go index 568d35ee8b..82efb775c9 100644 --- a/internal/profile/profile.go +++ b/internal/profile/profile.go @@ -36,19 +36,19 @@ type configFile string // managedProfileFiles is the list of all files managed in a profile // If you create a new file that's managed by a profile, it needs to go in this list var managedProfileFiles = map[configFile]NewConfig{ - ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, - ElasticAgent80VirtualEnvFile: newElasticAgent8xEnv, - ElasticAgent8xEnvFile: newElasticAgent8xEnv, - ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, - ElasticsearchConfig80VirtualFile: newElasticsearchConfig8x, - ElasticsearchConfig8xFile: newElasticsearchConfig8x, - KibanaConfigDefaultFile: newKibanaConfigDefault, - KibanaConfig80File: newKibanaConfig80, - KibanaConfig8xFile: newKibanaConfig8x, - PackageRegistryDockerfileFile: newPackageRegistryDockerfile, - PackageRegistryConfigFile: newPackageRegistryConfig, - SnapshotFile: newSnapshotFile, - PackageProfileMetaFile: createProfileMetadata, + ElasticAgentDefaultEnvFile: newElasticAgentDefaultEnv, + ElasticAgent8xEnvFile: newElasticAgent8xEnv, + ElasticAgent80EnvFile: newElasticAgent80Env, + ElasticsearchConfigDefaultFile: newElasticsearchConfigDefault, + ElasticsearchConfig8xFile: newElasticsearchConfig8x, + ElasticsearchConfig80File: newElasticsearchConfig80, + KibanaConfigDefaultFile: newKibanaConfigDefault, + KibanaConfig8xFile: newKibanaConfig8x, + KibanaConfig80File: newKibanaConfig80, + PackageRegistryDockerfileFile: newPackageRegistryDockerfile, + PackageRegistryConfigFile: newPackageRegistryConfig, + SnapshotFile: newSnapshotFile, + PackageProfileMetaFile: createProfileMetadata, } // NewConfigProfile creates a new config profile manager diff --git a/internal/profile/static.go b/internal/profile/static.go index 57292737e1..7a96499e64 100644 --- a/internal/profile/static.go +++ b/internal/profile/static.go @@ -39,20 +39,6 @@ func newKibanaConfigDefault(_ string, profilePath string) (*simpleFile, error) { }, nil } -// KibanaConfig80File is the Kibana config file for 8.0 stack family -const KibanaConfig80File configFile = "kibana.config.80.yml" - -//go:embed _static/kibana_config_80.yml -var kibanaConfig80Yml string - -func newKibanaConfig80(_ string, profilePath string) (*simpleFile, error) { - return &simpleFile{ - name: string(KibanaConfig80File), - path: filepath.Join(profilePath, profileStackPath, string(KibanaConfig80File)), - body: kibanaConfig80Yml, - }, nil -} - // KibanaConfig8xFile is the Kibana config file for 8.x stack family const KibanaConfig8xFile configFile = "kibana.config.8x.yml" @@ -67,6 +53,20 @@ func newKibanaConfig8x(_ string, profilePath string) (*simpleFile, error) { }, nil } +// KibanaConfig80File is the Kibana config file for 8.0 stack family (8.0 to 8.1) +const KibanaConfig80File configFile = "kibana.config.80.yml" + +//go:embed _static/kibana_config_80.yml +var kibanaConfig80Yml string + +func newKibanaConfig80(_ string, profilePath string) (*simpleFile, error) { + return &simpleFile{ + name: string(KibanaConfig80File), + path: filepath.Join(profilePath, profileStackPath, string(KibanaConfig80File)), + body: kibanaConfig80Yml, + }, nil +} + // ElasticsearchConfigDefaultFile is the default Elasticsearch config file const ElasticsearchConfigDefaultFile configFile = "elasticsearch.config.default.yml" @@ -81,10 +81,6 @@ func newElasticsearchConfigDefault(_ string, profilePath string) (*simpleFile, e }, nil } -// ElasticsearchConfig80VirtualFile is the Elasticsearch virtual config file name for 8.0 stack family. -// This file does not exist, since it's identical to the 8x config file. -const ElasticsearchConfig80VirtualFile configFile = "elasticsearch.config.80.yml" - // ElasticsearchConfig8xFile is the Elasticsearch config file for 8.x stack family const ElasticsearchConfig8xFile configFile = "elasticsearch.config.8x.yml" @@ -99,6 +95,18 @@ func newElasticsearchConfig8x(_ string, profilePath string) (*simpleFile, error) }, nil } +// ElasticsearchConfig80File is the Elasticsearch virtual config file name for 8.0 stack family (8.0 to 8.1) +// This file does not exist in the source code, since it's identical to the 8x config file. +const ElasticsearchConfig80File configFile = "elasticsearch.config.80.yml" + +func newElasticsearchConfig80(_ string, profilePath string) (*simpleFile, error) { + return &simpleFile{ + name: string(ElasticsearchConfig80File), + path: filepath.Join(profilePath, profileStackPath, string(ElasticsearchConfig80File)), + body: elasticsearchConfig8xYml, + }, nil +} + // PackageRegistryConfigFile is the config file for the Elastic Package registry const PackageRegistryConfigFile configFile = "package-registry.config.yml" @@ -135,9 +143,17 @@ func newPackageRegistryDockerfile(_ string, profilePath string) (*simpleFile, er }, nil } -// ElasticAgent80VirtualEnvFile is the .env for the 80 stack. -// This file does not exist, since it's identical to the 8x env file. -const ElasticAgent80VirtualEnvFile configFile = "elastic-agent.80.env" +// ElasticAgent80EnvFile is the .env for the 8.0 stack. +// This file does not exist in the source code, since it's identical to the 8x env file. +const ElasticAgent80EnvFile configFile = "elastic-agent.80.env" + +func newElasticAgent80Env(_ string, profilePath string) (*simpleFile, error) { + return &simpleFile{ + name: string(ElasticAgent80EnvFile), + path: filepath.Join(profilePath, profileStackPath, string(ElasticAgent80EnvFile)), + body: elasticAgent8xEnv, + }, nil +} // ElasticAgent8xEnvFile is the .env for the 8x stack. const ElasticAgent8xEnvFile configFile = "elastic-agent.8x.env" From 1153a98dd21eae59ecbade811f0b7eb967c78ee7 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 22:16:11 +0300 Subject: [PATCH 08/13] use semver --- internal/stack/variants.go | 17 +++++-- internal/stack/variants_test.go | 83 +++++++++++++++------------------ 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/internal/stack/variants.go b/internal/stack/variants.go index 80efa4ad11..62e816b84f 100644 --- a/internal/stack/variants.go +++ b/internal/stack/variants.go @@ -6,7 +6,7 @@ package stack import ( "fmt" - "strings" + "github.com/Masterminds/semver/v3" ) // stackVariantAsEnv function returns a stack variant based on the given stack version. @@ -19,11 +19,20 @@ func stackVariantAsEnv(version string) string { } func selectStackVersion(version string) string { - if strings.HasPrefix(version, "8.") { - if len(version) > 2 && (int(version[2])-'0') < 2 { + if v, err := semver.NewVersion(version); err == nil { + if checkVersion(v, "8.0-0 - 8.1-0") { return "80" } - return "8x" + if checkVersion(v, "^8.2-0") { + return "8x" + } } return "default" } + +func checkVersion(v *semver.Version, constraint string) bool { + if constraint, err := semver.NewConstraint(constraint); err == nil { + return constraint.Check(v) + } + return false +} diff --git a/internal/stack/variants_test.go b/internal/stack/variants_test.go index 192f793d4d..26a2bb57cc 100644 --- a/internal/stack/variants_test.go +++ b/internal/stack/variants_test.go @@ -10,50 +10,41 @@ import ( "github.com/stretchr/testify/assert" ) -func TestSelectStackVersion_NoVersion(t *testing.T) { - var version string - selected := selectStackVersion(version) - assert.Equal(t, selected, "default") -} - -func TestSelectStackVersion_OlderStack(t *testing.T) { - version := "7.14.99-SNAPSHOT" - selected := selectStackVersion(version) - assert.Equal(t, selected, "default") -} - -func TestSelectStackVersion_80(t *testing.T) { - version := "8.0.33" - selected := selectStackVersion(version) - assert.Equal(t, selected, "80") -} - -func TestSelectStackVersion_81(t *testing.T) { - version := "8.1.99-SNAPSHOT" - selected := selectStackVersion(version) - assert.Equal(t, selected, "80") -} - -func TestSelectStackVersion_82(t *testing.T) { - version := "8.2.3" - selected := selectStackVersion(version) - assert.Equal(t, selected, "8x") -} - -func TestSelectStackVersion_82plus(t *testing.T) { - version := "8.5.0-SNAPSHOT" - selected := selectStackVersion(version) - assert.Equal(t, selected, "8x") -} - -func TestSelectStackVersion_8dot(t *testing.T) { - version := "8." - selected := selectStackVersion(version) - assert.Equal(t, selected, "8x") -} - -func TestSelectStackVersion_8(t *testing.T) { - version := "8" - selected := selectStackVersion(version) - assert.Equal(t, selected, "default") +var tests = []struct { + version string + variant string +}{ + {"", "default"}, + {"7", "default"}, + {"7.0.0", "default"}, + {"7.14.99-SNAPSHOT", "default"}, + {"8", "80"}, + {"8.0.0-alpha", "80"}, + {"8.0.0", "80"}, + {"8.0.33", "80"}, + {"8.0.33-beta", "80"}, + {"8.1", "80"}, + {"8.1-alpha", "80"}, + {"8.1.0-alpha", "80"}, + {"8.1.0", "80"}, + {"8.1.58", "80"}, + {"8.1.99-beta", "80"}, + {"8.1.999-SNAPSHOT", "80"}, + {"8.2", "8x"}, + {"8.2.0-alpha", "8x"}, + {"8.2.0", "8x"}, + {"8.2.58", "8x"}, + {"8.2.99-gamma", "8x"}, + {"8.2.777-SNAPSHOT+arm64", "8x"}, + {"8.5", "8x"}, + {"9", "default"}, +} + +func TestSelectStackVersion(t *testing.T) { + for _, tt := range tests { + t.Run(tt.version, func(t *testing.T) { + selected := selectStackVersion(tt.version) + assert.Equal(t, selected, tt.variant) + }) + } } From 4d2c446acd1f851019310f8a31123ae1c0aa1600 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 22:33:36 +0300 Subject: [PATCH 09/13] fix static --- go.mod | 2 +- internal/stack/variants.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 944fe4a09e..21c280cf2a 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.17 require ( github.com/AlecAivazis/survey/v2 v2.3.4 github.com/Masterminds/semver v1.5.0 + github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/gopenpgp/v2 v2.4.6 github.com/aymerick/raymond v2.0.2+incompatible github.com/boumenot/gocover-cobertura v1.2.0 @@ -41,7 +42,6 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/BurntSushi/toml v0.4.1 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect - github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/Microsoft/go-winio v0.5.1 // indirect github.com/PaesslerAG/gval v1.0.0 // indirect github.com/PaesslerAG/jsonpath v0.1.1 // indirect diff --git a/internal/stack/variants.go b/internal/stack/variants.go index 62e816b84f..05935c6496 100644 --- a/internal/stack/variants.go +++ b/internal/stack/variants.go @@ -6,6 +6,7 @@ package stack import ( "fmt" + "github.com/Masterminds/semver/v3" ) From 1479d39ce3821796e60e9c6315711cddbfd0b8b2 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Mon, 4 Apr 2022 23:07:03 +0300 Subject: [PATCH 10/13] retrigger stuck CI From c44413f1ad2b9e257e60d68c9e0311983b0be3e8 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Tue, 5 Apr 2022 13:51:44 +0300 Subject: [PATCH 11/13] add configuration variant map --- internal/stack/variants.go | 16 +++++++++++----- internal/stack/variants_test.go | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/internal/stack/variants.go b/internal/stack/variants.go index 05935c6496..07a72ff35c 100644 --- a/internal/stack/variants.go +++ b/internal/stack/variants.go @@ -10,6 +10,13 @@ import ( "github.com/Masterminds/semver/v3" ) +// configurationVariantMap is a map of version constraints and their matching configuration variant. +// This map is used to deploy different versions of the Elastic stack with matching configurations. +var configurationVariantMap = map[string]string{ + "8.0-0 - 8.1-0": "80", + "^8.2-0": "8x", +} + // stackVariantAsEnv function returns a stack variant based on the given stack version. // We identified three variants: // * default, covers all of 7.x branches @@ -21,11 +28,10 @@ func stackVariantAsEnv(version string) string { func selectStackVersion(version string) string { if v, err := semver.NewVersion(version); err == nil { - if checkVersion(v, "8.0-0 - 8.1-0") { - return "80" - } - if checkVersion(v, "^8.2-0") { - return "8x" + for constraint, variant := range configurationVariantMap { + if checkVersion(v, constraint) { + return variant + } } } return "default" diff --git a/internal/stack/variants_test.go b/internal/stack/variants_test.go index 26a2bb57cc..a553b3dd6d 100644 --- a/internal/stack/variants_test.go +++ b/internal/stack/variants_test.go @@ -44,7 +44,7 @@ func TestSelectStackVersion(t *testing.T) { for _, tt := range tests { t.Run(tt.version, func(t *testing.T) { selected := selectStackVersion(tt.version) - assert.Equal(t, selected, tt.variant) + assert.Equal(t, tt.variant, selected) }) } } From 898bd709096ebf08fbe96b0c75a8dbfcad402f95 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Tue, 5 Apr 2022 17:30:59 +0300 Subject: [PATCH 12/13] use old semver --- internal/stack/variants.go | 6 +++--- internal/stack/variants_test.go | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/stack/variants.go b/internal/stack/variants.go index 07a72ff35c..2bde87992a 100644 --- a/internal/stack/variants.go +++ b/internal/stack/variants.go @@ -7,14 +7,14 @@ package stack import ( "fmt" - "github.com/Masterminds/semver/v3" + "github.com/Masterminds/semver" ) // configurationVariantMap is a map of version constraints and their matching configuration variant. // This map is used to deploy different versions of the Elastic stack with matching configurations. var configurationVariantMap = map[string]string{ - "8.0-0 - 8.1-0": "80", - "^8.2-0": "8x", + "8.0-0 - 8.1.x-x": "80", + "^8.2-0": "8x", } // stackVariantAsEnv function returns a stack variant based on the given stack version. diff --git a/internal/stack/variants_test.go b/internal/stack/variants_test.go index a553b3dd6d..5b5e5a6aa7 100644 --- a/internal/stack/variants_test.go +++ b/internal/stack/variants_test.go @@ -19,10 +19,12 @@ var tests = []struct { {"7.0.0", "default"}, {"7.14.99-SNAPSHOT", "default"}, {"8", "80"}, + {"8-0", "80"}, {"8.0.0-alpha", "80"}, {"8.0.0", "80"}, {"8.0.33", "80"}, {"8.0.33-beta", "80"}, + {"8.1-0", "80"}, {"8.1", "80"}, {"8.1-alpha", "80"}, {"8.1.0-alpha", "80"}, @@ -30,6 +32,7 @@ var tests = []struct { {"8.1.58", "80"}, {"8.1.99-beta", "80"}, {"8.1.999-SNAPSHOT", "80"}, + {"8.2-0", "8x"}, {"8.2", "8x"}, {"8.2.0-alpha", "8x"}, {"8.2.0", "8x"}, From cb91746f5871e506c005cf39f68da627a4d1c092 Mon Sep 17 00:00:00 2001 From: Eyal Kraft Date: Tue, 5 Apr 2022 17:31:49 +0300 Subject: [PATCH 13/13] fix static check --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 21c280cf2a..944fe4a09e 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ go 1.17 require ( github.com/AlecAivazis/survey/v2 v2.3.4 github.com/Masterminds/semver v1.5.0 - github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/gopenpgp/v2 v2.4.6 github.com/aymerick/raymond v2.0.2+incompatible github.com/boumenot/gocover-cobertura v1.2.0 @@ -42,6 +41,7 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/BurntSushi/toml v0.4.1 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect + github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/Microsoft/go-winio v0.5.1 // indirect github.com/PaesslerAG/gval v1.0.0 // indirect github.com/PaesslerAG/jsonpath v0.1.1 // indirect