Skip to content
This repository was archived by the owner on Oct 12, 2019. It is now read-only.

Commit 999e112

Browse files
committed
Agrega el modulo servers.py para manejo de servidores con fabric
1 parent 75cf2ef commit 999e112

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apps1:
2+
addr: apps1.im
3+
role: appserver
4+
os: linux
5+
distro: redhat
6+
apps2:
7+
addr: apps2.im
8+
role: appserver
9+
os: linux
10+
distro: debian
11+
db1:
12+
addr: db1.im
13+
role: dbserver
14+
os: linux
15+
distro: redhat
16+
repo1:
17+
addr: repo1.im
18+
role: reposerver
19+
os: linux
20+
distro: debian
21+
web1:
22+
addr: web1.im
23+
role: webserver
24+
os: linux
25+
distro: redhat
26+

Diff for: src/main/python/im/core/servers.py

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import os
2+
from im.core.config import conf
3+
from fabric.decorators import _list_annotating_decorator
4+
5+
from fabric.state import env
6+
7+
def hosts(*host_list):
8+
"""
9+
Decorator defining which host or hosts to execute the wrapped function on.
10+
11+
@hosts('user1@host1', 'host2', 'user2@host3')
12+
def my_func():
13+
pass
14+
15+
Servers must be specified using the key in the configuration file and will
16+
be returned to fabric using the addr field.
17+
"""
18+
return _list_annotating_decorator('hosts', parse_servers(host_list))
19+
20+
def roles(*role_list):
21+
"""
22+
Decorator defining a list of role names, used to look up host lists.
23+
24+
it updates roledefs first and then returns the decorator
25+
env.roledefs.update({
26+
'webserver': ['www1', 'www2'],
27+
'dbserver': ['db1']
28+
})
29+
30+
@roles('webserver', 'user@dbserver')
31+
def my_func():
32+
pass
33+
34+
"""
35+
host_list = []
36+
for role in role_list:
37+
host_list.append("role="+role)
38+
parse_servers(host_list)
39+
40+
return _list_annotating_decorator('roles', *role_list)
41+
42+
43+
def parse_servers(host_list):
44+
servers = []
45+
for query in host_list:
46+
user=conf("servers.user", None)
47+
port=conf("servers.port", None)
48+
if "@" in query:
49+
user, query = query.split("@",1)
50+
if ":" in query:
51+
query, port = query.split(":",1)
52+
53+
if query == "all":
54+
for s, server in conf("servers").iteritems():
55+
servers.append(server_append(server['addr'], user, port))
56+
elif query == "none":
57+
pass
58+
elif query == "local":
59+
servers.append("local") # TODO: this doesn't work
60+
elif "=" in query:
61+
key, val = query.split("=",1)
62+
for s, server in conf("servers").iteritems():
63+
if server.get(key) == val:
64+
servers.append(server_append(server['addr'], user, port))
65+
if not env.roledefs.get(val):
66+
env.roledefs[val] = []
67+
env.roledefs[val].append(server['addr'])
68+
else:
69+
server = conf("servers").get(query)
70+
if server:
71+
servers.append(server_append(server['addr'], user, port))
72+
73+
return servers
74+
75+
def server_append(server, user, port):
76+
server_string = server
77+
if user:
78+
server_string = user + "@" + server_string
79+
if port:
80+
server_string = server_string + ":" + port
81+
return server_string

0 commit comments

Comments
 (0)