Skip to content

Conversation

yaauie
Copy link
Member

@yaauie yaauie commented Jul 9, 2025

Release notes

[rn:skip]

What does this PR do?

Forward-ports support for the observabilitySRE internal distribution from 8.19 to main, enabling us to create 9.x artifacts.

This is a sequence of cherry-picks from the 8.19 branch including all commits that deal with the creation or validation of the internal observabilitySRE docker artifacts.

Why is it important/What is the impact to the user?

Enables our internal customer to deploy docker artifacts based on Logstash 9.x

Checklist

  • [ ] My code follows the style guidelines of this project
  • [ ] I have commented my code, particularly in hard-to-understand areas
  • [ ] I have made corresponding changes to the documentation
  • [ ] I have made corresponding change to the default configuration files (and/or docker env variables)
  • [ ] I have added tests that prove my fix is effective or that my feature works

Author's Checklist

  • [ ]

How to test this PR locally

./gradlew clean artifactDockerObservabilitySRE -PfedrampHighMode=true

@yaauie yaauie requested review from donoghuc and kaisecheng July 9, 2025 18:11
@github-actions
Copy link
Contributor

github-actions bot commented Jul 9, 2025

🤖 GitHub comments

Expand to view the GitHub comments

Just comment with:

  • run docs-build : Re-trigger the docs validation. (use unformatted text in the comment!)

@mergify
Copy link
Contributor

mergify bot commented Jul 9, 2025

This pull request does not have a backport label. Could you fix it @yaauie? 🙏
To fixup this pull request, you need to add the backport labels for the needed
branches, such as:

  • backport-8./d is the label to automatically backport to the 8./d branch. /d is the digit.
  • If no backport is necessary, please add the backport-skip label

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kaisecheng for your review, can you focus on docker/Makefile and docker/Dockerfile.erb?

@donoghuc
Copy link
Member

donoghuc commented Jul 9, 2025

I would be curious to see a CI run with this #17787 I think that would solve the rest of the test failures.

I think the separate container env (which is actually using bundler env to run jruby 9.4.13.0) is exposing an issue we want to solve generally with the upgrade.

@yaauie yaauie added the backport-skip Skip automated backport with mergify label Jul 9, 2025
@yaauie
Copy link
Member Author

yaauie commented Jul 10, 2025

I would be curious to see a CI run with this #17787 I think that would solve the rest of the test failures.

I've kicked off a build for d5d6195, which is this branch plus a cherry-pick of the commit from #17787

@kaisecheng
Copy link
Contributor

Makefile and Dockerfile.erb look good to me.
Kicked off exhaustive tests looking for a green "Acceptance / Docker"

@donoghuc
Copy link
Member

Kicked off exhaustive tests looking for a green "Acceptance / Docker"

Unfortunately these tests would not actually trigger because they are gated on unit/integration tests.

IMO the path forward for this is:

  1. merge Pin jar-dependencies to match jruby 9.4.13.0 #17787 and rebase this PR on HEAD of main to incorporate those changes and get all the tests here green
  2. Merge this PR on green CI (This looks complete as far as forward port 😄 )
  3. Get Harmonize observability sre acceptance #17781 in to both branches (8.19 and main). This will address ensuring that tests are running on 8.19 or 9.2 respectively for ES containers.

Copy link
Member

@donoghuc donoghuc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wrote up next steps in #17785 (comment)

I think this is a complete forward port for what has been merged in 8.19 so far. There are still some moving parts. I would like to see everything listed in my comment completed then once we have artifacts publishing I would like to do a final (manual) comparison to make sure that those artifacts are running as expected.

@yaauie yaauie force-pushed the forwardport-fedramp-high-to-main branch from 76dabd9 to 08a65ae Compare July 14, 2025 19:21
@yaauie
Copy link
Member Author

yaauie commented Jul 14, 2025

I've rebased onto main, breaking that first commit into two parts (the cleanly-applied 7aa1a69 and the reimplementation-of-conflicts 3474260), picking up more conflicts from active work on docker artifact generation along the way.

Copy link
Member

@donoghuc donoghuc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent! Nice to see test working. I have just one small tactical request, but once that is in i think this is ready!

.ruby-version Outdated
@@ -1 +1 @@
jruby-9.4.9.0
jruby-9.4.13.0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
jruby-9.4.13.0
jruby-9.4.9.0

Can we handle this separately in #17798? That way i can do an easy backport.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤦🏼 yep, I cut that out, waiting once more for green.

