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
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
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
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)
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
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
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)
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)
def release_ip(self, ip): """return this IP, which is an IP object""" rds.sadd(self.storekey, int(ip))
def release_gateway(self, ip): rds.sadd(self.gatekey, int(ip))
def release_ip(self, ip): rds.sadd(self.storekey, int(ip))