summaryrefslogtreecommitdiffstats
path: root/check.py
blob: 18fe17838c55282c94ce6b92fa87449c5da4531e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Validates a system is configured for network booting
# 
# Michael DeHaan <mdehaan@redhat.com>

# FUTURE: Apache checking
# FUTURE: Check to see what's running

import os
import sys
import re

from msg import *

class BootCheck:

   def __init__(self, api):
       self.api = api
       self.config = self.api.config
   
   """
   Returns None if there are no errors, otherwise returns a list 
   of things to correct prior to running bootconf 'for real'.
   FIXME: this needs to be more tolerant of non-default paths
   """
   def run(self):
       status = []
       self.check_dhcpd_bin(status)
       self.check_pxelinux_bin(status)
       self.check_tftpd_bin(status)
       self.check_tftpd_dir(status)
       self.check_tftpd_conf(status)
       self.check_dhcpd_conf(status)
       return status

   """
   Check if dhcpd is installed
   """
   def check_dhcpd_bin(self,status):
       if not os.path.exists(self.config.dhcpd_bin):
          status.append(m("no_dhcpd"))

   """
   Check if pxelinux (part of syslinux) is installed
   """
   def check_pxelinux_bin(self,status):
       if not os.path.exists(self.config.pxelinux):
          status.append(m("no_pxelinux"))

   """
   Check if tftpd is installed
   """
   def check_tftpd_bin(self,status):
       if not os.path.exists(self.config.tftpd_bin):
          status.append(m("no_tftpd")) 

   """
   Check if bootconf.conf's tftpboot directory exists
   """
   def check_tftpd_dir(self,status):
       if not os.path.exists(self.config.tftpboot):
          status.append(m("no_dir") % self.config.tftpboot)
   
   """
   Check that bootconf tftpd boot directory matches with tftpd directory
   Check that tftpd is enabled to autostart
   """
   def check_tftpd_conf(self,status):
       if os.path.exists(self.config.tftpd_conf):
          f = open(self.config.tftpd_conf)
          re_1 = re.compile(r'default:.*off')
          re_2 = re.compile(r'disable.*=.*yes')
          found_bootdir = False
          for line in f.readlines():
             if re_1.search(line):
                 status.append(m("chg_attrib") % ('default','on',self.config.tftpd_conf))
             if re_2.search(line):
                 status.append(m("chg_attrib") % ('disable','no',self.config.tftpd_conf))
             if line.find("-s %s" % self.config.tftpboot) != -1:
                 found_bootdir = True
          if not found_bootdir:
              status.append(m("chg_attrib") % ('server_args',"-s %s" % self.config.tftpboot, self.config.tftpd_conf))   
       else:
          status.append(m("no_exist") % self.tftpd_conf)
   
   """
   Check that dhcpd *appears* to be configured for pxe booting.
   We can't assure file correctness
   """
   def check_dhcpd_conf(self,status):
       if os.path.exists(self.config.dhcpd_conf):
           match_next = False
           match_file = False
           f = open(self.config.dhcpd_conf)
           for line in f.readlines():
               if line.find("next-server") != -1: 
                   match_next = True
               if line.find("filename") != -1:
                   match_file = True     
           if not match_next:
              status.append(m("no_line") % (self.config.dhcpd_conf, 'next-server ip-address'))
           if not match_file:
              status.append(m("no_line") % (self.config.dhcpd_conf, 'filename "%s/pxelinux.0";' % self.config.tftpboot))
       else:
           status.append(m("no_exist") % self.config.dhcpd_conf)