From 38c1732c79c8e72c6c63ae79c71b302f52a3a010 Mon Sep 17 00:00:00 2001 From: Michal Pristas Date: Fri, 15 Jan 2021 09:58:31 +0100 Subject: [PATCH] [Ingest Manager] Support for linux/arm64 (#23479) [Ingest Manager] Support for linux/arm64 (#23479) --- x-pack/elastic-agent/CHANGELOG.next.asciidoc | 1 + .../pkg/agent/application/global_config.go | 4 + .../pkg/agent/program/program.go | 15 +++ .../pkg/agent/program/program_test.go | 3 + .../elastic-agent/pkg/agent/program/spec.go | 1 + .../pkg/agent/program/spec_test.go | 4 +- .../pkg/agent/program/supported.go | 2 +- .../agent/program/testdata/endpoint_arm.yml | 115 ++++++++++++++++++ .../agent/program/testdata/endpoint_basic.yml | 2 + x-pack/elastic-agent/pkg/artifact/artifact.go | 13 +- x-pack/elastic-agent/pkg/artifact/config.go | 4 +- .../artifact/download/http/elastic_test.go | 2 + x-pack/elastic-agent/spec/endpoint.yml | 1 + 13 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_arm.yml diff --git a/x-pack/elastic-agent/CHANGELOG.next.asciidoc b/x-pack/elastic-agent/CHANGELOG.next.asciidoc index 75478112e8c..8d25d83aa68 100644 --- a/x-pack/elastic-agent/CHANGELOG.next.asciidoc +++ b/x-pack/elastic-agent/CHANGELOG.next.asciidoc @@ -30,6 +30,7 @@ - Fix shell wrapper for deb/rpm packaging {pull}23038[23038] - Fixed parsing of npipe URI {pull}22978[22978] - Remove artifacts on transient download errors {pull}23235[23235] +- Support for linux/arm64 {pull}23479[23479] - Skip top level files when unziping archive during upgrade {pull}23456[23456] - Do not take ownership of Endpoint log path {pull}23444[23444] diff --git a/x-pack/elastic-agent/pkg/agent/application/global_config.go b/x-pack/elastic-agent/pkg/agent/application/global_config.go index ae77d4d7a80..92bee739cde 100644 --- a/x-pack/elastic-agent/pkg/agent/application/global_config.go +++ b/x-pack/elastic-agent/pkg/agent/application/global_config.go @@ -5,6 +5,8 @@ package application import ( + "runtime" + "github.com/elastic/beats/v7/x-pack/elastic-agent/pkg/agent/application/paths" "github.com/elastic/beats/v7/x-pack/elastic-agent/pkg/agent/errors" "github.com/elastic/beats/v7/x-pack/elastic-agent/pkg/config" @@ -30,5 +32,7 @@ func agentGlobalConfig() map[string]interface{} { "home": paths.Home(), "logs": paths.Logs(), }, + "runtime.os": runtime.GOOS, + "runtime.arch": runtime.GOARCH, } } diff --git a/x-pack/elastic-agent/pkg/agent/program/program.go b/x-pack/elastic-agent/pkg/agent/program/program.go index f3f17d06b9d..87d46bf07a0 100644 --- a/x-pack/elastic-agent/pkg/agent/program/program.go +++ b/x-pack/elastic-agent/pkg/agent/program/program.go @@ -69,6 +69,21 @@ func detectPrograms(agentInfo transpiler.AgentInfo, singleConfig *transpiler.AST programs := make([]Program, 0) for _, spec := range Supported { specificAST := singleConfig.Clone() + if len(spec.Constraints) > 0 { + constraints, err := eql.New(spec.Constraints) + if err != nil { + return nil, err + } + ok, err := constraints.Eval(specificAST) + if err != nil { + return nil, err + } + + if !ok { + continue + } + } + err := spec.Rules.Apply(agentInfo, specificAST) if err != nil { return nil, err diff --git a/x-pack/elastic-agent/pkg/agent/program/program_test.go b/x-pack/elastic-agent/pkg/agent/program/program_test.go index 119574ebb6f..262c3e5cc8c 100644 --- a/x-pack/elastic-agent/pkg/agent/program/program_test.go +++ b/x-pack/elastic-agent/pkg/agent/program/program_test.go @@ -423,6 +423,9 @@ func TestConfiguration(t *testing.T) { "endpoint_unknown_output": { expected: 0, }, + "endpoint_arm": { + expected: 0, + }, } for name, test := range testcases { diff --git a/x-pack/elastic-agent/pkg/agent/program/spec.go b/x-pack/elastic-agent/pkg/agent/program/spec.go index 2ae1d698dba..f7d81b74a7e 100644 --- a/x-pack/elastic-agent/pkg/agent/program/spec.go +++ b/x-pack/elastic-agent/pkg/agent/program/spec.go @@ -39,6 +39,7 @@ type Spec struct { PostInstallSteps *transpiler.StepList `yaml:"post_install"` PreUninstallSteps *transpiler.StepList `yaml:"pre_uninstall"` When string `yaml:"when"` + Constraints string `yaml:"constraints"` } // ReadSpecs reads all the specs that match the provided globbing path. diff --git a/x-pack/elastic-agent/pkg/agent/program/spec_test.go b/x-pack/elastic-agent/pkg/agent/program/spec_test.go index df1fb082f7a..634f0bc70a1 100644 --- a/x-pack/elastic-agent/pkg/agent/program/spec_test.go +++ b/x-pack/elastic-agent/pkg/agent/program/spec_test.go @@ -54,7 +54,8 @@ func TestSerialization(t *testing.T) { PreUninstallSteps: transpiler.NewStepList( transpiler.ExecFile(30, "app", "uninstall", "--force"), ), - When: "1 == 1", + When: "1 == 1", + Constraints: "2 == 2", } yml := `name: hello cmd: hellocmd @@ -118,6 +119,7 @@ pre_uninstall: - --force timeout: 30 when: 1 == 1 +constraints: 2 == 2 ` t.Run("serialization", func(t *testing.T) { b, err := yaml.Marshal(spec) diff --git a/x-pack/elastic-agent/pkg/agent/program/supported.go b/x-pack/elastic-agent/pkg/agent/program/supported.go index 9e615b9c271..626466dd94c 100644 --- a/x-pack/elastic-agent/pkg/agent/program/supported.go +++ b/x-pack/elastic-agent/pkg/agent/program/supported.go @@ -23,7 +23,7 @@ func init() { // spec/heartbeat.yml // spec/metricbeat.yml // spec/packetbeat.yml - unpacked := packer.MustUnpack("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") + unpacked := packer.MustUnpack("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") SupportedMap = make(map[string]Spec) for f, v := range unpacked { diff --git a/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_arm.yml b/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_arm.yml new file mode 100644 index 00000000000..30b760d9c97 --- /dev/null +++ b/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_arm.yml @@ -0,0 +1,115 @@ +revision: 5 +name: Endpoint Host +fleet: + agent: + id: fleet-agent-id + host: + id: host-agent-id + access_api_key: VuaCfGcBCdbkQm-e5aOx:ui2lp2axTNmsyakw9tvNnw + kibana: + protocol: https + host: localhost:5601 + timeout: 30s + +outputs: + default: + type: elasticsearch + hosts: [127.0.0.1:9200, 127.0.0.1:9300] + username: elastic + password: changeme + api_key: TiNAGG4BaaMdaH1tRfuU:KnR6yE41RrSowb0kQ0HWoA + ca_sha256: 7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y= + +inputs: +- id: endpoint-id + type: endpoint + name: endpoint-1 + enabled: true + package: + name: endpoint + version: 0.3.0 + data_stream: + namespace: default + artifact_manifest: + schema_version: v22 + manifest_version: v21 + artifacts: + - endpoint-allowlist-windows: + sha256: 1234 + size: 2 + url: /relative/path/to/endpoint-allowlist-windows + - endpoint-allowlist-macos: + sha256: 1234 + size: 2 + url: /relative/path/to/endpoint-allowlist-macos + - endpoint-allowlist-linux: + sha256: 1234 + size: 2 + url: /relative/path/to/endpoint-allowlist-linux + policy: + linux: + advanced: + free-form: free-form-value + indices: + network: logs-endpoint.events.network-default + file: logs-endpoint.events.file-default + process: logs-endpoint.events.process-default + metadata: metrics-endpoint.metadata-default + policy: metrics-endpoint.policy-default + telemetry: metrics-endpoint.telemetry-default + logging: + file: info + stdout: debug + events: + process: true + file: true + network: true + windows: + malware: + mode: prevent + advanced: + free-form: free-form-value + indices: + network: logs-endpoint.events.network-default + file: logs-endpoint.events.file-default + registry: logs-endpoint.events.registry-default + process: logs-endpoint.events.process-default + driver: logs-endpoint.events.driver-default + library: logs-endpoint.events.library-default + alerts: logs-endpoint.alerts-default + metadata: metrics-endpoint.metadata-default + policy: metrics-endpoint.policy-default + telemetry: metrics-endpoint.telemetry-default + logging: + file: info + stdout: debug + events: + registry: true + process: true + security: true + file: true + dns: false + dll_and_driver_load: false + network: true + mac: + malware: + mode: prevent + advanced: + free-form: free-form-value + indices: + network: logs-endpoint.events.network-default + file: logs-endpoint.events.file-default + process: logs-endpoint.events.process-default + alerts: logs-endpoint.alerts-default + metadata: metrics-endpoint.metadata-default + policy: metrics-endpoint.policy-default + telemetry: metrics-endpoint.telemetry-default + logging: + file: info + stdout: debug + events: + process: true + file: true + network: true +runtime: + arch: arm64 diff --git a/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_basic.yml b/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_basic.yml index 9eee9b3a01d..728b4813a4e 100644 --- a/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_basic.yml +++ b/x-pack/elastic-agent/pkg/agent/program/testdata/endpoint_basic.yml @@ -111,3 +111,5 @@ inputs: process: true file: true network: true +runtime: + arch: x86_64 diff --git a/x-pack/elastic-agent/pkg/artifact/artifact.go b/x-pack/elastic-agent/pkg/artifact/artifact.go index 7f4001e77e0..5f8a099ed6a 100644 --- a/x-pack/elastic-agent/pkg/artifact/artifact.go +++ b/x-pack/elastic-agent/pkg/artifact/artifact.go @@ -13,12 +13,13 @@ import ( ) var packageArchMap = map[string]string{ - "linux-binary-32": "linux-x86.tar.gz", - "linux-binary-64": "linux-x86_64.tar.gz", - "windows-binary-32": "windows-x86.zip", - "windows-binary-64": "windows-x86_64.zip", - "darwin-binary-32": "darwin-x86_64.tar.gz", - "darwin-binary-64": "darwin-x86_64.tar.gz", + "linux-binary-32": "linux-x86.tar.gz", + "linux-binary-64": "linux-x86_64.tar.gz", + "linux-binary-arm64": "linux-arm64.tar.gz", + "windows-binary-32": "windows-x86.zip", + "windows-binary-64": "windows-x86_64.zip", + "darwin-binary-32": "darwin-x86_64.tar.gz", + "darwin-binary-64": "darwin-x86_64.tar.gz", } // GetArtifactName constructs a path to a downloaded artifact diff --git a/x-pack/elastic-agent/pkg/artifact/config.go b/x-pack/elastic-agent/pkg/artifact/config.go index 81ed3f856fc..78a0e62ad8a 100644 --- a/x-pack/elastic-agent/pkg/artifact/config.go +++ b/x-pack/elastic-agent/pkg/artifact/config.go @@ -77,7 +77,9 @@ func (c *Config) Arch() string { } arch := "32" - if strings.Contains(runtime.GOARCH, "64") { + if strings.Contains(runtime.GOARCH, "arm64") { + arch = "arm64" + } else if strings.Contains(runtime.GOARCH, "64") { arch = "64" } diff --git a/x-pack/elastic-agent/pkg/artifact/download/http/elastic_test.go b/x-pack/elastic-agent/pkg/artifact/download/http/elastic_test.go index e2097a9297f..a329b9b2f8e 100644 --- a/x-pack/elastic-agent/pkg/artifact/download/http/elastic_test.go +++ b/x-pack/elastic-agent/pkg/artifact/download/http/elastic_test.go @@ -137,6 +137,7 @@ func getTestCases() []testCase { return []testCase{ {"linux", "32"}, {"linux", "64"}, + {"linux", "arm64"}, {"darwin", "32"}, {"darwin", "64"}, {"windows", "32"}, @@ -164,6 +165,7 @@ func getElasticCoClient() http.Client { fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "i686.rpm"): struct{}{}, fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "x86_64.rpm"): struct{}{}, fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "linux-x86.tar.gz"): struct{}{}, + fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "linux-arm64.tar.gz"): struct{}{}, fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "linux-x86_64.tar.gz"): struct{}{}, fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "windows-x86.zip"): struct{}{}, fmt.Sprintf("%s-%s-%s", beatSpec.Cmd, version, "windows-x86_64.zip"): struct{}{}, diff --git a/x-pack/elastic-agent/spec/endpoint.yml b/x-pack/elastic-agent/spec/endpoint.yml index 1bc5817f5c1..a435c2f9ed4 100644 --- a/x-pack/elastic-agent/spec/endpoint.yml +++ b/x-pack/elastic-agent/spec/endpoint.yml @@ -62,3 +62,4 @@ rules: - revision when: length(${fleet}) > 0 and length(${inputs}) > 0 and hasKey(${output}, 'elasticsearch') +constraints: ${runtime.arch} != 'arm64'