source: llx-pool-tools/trunk/fuentes/install-files/usr/sbin/llx-pool @ 1289

Last change on this file since 1289 was 1289, checked in by hectorgh, 4 years ago

adding distro selection

  • Property svn:executable set to *
File size: 4.1 KB
Line 
1#!/usr/bin/env python
2
3import os
4import glob
5import sys
6
7import signal
8signal.signal(signal.SIGINT, signal.SIG_DFL)
9
10from termcolor import colored
11
12
13CURRENT_DISTRO="trusty"
14
15class LliurexPool:
16       
17        def __init__(self):
18
19                self.actions_base_dir="/usr/share/llx-pool/actions/"
20                self.actions_dir=self.actions_base_dir+"/%s/*"%CURRENT_DISTRO
21                #self.parse_actions(self.actions_dir)
22               
23        #def init
24       
25       
26        def check_root(self):
27               
28                try:
29                        f=open("/run/llx-pool.pid","w")
30                        f.write(str(os.getpid()))
31                        f.close()
32                        return True
33                except:
34                        return False
35               
36        #def check_root
37       
38       
39        def parse_actions(self,actions_dir):
40               
41                actions=glob.glob(actions_dir)
42                self.actions_dir={}
43                       
44                for action in actions:
45                       
46                        f=open(action)
47                        lines=f.readlines()
48                        f.close()
49                        section="UNKOWN"
50                        weight=999
51                        comment=""
52                        for line in lines:
53                                if "SECTION" in line:
54                                        section=line.split("=")[1].strip("\n").replace('"',"")
55                                if "WEIGHT" in line:
56                                        weight=int(line.split("=")[1].strip("\n"))
57                                if "COMMENT" in line:
58                                        comment=line.split("=")[1].strip("\n").replace('"',"")
59                                        break
60                                       
61                        if section not in self.actions_dir:
62                                self.actions_dir[section]={}
63                       
64                        while weight in self.actions_dir[section]:
65                                weight+=1
66                       
67                        self.actions_dir[section][weight]=(comment,action)
68               
69               
70        #def parse_actions
71       
72        def run(self):
73               
74               
75                if not self.check_root():
76                        print("You need administration privileges to run this program. Exiting...")
77                        sys.exit(1)
78               
79               
80                print("")
81                print( colored("# LliureX Pool ","blue"))
82                print(colored("===============","cyan"))
83                self.select_distro_step()
84                #self.welcome_step()
85       
86        def select_distro_step(self):
87               
88                available_actions={}
89               
90                count=1
91                print("")
92                print(colored("llx-pool> ","green",attrs=["bold"]) + "Select distribution to work on:")
93               
94                for x in sorted(os.listdir(self.actions_base_dir)):
95                        available_actions[str(count)]=x
96                        count+=1
97
98                available_actions["e"]=False
99                available_actions["q"]=False
100               
101                action=None
102                while action not in available_actions:
103
104                        print("")
105                        for action in available_actions:
106                                if available_actions[action]!=False:
107                                        print("\t[%s] %s"%(action,available_actions[action]))
108                        print("")
109                        print("\t[e/q] Exit")
110                        print("")
111
112                        action=raw_input(colored("llx-pool> ","green",attrs=["bold"]))
113
114                if action=="e" or action=="q":
115                        print("")
116                        sys.exit(0)
117               
118                self.actions_dir=self.actions_base_dir+"/%s/*"%available_actions[action]
119                self.parse_actions(self.actions_dir)
120                self.welcome_step()
121       
122        #def select_distro_step
123
124
125        def welcome_step(self):
126       
127                available_options=["0","1","2","3","e","q"]
128       
129                i=None
130       
131                while i not in available_options:
132                        print("")
133                       
134                        print(colored("llx-pool> ","green",attrs=["bold"]) + "What do you want to do?")
135                        print("")
136                        print("\t[0] Update lists operations")
137                        print("")
138                        print("\t[1] Check possible updates operations")
139                        print("\t[2] Pool operations")
140                        print("\t[3] Synchronization operations")
141                        print("")
142                        print("\t[e/q] Exit")
143                        print("")
144                       
145                        i=raw_input(colored("llx-pool> ","green",attrs=["bold"]))
146               
147                if i=="e" or i=="q":
148                        sys.exit(0)
149               
150                if i=="1":
151                        self.show_operations("check")
152                if i=="2":
153                        self.show_operations("update")
154                if i=="3":
155                        self.show_operations("sync")
156                if i=="0":
157                        self.show_operations("lists")
158                       
159                       
160       
161        #def step0
162       
163        def show_operations(self,section):
164               
165                count=1
166               
167                available_options=["e","g","q"]
168               
169                actions=[]
170               
171                if section in self.actions_dir: 
172                        for w in sorted(self.actions_dir[section]):
173                                actions.append(self.actions_dir[section][w])
174                                available_options.append(str(count))
175                                count+=1
176                       
177               
178                i=None
179               
180                while i not in available_options:
181               
182                        print("")
183                       
184                        count=0
185                        for action in actions:
186                                print("\t[%s] %s"%(count+1,actions[count][0]))
187                                count+=1
188                       
189                        print("")
190                        print("\t[g] Go back")
191                        print("\t[e/q] Exit LliureX Pool")
192                        print("")
193                       
194                        i=raw_input(colored("llx-pool> ","green",attrs=["bold"]))
195                       
196                if i=="e" or input=="q":
197                        sys.exit(0)
198                       
199                if i=="g":
200                        self.welcome_step()
201                       
202                       
203                cmd=actions[int(i)-1][1]
204                os.system(cmd)
205               
206                self.welcome_step()
207
208        #def show_
209       
210       
211#class LP
212
213if __name__=="__main__":
214       
215        lp=LliurexPool()
216        lp.run()
Note: See TracBrowser for help on using the repository browser.