Advertisement
mmornati

Untitled

Aug 19th, 2011
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.30 KB | None | 0 0
  1. '''
  2. Created on Aug 19, 2011
  3.  
  4. @author: mmornati
  5. '''
  6. from django.utils import simplejson as json
  7. from datetime import datetime
  8. from webui.serverstatus.models import Server, Agent
  9. from webui.puppetclasses.models import PuppetClass
  10. from webui.restserver.views import callRestServer
  11. import logging
  12.  
  13. logger = logging.getLogger(__name__)
  14.  
  15. class Operations(object):
  16.    
  17.     def server_basic_info(self):
  18.         try:
  19.             response, content = callRestServer('no-filter', 'nodeinfo', 'basicinfo')
  20.             if response.status == 200:
  21.                 jsonObj = json.loads(content)
  22.                 update_time = datetime.now()
  23.                 for server in jsonObj:
  24.                     #verify if server exists in database
  25.                     server_name = server['sender']
  26.                     #Using filter because get sometimes generates query error
  27.                     #The filter result is a collection, so you need to select the first element to work
  28.                     query_response = Server.objects.filter(hostname=server_name)
  29.                     if query_response:
  30.                         retrieved_server = query_response[0]
  31.                         logger.info("Updating Server information " + server_name)
  32.                         retrieved_server.online = True
  33.                         if server['data'].has_key('facts'):
  34.                             try:
  35.                                 retrieved_server.os = server['data']['facts']['lsbdistdescription']
  36.                             except KeyError:
  37.                                 retrieved_server.os = 'Unknown'
  38.                             try:
  39.                                 retrieved_server.architecture = server['data']['facts']['architecture']
  40.                             except KeyError:
  41.                                 retrieved_server.architecture = 'Unknown'
  42.                         else:
  43.                             retrieved_server.os = 'Unknown'
  44.                             retrieved_server.architecture = 'Unknown'
  45.                         retrieved_server.updated_time = update_time
  46.                         #Add puppet_classes
  47.                         self.add_puppet_classes(retrieved_server, server['data']['classes'])
  48.                         #Add agents
  49.                         self.add_agents(retrieved_server, server['data']['agentlist'])
  50.                         #Create PuppetClass Path
  51.                         self.create_path(retrieved_server, server['data']['classes'])
  52.                         retrieved_server.save()
  53.                     else:
  54.                         logger.info("Creating new server with name " + server_name)
  55.                         new_server = Server.objects.create(hostname=server_name)
  56.                         if server['data']['facts']:
  57.                             new_server.os = server['data']['facts']['lsbdistdescription']
  58.                             new_server.architecture = server['data']['facts']['architecture']
  59.                         else:
  60.                             new_server.os = 'Unknown'
  61.                             new_server.architecture = 'Unknown'
  62.                         new_server.online = True
  63.                         new_server.updated_time = update_time
  64.                         #Add puppet_classes
  65.                         self.add_puppet_classes(new_server, server['data']['classes'])
  66.                         #Add agents
  67.                         self.add_agents(new_server, server['data']['agentlist'])
  68.                         #Create PuppetClass Path
  69.                         self.create_path(new_server, server['data']['classes'])
  70.    
  71.                         new_server.save()
  72.                    
  73.                     #Retrieving not updated/created server and set them to OFFLINE
  74.                     logger.info("Checking offline servers")
  75.                     not_updated = Server.objects.filter(updated_time__lt=update_time)
  76.                     for server in not_updated:
  77.                         server.online = False
  78.                         server.save()
  79.                            
  80.         except Exception, err:
  81.             logger.error('ERROR: ' + str(err))
  82.            
  83.            
  84.            
  85.     def add_puppet_classes(self, server, puppet_classes):
  86.         for current in puppet_classes:
  87.             retrieved = PuppetClass.objects.filter(name=current)
  88.             if retrieved:    
  89.                 server.puppet_classes.add(retrieved[0])
  90.             else:
  91.                 logger.warn("Cannot find class with name " + current)
  92.                
  93.     def add_agents(self, server, agents_list):
  94.         for agent in agents_list:
  95.             retrieved = Agent.objects.filter(name=agent)
  96.             if retrieved:    
  97.                 server.agents.add(retrieved[0])
  98.             else:
  99.                 logger.info("Discovered new agent " + agent)
  100.                 new_agent = Agent.objects.create(name=agent)
  101.                 server.agents.add(new_agent)
  102.    
  103.     def create_path(self, server, puppet_classes):
  104.         path = ''
  105.         for i in range (0, 5):
  106.             level_classes = PuppetClass.objects.filter(level=i).values_list('name', flat=True)
  107.             extracted_class = iter(set(puppet_classes).intersection(set(level_classes))).next()
  108.             if extracted_class:
  109.                 path = path + '/' + extracted_class
  110.        
  111.         server.puppet_path=path
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement