Beispiel #1
0
 def show_bmc_if(self, brief = False):
     bmcnetwork = self._get_json()['bmcnetwork']
     if not bool(bmcnetwork):
         return ''
     (NETWORK, PREFIX) = ("", "")
     try:
         net = Network(id = bmcnetwork.id, mongo_db = self._mongo_db)
         NETWORK = net.get('NETWORK')
         PREFIX =  str(net.get('PREFIX'))
     except:
         pass
     if brief:
         return "[" +net.name + "]:"+ NETWORK + "/" + PREFIX
     return NETWORK + "/" + PREFIX
Beispiel #2
0
 def show_bmc_if(self, brief = False):
     bmcnetwork = self._get_json()['bmcnetwork']
     if not bool(bmcnetwork):
         return ''
     (NETWORK, PREFIX) = ("", "")
     try:
         net = Network(id = bmcnetwork.id, mongo_db = self._mongo_db)
         NETWORK = net.get('NETWORK')
         PREFIX =  str(net.get('PREFIX'))
     except:
         pass
     if brief:
         return "[" +net.name + "]:"+ NETWORK + "/" + PREFIX
     return NETWORK + "/" + PREFIX
Beispiel #3
0
 def show_if(self, interface, brief = False):
     interfaces = self._get_json()['interfaces']
     try:
         params = interfaces[interface]
     except:
         self._logger.error("Interface '{}' does not exist".format(interface))
         return ""
     (outstr, NETWORK, PREFIX) = ("", "", "")
     try:
         net = Network(id = params['network'].id, mongo_db = self._mongo_db)
         NETWORK = net.get('NETWORK')
         PREFIX =  str(net.get('PREFIX'))
     except:
         pass
     if NETWORK:
         if brief:
             return "[" +net.name + "]:" + NETWORK + "/" + PREFIX
         outstr = "NETWORK=" + NETWORK + "\n"
         outstr += "PREFIX=" + PREFIX
     if params['params'] and not brief:
         outstr += "\n" + params['params']
     return outstr.rstrip()
Beispiel #4
0
 def show_if(self, interface, brief = False):
     interfaces = self._get_json()['interfaces']
     try:
         params = interfaces[interface]
     except:
         self._logger.error("Interface '{}' does not exist".format(interface))
         return ""
     (outstr, NETWORK, PREFIX) = ("", "", "")
     try:
         net = Network(id = params['network'].id, mongo_db = self._mongo_db)
         NETWORK = net.get('NETWORK')
         PREFIX =  str(net.get('PREFIX'))
     except:
         pass
     if NETWORK:
         if brief:
             return "[" +net.name + "]:" + NETWORK + "/" + PREFIX
         outstr = "NETWORK=" + NETWORK + "\n"
         outstr += "PREFIX=" + PREFIX
     if params['params'] and not brief:
         outstr += "\n" + params['params']
     return outstr.rstrip()
Beispiel #5
0
 def boot_params(self):
     params = {}
     params['boot_if'] = None
     params['net_prefix'] = None
     osimage = OsImage(id=self.get('osimage').id, mongo_db=self._mongo_db)
     try:
         params['kernel_file'] = osimage.get('kernfile')
     except:
         params['kernel_file'] = ""
     try:
         params['initrd_file'] = osimage.get('initrdfile')
     except:
         params['initrd_file'] = ""
     try:
         params['kern_opts'] = osimage.get('kernopts')
     except:
         params['kern_opts'] = ""
     try:
         params['boot_if'] = self.get('boot_if')
     except:
         params['boot_if'] = ""
         params['net_prefix'] = ""
         return params
     interfaces = self._get_json()['interfaces']
     try:
         if_params = interfaces[params['boot_if']]
     except:
         self._logger.error(
             "Boot interface '{}' does not present in configured interface list '{}'."
             .format(params['boot_if'], interfaces.keys()))
         params['boot_if'] = ""
         params['net_prefix'] = ""
         return params
     net = None
     try:
         if_net = if_params['network']
         net = Network(id=if_net.id, mongo_db=self._mongo_db)
     except:
         pass
     if not bool(net):
         self._logger.error(
             "Boot interface '{}' has no network configured".format(
                 params['boot_if']))
         params['boot_if'] = ""
         params['net_prefix'] = ""
         return params
     params['net_prefix'] = net.get('PREFIX')
     return params
Beispiel #6
0
    def _create_dhcp_config(self, no_ha):
        from luna.network import Network
        from bson.objectid import ObjectId
        from tornado import template
        import os, base64
        c = {}
        conf_primary = {}
        conf_secondary = {}

        if self.is_ha() and not no_ha:
            cluster_ips = self.get_cluster_ips()
            conf_primary['my_addr'] = cluster_ips[0]
            conf_secondary['my_addr'] = cluster_ips[1]
            conf_primary['peer_addr'] = conf_secondary['my_addr']
            conf_secondary['peer_addr'] = conf_primary['my_addr']

        c['frontend_ip'] = self.get('frontend_address')
        c['dhcp_start'] = self.get('dhcp_range_start')
        c['dhcp_end'] = self.get('dhcp_range_end')
        c['frontend_port'] = self.get('frontend_port')
        netname = self.get('dhcp_net')
        objnet = Network(name=netname, mongo_db=self._mongo_db)
        c['NETMASK'] = objnet.get('NETMASK')
        c['NETWORK'] = objnet.get('NETWORK')
        c['hmac_key'] = str(
            base64.b64encode(bytearray(os.urandom(32))).decode())
        tloader = template.Loader(self.get('path') + '/templates')
        if self.is_ha() and not no_ha:
            dhcpd_conf_primary = tloader.load('templ_dhcpd.cfg').generate(
                c=c, conf_primary=conf_primary, conf_secondary=None)
            dhcpd_conf_secondary = tloader.load('templ_dhcpd.cfg').generate(
                c=c, conf_primary=None, conf_secondary=conf_secondary)
            f1 = open('/etc/dhcp/dhcpd.conf', 'w')
            f2 = open('/etc/dhcp/dhcpd-secondary.conf', 'w')
            f1.write(dhcpd_conf_primary)
            f2.write(dhcpd_conf_secondary)
            f1.close()
            f2.close()
        else:
            dhcpd_conf = tloader.load('templ_dhcpd.cfg').generate(
                c=c, conf_primary=None, conf_secondary=None)
            f1 = open('/etc/dhcp/dhcpd.conf', 'w')
            f2 = open('/etc/dhcp/dhcpd-secondary.conf', 'w')
            f1.write(dhcpd_conf)
            f2.write(dhcpd_conf)
            f1.close()
            f2.close()
        return True
Beispiel #7
0
    def _create_dhcp_config(self, no_ha):
        from luna.network import Network
        from bson.objectid import ObjectId
        from tornado import template
        import os, base64
        c = {}
        conf_primary = {}
        conf_secondary = {}

        if self.is_ha() and not no_ha:
            cluster_ips = self.get_cluster_ips()
            conf_primary['my_addr'] = cluster_ips[0]
            conf_secondary['my_addr'] = cluster_ips[1]
            conf_primary['peer_addr'] = conf_secondary['my_addr']
            conf_secondary['peer_addr'] = conf_primary['my_addr']

        c['frontend_ip'] = self.get('frontend_address')
        c['dhcp_start'] = self.get('dhcp_range_start')
        c['dhcp_end'] = self.get('dhcp_range_end')
        c['frontend_port'] = self.get('frontend_port')
        netname = self.get('dhcp_net')
        objnet = Network(name = netname, mongo_db = self._mongo_db)
        c['NETMASK'] = objnet.get('NETMASK')
        c['NETWORK'] = objnet.get('NETWORK')
        c['hmac_key'] = str(base64.b64encode(bytearray(os.urandom(32))).decode())
        tloader = template.Loader(self.get('path') + '/templates')
        if self.is_ha() and not no_ha:
            dhcpd_conf_primary = tloader.load('templ_dhcpd.cfg').generate(c = c, conf_primary = conf_primary, conf_secondary = None)
            dhcpd_conf_secondary = tloader.load('templ_dhcpd.cfg').generate(c = c, conf_primary = None, conf_secondary = conf_secondary)
            f1 = open('/etc/dhcp/dhcpd.conf', 'w')
            f2 = open('/etc/dhcp/dhcpd-secondary.conf', 'w')
            f1.write(dhcpd_conf_primary)
            f2.write(dhcpd_conf_secondary)
            f1.close()
            f2.close()
        else:
            dhcpd_conf = tloader.load('templ_dhcpd.cfg').generate(c = c, conf_primary = None, conf_secondary = None)
            f1 = open('/etc/dhcp/dhcpd.conf', 'w')
            f2 = open('/etc/dhcp/dhcpd-secondary.conf', 'w')
            f1.write(dhcpd_conf)
            f2.write(dhcpd_conf)
            f1.close()
            f2.close()
        return True
