示例#1
0
 def get_num_bmc_ip(self, ip):
     dbref = None
     try:
         dbref = self._get_json()['bmcnetwork']
     except:
         self._logger.error("Interface is not configured for BMC")
         return None
     if not bool(dbref):
         return None
     net = Network(id = dbref.id, mongo_db = self._mongo_db)
     return utils.ip.atorel(ip, net._get_json()['NETWORK'], net._get_json()['PREFIX'])
示例#2
0
 def get_num_ip(self, interface, ip):
     interfaces = self._get_json()['interfaces']
     dbref = None
     try:
         dbref = interfaces[interface]['network']
     except:
         self._logger.error("Interface is not configured for '{}'".format(interface))
         return None
     if not bool(dbref):
         return None
     net = Network(id = dbref.id, mongo_db = self._mongo_db)
     return utils.ip.atorel(ip, net._get_json()['NETWORK'], net._get_json()['PREFIX'])
示例#3
0
文件: switch.py 项目: kostty/luna
 def get(self, key):
     if key == 'ip':
         dbref = None
         try:
             dbref = self._get_json()['network']
         except:
             self._logger.error("Network is not defined for switch")
             return None
         if not bool(dbref):
             return None
         net = Network(id = dbref.id, mongo_db = self._mongo_db)
         return utils.ip.reltoa(net._get_json()['NETWORK'], self._get_json()['ip'])
     return super(Switch, self).get(key)
示例#4
0
    def makedhcp(self, netname, startip, endip, no_ha = False):
        from luna.network import Network
        from bson.objectid import ObjectId
        try:
            if bool(netname):
                objnet = Network(name = netname, mongo_db = self._mongo_db)
        except:
            ojbnet = None
        if not bool(objnet):
            self._logger.error("Proper DHCP network should be specified.")
            return None
        if not bool(startip) or not bool(endip):
            self._logger.error("First and last IPs of range should be specified.")
            return None
        if not bool(self.get_cluster_ips()):
            no_ha = True

        n = objnet._get_json()
        startip = utils.ip.atorel(startip, n['NETWORK'], n['PREFIX'])
        endip = utils.ip.atorel(endip, n['NETWORK'], n['PREFIX'])
        if not bool(startip) or not bool(endip):
            self._logger.error("Error in acquiring IPs.")
            return None
        obj_json = self._get_json()
        (oldnetid, oldstartip, oldendip) = (None, None, None)
        try:
            oldnetid = obj_json['dhcp_net']
            oldstartip = obj_json['dhcp_range_start']
            oldendip = obj_json['dhcp_range_end']
        except:
            (oldnetid, oldstartip, oldendip) = (None, None, None)
        if str(oldnetid) == str(objnet.id):
            objnet.release_ip(oldstartip, oldendip)
            self.unlink(objnet)
            (oldnetid, oldstartip, oldendip) = (None, None, None)
        res = objnet.reserve_ip(startip, endip)
        if not bool(res):
            self._logger.error("Cannot reserve IP range for DHCP.")
        super(Cluster, self).set('dhcp_net', str(objnet.id))
        super(Cluster, self).set('dhcp_range_start', startip)
        super(Cluster, self).set('dhcp_range_end', endip)
        self.link(objnet)
        if bool(oldnetid) and bool(oldstartip) and bool(oldendip):
            oldnet_obj = Network(id = ObjectId(oldnetid), mongo_db = self._mongo_db)
            self.unlink(oldnet_obj)
            oldnet_obj.release_ip(oldstartip, oldendip)
        self._create_dhcp_config(no_ha)
        return True
示例#5
0
文件: otherdev.py 项目: kostty/luna
 def get_ip(self, network_name = None):
     if not bool(network_name):
         self._logger.error("Network needs to be specified")
         return None
     nets = self._get_json()['connected']
     if type(network_name) == ObjectId:
         try:
             return nets[str(network_name)]
         except:
             self._logger.error("Cannot find configured IP in the network '{}' for '{}'".format(str(network_name), self.name))
             return None
     for rec in nets:
         net = Network(id = ObjectId(rec), mongo_db = self._mongo_db)
         if net.name == network_name:
             return utils.ip.reltoa(net._get_json()['NETWORK'], nets[rec])
     return None
