source: lmd/trunk/fuentes/lmd-manager-cli.install/usr/sbin/ltsp-lliurex-update @ 5989

Last change on this file since 5989 was 5989, checked in by joamuran, 3 years ago

added lliurex-umount-chrootç

  • Property svn:executable set to *
File size: 3.4 KB
Line 
1#!/usr/bin/env python
2
3import os
4import argparse
5import json
6import xmlrpclib
7import time
8import sys
9
10'''
11USAGE:
12
13ltsp-lliurex-update [-i image ] [ --mode { update | regenerate} ] [--update-mirror]
14
15'''
16
17
18def update_image(image):
19        try:
20                print "\nltsp-lliurex-update: Updating chroot... "+image+"\n"
21                cmd="ltsp-chroot -p -m -a "+image+" lliurex-upgrade -u"
22                os.system(cmd);
23                return 0
24               
25        except Exception as e:
26                print "\n\n Exception Upgrading chroot !! \n\n ";
27                return -1
28               
29        pass
30       
31
32
33def regenerate_image(image):
34        try:
35               
36                 print ("\nltsp-lliurex-update: Checking chroot is completely umounted for "+image+"\n");
37                cmd="/usr/sbin/lliurex-umount-chroot "+image;
38                os.system(cmd);
39
40
41                #print "Regenerate ... "+image
42                print("\nltsp-lliurex-update: Updating Kernels for image "+image+"\n");
43                cmd="ltsp-chroot -p -m -a "+image+" /usr/share/ltsp/update-kernels"
44                os.system(cmd);
45               
46                print("\nltsp-lliurex-update: Updating Kernels "+image+"\n");
47                cmd="ltsp-update-kernels "+image;
48                os.system(cmd);
49               
50                print("\nltsp-lliurex-update: Updating NBD image"+image+"\n");
51                cmd="ltsp-update-image "+image;
52                os.system(cmd);
53               
54                return 0
55       
56        except Exception as e:
57                print "\n\n EXCEPTION UPDATING IMAGE !! \n\n ";
58                return -1
59               
60       
61        pass
62
63
64def update_mirror():
65        try:
66                server=xmlrpclib.ServerProxy('https://localhost:9779');
67                response=server.get_available_mirrors('', 'MirrorManager');
68                if (not response['status']):
69                        return -1;
70               
71                for mirror in response['msg']:
72                        print "mirror"
73                        cmd="lliurex-mirror update "+mirror
74                        sys.stdout.write("Updating mirror for "+mirror+".")
75                        sys.stdout.flush()
76                        os.system(cmd);
77                        while True:
78                                time.sleep(3)
79                                sys.stdout.write('.')
80                                sys.stdout.flush()
81                               
82                                response=server.is_alive('','MirrorManager')
83                                if (not response['status']):
84                                        break;
85                       
86                return 0
87       
88        except Exception as e:
89                print "\n\nException Updating Mirror: "+str(e)
90                return -1
91                               
92        pass   
93
94
95def ltsp_update(args):
96       
97        confdir="/etc/ltsp/images/";
98        globalErr=0
99       
100        if (args.update_mirror):
101                globalErr=update_mirror()
102                       
103       
104        for i in os.listdir(confdir):
105                if i.endswith('.json'):
106                        try:
107                                json_data=open(confdir+i)
108                                data = json.load(json_data)
109                                json_data.close()
110                               
111                                localError=0
112                               
113                                if (args.i==None or args.i==data["id"]):
114                                        if (args.mode==None or args.mode=="update"):
115                                                localError=update_image(data["id"]);
116                                               
117                                        if (localError==0 and (args.mode==None or args.mode=="regenerate")):
118                                                # If there where errors in update, not regenerate img
119                                                regenerate_image(data["id"]);
120
121                        except Exception as e:
122                                print "Exception "+str(e)
123               
124        # If we have regenerated images, let's restart nbd
125        if (args.mode==None or args.mode=="regenerate"):
126                cmd="invoke-rc.d nbd-server restart"
127                os.system(cmd);
128
129        if (globalErr==0):
130                print "\n\nltsp-lliurex-update: OK. Updates finished without errors";
131        else:
132                print "\n\nltsp-lliurex-update: FAIL.Updates finished with errors!!";
133
134        pass
135
136
137parser = argparse.ArgumentParser(description='Updates one or more images in a ltsp server.')
138parser.add_argument('-i', help='Specifies an image. If none, all are selected.')
139parser.add_argument('--mode', help='Specifies how image/s are updated (update, regenerate). If none specified, performs all operations.', choices=["update", "regenerate"])
140parser.add_argument('--update-mirror', help='Updates mirror before update clients', action='store_true', default=False)
141
142args = parser.parse_args()
143
144ltsp_update(args);
145
146               
147               
Note: See TracBrowser for help on using the repository browser.