From 92249364b6e90ab55fa2ec666393e19f4aea19db Mon Sep 17 00:00:00 2001 From: Chmouel Boudjnah Date: Tue, 7 Oct 2014 17:03:40 +0200 Subject: [PATCH] Allow overriding environements on command line Add a new command line option -e to override environement variables when running a service. Signed-off-by: Chmouel Boudjnah --- fig/cli/main.py | 10 +++++++++- tests/fixtures/environment-figfile/fig.yml | 7 +++++++ tests/integration/cli_test.py | 20 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/environment-figfile/fig.yml diff --git a/fig/cli/main.py b/fig/cli/main.py index 4e711e992..98a1624d6 100644 --- a/fig/cli/main.py +++ b/fig/cli/main.py @@ -261,12 +261,13 @@ class TopLevelCommand(Command): running. If you do not want to start linked services, use `fig run --no-deps SERVICE COMMAND [ARGS...]`. - Usage: run [options] SERVICE [COMMAND] [ARGS...] + Usage: run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] Options: -d Detached mode: Run container in the background, print new container name. --entrypoint CMD Override the entrypoint of the image. + -e KEY=VAL Set an environment variable (can be used multiple times) --no-deps Don't start linked services. --rm Remove container after run. Ignored in detached mode. -T Disable pseudo-tty allocation. By default `fig run` @@ -299,6 +300,13 @@ class TopLevelCommand(Command): 'stdin_open': not options['-d'], } + if options['-e']: + for option in options['-e']: + if 'environment' not in service.options: + service.options['environment'] = {} + k, v = option.split('=', 1) + service.options['environment'][k] = v + if options['--entrypoint']: container_options['entrypoint'] = options.get('--entrypoint') diff --git a/tests/fixtures/environment-figfile/fig.yml b/tests/fixtures/environment-figfile/fig.yml new file mode 100644 index 000000000..924932273 --- /dev/null +++ b/tests/fixtures/environment-figfile/fig.yml @@ -0,0 +1,7 @@ +service: + image: busybox:latest + command: sleep 5 + + environment: + foo: bar + hello: world diff --git a/tests/integration/cli_test.py b/tests/integration/cli_test.py index 728676c10..369e6c8ba 100644 --- a/tests/integration/cli_test.py +++ b/tests/integration/cli_test.py @@ -206,6 +206,26 @@ class CLITestCase(DockerClientTestCase): u'/bin/echo helloworld' ) + @patch('dockerpty.start') + def test_run_service_with_environement_overridden(self, _): + name = 'service' + self.command.base_dir = 'tests/fixtures/environment-figfile' + self.command.dispatch( + ['run', '-e', 'foo=notbar', '-e', 'allo=moto=bobo', + '-e', 'alpha=beta', name], + None + ) + service = self.project.get_service(name) + container = service.containers(stopped=True, one_off=True)[0] + # env overriden + self.assertEqual('notbar', container.environment['foo']) + # keep environement from yaml + self.assertEqual('world', container.environment['hello']) + # added option from command line + self.assertEqual('beta', container.environment['alpha']) + # make sure a value with a = don't crash out + self.assertEqual('moto=bobo', container.environment['allo']) + def test_rm(self): service = self.project.get_service('simple') service.create_container()