Beispiel #8
0
 def boot_params(self):
     params = {}
     params['boot_if'] = None
     params['net_prefix'] = None
     osimage = OsImage(id = self.get('osimage').id, mongo_db = self._mongo_db)
     try:
         params['kernel_file'] = osimage.get('kernfile')
     except:
         params['kernel_file'] = ""
     try:
         params['initrd_file'] = osimage.get('initrdfile')
     except:
         params['initrd_file'] = ""
     try:
         params['kern_opts'] = osimage.get('kernopts')
     except:
         params['kern_opts'] = ""
     try:
         params['boot_if'] = self.get('boot_if')
     except:
         params['boot_if'] = ""
         params['net_prefix'] = ""
         return params
     interfaces = self._get_json()['interfaces']
     try:
         if_params = interfaces[params['boot_if']]
     except:
         self._logger.error("Boot interface '{}' does not present in configured interface list '{}'.".format(params['boot_if'], interfaces.keys()))
         params['boot_if'] = ""
         params['net_prefix'] = ""
         return params
     net = None
     try:
         if_net = if_params['network']
         net = Network(id = if_net.id, mongo_db = self._mongo_db)
     except:
         pass
     if not bool(net):
         self._logger.error("Boot interface '{}' has no network configured".format(params['boot_if']))
         params['boot_if'] = ""
         params['net_prefix'] = ""
         return params
     params['net_prefix'] = net.get('PREFIX')
     return params
