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