def get_ip_pools(self, version, ipam=None): """ Get the configured IP pools. :param version: 4 for IPv4, 6 for IPv6 :param ipam: Filter on the ipam flag. If None, all IP Pools are returned. If False, only pools that are not used by Calico IPAM are returned. If True, only pools that are used by Calico IPAM are returned. :return: List of IPPool. """ assert version in (4, 6) pool_path = IP_POOLS_PATH % {"version": str(version)} try: leaves = self.etcd_client.read(pool_path, recursive=True).leaves except EtcdKeyNotFound: # Path doesn't exist. pools = [] else: # Convert the leaf values to IPPools. We need to handle an empty # leaf value because when no pools are configured the recursive # read returns the parent directory. pools = [IPPool.from_json(leaf.value) for leaf in leaves if leaf.value] # If required, filter out pools that are not used for Calico IPAM. if ipam is not None: pools = [pool for pool in pools if pool.ipam == ipam] return pools
def get_ip_pool_config(self, version, cidr): """ Get the configuration for the given pool. :param version: "v4" for IPv4, "v6" for IPv6 :param pool: IPNetwork object representing the pool :return: An IPPool object. """ assert version in ("v4", "v6") assert isinstance(cidr, IPNetwork) # Normalize to CIDR format (i.e. 10.1.1.1/8 goes to 10.0.0.0/8) cidr = cidr.cidr key = IP_POOL_KEY % { "version": version, "pool": str(cidr).replace("/", "-") } try: data = self.etcd_client.read(key).value except EtcdKeyNotFound: # Re-raise with a better error message. raise KeyError("%s is not a configured IP pool." % cidr) return IPPool.from_json(data)
def get_ip_pools(self, version): """ Get the configured IP pools. :param version: 4 for IPv4, 6 for IPv6 :return: List of IPPool. """ assert version in (4, 6) pool_path = IP_POOLS_PATH % {"version": str(version)} try: leaves = self.etcd_client.read(pool_path, recursive=True).leaves except EtcdKeyNotFound: # Path doesn't exist. pools = [] else: # Convert the leaf values to IPPools. We need to handle an empty # leaf value because when no pools are configured the recursive # read returns the parent directory. pools = [IPPool.from_json(leaf.value) for leaf in leaves if leaf.value] return pools
def get_ip_pool_config(self, version, cidr): """ Get the configuration for the given pool. :param version: 4 for IPv4, 6 for IPv6 :param pool: IPNetwork object representing the pool :return: An IPPool object. """ assert version in (4, 6) assert isinstance(cidr, IPNetwork) # Normalize to CIDR format (i.e. 10.1.1.1/8 goes to 10.0.0.0/8) cidr = cidr.cidr key = IP_POOL_KEY % {"version": str(version), "pool": str(cidr).replace("/", "-")} try: data = self.etcd_client.read(key).value except EtcdKeyNotFound: # Re-raise with a better error message. raise KeyError("%s is not a configured IP pool." % cidr) return IPPool.from_json(data)