Beispiel #9
0
    def makedns(self):
        from luna.network import Network
        from bson.objectid import ObjectId
        from tornado import template
        import pwd
        import grp
        import os

        # get network _id configured for cluster
        obj_json = self._get_json()
        try:
            rev_links = obj_json[usedby_key]
        except:
            self._logger.error("No IP addresses for network '{}' configured.".format(self.name))
            return None
        netids = []
        for elem in rev_links:
            if elem == 'network':
                for netid in rev_links[elem]:
                    netids.extend([netid])

        # fill network dictionary {'netname': {'ns_hostname': 'servername', 'ns_ip': 'IP', 'hosts' {'name': 'IP'}}}
        networks = {}
        for netid in netids:
            netobj = Network(id = ObjectId(netid))
            networks[netobj.name] = {}
            master_ip = netobj.get('ns_ip')
            networks[netobj.name]['ns_hostname'] = netobj.get('ns_hostname')
            networks[netobj.name]['ns_ip'] = master_ip
            networks[netobj.name]['hosts'] = netobj.resolve_used_ips()
            # some inout for reverse zones
            # here is steps to figure out which octets in ipadresses are common for all ips in network.
            # we can not rely on mask here, as mask can not be devisible by 8 (/12, /15, /21, etc)
            arr1 = [int(elem) for elem in master_ip.split('.')]
            logical_arr1 = [True, True, True, True]
            for host in networks[netobj.name]['hosts']:
                ip = networks[netobj.name]['hosts'][host]
                arr2 = [int(elem) for elem in ip.split('.')]
                logical_arr = [ bool(arr1[n] == arr2[n]) for n in range(len(arr1))]
                logical_arr2 = [logical_arr[n] & logical_arr1[n] for n in range(len(logical_arr))]
                arr1 = arr2[:]
                logical_arr1 = logical_arr2[:]
            # get fist octet in ip adresses which is changing
            try:
                mutable_octet = [i for i in range(len(logical_arr1)) if not logical_arr1[i]][0]
            except IndexError:
                mutable_octet = 3
            # generate zone file name
            revzonename = '.'.join(list(reversed(master_ip.split('.')[:mutable_octet]))) + ".in-addr.arpa"
            networks[netobj.name]['mutable_octet'] = mutable_octet
            networks[netobj.name]['rev_zone_name'] = revzonename

        # figure out paths
        includefile = self.get('named_include_file')
        zonedir = self.get('named_zone_dir')
        if not includefile:
            self._logger.error("named_include_file should be configured")
            return None
        if not zonedir:
            self._logger.error("named_zone_dir should be configured")
            return None

        # load templates
        tloader = template.Loader(self.get('path') + '/templates')

        # create include file for named.conf
        namedconffile = open(includefile, 'w')
        zonenames = []
        for network in networks:
            zonenames.extend([network, networks[network]['rev_zone_name']])

        namedconffile.write(tloader.load('templ_named_conf.cfg').generate(networks = zonenames))
        namedconffile.close()
        nameduid = pwd.getpwnam("named").pw_uid
        namedgid = grp.getgrnam("named").gr_gid
        os.chown(includefile, 0, namedgid)
        self._logger.info("Created '{}'".format(includefile))

        # remove zone files
        filelist = [ f for f in os.listdir(zonedir) if f.endswith(".luna.zone") ]
        for f in filelist:
            filepath = zonedir + "/" + f
            try:
                os.remove(filepath)
                self._logger.info("Removed old '{}'".format(filepath))
            except:
                self._logger.info("Unable to remove '{}'".format(filepath))
        # create zone files
        for network in networks:
            # create zone
            z = {}
            z['master_hostname'] = networks[network]['ns_hostname']
            z['master_ip'] = networks[network]['ns_ip']
            z['serial_num'] = 1
            z['hosts'] = networks[network]['hosts']
            zonefilepath = zonedir + "/" + network + ".luna.zone"
            zonefile = open(zonefilepath, 'w')
            zonefile.write(tloader.load('templ_zone.cfg').generate(z = z))
            zonefile.close()
            os.chown(zonefilepath, nameduid, namedgid)
            self._logger.info("Created '{}'".format(zonefilepath))
            revzonepath = zonedir + "/" + networks[network]['rev_zone_name'] + ".luna.zone"
            z['master_hostname'] = networks[network]['ns_hostname'] + "." + network
            z['hosts'] = {}
            for host in networks[network]['hosts']:
                hostname = host + "." + network
                iparr = [int(elem) for elem in networks[network]['hosts'][host].split('.')]
                reverseiplist = list(reversed(iparr[networks[network]['mutable_octet']:]))
                reverseip = '.'.join([str(elem) for elem in reverseiplist])
                z['hosts'][hostname] = reverseip
            zonefile = open(revzonepath, 'w')
            zonefile.write(tloader.load('templ_zone_arpa.cfg').generate(z = z))
            zonefile.close()
            os.chown(revzonepath, nameduid, namedgid)
            self._logger.info("Created '{}'".format(revzonepath))
        return True
