fab-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Fab-user] setting hosts


From: Jeff Forcier
Subject: Re: [Fab-user] setting hosts
Date: Mon, 11 May 2009 17:31:50 -0400

Right, the point is that it's not env.roles, but actually
fabric.state.roles (which is not exported in the API, and is not part
of the 'env' dictionary). As I mentioned, this is why roles are
basically broken right now.

You can, however, directly access fabric.state.roles, and it should
work, though I haven't tested this myself:

from fabric.api import *
import fabric.state.roles  # make sure you don't do "from f.s import roles"!

fabric.state.roles.home = ['mydomain']

...and so forth...


If I have the time I'll try and fix this tonight (and if not tonight,
soon). Just realized, also, that there would be a name conflict
between state.roles and decorators.roles (if both were to be imported
via fabric.api), so I'll have to figure out the best way to address
that.

-Jeff

On Mon, May 11, 2009 at 5:21 PM, Jeremy M. Jones <address@hidden> wrote:
> I'm still getting an attribute error when I have this:
>
>  1 from fabric.api import run, put, roles, env
>  2
>  3 env.user = 'jmjones'
>  4 env.roles.home = ['mydomain']
>  5 env.roles.ezr = ['192.168.1.20']
>  6 #env.hosts = []
>  7
>  8 @roles('home', 'ezr')
>  9 def all():
>  10     pass
>  11
>  12 @roles('ezr')
>  13 def ezr():
>  14     pass
>  15
>  16 @roles('home')
>  17 def home():
>  18     pass
>  19
>  20 def ls():
>  21     run('ls')
>
> Here's the command I used:
>
> (fab_git)address@hidden:~/fab/home$ fab ezr ls
> /home/jmjones/python/fab_git/lib/python2.6/site-packages/pycrypto-2.0.1-py2.6-linux-x86_64.egg/Crypto/Hash/SHA.py:6:
> DeprecationWarning: the sha module is deprecated; use the hashlib module
> instead
> /home/jmjones/python/fab_git/lib/python2.6/site-packages/pycrypto-2.0.1-py2.6-linux-x86_64.egg/Crypto/Hash/MD5.py:6:
> DeprecationWarning: the md5 module is deprecated; use hashlib instead
> Traceback (most recent call last):
>  File "build/bdist.linux-x86_64/egg/fabric/main.py", line 339, in main
>  File "build/bdist.linux-x86_64/egg/fabric/main.py", line 116, in
> load_fabfile
>  File "/home/jmjones/fab/home/fabfile.py", line 4, in <module>
>    env.roles.home = ['mydomain']
>  File "build/bdist.linux-x86_64/egg/fabric/state.py", line 64, in
> __getattr__
> AttributeError
>
> - jmj
>
> On May 11, 2009, at 1:28 PM, Patrick J McNerthney wrote:
>
>> Try:
>>
>> env.roles.webserver = ['www1', 'www2']
>> env.roles.dbserver = ['db1']
>> @roles('webserver', 'dbserver')
>> def my_func():
>>      pass
>>
>> Pat McNerthney
>> ClearPoint Metrics, Inc.
>>
>>
>> Jeremy M. Jones wrote:
>>>
>>> What's the canonical way of creating groups of hosts and then selecting
>>> that group (or sets of groups) to execute for a particular function at
>>> runtime?  I initially thought that it included using the roles, but I can't
>>> get that working right.  According the the docstrings in the decorators.py
>>> module, using roles should look like this:
>>>
>>> 41         env.webserver = ['www1', 'www2']
>>> 42         env.dbserver = ['db1']
>>> 43
>>> 44         @roles('webserver', 'dbserver')
>>> 45         def my_func():
>>> 46             pass
>>>
>>> But when I run something like this:
>>>
>>>  1 from fabric.api import run, put, roles
>>>  2 from fabric.state import env
>>>  3
>>>  4 env.user = 'myuser'
>>>  5 env.home = ['my.host.com']
>>>  6 env.ezr = ['192.168.1.20']
>>>  7 env.hosts = []
>>>  8
>>>  9 @roles('home', 'ezr')
>>> 10 def all():
>>> 11     pass
>>> 12
>>> 13 @roles('ezr')
>>> 14 def ezr():
>>> 15     pass
>>> 16
>>> 17 @roles('home')
>>> 18 def home():
>>> 19     pass
>>> 20
>>> 21 def ls():
>>> 22     run('ls')
>>>
>>> With a command line looking like this::
>>>
>>>   fab ezr ls
>>>
>>> I get an error like this::
>>>
>>> Traceback (most recent call last):
>>>  File "build/bdist.linux-x86_64/egg/fabric/main.py", line 391, in main
>>>  File "build/bdist.linux-x86_64/egg/fabric/main.py", line 305, in
>>> get_hosts
>>> KeyError: 'ezr'
>>>
>>> I figured that attributes on the "env" object would be interpreted as
>>> roles, but that doesn't appear to be the case.  And even if this worked
>>> properly, I'm not sure that this would do what I wanted it to do.  It seems
>>> that it would set the .roles attribute on the decorated functions with the
>>> specified roles rather than adding the hosts for those roles to some global
>>> run registry or something like that.
>>>
>>> Anyway, are there working examples for the current 0.9 release that will
>>> allow me to sort of do what I want to do?  I can monkey around with sets and
>>> the hosts list with various functions, but it seems like there should be a
>>> cleaner to do this.
>>>
>>> - jmj
>>>
>>>
>>> _______________________________________________
>>> Fab-user mailing list
>>> address@hidden
>>> http://lists.nongnu.org/mailman/listinfo/fab-user
>>
>
>
>
> _______________________________________________
> Fab-user mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/fab-user
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]