-
Notifications
You must be signed in to change notification settings - Fork 0
/
patch_horizon.py
66 lines (58 loc) · 2.43 KB
/
patch_horizon.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
#/usr/bin/python
import re
import textwrap
import os
print "[LOG] Copying necessary source files..."
os.system("cp -rf cns/openstack_dashboard/admin/ofclusters /usr/share/openstack-dashboard/openstack_dashboard/dashboards/admin/")
os.system("cp -rf cns/openstack_dashboard/api/ofcontroller.py /usr/share/openstack-dashboard/openstack_dashboard/api/")
def apply_patch(path, line_pattern, pattern, replace_str, before=False):
text = open( path ).read()
match_found=False
matches = re.finditer(line_pattern, text)
m = None # optional statement. just for clarification
for m in matches:
match_found=True
pass # just loop to the end
if (match_found):
m.start()
m.end()
exists = re.search(pattern, text)
if not exists:
if before:
text1 = text[0:m.start()] + replace_str + text[(m.start()):]
else:
text1 = text[0:m.end()] + replace_str + text[(m.end()+0):]
f = open(path, 'w+')
f.write(text1)
print "[PATCHED] Patched File '%s' with...'%s'" % (str(path), str(replace_str))
f.close()
else:
print "[IGONORED] Patch Igonred for the file '%s': '%s' already there..." % (str(path), str(pattern))
print "[LOG] Patching Openstack Dashboard for CNS..."
####
path = '/usr/share/openstack-dashboard/openstack_dashboard/api/__init__.py'
line_pattern = r'from openstack_dashboard.api import \w+'
pattern = 'from openstack_dashboard.api import ofcontroller'
replace_str = textwrap.dedent("""
from openstack_dashboard.api import ofcontroller
""")
apply_patch(path, line_pattern, pattern, replace_str)
####
line_pattern = r'"\w+"\,'
pattern = '"ofcontroller",'
replace_str = "\n " + '"ofcontroller",'
apply_patch(path, line_pattern, pattern, replace_str)
####
path = '/usr/share/openstack-dashboard/openstack_dashboard/dashboards/admin/dashboard.py'
replace_str = 'class CrdPanels(horizon.PanelGroup):\n'
replace_str = replace_str + ' slug = "crd"\n'
replace_str = replace_str + ' name = _("Cloud Resource Discovery")\n'
replace_str = replace_str + " panels = ('ofclusters',)\n\n"
line_pattern = r'class Admin\(horizon\.Dashboard\)'
pattern = 'class CrdPanels'
apply_patch(path, line_pattern, pattern, replace_str, before=True)
####
replace_str = ' CrdPanels,'
line_pattern = r'Panels,'
pattern = 'CrdPanels,'
apply_patch(path, line_pattern, pattern, replace_str)