So this works:
https://github.com/AlecTaylor/fabric_test_cases

But I can't figure out why my larger real case fails. The env is set
correctly. I'm running in a virtualenv if that makes a difference.

On Thu, Feb 4, 2016 at 1:02 AM, Carlos García <
[email protected]> wrote:

> 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

Reply via email to