[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fab-user] Wrapping fabric inside a package?
From: |
Dinu Gherman |
Subject: |
[Fab-user] Wrapping fabric inside a package? |
Date: |
Mon, 7 Apr 2014 15:50:49 +0200 |
Hi everybody!
This is my first post here. I'm using fabric together with vagrant and since I
have additional files, like the Vagrantfile, provisioning scripts etc. that
made me eventually wrap my fabfile into a Python package (egg). So, there I
have now a Python script named to call this package functionality, say
"test.py", that actually wraps "fab -f fabile.py" with the fabfile sitting
inside the package by using subprocess.Popen(cmd, shell=False, ...). I have
attached a minimal version, using tasks running with 'local'.
The first observation is that output for commands containing flags like '-l' is
wrapped after 80 characters in my terminal although it is actually wider than
that:
$ python test.py -l
running: fab -f test.py -l
Test executing fabric tasks wrapped on the command-line vs. programmatically.
Available commands:
date Print the current date.
date_confirmed Also print the current date, but now with some interactiv...
$ fab -f test.py -l
Test executing fabric tasks wrapped on the command-line vs. programmatically.
Available commands:
date Print the current date.
date_confirmed Also print the current date, but now with some interactive
confirmation and long docstring.
But funnily, the -d flag works fine (is not wrapped):
$ python test.py -d date_confirmed
running: fab -f test.py -d date_confirmed
Displaying detailed information for task 'date_confirmed':
Also print the current date, but now with some interactive confirmation and
long docstring.
Arguments:
Apart from this running tasks worked quite well until I realized issues with
fabric functions like fabric.contrib.console.confirm which interact with the
user on the command-line. This makes my call to subprocess.Popen block:
$ python test.py date
running: fab -f test.py date
Mo 7 Apr 2014 15:26:17 CEST
[localhost] local: date
Done.
$ python test.py date_confirmed
running: fab -f test.py date_confirmed
^CTraceback (most recent call last):
File "test.py", line 42, in <module>
print(p.stdout.read().strip())
KeyboardInterrupt
I tried then to work around this by calling the fabric tasks programmatically
using the "execute" function, which sort of works (here switched on with an
--exec option):
$ python test.py --exec date
executing: date
[localhost] local: date
Mo 7 Apr 2014 15:24:34 CEST
$ python test.py --exec date_confirmed
executing: date_confirmed
Really? [y/N] y
[localhost] local: date
Mo 7 Apr 2014 15:24:38 CEST
But then I don't seem to find a way to execute several tasks chained as when
given directly on the command-line for "fab", more or less in order not to
loose shared data in the fabric environment.
So I wonder: what is the recommended best practice for wrapping fabric inside
another tool/package? Or is there a way to make Popen not block on interactive
functions like confirm? I have attached a simple script illustrating what I
mean (used in the snippets above), running trivial local tasks without chaining.
Thanks in advance,
Dinu
PS: Sorry if this is a FAQ! If so I've managed to not find it.
test.py
Description: Text Data
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fab-user] Wrapping fabric inside a package?,
Dinu Gherman <=