1 | import subprocess |
---|
2 | import sys |
---|
3 | import os |
---|
4 | |
---|
5 | from engine.FileLib import * |
---|
6 | from engine.SystemLib import * |
---|
7 | |
---|
8 | def ogChangeRepo(): |
---|
9 | SRCIMG = "" |
---|
10 | NEWREPO = "" |
---|
11 | REPO = "" |
---|
12 | OGUNIT = "" |
---|
13 | |
---|
14 | if len(sys.argv) < 2: |
---|
15 | print("Usage: ogChangeRepo IPREPO [ OgUnit ]") |
---|
16 | print("Example: ogChangeRepo 10.1.120.3") |
---|
17 | print("Example: ogChangeRepo 10.1.120.3 cdc") |
---|
18 | return |
---|
19 | |
---|
20 | if sys.argv[1] == "help": |
---|
21 | print("Usage: ogChangeRepo IPREPO [ OgUnit ]") |
---|
22 | print("Example: ogChangeRepo 10.1.120.3") |
---|
23 | print("Example: ogChangeRepo 10.1.120.3 cdc") |
---|
24 | return |
---|
25 | |
---|
26 | if len(sys.argv) >= 2: |
---|
27 | NEWREPO = sys.argv[1] |
---|
28 | |
---|
29 | # Opciones de montaje: lectura o escritura |
---|
30 | subprocess.run(["mount", "|", "grep", "ogimages.*rw,"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) |
---|
31 | RW = ",rw" if subprocess.returncode == 0 else ",ro" |
---|
32 | |
---|
33 | # Si REPO tomamos el repositorio y la unidad organizativa actual |
---|
34 | REPO = ogGetRepoIp() |
---|
35 | OGUNIT = subprocess.run(["df", "|", "awk", "-F", " ", "'/ogimages/ {sub(\"//.*/ogimages\",\"\",$1); sub(\"/\",\"\",$1); print $1}'"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().strip() |
---|
36 | |
---|
37 | # Parametros de entrada. Si $1 = "REPO" dejo el repositorio actual |
---|
38 | if sys.argv[1].upper() == "REPO": |
---|
39 | NEWREPO = REPO |
---|
40 | |
---|
41 | # Si $1 y $2 son el repositorio y la OU actual me salgo |
---|
42 | if NEWREPO == REPO and sys.argv[2] == OGUNIT: |
---|
43 | return 0 |
---|
44 | |
---|
45 | subprocess.run(["source", "/scripts/functions"], shell=True) |
---|
46 | subprocess.run(["source", "/scripts/ogfunctions"], shell=True) |
---|
47 | subprocess.run(["umount", OGIMG]) |
---|
48 | |
---|
49 | if sys.argv[2] == "": |
---|
50 | SRCIMG = "ogimages" |
---|
51 | else: |
---|
52 | SRCIMG = "ogimages/" + sys.argv[2] |
---|
53 | |
---|
54 | subprocess.run(["eval", "$(grep \"OPTIONS=\" /scripts/ogfunctions)"]) |
---|
55 | |
---|
56 | ogEcho("session", "log", MSG_HELP_ogChangeRepo + " " + NEWREPO + " " + sys.argv[2].rstrip()) |
---|
57 | ogConnect(NEWREPO, ogprotocol, SRCIMG, OGIMG, RW) |
---|
58 | |
---|
59 | # Si da error volvemos a montar el inicial |
---|
60 | if subprocess.returncode != 0: |
---|
61 | ogConnect(REPO, ogprotocol, SRCIMG, OGIMG, RW) |
---|
62 | ogRaiseError("session", OG_ERR_REPO, NEWREPO) |
---|
63 | return subprocess.returncode |
---|
64 | |
---|
65 | def ogGetGroupDir(): |
---|
66 | REPO = "" |
---|
67 | DIR = "" |
---|
68 | GROUP = "" |
---|
69 | |
---|
70 | if len(sys.argv) < 2: |
---|
71 | ogHelp("ogGetGroupDir", "ogGetGroupDir str_repo", "ogGetGroupDir REPO ==> /opt/opengnsys/images/groups/Grupo1") |
---|
72 | return |
---|
73 | |
---|
74 | if len(sys.argv) == 1: |
---|
75 | REPO = "REPO" |
---|
76 | else: |
---|
77 | REPO = sys.argv[1] |
---|
78 | |
---|
79 | GROUP = ogGetGroupName() |
---|
80 | if GROUP: |
---|
81 | DIR = ogGetPath(REPO, "/groups/" + GROUP, stderr=subprocess.DEVNULL) |
---|
82 | if os.path.isdir(DIR): |
---|
83 | print(DIR) |
---|
84 | |
---|
85 | return 0 |
---|
86 | |
---|
87 | def ogGetGroupName(): |
---|
88 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
89 | ogHelp("ogGetGroupName", "ogGetGroupName", "ogGetGroupName => Grupo1") |
---|
90 | return |
---|
91 | |
---|
92 | if "group" in globals() and group: |
---|
93 | print(group) |
---|
94 | |
---|
95 | return 0 |
---|
96 | |
---|
97 | def ogGetHostname(): |
---|
98 | HOST = "" |
---|
99 | |
---|
100 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
101 | ogHelp("ogGetHostname", "ogGetHostname", "ogGetHostname => pc1") |
---|
102 | return |
---|
103 | |
---|
104 | # Tomar nombre de la variable HOSTNAME |
---|
105 | HOST = os.getenv("HOSTNAME") |
---|
106 | |
---|
107 | # Si no, tomar del DHCP, opción host-name |
---|
108 | if not HOST: |
---|
109 | with open("/var/lib/dhcp3/dhclient.leases", "r") as f: |
---|
110 | for line in f: |
---|
111 | if "option host-name" in line: |
---|
112 | HOST = line.split('"')[1] |
---|
113 | break |
---|
114 | |
---|
115 | # Si no, leer el parámetro del kernel hostname |
---|
116 | if not HOST: |
---|
117 | with open("/proc/cmdline", "r") as f: |
---|
118 | cmdline = f.read() |
---|
119 | HOST = re.search(r"hostname=([^ ]+)", cmdline) |
---|
120 | if HOST: |
---|
121 | HOST = HOST.group(1) |
---|
122 | |
---|
123 | if HOSTNAME != HOST: |
---|
124 | os.environ["HOSTNAME"] = HOST |
---|
125 | |
---|
126 | if HOST: |
---|
127 | print(HOST) |
---|
128 | |
---|
129 | def ogGetIpAddress(): |
---|
130 | IP = "" |
---|
131 | |
---|
132 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
133 | ogHelp("ogGetIpAddress", "ogGetIpAddress", "ogGetIpAddress => 192.168.0.10") |
---|
134 | return |
---|
135 | |
---|
136 | if "IPV4ADDR" in os.environ: |
---|
137 | IP = os.environ["IPV4ADDR"] |
---|
138 | else: |
---|
139 | # Obtener direcciones IP. |
---|
140 | if "DEVICE" in os.environ: |
---|
141 | IP = subprocess.run(["ip", "-o", "address", "show", "up", "dev", os.environ["DEVICE"]], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split() |
---|
142 | else: |
---|
143 | IP = subprocess.run(["ip", "-o", "address", "show", "up"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split() |
---|
144 | |
---|
145 | IP = [addr.split("/")[0] for addr in IP if "inet" in addr] |
---|
146 | |
---|
147 | # Mostrar solo la primera. |
---|
148 | if IP: |
---|
149 | print(IP[0]) |
---|
150 | |
---|
151 | return 0 |
---|
152 | |
---|
153 | def ogGetMacAddress(): |
---|
154 | MAC = "" |
---|
155 | |
---|
156 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
157 | ogHelp("ogGetMacAddress", "ogGetMacAddress", "ogGetMacAddress => 00:11:22:33:44:55") |
---|
158 | return |
---|
159 | |
---|
160 | # Obtener direcciones Ethernet. |
---|
161 | if "DEVICE" in os.environ: |
---|
162 | MAC = subprocess.run(["ip", "-o", "link", "show", "up", "dev", os.environ["DEVICE"]], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split() |
---|
163 | MAC = [addr.upper() for addr in MAC if "ether" in addr] |
---|
164 | else: |
---|
165 | MAC = subprocess.run(["ip", "-o", "link", "show", "up"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split() |
---|
166 | MAC = [addr.upper() for addr in MAC if "ether" in addr and "lo" not in addr] |
---|
167 | |
---|
168 | # Mostrar solo la primera. |
---|
169 | if MAC: |
---|
170 | print(MAC[0]) |
---|
171 | |
---|
172 | return 0 |
---|
173 | |
---|
174 | def ogGetNetInterface(): |
---|
175 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
176 | ogHelp("ogGetNetInterface", "ogGetNetInterface", "ogGetNetInterface => eth0") |
---|
177 | return |
---|
178 | |
---|
179 | if "DEVICE" in os.environ: |
---|
180 | print(os.environ["DEVICE"]) |
---|
181 | |
---|
182 | return 0 |
---|
183 | |
---|
184 | def ogGetRepoIp(): |
---|
185 | # Variables locales. |
---|
186 | SOURCE = "" |
---|
187 | FSTYPE = "" |
---|
188 | |
---|
189 | # Mostrar ayuda. |
---|
190 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
191 | ogHelp("ogGetRepoIp", "ogGetRepoIp", "ogGetRepoIp => 192.168.0.2") |
---|
192 | return |
---|
193 | |
---|
194 | # Obtener direcciones IP, según el tipo de montaje. |
---|
195 | output = subprocess.run(["findmnt", "-P", "-o", "SOURCE,FSTYPE", OGIMG], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().strip() |
---|
196 | lines = output.split("\n") |
---|
197 | for line in lines: |
---|
198 | fields = line.split() |
---|
199 | if len(fields) == 2: |
---|
200 | if fields[1] == "nfs": |
---|
201 | SOURCE = fields[0].split(":")[0] |
---|
202 | elif fields[1] == "cifs": |
---|
203 | SOURCE = fields[0].split("/")[2] |
---|
204 | |
---|
205 | if SOURCE: |
---|
206 | print(SOURCE) |
---|
207 | |
---|
208 | return 0 |
---|
209 | |
---|
210 | def ogGetServerIp(): |
---|
211 | # Variables locales. |
---|
212 | SOURCE = "" |
---|
213 | FSTYPE = "" |
---|
214 | |
---|
215 | # Mostrar ayuda. |
---|
216 | if len(sys.argv) >= 2 and sys.argv[1] == "help": |
---|
217 | ogHelp("ogGetServerIp", "ogGetServerIp", "ogGetServerIp => 192.168.0.2") |
---|
218 | return |
---|
219 | |
---|
220 | # Obtener direcciones IP, según el tipo de montaje. |
---|
221 | output = subprocess.run(["findmnt", "-P", "-o", "SOURCE,FSTYPE", OGIMG], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().strip() |
---|
222 | lines = output.split("\n") |
---|
223 | for line in lines: |
---|
224 | fields = line.split() |
---|
225 | if len(fields) == 2: |
---|
226 | if fields[1] == "nfs": |
---|
227 | SOURCE = fields[0].split(":")[0] |
---|
228 | elif fields[1] == "cifs": |
---|
229 | SOURCE = fields[0].split("/")[2] |
---|
230 | |
---|
231 | if SOURCE: |
---|
232 | print(SOURCE) |
---|
233 | |
---|
234 | return 0 |
---|
235 | |
---|
236 | def ogMakeGroupDir(): |
---|
237 | REPO = "" |
---|
238 | DIR = "" |
---|
239 | GROUP = "" |
---|
240 | |
---|
241 | if len(sys.argv) < 2: |
---|
242 | ogHelp("ogMakeGroupDir", "ogMakeGroupDir str_repo", "ogMakeGroupDir", "ogMakeGroupDir REPO") |
---|
243 | return |
---|
244 | |
---|
245 | if len(sys.argv) == 1: |
---|
246 | REPO = "REPO" |
---|
247 | else: |
---|
248 | REPO = sys.argv[1] |
---|
249 | |
---|
250 | DIR = ogGetPath(REPO, "/groups/" + ogGetGroupName(), stderr=subprocess.DEVNULL) |
---|
251 | if DIR: |
---|
252 | subprocess.run(["mkdir", "-p", DIR], stderr=subprocess.DEVNULL) |
---|
253 | |
---|
254 | return 0 |
---|