示例#6
0
文件: otherdev.py 项目: kostty/luna
    def del_net(self, network = None):
        if not bool(network):
            self._logger.error("Network should be specified")
            return None

        obj_json = self._get_json()
        net = Network(network, mongo_db = self._mongo_db)
        rel_ip = None
        try:
            rel_ip = obj_json['connected'][str(net.id)]
        except:
            self._logger.error("Cannot find configured IP in the network '{}' for '{}'".format(network, self.name))
            return None
        net.release_ip(utils.ip.reltoa(net._get_json()['NETWORK'], rel_ip))
        obj_json['connected'].pop(str(net.id))
        ret = self._mongo_collection.update({'_id': self._id}, {'$set': obj_json}, multi=False, upsert=False)
        self.unlink(net)
        return not ret['err']
示例#7
0
文件: otherdev.py 项目: kostty/luna
 def set_ip(self, network = None, ip = None):
     if not bool(network):
         self._logger.error("Network should be specified")
         return None
     if not bool(ip):
         return self.del_net(network = network)
     obj_json = self._get_json()
     net = Network(name = network, mongo_db = self._mongo_db)
     try:
         old_rel_ip = obj_json['connected'][str(net.DBRef.id)]
     except:
         old_rel_ip = None
     if old_rel_ip:
         net.release_ip(utils.ip.reltoa(net._get_json()['NETWORK'], old_rel_ip))
     new_ip = net.reserve_ip(ip)
     if not new_ip:
         return None
     obj_json['connected'][str(net.DBRef.id)] = new_ip
     ret = self._mongo_collection.update({'_id': self._id}, {'$set': obj_json}, multi=False, upsert=False)
     if not old_rel_ip:
         self.link(net)
示例#8
0
文件: switch.py 项目: kostty/luna
 def set(self, key, value):
     if not bool(key) or type(key) is not str :
         self._logger.error("Field should be specified")
         return None
     if not key in self._keylist:
         self._logger.error("Cannot change '{}' field".format(key))
         return None
     obj_json = self._get_json()
     if key == 'ip':
         net_dbref = obj_json['network']
         old_ip = obj_json['ip']
         net = Network(id = net_dbref.id, mongo_db = self._mongo_db)
         if not utils.ip.ip_in_net(value, net._get_json['NETWORK'], net._get_json['PREFIX']):
             self._logger.error("This IP: '{}' does not belong to defined network.".format(value))
             return None
         if old_ip:
             net.release_ip(old_ip)
         ip = net.reserve_ip(value)
         obj_json['ip'] = ip
         ret = self._mongo_collection.update({'_id': self._id}, {'$set': obj_json}, multi=False, upsert=False)
         return not ret['err']
     if key == 'network':
         old_net_dbref = obj_json['network']
         old_net = Network(id = old_net_dbref.id, mongo_db = self._mongo_db)
         old_ip_rel = obj_json['ip']
         old_ip_human_readable = self.get('ip')
         new_net = Network(name = value, mongo_db = self._mongo_db)
         if old_net.DBRef == new_net.DBRef:
             return None
         new_ip_rel = old_ip_rel
         new_ip_human_readable = utils.ip.reltoa(new_net._get_json()['NETWORK'], new_ip_rel)
         if not new_net.reserve_ip(new_ip_human_readable):
             return None
         old_net.release_ip(old_ip_human_readable)
         obj_json['network'] = new_net.DBRef
         ret = self._mongo_collection.update({'_id': self._id}, {'$set': obj_json}, multi=False, upsert=False)
         self.link(new_net)
         self.unlink(old_net)
         return not ret['err']
     return super(Switch, self).set(key, value)
示例#9
0
    def get(self, key):
        if key == 'dhcp_net':
            from luna.network import Network
            from bson.objectid import ObjectId
            netid = super(Cluster, self).get(key)
            if not bool(netid):
                return None
            net = Network(id = ObjectId(netid), mongo_db = self._mongo_db)
            try:
                net = Network(id = ObjectId(netid), mongo_db = self._mongo_db)
                return net.name
            except:
                self._logger.error('Wrong DHCP network configured')
                return None
        if key == 'dhcp_range_start' or key == 'dhcp_range_end':
            from luna.network import Network
            from bson.objectid import ObjectId
            netid = super(Cluster, self).get('dhcp_net')
            if not bool(netid):
                return None
            net = Network(id = ObjectId(netid), mongo_db = self._mongo_db)
            return utils.ip.reltoa(net._get_json()['NETWORK'], super(Cluster, self).get(key))

        return super(Cluster, self).get(key)