fab-user
[Top][All Lists]
Advanced

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

Re: [Fab-user] Deploying to multiple sets of hosts


From: Brandon Whaley
Subject: Re: [Fab-user] Deploying to multiple sets of hosts
Date: Fri, 25 Oct 2013 23:51:09 -0400

I prefer using execute: http://docs.fabfile.org/en/1.8/api/core/tasks.html?highlight=execute#fabric.tasks.execute

On Oct 25, 2013 7:55 PM, "Gilgamezh" <address@hidden> wrote:
El 25/10/13 19:20, Nathan Nobbe escribió:
Hi everyone,

I've recently started using Fabric (any Python for that matter)! So far
I'm loving Fabric compared to Capistrano, which is next to useless
outside of Ruby projects that I can tell.

I have hit a snag with Fabric though, and I'm surprised nobody else
seems to have dealt with it. I've got sets of nodes that comprise an
'environment'. For example, 2 boxes are used as db servers, 2 boxes as
application servers (not exactly my setup, but that's the idea).

Now I can have 2 tasks for this with @host decorators that map the hosts
to the deployment logic, however, since there is no way to change the
hosts within a task, I have to make 2 separate calls to fab on the CLI.

The problem is, I have several sets of nodes and the order of operations
in the deployment is itself some logic I would like to encapsulate. Best
approach I have so far is to place the fab calls into a BASH script.

I'm shocked that there's no way to change hosts within a task, and
moreover that this desire hasn't arisen before. Is there some way to
change the hosts mid-task? I can't find anything on Google or
Stackoverflow. Or am I thinking about this the wrong way? Seems like
grouping the hosts the way I have makes sense. I took a look at roles,
but I don't think that's any different than say an @host decorator with
the 'db' servers for example.

Your help appreciated!

thanks,

-nathan



Hi!

roles are in the env dict. You can do this:

env.roledefs.update({
    'webserver': ['www1', 'www2'],
    'dbserver': ['db1']
})

then.....

for server in env.roledefs['webserver']:
   do something
for server in env.roledefs['dbserver']:
   do something.

In all the cases you can set a specific host

for example:

with settings(host_string='somehost.domain'):
   do some

it's just python! :D

More in:
http://docs.fabfile.org/en/1.8/api/core/decorators.html?highlight=roledefs
http://docs.fabfile.org/en/1.8/usage/env.html?highlight=roledefs
http://docs.fabfile.org/en/1.8/usage/execution.html?highlight=roledefs


regards!

Gilgamezh.

_______________________________________________
Fab-user mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/fab-user

reply via email to

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