Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support for executing commands in a container with user, workDir and env #1914

Merged
merged 6 commits into from
Nov 17, 2023

Conversation

mdelapenya
Copy link
Member

@mdelapenya mdelapenya commented Nov 14, 2023

What does this PR do?

This PR adds some functional options to be applied to the ProcessOptions struct, in order to customise the container exec create response.

For that, and to avoid changing the signature of the Exec method, we are exntending the ProcessOptions struct to accept the User, WorkingDir and Env for a command. We are also adding the options to contribute them to the exec create response.

Because of the previous design, in which the ProcessOptions struct applies to the container exec attach response, we are making the current Multiplexed option to not be executed if its reader is nil. This is needed because we need two loops in the options:

  1. for the exec create options
  2. for the exec attach options

Without changing the API, this is the simplest manner to achieve it.

Finally, it includes a ⚠️breaking change⚠️ in the Executable interface: it now includes a Options() function that needs to be implemented. This method will allow configuring the exec options added in this PR for the WithStartupCommand functional option. If your code is implementing Executable, you can embed the ExecOptions struct in your own struct in order to satisfy the interface. Please take a look at the RabbitMQ test types to see examples on how to do it.

Why is it important?

Support running commands in the container passing the user, workingDir and the env, which is interesting for users.

Related issues

Follow-ups

We should probably update the Executable interface and the RawCommand struct, as it will need a way to receive the process options too.

@mdelapenya mdelapenya requested a review from a team as a code owner November 14, 2023 12:41
@mdelapenya mdelapenya added the enhancement New feature or request label Nov 14, 2023
@mdelapenya mdelapenya self-assigned this Nov 14, 2023
Copy link

netlify bot commented Nov 14, 2023

Deploy Preview for testcontainers-go ready!

Name Link
🔨 Latest commit d2c0612
🔍 Latest deploy log https://app.netlify.com/sites/testcontainers-go/deploys/65574d10238f63000854fb88
😎 Deploy Preview https://deploy-preview-1914--testcontainers-go.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@mdelapenya mdelapenya added the breaking change Causing compatibility issues. label Nov 15, 2023
* main:
  fix(modules.kafka): Switch to MaxInt for 32-bit support (testcontainers#1923)
  docs: fix code snippet for image substitution (testcontainers#1918)
  Add database driver note to SQL Wait strategy docs (testcontainers#1916)
@mdelapenya mdelapenya merged commit 4e6fbdc into testcontainers:main Nov 17, 2023
112 checks passed
mdelapenya added a commit to mdelapenya/testcontainers-go that referenced this pull request Nov 17, 2023
* main:
  feat: support for executing commands in a container with user, workDir and env (testcontainers#1914)
  fix(modules.kafka): Switch to MaxInt for 32-bit support (testcontainers#1923)
mdelapenya added a commit to kuisathaverat/testcontainers-go that referenced this pull request Nov 20, 2023
* main: (31 commits)
  feat: support for executing commands in a container with user, workDir and env (testcontainers#1914)
  fix(modules.kafka): Switch to MaxInt for 32-bit support (testcontainers#1923)
  docs: fix code snippet for image substitution (testcontainers#1918)
  Add database driver note to SQL Wait strategy docs (testcontainers#1916)
  Reduce flakiness in ClickHouse tests (testcontainers#1902)
  lint: enable nonamedreturns (testcontainers#1909)
  chore: deprecate BindMount APIs (testcontainers#1907)
  fix(reaper): fix race condition when reusing reapers (testcontainers#1904)
  feat: Allow the container working directory to be specified (testcontainers#1899)
  chore: make rabbitmq examples more readable (testcontainers#1905)
  chore(deps): bump github.com/twmb/franz-go and github.com/twmb/franz-go/pkg/kadm in /modules/redpanda (testcontainers#1896)
  Fix - respect ContainerCustomizer in neo4j module (testcontainers#1903)
  chore(deps): bump github.com/nats-io/nkeys and github.com/nats-io/nats.go in /modules/nats (testcontainers#1897)
  chore: add tests for withNetwork option (testcontainers#1894)
  chore(deps): bump google.golang.org/grpc and cloud.google.com/go/firestore in /modules/gcloud (testcontainers#1891)
  chore(deps): bump github.com/aws/aws-sdk-go and github.com/aws/aws-sdk-go-v2/config in /modules/localstack (testcontainers#1892)
  chore(deps): bump Github actions (testcontainers#1890)
  chore(deps): bump github.com/shirou/gopsutil/v3 from 3.23.9 to 3.23.10 (testcontainers#1858)
  chore(deps): bump github.com/hashicorp/consul/api in /examples/consul (testcontainers#1863)
  chore(deps): bump github.com/IBM/sarama in /modules/kafka (testcontainers#1874)
  ...
@mdelapenya mdelapenya deleted the container-exec-options branch November 30, 2023 06:33
mdelapenya added a commit to mdelapenya/testcontainers-go that referenced this pull request Nov 30, 2023
* main: (100 commits)
  fix: fallback matching of registry authentication config (testcontainers#1927)
  feat: support customizing the Docker build command (testcontainers#1931)
  docs: include MongoDB's username and password options into the docs (testcontainers#1930)
  feat: support for custom registry prefixes at the configuration level (testcontainers#1928)
  Add username and password functions to mongodb (testcontainers#1910)
  chore: skip TestContainerLogWithErrClosed as flaky on rootless docker (testcontainers#1925)
  docs: add some Vault module examples (testcontainers#1825)
  feat: support for executing commands in a container with user, workDir and env (testcontainers#1914)
  fix(modules.kafka): Switch to MaxInt for 32-bit support (testcontainers#1923)
  docs: fix code snippet for image substitution (testcontainers#1918)
  Add database driver note to SQL Wait strategy docs (testcontainers#1916)
  Reduce flakiness in ClickHouse tests (testcontainers#1902)
  lint: enable nonamedreturns (testcontainers#1909)
  chore: deprecate BindMount APIs (testcontainers#1907)
  fix(reaper): fix race condition when reusing reapers (testcontainers#1904)
  feat: Allow the container working directory to be specified (testcontainers#1899)
  chore: make rabbitmq examples more readable (testcontainers#1905)
  chore(deps): bump github.com/twmb/franz-go and github.com/twmb/franz-go/pkg/kadm in /modules/redpanda (testcontainers#1896)
  Fix - respect ContainerCustomizer in neo4j module (testcontainers#1903)
  chore(deps): bump github.com/nats-io/nkeys and github.com/nats-io/nats.go in /modules/nats (testcontainers#1897)
  ...
@mdelapenya mdelapenya removed the enhancement New feature or request label Dec 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
breaking change Causing compatibility issues.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants