Hi Alec, I don’t really understand how your example code can work, as the import slave can´t load slave with that directory layout. It should be import slave.slave, but the parent directory lacks of __init__.py so it’s not being recognized as a module.
Please, tell me what exactly do you have. Making some changes I’ve managed to make it work, but I need to know what you have. Also, how are you executing your scripts? Regards 2016-02-03 14:44 GMT+01:00 Alec Taylor <[email protected]>: > Nope, that didn't work. Also tried adding `print` statements throughout > fabric/tasks.py, but they don't show up. > > I've added one to WrappedCallableTask._execute and another two to > `execute`. > > Even tried uninstalling fabric, editing a cloned version, then installing > that. Same lack of debug messages. Also tried outputting to a /tmp file, in > case of conflict. Same lack of information. > > Not sure why this isn't working > > On Wed, Feb 3, 2016 at 11:59 PM, Carlos García < > [email protected]> wrote: > >> Yeah, env must be imported to work. >> >> In your code, probably execute is not using env.hosts for any reason. >> Try to pass hosts as parameter to execute(): >> >> execute(funtimes, hosts = ['ec2-{omitted}.compute.amazonaws.com']) >> >> Let me know if this works. I can’t test by myself right now. >> >> Regards >> >> 2016-02-03 13:37 GMT+01:00 Alec Taylor <[email protected]>: >> >> Hmm, I can't seem to confirm the issue in a test case. How is your >>> solution working without importing `env`? - Also, should I import `env` >>> from slave? - I tried setting the two `env`s to equal, but it still >>> prompted me for host (yes, env.hosts is definitely set when it reaches >>> slave) >>> >>> /tmp/pyttt$ tree >>> . >>> ├── master >>> │ ├── master >>> │ │ └── __init__.py >>> │ └── setup.py >>> └── slave >>> ├── setup.py >>> └── slave >>> └── __init__.py >>> >>> 4 directories, 4 files >>> >>> >>> *master/__init__.py* >>> >>> #!/usr/bin/env python >>> >>> from os import environ >>> >>> from fabric.api import execute, env >>> >>> from slave import funtimes >>> >>> env.key_filename = environ['PRIVATE_QUAY_PATH'] >>> env.hosts = ['ec2-{omitted}.compute.amazonaws.com'] >>> env.user = 'ubuntu' >>> >>> execute(funtimes) >>> >>> >>> *slave/__init__.py* >>> >>> #!/usr/bin/env python >>> >>> from fabric.api import run >>> >>> def funtimes(): >>> run('echo Hello funtimes') >>> >>> >>> On Wed, Jan 27, 2016 at 7:15 PM, Carlos García < >>> [email protected]> wrote: >>> >>>> Hi Alec, >>>> >>>> the examples given doesn’t work. Maybe you’re missing something. >>>> >>>> env should be imported from fabric.api, if not, Python fails with >>>> NameError: >>>> name 'env' is not defined >>>> >>>> Also, the Python path should include foo/and can/, so you need to call >>>> a python executable from the project root (Or add ROOT_DIRECTORY to >>>> the python path with sys.path.append(ROOT_DIRECTORY)). For example: >>>> >>>> ## foo/__init__.py >>>> import sys >>>> import os >>>> sys.path.append(os.path.abspath('.')) >>>> from fabric.api import execute >>>> from can.haz import funtimes >>>> >>>> domain = 'localhost' >>>> env.user = 'bar' >>>> env.password = 'foo' >>>> env.hosts = [domain] >>>> >>>> execute(funtimes) >>>> >>>> And you execute it with: python foo/__init__.py. And this works. >>>> >>>> >>>> Regards >>>> >>>> 2016-01-27 6:21 GMT+01:00 Alec Taylor <[email protected]>: >>>> >>>> Using Fabric outside a fabfile. `fabric.api.execute` on relative >>>>> imported functions works. >>>>> >>>>> Importing other installed modules fails with "No hosts found. Please >>>>> specify (single) host string for connection:" >>>>> >>>>> To illustrate, this works: >>>>> >>>>> ## foo/__init__.py >>>>> >>>>> from fabric.api import execute >>>>> from bar import funtimes >>>>> >>>>> domain = 'localhost' >>>>> env.user = 'bar' >>>>> env.password = 'foo' >>>>> env.hosts = [domain] >>>>> >>>>> execute(funtimes) >>>>> >>>>> ## foo/bar.py >>>>> >>>>> from fabric.api import run >>>>> >>>>> def funtimes(): run('hello funtimes') >>>>> >>>>> Whilst this fails: >>>>> >>>>> ## foo/__init__.py >>>>> >>>>> from fabric.api import execute >>>>> from can.haz import funtimes >>>>> >>>>> domain = 'localhost' >>>>> env.user = 'bar' >>>>> env.password = 'foo' >>>>> env.hosts = [domain] >>>>> >>>>> execute(funtimes) >>>>> >>>>> ## can/haz.py >>>>> >>>>> from fabric.api import run >>>>> >>>>> def funtimes(): run('hello funtimes') >>>>> >>>>> # also tried >>>>> def funtimes2(env): >>>>> fabric.api.env = env >>>>> run('hello funtimes2') >>>>> >>>>> >>>>> _______________________________________________ >>>>> Fab-user mailing list >>>>> [email protected] >>>>> https://lists.nongnu.org/mailman/listinfo/fab-user >>>>> >>>>> >>>> -- >>>> >>> >>> >> > > -- Carlos García Director de Operaciones Tel. 695 624 167 - 902 620 100 www.stoneworksolutions.net AVISO DE CONFIDENCIALIDAD Tanto este mensaje como todos los posibles documentos adjuntos al mismo son confidenciales y están dirigidos exclusivamente a los destinatarios de los mismos. Por favor, si Ud no es uno de dichos destinatarios, notifíquenos este hecho y elimine el mensaje de su sistema. Queda prohibida la copia, difusión o revelación de su contenido a terceros sin el previo consentimiento por escrito del remitente. En caso contrario, vulnerarán la legislación vigente
_______________________________________________ Fab-user mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/fab-user
