-
Notifications
You must be signed in to change notification settings - Fork 0
/
spacewalk.py
106 lines (86 loc) · 2.61 KB
/
spacewalk.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import datetime
import re
import xmlrpclib
SATELLITE_URL = "http://127.0.0.1/rpc/api" # replace with IP of your Spacewalk / Satellite Server
SATELLITE_LOGIN = "api-user"
SATELLITE_PASSWORD = "api-user-password"
TIMEOUT = 900
client = xmlrpclib.Server(SATELLITE_URL, verbose=0)
def login():
'''
Request session cookie
Returns:
string: Sessio ID (cookie). Null if login failed.
'''
try:
key = client.auth.login(SATELLITE_LOGIN, SATELLITE_PASSWORD)
return key
except Exception as ex:
pprint 'Error connecting to spacewalk: {}'.format(ex)
return None
def logout(session_key):
"""Request to destroy session cookie
Args:
session_key (str): Session ID (cookie)
Returns:
str: OK if success, Error if fails
"""
try:
tkey = client.auth.logout(session_key)
if tkey == 1:
logging.info('OK')
except Exception as ex:
print ('Error terminating session from spacewalk: {}'.format(ex))
def show_users(session_key):
"""Show spacewalk users
Args:
session_key (str): Session ID (cookie)
Returns:
list(str): List of spacewalk usernames
"""
print client.user.list_users(session_key)
def show_api_version():
"""Show spacewalk API version
Returns:
float: XMLRPC API version
"""
print client.api.getVersion()
def show_sat_version():
"""Show spacewalk / satellite version
Returns:
float: Satteline version
"""
print client.api.systemVersion()
def get_systems(session_key, pattern):
"""Get system matching pattern
Args:
session_key (str): Session ID (cookie)
Returns:
list(int): ID's of the systems matched by the pattern
"""
systems_list = []
systems = client.system.listUserSystems(session_key, SATELLITE_LOGIN)
for system in systems:
if re.match(r'{}.*'.format(pattern), system['name']):
systems_list.append(system['id'])
else:
continue
return systems_list
def run_script(session_key, label, target, uid, gid, script):
"""Schedule action to run script
Args:
session_key (str): Session ID (cookie)
label (str): Label for the action
target array(str): ID's of the systems to run the script
uid (str): user to run the script
gid (str): group to run the script
script (str): script to run
Returns:
string: Action ID if scheduled action succeed, Error message if it goes wrong
"""
try:
action_id = client.system.scheduleScriptRun(session_key, label, target, uid, gid, TIMEOUT, script, datetime.datetime.now())
if action_id:
print('Successfully scheduled action number {}'.format(action_id))
except Exception as ex:
print ('Error scheduling action:\n{}'.format(ex))