Extending my test case to try and figure out where I've convoluted, and
realised my mistake…

…was calling `execute(funtimes(*args, **kwargs))` rather than
`execute(funtimes,
*args, **kwargs)`

>.<

On Thu, Feb 4, 2016 at 2:06 AM, Alec Taylor <[email protected]> wrote:

> 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