예제 #1
0
	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))
예제 #2
0
    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>')
예제 #3
0
파일: wizard.py 프로젝트: yangliping/stacki
	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")
예제 #4
0
    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")
예제 #5
0
	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>')
예제 #6
0
	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))
예제 #7
0
	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 = '')
예제 #8
0
	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 = '')
예제 #9
0
    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='')