Beispiel #10
0
    def makedns(self):
        from luna.network import Network
        from bson.objectid import ObjectId
        from tornado import template
        import pwd
        import grp
        import os
        
        # get network _id configured for cluster
        obj_json = self._get_json()
        try:
            rev_links = obj_json[usedby_key]
        except:
            self._logger.error("No IP addresses for network '{}' configured.".format(self.name))
            return None
        netids = []
        for elem in rev_links:
            if elem == 'network':
                for netid in rev_links[elem]:
                    netids.extend([netid])

        # fill network dictionary {'netname': {'ns_hostname': 'servername', 'ns_ip': 'IP', 'hosts' {'name': 'IP'}}}
        networks = {}
        for netid in netids:
            netobj = Network(id = ObjectId(netid))
            networks[netobj.name] = {}
            master_ip = netobj.get('ns_ip')
            networks[netobj.name]['ns_hostname'] = netobj.get('ns_hostname')
            networks[netobj.name]['ns_ip'] = master_ip
            networks[netobj.name]['hosts'] = netobj.resolve_used_ips()
            # some inout for reverse zones
            # here is steps to figure out which octets in ipadresses are common for all ips in network.
            # we can not rely on mask here, as mask can not be devisible by 8 (/12, /15, /21, etc)
            arr1 = [int(elem) for elem in master_ip.split('.')]
            logical_arr1 = [True, True, True, True]
            for host in networks[netobj.name]['hosts']:
                ip = networks[netobj.name]['hosts'][host]
                arr2 = [int(elem) for elem in ip.split('.')]
                logical_arr = [ bool(arr1[n] == arr2[n]) for n in range(len(arr1))]
                logical_arr2 = [logical_arr[n] & logical_arr1[n] for n in range(len(logical_arr))]
                arr1 = arr2[:]
                logical_arr1 = logical_arr2[:]
            # get fist octet in ip adresses which is changing
            try:
                mutable_octet = [i for i in range(len(logical_arr1)) if not logical_arr1[i]][0]
            except IndexError:
                mutable_octet = 3
            # generate zone file name
            revzonename = '.'.join(list(reversed(master_ip.split('.')[:mutable_octet]))) + ".in-addr.arpa"
            networks[netobj.name]['mutable_octet'] = mutable_octet
            networks[netobj.name]['rev_zone_name'] = revzonename

        # figure out paths
        includefile = self.get('named_include_file')
        zonedir = self.get('named_zone_dir')
        if not includefile:
            self._logger.error("named_include_file should be configured")
            return None
        if not zonedir:
            self._logger.error("named_zone_dir should be configured")
            return None

        # load templates
        tloader = template.Loader(self.get('path') + '/templates')

        # create include file for named.conf
        namedconffile = open(includefile, 'w')
        zonenames = []
        for network in networks:
            zonenames.extend([network, networks[network]['rev_zone_name']])

        namedconffile.write(tloader.load('templ_named_conf.cfg').generate(networks = zonenames))
        namedconffile.close()
        nameduid = pwd.getpwnam("named").pw_uid
        namedgid = grp.getgrnam("named").gr_gid
        os.chown(includefile, 0, namedgid)
        self._logger.info("Created '{}'".format(includefile))

        # remove zone files
        filelist = [ f for f in os.listdir(zonedir) if f.endswith(".luna.zone") ]
        for f in filelist:
            filepath = zonedir + "/" + f
            try:
                os.remove(filepath)
                self._logger.info("Removed old '{}'".format(filepath))
            except:
                self._logger.info("Unable to remove '{}'".format(filepath))
        # create zone files 
        for network in networks:
            # create zone
            z = {}
            z['master_hostname'] = networks[network]['ns_hostname']
            z['master_ip'] = networks[network]['ns_ip']
            z['serial_num'] = 1
            z['hosts'] = networks[network]['hosts']
            zonefilepath = zonedir + "/" + network + ".luna.zone"
            zonefile = open(zonefilepath, 'w')
            zonefile.write(tloader.load('templ_zone.cfg').generate(z = z))
            zonefile.close()
            os.chown(zonefilepath, nameduid, namedgid)
            self._logger.info("Created '{}'".format(zonefilepath))
            revzonepath = zonedir + "/" + networks[network]['rev_zone_name'] + ".luna.zone"
            z['master_hostname'] = networks[network]['ns_hostname'] + "." + network
            z['hosts'] = {}
            for host in networks[network]['hosts']:
                hostname = host + "." + network
                iparr = [int(elem) for elem in networks[network]['hosts'][host].split('.')]
                reverseiplist = list(reversed(iparr[networks[network]['mutable_octet']:]))
                reverseip = '.'.join([str(elem) for elem in reverseiplist])
                z['hosts'][hostname] = reverseip
            zonefile = open(revzonepath, 'w') 
            zonefile.write(tloader.load('templ_zone_arpa.cfg').generate(z = z))
            zonefile.close()
            os.chown(revzonepath, nameduid, namedgid)
            self._logger.info("Created '{}'".format(revzonepath))
        return True