donoghuc added 7 commits July 15, 2025 20:54
This is the CLEAN subset of a cherry-pick of the merge-commit from the
observabilitySRE feature branch into 8.x in PR elastic#17541 (0b1d299),
OMITTING changes to `docker/*` and `rakelib/artifacts.rake` that would
conflict due to substantial refactorings on `main`.
This is a forward-port of _functionality_ from the observabilitySRE feature
branch into 8.x in PR elastic#17541 (0b1d299),
wholly re-implementing the changes in `docker/*` and `rakelib/artifacts.rake`
from the 8.x-style docker structure to the refactored structure present
on `main`.
When the fedramp high feature branch was merged into 8.x the PR pipeline
accidentally duplicated the top level `steps` key. This was a mistake and is
causing issues generating exhaustive test pipeline definition. This commit fixes
the bug by ensuring there is a single `steps` key that defines all the steps in
the pipeline.
The `artifactDockerObservabilitySRE` gradle task *always* produces a tag with a
`SNAPSHOT` postfix. In the staging pipeline we use the shared
`qualified-version` script for determining the LS version. That script correctly
handles conditionally adding a `SNAPSHOT` postfix which is important for the
tagging scheme for pushing to our container registry. Given the intermediate tag
produced by the gradle task is never pushed anywhere we can update the build
script to ensure the "local" artifact is always referenced with the `SNAPSHOT`
postfix.
…lastic#17627)

* Use dedicated elasticsearch image for observabilitySRE smoke testing

The ES team has started publishing a purpose built image for the fedramp high
project. Update our smoke test stack to use this container.

* Override default entrypoint into elasticsearch container

The new image does not provide the stub `/app/elasticsearch.sh` file
https://github.com/elastic/elasticsearch/blob/1a1763c591c4c32bf66f0df3bce2040e8f19a1a2/distribution/docker/README.md?plain=1#L16-L19
previously available. This commit overrides the entrypoint to avoid needing that
file. See: https://github.com/elastic/elasticsearch/blob/1a1763c591c4c32bf66f0df3bce2040e8f19a1a2/distribution/docker/src/docker/Dockerfile.ess#L38C5-L40C37

* Remove entrypoint workaround due to fix landing upstream
* Comment to clarify why FIPS flag is not needed for smoke tests

* Use full versions of docker commands for readability

* Simplify grock pattern match

The grok pattern is unanchored-by-default, we don't need the leading and trailing
wildcards.
elastic#17623)

* Add a step to exhaustive tests for observabilitySRE accetpance testing

This commit shows the proposed pattern for adding acceptance testing for the
observability SRE image. This will run when exhaustive tests run. A new gradle
task will hook in to rspec similar to how it is done for the smoke tests. The
main difference is that instead of building a container, the latest is pulled
from the container registry and run on a fips configured host VM.

* WIP: Idea for how to handle multipe container configs for acceptance tests

This commit shows the rough structure for how I am planning on handling docker
compose networks for acceptance tests. The main idea is to use interpolation in
the docker compose file to point to different configuration files for
filebeat/logstash/elasticsearch. This is mainly due to the nature of these tests
showing behavior when the system is and is not configured properly for FIPS. The
breakdown in responsibility is:

1. Gradle handles cert generation (similar to smoke test, this avoids checking
in PKI)
2. Rspec handles stopping/starting docker compose and managing environment vars
for intperolation in docker compose manifests (different from smoke tests where
a single static docker compose is started in gradle)
3. Rspec handles deciding when containers are ready and querying state about
data flowing through the system
4. Gradle cleans up certs

THis is just a rough sketch, there are still bugs to be worked out but before i
get too far in to it I want to get the idea out there.

* Add tests describing behavior of LS -> ES with non-fips config

This commit adds a test to show that data will not flow from LS to ES
when weak non fips config is used.

* Use latest ES image

This will be handled separately in a separate PR, but taking this
commit for now on this branch.

* Remove custom entrypoint from new container

The latest ES images do not require this workaround.

* Take up code review suggestions

1. Remove rogue character from test file causing interpreter failure
2. Split out helpers for docker compose orchestration
3. Only send a single message instead of infinite through to ES

* Add full prefix name for new image

* Test filebeat -> LS -> ES using fips config

As described in elastic/ingest-dev#5471 this commit
adds a test for filebeat sending data through logstash to elasticsearch using
fips config.

* Test LS wont accept input from non fips configured filebeat

This test ensures logstash will not accept data from filebeat when using weak
tls configuration.

See elastic/ingest-dev#5472

* Fix a funny typo.

Crytpo is actually kind of a funny.

* Ensure we are using the purpose build ES image in testing

Similar to elastic#17627

* Ensure JAVA_HOME is set etc

Use the same buildkite agent script for setting up a vm based runner as other pipes
@yaauie yaauie force-pushed the forwardport-fedramp-high-to-main branch from 08a65ae to a808309 Compare July 15, 2025 20:54
@elastic-sonarqube
Copy link

@elasticmachine
Copy link
Collaborator

💚 Build Succeeded

History

Copy link
Member

@donoghuc donoghuc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@yaauie yaauie merged commit 207a697 into elastic:main Jul 16, 2025
12 checks passed
@yaauie yaauie deleted the forwardport-fedramp-high-to-main branch July 16, 2025 05:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-skip Skip automated backport with mergify

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants