Merge pull request #113 from orchardup/alternate-fig-file

Alternate fig file can be specified with -f
This commit is contained in:
Ben Firshman 2014-03-03 11:12:09 +00:00
commit c2cd55e010
5 changed files with 43 additions and 2 deletions

View File

@ -22,6 +22,9 @@ log = logging.getLogger(__name__)
class Command(DocoptCommand):
base_dir = '.'
def __init__(self):
self.yaml_path = os.environ.get('FIG_FILE', None)
def dispatch(self, *args, **kwargs):
try:
super(Command, self).dispatch(*args, **kwargs)
@ -38,6 +41,11 @@ class Command(DocoptCommand):
else:
raise errors.ConnectionErrorGeneric(self.client.base_url)
def perform_command(self, options, *args, **kwargs):
if options['--file'] is not None:
self.yaml_path = os.path.join(self.base_dir, options['--file'])
return super(Command, self).perform_command(options, *args, **kwargs)
@cached_property
def client(self):
return Client(docker_url())
@ -45,9 +53,10 @@ class Command(DocoptCommand):
@cached_property
def project(self):
try:
yaml_path = self.check_yaml_filename()
yaml_path = self.yaml_path
if yaml_path is None:
yaml_path = self.check_yaml_filename()
config = yaml.load(open(yaml_path))
except IOError as e:
if e.errno == errno.ENOENT:
raise errors.FigFileNotFound(os.path.basename(e.filename))

View File

@ -70,6 +70,7 @@ class TopLevelCommand(Command):
Options:
--verbose Show more output
--version Print version and exit
-f, --file FILE Specify an alternate fig file (default: fig.yml)
Commands:
build Build or rebuild services

View File

@ -31,6 +31,28 @@ class CLITestCase(DockerClientTestCase):
self.command.dispatch(['ps'], None)
self.assertIn('fig_simple_1', mock_stdout.getvalue())
@patch('sys.stdout', new_callable=StringIO)
def test_default_figfile(self, mock_stdout):
self.command.base_dir = 'tests/fixtures/multiple-figfiles'
self.command.dispatch(['up', '-d'], None)
self.command.dispatch(['ps'], None)
output = mock_stdout.getvalue()
self.assertIn('fig_simple_1', output)
self.assertIn('fig_another_1', output)
self.assertNotIn('fig_yetanother_1', output)
@patch('sys.stdout', new_callable=StringIO)
def test_alternate_figfile(self, mock_stdout):
self.command.base_dir = 'tests/fixtures/multiple-figfiles'
self.command.dispatch(['-f', 'fig2.yml', 'up', '-d'], None)
self.command.dispatch(['-f', 'fig2.yml', 'ps'], None)
output = mock_stdout.getvalue()
self.assertNotIn('fig_simple_1', output)
self.assertNotIn('fig_another_1', output)
self.assertIn('fig_yetanother_1', output)
def test_scale(self):
project = self.command.project

View File

@ -0,0 +1,6 @@
simple:
image: ubuntu
command: /bin/sleep 300
another:
image: ubuntu
command: /bin/sleep 300

View File

@ -0,0 +1,3 @@
yetanother:
image: ubuntu
command: /bin/sleep 300