Beispiel #11
0
    def makedhcp_config(self, net_name=None, start_ip=None, end_ip=None):

        from luna.network import Network

        if net_name and not (start_ip and end_ip):
            self.log.error("IP range should be specified.")
            return {}

        old_net_name = self.get('dhcp_net')

        if not (old_net_name or net_name):
            self.log.error("DHCP network should be specified.")
            return {}

        frontend_address = self.get('frontend_address')
        if not frontend_address:
            self.log.error("Frontend address should be set.")
            return {}

        net_obj = None
        start_ip_num, end_ip_num = None, None

        if net_name:
            net_obj = Network(name=net_name, mongo_db=self._mongo_db)

            if net_obj.version != 4:
                self.log.error("Only IPv4 networks are supported.")
                return {}

            start_ip_num = None
            frontend_address_num = None
            end_ip_num = None
            try:
                start_ip_num = utils.ip.atorel(
                    start_ip, net_obj._json['NETWORK'],
                    net_obj._json['PREFIX'])

                frontend_address_num = utils.ip.atorel(
                    frontend_address, net_obj._json['NETWORK'],
                    net_obj._json['PREFIX'])

                end_ip_num = utils.ip.atorel(
                    end_ip, net_obj._json['NETWORK'],
                    net_obj._json['PREFIX'])

            except RuntimeError:
                # utils.ip will print error messages
                pass

            if not start_ip_num:
                self.log.error(
                    'Start of the range does not belong to network.')
                return {}

            if not start_ip_num:
                self.log.error(
                    'End of the range does not belong to network.')
                return {}

            if not frontend_address_num:
                self.log.error(
                    'Frontend IP does not belong to network.')
                return {}

            if end_ip_num < start_ip_num:
                self.log.error(
                    'End IP of the range should be larger than start.')
                return {}

        old_net_obj = None
        old_start_ip = None
        old_end_ip = None

        if old_net_name and net_name:
            # release old range
            old_net_obj = Network(name=old_net_name, mongo_db=self._mongo_db)
            old_start_ip = self.get('dhcp_range_start')
            old_end_ip = self.get('dhcp_range_end')

            res = old_net_obj.release_ip(old_start_ip, old_end_ip)

            if not res:
                self.log.error('Unable to release old range.')
                return {}

            self.unlink(old_net_obj)

        if net_name:
            # now try to reserve new range
            net_obj = Network(name=net_name, mongo_db=self._mongo_db)
            res = net_obj.reserve_ip(start_ip_num, end_ip_num)
            if not res:
                if old_net_obj:
                    # need to rolback
                    old_net_obj.reserve_ip(old_start_ip, old_end_ip)
                self.log.error('Unable to reserve new range.')
                return {}

            super(Cluster, self).set('dhcp_net', str(net_obj.id))
            super(Cluster, self).set('dhcp_range_start', start_ip_num)
            super(Cluster, self).set('dhcp_range_end', end_ip_num)
            self.link(net_obj)

        # get actual options
        c = {}

        if self.get('frontend_https'):
            c['protocol'] = 'https'
        else:
            c['protocol'] = 'http'

        c['frontend_ip'] = self.get('frontend_address')
        c['dhcp_start'] = self.get('dhcp_range_start')
        c['dhcp_end'] = self.get('dhcp_range_end')
        c['frontend_port'] = self.get('frontend_port')
        netname = self.get('dhcp_net')
        objnet = Network(name=netname, mongo_db=self._mongo_db)
        c['netmask'] = objnet.get('NETMASK')
        c['network'] = objnet.get('NETWORK')

        c['hmac_key'] = str(
            base64.b64encode(bytearray(os.urandom(32))).decode()
        )

        c['reservations'] = objnet.get_ip_macs()

        return c
Beispiel #12
0
    def install_params(self):
        params = {}
        params['prescript'] = self.get('prescript')
        params['partscript'] = self.get('partscript')
        params['postscript'] = self.get('postscript')
        try:
            params['boot_if'] = self.get('boot_if')
        except:
            params['boot_if'] = ''
        try:
            params['torrent_if'] = self.get('torrent_if')
        except:
            params['torrent_if'] = ''
        json = self._get_json()
        if bool(params['torrent_if']):
            try:
                net_dbref = json['interfaces'][params['torrent_if']]['network']
                net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
                params['torrent_if_net_prefix'] = str(net.get('PREFIX'))
            except:
                params['torrent_if'] = ''
        try:
            net_dbref = json['interfaces'][self.get('boot_if')]['network']
            net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
            params['domain'] = str(net.name)
        except:
            params['domain'] = ""
        params['interfaces'] = {}
        try:
            interfaces = json['interfaces'].keys()
            for interface in interfaces:
                params['interfaces'][str(interface)] = str(self.get_if_parms(interface))
        except:
            pass
        try:
            interfaces = json['interfaces'].keys()
        except:
            interfaces = []

        for interface in interfaces:
            net_dbref = json['interfaces'][interface]['network']
            try:
                net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
                net_prefix = "\n" + "PREFIX=" + str(net.get('PREFIX'))
            except:
                net_prefix = ""
            params['interfaces'][str(interface)] = params['interfaces'][str(interface)].strip() + net_prefix
        osimage = OsImage(id = self.get('osimage').id, mongo_db = self._mongo_db)
        try:
            params['torrent'] = osimage.get('torrent') + ".torrent"
            params['tarball'] = osimage.get('tarball') + ".tgz"
        except:
            params['torrent'] = ""
            params['tarball'] = ""
        params['kernver'] = osimage.get('kernver')
        params['kernopts'] = osimage.get('kernopts')
        params['bmcsetup'] = {}
        if self.get('bmcsetup'):
            bmcsetup = BMCSetup(id = self.get('bmcsetup').id, mongo_db = self._mongo_db)
            params['bmcsetup']['mgmtchannel'] = bmcsetup.get('mgmtchannel') or 1
            params['bmcsetup']['netchannel'] = bmcsetup.get('netchannel') or 1
            params['bmcsetup']['userid'] = bmcsetup.get('userid') or 3
            params['bmcsetup']['user'] = bmcsetup.get('user') or "ladmin"
            params['bmcsetup']['password'] = bmcsetup.get('password') or "ladmin"
            try:
                net_dbref = json['bmcnetwork']
                net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
                params['bmcsetup']['netmask'] = net.get('NETMASK')
            except:
                params['bmcsetup']['netmask'] = ''
        return params
Beispiel #13
0
    def install_params(self):
        params = {}
        params['prescript'] = self.get('prescript')
        params['partscript'] = self.get('partscript')
        params['postscript'] = self.get('postscript')
        try:
            params['boot_if'] = self.get('boot_if')
        except:
            params['boot_if'] = ''
        try:
            params['torrent_if'] = self.get('torrent_if')
        except:
            params['torrent_if'] = ''
        json = self._get_json()
        if bool(params['torrent_if']):
            try:
                net_dbref = json['interfaces'][params['torrent_if']]['network']
                net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
                params['torrent_if_net_prefix'] = str(net.get('PREFIX'))
            except:
                params['torrent_if'] = ''
        try:
            net_dbref = json['interfaces'][self.get('boot_if')]['network']
            net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
            params['domain'] = str(net.name)
        except:
            params['domain'] = ""
        params['interfaces'] = {}
        try:
            interfaces = json['interfaces'].keys()
            for interface in interfaces:
                params['interfaces'][str(interface)] = str(self.get_if_parms(interface))
        except:
            pass
        try:
            interfaces = json['interfaces'].keys()
        except:
            interfaces = []

        for interface in interfaces:
            net_dbref = json['interfaces'][interface]['network']
            try:
                net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
                net_prefix = "\n" + "PREFIX=" + str(net.get('PREFIX'))
            except:
                net_prefix = ""
            params['interfaces'][str(interface)] = params['interfaces'][str(interface)].strip() + net_prefix
        osimage = OsImage(id = self.get('osimage').id, mongo_db = self._mongo_db)
        try:
            params['torrent'] = osimage.get('torrent') + ".torrent"
            params['tarball'] = osimage.get('tarball') + ".tgz"
        except:
            params['torrent'] = ""
            params['tarball'] = ""
        params['kernver'] = osimage.get('kernver')
        params['kernopts'] = osimage.get('kernopts')
        params['bmcsetup'] = {}
        if self.get('bmcsetup'):
            bmcsetup = BMCSetup(id = self.get('bmcsetup').id, mongo_db = self._mongo_db)
            params['bmcsetup']['mgmtchannel'] = bmcsetup.get('mgmtchannel') or 1
            params['bmcsetup']['netchannel'] = bmcsetup.get('netchannel') or 1
            params['bmcsetup']['userid'] = bmcsetup.get('userid') or 3
            params['bmcsetup']['user'] = bmcsetup.get('user') or "ladmin"
            params['bmcsetup']['password'] = bmcsetup.get('password') or "ladmin"
            try:
                net_dbref = json['bmcnetwork']
                net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
                params['bmcsetup']['netmask'] = net.get('NETMASK')
            except:
                params['bmcsetup']['netmask'] = ''
        return params