source: client/shared/scripts/deployImage.py @ 937f1b5

ogClonningEngine
Last change on this file since 937f1b5 was 937f1b5, checked in by Antonio Emmanuel Guerrero Silva <aguerrero@…>, 7 months ago

refs #693 Code migration from the scripts directory

  • Property mode set to 100644
File size: 5.9 KB
Line 
1import os
2import sys
3import time
4
5#!/usr/bin/env python3
6
7def main():
8    PROG = os.path.basename(__file__)
9    if len(sys.argv) < 5:
10        ogRaiseError("session", OG_ERR_FORMAT, f"{MSG_FORMAT}: {PROG} REPO imagen ndisco nparticion [ UNICAST-DIRECT|UNICAST|UNICAST-CACHE|MULTICAST-DIRECT|MULTICAST|MULTICAST-CACHE|TORRENT [opciones protocolo] ]")
11        sys.exit(1)
12
13    TIME1 = time.time()
14    REPO = sys.argv[1].upper() or "REPO"
15    IMGNAME = sys.argv[2]
16    DISK = sys.argv[3]
17    PART = sys.argv[4]
18    PROTO = (sys.argv[5].upper() if len(sys.argv) > 5 else "UNICAST")
19    PROTOOPT = sys.argv[6] if len(sys.argv) > 6 else ""
20    OGUNIT = os.getenv("ogunit", "")
21
22    if not OGENGINECONFIGURATE:
23        exec(open("/opt/opengnsys/etc/engine.cfg").read())
24
25    with open(OGLOGCOMMAND, 'w') as f:
26        f.write(" ")
27    if ogGetCaller() != "EjecutarScript":
28        with open(OGLOGSESSION, 'w') as f:
29            f.write("")
30
31    ogEcho("log", "session", f"[1] {MSG_SCRIPTS_START} {PROG} {' '.join(sys.argv)}")
32
33    if ogIsLocked(DISK, PART):
34        sys.exit(ogRaiseError("session", OG_ERR_LOCKED, f"{MSG_PARTITION}, {DISK} {PART}"))
35
36    ogEcho("log", "session", f"{MSG_HELP_ogUnmount} {DISK} {PART}")
37    ogUnmount(DISK, PART)
38
39    if REPO == ogGetIpAddress() or REPO == "CACHE":
40        MODE = "CACHE"
41    else:
42        if ogCheckIpAddress(REPO) == 0 or REPO == "REPO":
43            if not ogChangeRepo(REPO, OGUNIT):
44                sys.exit(ogRaiseError(OG_ERR_NOTFOUND, f"{REPO} {OGUNIT}"))
45            MODE = "REPO"
46
47    IMGOS = ogGetImageInfo(ogGetPath(MODE, f"{IMGNAME}.img"))
48    if IMGOS == 1:
49        sys.exit(ogRaiseError("session", OG_ERR_NOTFOUND, f"{REPO} {IMGNAME}"))
50    elif IMGOS == 5:
51        sys.exit(ogRaiseError("session", OG_ERR_IMAGEFILE, f"{REPO} {IMGNAME}"))
52    elif IMGOS != 0:
53        sys.exit(ogRaiseError("session", OG_ERR_GENERIC))
54
55    IMGSIZE = os.path.getsize(ogGetPath(MODE, f"{IMGNAME}.img")) // 1024
56    ogEcho("log", "session", f"[1] REPO={REPO} IMG-FILE={IMGNAME}.img SIZE={IMGSIZE} (KB) METADATA={IMGOS}")
57
58    if MODE == "CACHE":
59        NEXTOPERATION = "CACHE"
60    elif MODE == "REPO":
61        if PROTO in ["MULTICAST-DIRECT", "UNICAST-DIRECT"]:
62            NEXTOPERATION = PROTO.split('-')[0]
63        elif PROTO in ["TORRENT", "TORRENT-CACHE", "MULTICAST", "MULTICAST-CACHE", "UNICAST", "UNICAST-CACHE"]:
64            PROTO = PROTO.split('-')[0]
65            ogEcho("log", "session", f"[2] updateCache {REPO} /{IMGNAME}.img {PROTO} {PROTOOPT}")
66            TIME2 = time.time()
67            RETVAL = updateCache(REPO, f"/{IMGNAME}.img", PROTO, PROTOOPT)
68            TIME2 = time.time() - TIME2
69            ogEcho("log", "session", f"   [ ]  {MSG_SCRIPTS_TIME_PARTIAL} updateCache {TIME2 // 60}m {TIME2 % 60}s")
70            if RETVAL == 0:
71                ogEcho("log", "session", "[50] updateCache (OK)")
72                NEXTOPERATION = "CACHE"
73            elif RETVAL in [15, 16]:
74                ogEcho("log", "session", f"[50] {MSG_ERR_NOTCACHE} ;  {MSG_ERR_CACHESIZE}")
75                ogEcho("log", "session", f"[50] {MSG_SCRIPTS_CHECK_ENGINE}:  RESTOREPROTOCOLNOTCACHE={RESTOREPROTOCOLNOTCACHE}")
76                if RESTOREPROTOCOLNOTCACHE == "MULTICAST":
77                    NEXTOPERATION = "MULTICAST" if PROTO == "MULTICAST" else "UNICAST"
78                elif RESTOREPROTOCOLNOTCACHE == "UNICAST":
79                    NEXTOPERATION = "UNICAST"
80                elif RESTOREPROTOCOLNOTCACHE == "NONE":
81                    if RETVAL == 15:
82                        ogEcho("log", "session", f"[100] {MSG_ERR_NOTCACHE}")
83                        sys.exit(ogRaiseError("session", OG_ERR_NOTCACHE, "NOT CACHE"))
84                    elif RETVAL == 16:
85                        ogEcho("log", "session", f"[100]  {MSG_ERR_CACHESIZE}")
86                        sys.exit(ogRaiseError("session", OG_ERR_CACHESIZE, "CACHE FULL"))
87            elif RETVAL in [57, 60]:
88                sys.exit(RETVAL)
89            else:
90                sys.exit(RETVAL)
91        else:
92            sys.exit(ogRaiseError("session", OG_ERR_FORMAT, f"{MSG_ERR_FORMAT}, {PROTO}"))
93    else:
94        sys.exit(ogRaiseError("session", OG_ERR_FORMAT, f"{MSG_ERR_FORMAT}, {REPO}"))
95
96    TIME3 = time.time()
97
98    if NEXTOPERATION == "CACHE":
99        PARAMS = f"CACHE {IMGNAME} {DISK} {PART}"
100    elif NEXTOPERATION == "UNICAST":
101        PARAMS = f"{REPO} {IMGNAME} {DISK} {PART}"
102    elif NEXTOPERATION == "MULTICAST":
103        PARAMS = f"{REPO} {IMGNAME} {DISK} {PART} {PROTO} {PROTOOPT}"
104
105    if os.system("which restoreImageCustom") == 0:
106        ogEcho("log", "session", f"[55] {MSG_HELP_ogRestoreImage}: restoreImageCustom {PARAMS}")
107        os.system(f"restoreImageCustom {PARAMS}")
108    else:
109        ogEcho("log", "session", f"[55] {MSG_HELP_ogRestoreImage}: restoreImage {PARAMS}")
110        os.system(f"restoreImage {PARAMS}")
111    RETVAL = os.system(f"restoreImage {PARAMS}")
112
113    RESUMERESTOREIMAGE = os.popen(f"grep -m 1 'Total Time:' {OGLOGCOMMAND}").read()
114    ogEcho("log", "session", f"   [ ]      {RESUMERESTOREIMAGE}")
115    if RETVAL != 0:
116        ogRaiseError("session", OG_ERR_IMAGE, f"{REPO} {IMGNAME}")
117        if ogGetCaller() != "EjecutarScript":
118            ogEcho("log", "session", f"{MSG_INTERFACE_END} {OG_ERR_IMAGE}")
119        sys.exit(OG_ERR_IMAGE)
120
121    TIME3 = time.time() - TIME3
122    ogEcho("log", "session", f"   [ ]      {MSG_SCRIPTS_TIME_PARTIAL} : {TIME3 // 60}m {TIME3 % 60}s")
123
124    if os.system("which configureOsCustom") == 0:
125        ogEcho("log", "session", "[90] configureOsCustom")
126        os.system(f"configureOsCustom {DISK} {PART} {REPO} {IMGNAME}")
127    else:
128        ogEcho("log", "session", f"[90] {MSG_SCRIPTS_OS_CONFIGURE}")
129        os.system(f"configureOs {DISK} {PART}")
130
131    TIME = time.time() - TIME1
132    ogEcho("log", "session", f"[100] {MSG_SCRIPTS_TIME_TOTAL} {TIME // 60}m {TIME % 60}s")
133
134    if ogGetCaller() != "EjecutarScript":
135        ogEcho("log", "session", f"{MSG_INTERFACE_END} {RETVAL}")
136        sys.exit(RETVAL)
137
138if __name__ == "__main__":
139    main()
Note: See TracBrowser for help on using the repository browser.