def OnPage4(self, event): self.data.Kickstart_PrivateInterface = str(self.cb.Value) self.data.Kickstart_PrivateAddress = str(self.tc1.Value) self.data.Kickstart_PrivateNetmask = str(self.tc2.Value) #incomplete entries if not self.data.Kickstart_PrivateInterface or not self.data.Kickstart_PrivateAddress or not \ self.data.Kickstart_PrivateNetmask: wx.MessageBox('Please fill out all entries', 'Incomplete', wx.OK | wx.ICON_ERROR) else: self.data.Kickstart_PrivateKickstartHost = self.data.Kickstart_PrivateAddress self.data.Kickstart_PrivateNTPHost = self.data.Kickstart_PrivateAddress self.data.Kickstart_PrivateGateway = self.data.Kickstart_PrivateAddress self.data.Kickstart_PrivateDNSServers = self.data.Kickstart_PrivateAddress self.data.Kickstart_PrivateSyslogHost = self.data.Kickstart_PrivateAddress #calculate private network interfaces try: ip = stack.ip.IPGenerator(self.data.Kickstart_PrivateAddress, \ self.data.Kickstart_PrivateNetmask) self.data.Kickstart_PrivateNetwork = ip.get_network() self.data.Kickstart_PrivateBroadcast = ip.broadcast() self.data.Kickstart_PrivateNetmaskCIDR = ip.cidr() self.data.Kickstart_PrivateEthernet = self.data.devices[self.data.Kickstart_PrivateInterface] #configure network immediately setNetwork(self.data.Kickstart_PrivateInterface, self.data.Kickstart_PrivateEthernet, self.data.Kickstart_PrivateAddress, self.data.Kickstart_PrivateNetmask) except: wx.MessageBox('Please check IP and Netmask input', 'Input Error', wx.OK | wx.ICON_ERROR) return wx.PostEvent(self.parent, PageChangeEvent(page=Page4))
def server(self, host, timeserver): network = None output = self.owner.call('list.host.interface', [host]) for o in output: if o['default']: network = o['network'] break if not network: return address = None mask = None output = self.owner.call('list.network', [network]) for o in output: address = o['address'] mask = o['mask'] if not address or not mask: return ip = stack.ip.IPGenerator(address, mask) self.owner.addOutput(host, '<stack:file stack:name="/etc/chrony.conf">') self.owner.addOutput(host, 'server %s iburst' % timeserver) self.owner.addOutput(host, 'local stratum 10') self.owner.addOutput(host, 'stratumweight 0') self.owner.addOutput(host, 'driftfile /var/lib/chrony/drift') self.owner.addOutput(host, 'rtcsync') self.owner.addOutput(host, 'allow %s/%s' % (address, ip.cidr())) self.owner.addOutput(host, 'bindcmdaddress 127.0.0.1') self.owner.addOutput(host, 'bindcmdaddress ::1') self.owner.addOutput(host, 'logchange 0.5') self.owner.addOutput(host, 'logdir /var/log/chrony') self.owner.addOutput(host, 'log measurements statistics tracking') self.owner.addOutput(host, '</stack:file>')
def validateNetwork(self, tup, config_net=False): fqhn, eth, ip, subnet, gateway, dns = tup self.data.Info_FQDN = str(fqhn) self.data.Kickstart_PrivateInterface = str(eth) self.data.Kickstart_PrivateAddress = str(ip) self.data.Kickstart_PrivateNetmask = str(subnet) self.data.Kickstart_PrivateGateway = str(gateway) self.data.Kickstart_PrivateDNSServers = str(dns) #incomplete entry if not self.data.Kickstart_PrivateInterface or not \ self.data.Kickstart_PrivateAddress or not \ self.data.Kickstart_PrivateNetmask or not \ self.data.Kickstart_PrivateGateway or not \ self.data.Kickstart_PrivateDNSServers or not \ self.data.Info_FQDN: return (False, "Please fill out all entries", "Incomplete") else: self.data.Kickstart_PrivateKickstartHost = \ self.data.Kickstart_PrivateAddress self.data.Info_ClusterURL = \ "http://" + self.data.Info_FQDN + "/" self.data.Kickstart_PrivateNTPHost = \ self.data.Kickstart_PrivateAddress #self.data.Kickstart_PrivateHostname = # self.data.Kickstart_PrivateHostname.split(".")[0] #calculate public dns domain n = self.data.Info_FQDN n = n.split(".") self.data.Kickstart_PrivateHostname = n.pop(0) dns = "" for i in range(len(n)): dns += n[i] if i != len(n)-1: dns += "." self.data.Kickstart_PrivateDNSDomain = dns #calculate public network interfaces try: ip = stack.ip.IPGenerator( \ self.data.Kickstart_PrivateAddress, \ self.data.Kickstart_PrivateNetmask) self.data.Kickstart_PrivateNetwork = ip.get_network() self.data.Kickstart_PrivateBroadcast = ip.broadcast() self.data.Kickstart_PrivateNetmaskCIDR = ip.cidr() self.data.Kickstart_PrivateEthernet = \ self.data.devices[ \ self.data.Kickstart_PrivateInterface] self.data.devices.pop(self.data.Kickstart_PrivateInterface) if config_net: self.configNetwork() return (True, "", "") except: print traceback.format_exc() return (False, "Incorrect input", "Input Error")
def validateNetwork(self, tup, config_net=False): fqhn, eth, ip, subnet, gateway, dns = tup self.data.Info_FQDN = str(fqhn) self.data.Kickstart_PrivateInterface = str(eth) self.data.Kickstart_PrivateAddress = str(ip) self.data.Kickstart_PrivateNetmask = str(subnet) self.data.Kickstart_PrivateGateway = str(gateway) self.data.Kickstart_PrivateDNSServers = str(dns) #incomplete entry if not self.data.Kickstart_PrivateInterface or not \ self.data.Kickstart_PrivateAddress or not \ self.data.Kickstart_PrivateNetmask or not \ self.data.Kickstart_PrivateGateway or not \ self.data.Kickstart_PrivateDNSServers or not \ self.data.Info_FQDN: return (False, "Please fill out all entries", "Incomplete") else: self.data.Kickstart_PrivateKickstartHost = \ self.data.Kickstart_PrivateAddress self.data.Info_ClusterURL = \ "http://" + self.data.Info_FQDN + "/" self.data.Kickstart_PrivateNTPHost = \ self.data.Kickstart_PrivateAddress #self.data.Kickstart_PrivateHostname = # self.data.Kickstart_PrivateHostname.split(".")[0] #calculate public dns domain n = self.data.Info_FQDN n = n.split(".") self.data.Kickstart_PrivateHostname = n.pop(0) dns = "" for i in range(len(n)): dns += n[i] if i != len(n) - 1: dns += "." self.data.Kickstart_PrivateDNSDomain = dns #calculate public network interfaces try: ip = stack.ip.IPGenerator( \ self.data.Kickstart_PrivateAddress, \ self.data.Kickstart_PrivateNetmask) self.data.Kickstart_PrivateNetwork = ip.get_network() self.data.Kickstart_PrivateBroadcast = ip.broadcast() self.data.Kickstart_PrivateNetmaskCIDR = ip.cidr() self.data.Kickstart_PrivateEthernet = \ self.data.devices[ \ self.data.Kickstart_PrivateInterface] self.data.devices.pop(self.data.Kickstart_PrivateInterface) if config_net: self.configNetwork() return (True, "", "") except: print traceback.format_exc() return (False, "Incorrect input", "Input Error")
def server(self, host, timeserver): network = None output = self.owner.call('list.host.interface', [ host ]) for o in output: if o['default']: network = o['network'] break if not network: return address = None mask = None output = self.owner.call('list.network', [ network ]) for o in output: address = o['address'] mask = o['mask'] if not address or not mask: return ip = stack.ip.IPGenerator(address, mask) self.owner.addOutput(host, '<file name="/etc/chrony.conf">') self.owner.addOutput(host, 'server %s iburst' % timeserver) self.owner.addOutput(host, 'local stratum 10') self.owner.addOutput(host, 'stratumweight 0') self.owner.addOutput(host, 'driftfile /var/lib/chrony/drift') self.owner.addOutput(host, 'rtcsync') self.owner.addOutput(host, 'allow %s/%s' % (address, ip.cidr())) self.owner.addOutput(host, 'bindcmdaddress 127.0.0.1') self.owner.addOutput(host, 'bindcmdaddress ::1') self.owner.addOutput(host, 'logchange 0.5') self.owner.addOutput(host, 'logdir /var/log/chrony') self.owner.addOutput(host, 'log measurements statistics tracking') self.owner.addOutput(host, '</file>')
def OnPage3(self, event): self.data.Kickstart_PublicInterface = str(self.cb.Value) self.data.Kickstart_PublicAddress = str(self.tc1.Value) self.data.Kickstart_PublicNetmask = str(self.tc2.Value) self.data.Kickstart_PublicGateway = str(self.tc3.Value) self.data.Kickstart_PublicDNSServers = str(self.tc4.Value) self.data.Kickstart_PublicKickstartHost = self.data.Kickstart_PublicAddress #incomplete entry if not self.data.Kickstart_PublicInterface or not self.data.Kickstart_PublicAddress or not \ self.data.Kickstart_PublicNetmask or not self.data.Kickstart_PublicGateway or not \ self.data.Kickstart_PublicDNSServers: wx.MessageBox('Please fill out all entries', 'Incomplete', wx.OK | wx.ICON_ERROR) else: #calculate public network interfaces try: ip = stack.ip.IPGenerator(self.data.Kickstart_PublicAddress, \ self.data.Kickstart_PublicNetmask) self.data.Kickstart_PublicNetwork = ip.get_network() self.data.Kickstart_PublicBroadcast = ip.broadcast() self.data.Kickstart_PublicNetmaskCIDR = ip.cidr() self.data.Kickstart_PublicEthernet = self.data.devices[self.data.Kickstart_PublicInterface] self.data.devices.pop(self.data.Kickstart_PublicInterface) #configure network immediately setNetwork(self.data.Kickstart_PublicInterface, self.data.Kickstart_PublicEthernet, self.data.Kickstart_PublicAddress, self.data.Kickstart_PublicNetmask) # Add default Gateway cmd = ['/sbin/route', 'add', 'default', 'gw', self.data.Kickstart_PublicGateway] p = subprocess.Popen(cmd, stdout=subprocess.PIPE) # Set hostname of host to Public Hostname setHostname(self.data.Kickstart_PublicHostname) # Set resolv.conf setResolv(self.data.Kickstart_PublicDNSDomain, self.data.Kickstart_PublicDNSServers) except: wx.MessageBox('Incorrect input', 'Input Error', wx.OK | wx.ICON_ERROR) return wx.PostEvent(self.parent, PageChangeEvent(page=Page3))
def run(self, params, args): # Start writing the named.conf file s = '<file name="/etc/named.conf" perms="0644">\n' s += stack.text.DoNotEdit() s += '# Site additions go in /etc/named.conf.local\n' # Get a list of all the Public DNS servers fwds = self.db.getHostAttr('localhost', 'Kickstart_PublicDNSServers') forwarders = string.join(fwds.split(','), ';') network = None netmask = None for row in self.call('list.network', [ 'private' ]): network = row['subnet'] ip = stack.ip.IPGenerator(network, row['netmask']) netmask = ip.cidr() if network and netmask: s += 'acl private {\n\t%s/%s;\n};\n\n' % (network, netmask) else: s += 'acl private {};\n' # Create the preamble from the template s += config_preamble % (forwarders) subnet_list = {} # Get a list of all networks that we should serve # domain names for for n in self.getNetworks(): # For every network, get the base subnet, # and reverse it. This is basically the # format that named understands sn = self.getSubnet(n.subnet, n.netmask) sn.reverse() r_sn = string.join(sn, '.') if not subnet_list.has_key(r_sn): subnet_list[r_sn] = [] subnet_list[r_sn].append(n) overlapping_subnets = {} for sn in subnet_list: if len(subnet_list[sn]) == 1: n = subnet_list[sn][0] s += zone_template % (n.dnszone, n.name, \ sn, n.name, sn) else: overlapping_subnets[sn] = subnet_list[sn] for sn in overlapping_subnets: name = '' for n in overlapping_subnets[sn]: s += fw_zone_template % (n.dnszone, n.name) name += n.name + '-' name = name.rstrip('-') s += rev_zone_template % (sn, name, sn) # Check if there are local modifications to named.conf if os.path.exists('/etc/named.conf.local'): f = open('/etc/named.conf.local', 'r') s += '\n#Imported from /etc/named.conf.local\n' s += f.read() f.close() s += '\n' s += '\ninclude "/etc/rndc.key";\n' s += '</file>\n' self.beginOutput() self.addOutput('localhost',s) self.endOutput(padChar = '')
def run(self, params, args): networks = [] for row in self.call('list.network', [ 'dns=true' ]): networks.append(row) s = '<file name="/etc/named.conf" perms="0644">\n' s += stack.text.DoNotEdit() s += '# Site additions go in /etc/named.conf.local\n\n' acl = [ ] for network in networks: ip = stack.ip.IPGenerator(network['address'], network['mask']) cidr = ip.cidr() acl.append('\t%s/%s;' % (network['address'], ip.cidr())) if len(acl): s += 'acl private {\n%s\n};\n\n' % string.join(acl, '\n') else: # Not sure if this could happen so do the logical # thing just in case. This would mean no # networks have dns=true. s += 'acl private {\n\t127.0.0.0/24;\n};\n' fwds = self.db.getHostAttr('localhost', 'Kickstart_PublicDNSServers') if not fwds: # # in the case of only one interface on the frontend, # then Kickstart_PublicDNSServers will not be # defined and Kickstart_PrivateDNSServers will have # the correct DNS servers # fwds = self.db.getHostAttr('localhost', 'Kickstart_PrivateDNSServers') if not fwds: return forwarders = string.join(fwds.split(','), ';') s += config_preamble % (forwarders) # For every network, get the base subnet, # and reverse it. This is basically the # format that named understands for network in networks: sn = self.getSubnet(network['address'], network['mask']) sn.reverse() r_sn = string.join(sn, '.') s += zone_template % (network['zone'], network['network'], r_sn, network['network'], r_sn) # Check if there are local modifications to named.conf if os.path.exists('/etc/named.conf.local'): f = open('/etc/named.conf.local', 'r') s += '\n#Imported from /etc/named.conf.local\n' s += f.read() f.close() s += '\n' s += '\ninclude "/etc/rndc.key";\n' s += '</file>\n' self.beginOutput() self.addOutput('', s) self.endOutput(padChar = '')
def run(self, params, args): networks = [] for row in self.call('list.network', ['dns=true']): networks.append(row) s = '<file name="/etc/named.conf" perms="0644">\n' s += stack.text.DoNotEdit() s += '# Site additions go in /etc/named.conf.local\n\n' acl = [] for network in networks: ip = stack.ip.IPGenerator(network['address'], network['mask']) cidr = ip.cidr() acl.append('\t%s/%s;' % (network['address'], ip.cidr())) if len(acl): s += 'acl private {\n%s\n};\n\n' % string.join(acl, '\n') else: # Not sure if this could happen so do the logical # thing just in case. This would mean no # networks have dns=true. s += 'acl private {\n\t127.0.0.0/24;\n};\n' fwds = self.db.getHostAttr('localhost', 'Kickstart_PublicDNSServers') if not fwds: # # in the case of only one interface on the frontend, # then Kickstart_PublicDNSServers will not be # defined and Kickstart_PrivateDNSServers will have # the correct DNS servers # fwds = self.db.getHostAttr('localhost', 'Kickstart_PrivateDNSServers') if not fwds: return forwarders = string.join(fwds.split(','), ';') s += config_preamble % (forwarders) # For every network, get the base subnet, # and reverse it. This is basically the # format that named understands for network in networks: sn = self.getSubnet(network['address'], network['mask']) sn.reverse() r_sn = string.join(sn, '.') s += zone_template % (network['zone'], network['network'], r_sn, network['network'], r_sn) # Check if there are local modifications to named.conf if os.path.exists('/etc/named.conf.local'): f = open('/etc/named.conf.local', 'r') s += '\n#Imported from /etc/named.conf.local\n' s += f.read() f.close() s += '\n' s += '\ninclude "/etc/rndc.key";\n' s += '</file>\n' self.beginOutput() self.addOutput('', s) self.endOutput(padChar='')