Exemple #1
0
 def add_ip(self, ip):
     if isinstance(ip, basestring):
         try:
             ip = IPv4Address(ip)
         except AddressValueError:
             return False
     rds.sadd(self.storekey, int(ip))
     return True
Exemple #2
0
 def add_ip(self, ip):
     if isinstance(ip, basestring):
         try:
             ip = IPv4Address(ip)
         except AddressValueError:
             return False
     ipnum = int(ip)
     if rds.sismember(self.gatekey, ipnum):
         rds.srem(self.gatekey, ipnum)
     rds.sadd(self.storekey, ipnum)
     return True
Exemple #3
0
    def acquire_gateway_ip(self, host):
        ipnum = rds.spop(self.gatekey)
        if not ipnum:
            return

        vg = VLanGateway.create(ipnum, self.id, host.id)
        if not vg:
            rds.sadd(self.gatekey, ipnum)
            return

        return vg
Exemple #4
0
def add_container_backends(container):
    """单个container所拥有的后端服务
    HKEYS app_key 可以知道有哪些后端
    HGET 上面的结果可以知道后端都从哪里拿
    SMEMBERS entrypoint_key 可以拿出所有的后端
    """
    app_key = 'eru:app:{0}:backends'.format(container.appname)
    entrypoint_key = 'eru:app:{0}:entrypoint:{1}:backends'.format(container.appname, container.entrypoint)
    rds.hset(app_key, container.entrypoint, entrypoint_key)

    backends = container.get_backends()
    if backends:
        rds.sadd(entrypoint_key, *backends)
Exemple #5
0
    def create(cls, name, netspace):
        """create network and store ips(int) under this network in redis"""
        try:
            n = cls(name, netspace)
            db.session.add(n)
            db.session.commit()

            # create sub IPs
            network = n.network
            base = int(network.network_address)
            # 一次写500个吧
            # IP留100个 xx.xx.xx.(1-100) 做网关
            for ipnums in more_itertools.chunked(xrange(base + 100, base + network.num_addresses), 500):
                rds.sadd(n.storekey, *ipnums)

            return n
        except sqlalchemy.exc.IntegrityError:
            db.session.rollback()
            return None
Exemple #6
0
    def create(cls, name, netspace, gateway_count=100):
        """create network and store ips(int) under this network in redis"""
        try:
            n = cls(name, netspace, gateway_count)
            db.session.add(n)
            db.session.commit()

            # create sub IPs
            network = n.network
            base = int(network.network_address)
            # 一次写500个吧
            # 写容器可用IP
            for ipnums in more_itertools.chunked(xrange(base + gateway_count, base + network.num_addresses), 500):
                rds.sadd(n.storekey, *ipnums)

            # 写宿主机可用IP
            rds.sadd(n.gatekey, *range(base, base + gateway_count))
            return n
        except sqlalchemy.exc.IntegrityError:
            db.session.rollback()
            return None
Exemple #7
0
 def _set_falcon(self, expr_ids):
     rds.delete("eru:falcon:version:%s:expression" % self.id)
     for i in expr_ids:
         rds.sadd("eru:falcon:version:%s:expression" % self.id, i)
Exemple #8
0
def add_container_for_agent(container):
    """agent需要从key里取值出来去跟踪
    SMEMBERS key 可以拿出这个host上所有的container"""
    host = container.host
    key = 'eru:agent:{0}:containers'.format(host.name)
    rds.sadd(key, container.container_id)
Exemple #9
0
 def release_ip(self, ip):
     """return this IP, which is an IP object"""
     rds.sadd(self.storekey, int(ip))
Exemple #10
0
 def release_gateway(self, ip):
     rds.sadd(self.gatekey, int(ip))
Exemple #11
0
 def release_ip(self, ip):
     rds.sadd(self.storekey, int(ip))