@Override public Optional<Address> getAddressWithName(String namespace, String name) { ConfigMap map = client.configMaps().withName(getConfigMapName(namespace, name)).get(); if (map == null) { return Optional.empty(); } else { return Optional.of(getAddressFromConfig(map)); } }
@Override public boolean deleteAddress(Address address) { Boolean deleted = client.configMaps().withName(getConfigMapName(address.getMetadata().getNamespace(), address.getMetadata().getName())).delete(); return deleted != null && deleted; }
@Override public void createAddress(Address address) { String name = getConfigMapName(address.getMetadata().getNamespace(), address.getMetadata().getName()); ConfigMap map = create(address); client.configMaps().withName(name).create(map); }
private ConfigMap create(Address address) { ConfigMapBuilder builder = new ConfigMapBuilder() .editOrNewMetadata() .withName(getConfigMapName(address.getMetadata().getNamespace(), address.getMetadata().getName())) .addToLabels(address.getMetadata().getLabels()) .addToLabels(LabelKeys.TYPE, "address-config") .addToLabels(LabelKeys.INFRA_UUID, infraUuid) .addToLabels(LabelKeys.INFRA_TYPE, "any") .addToAnnotations(address.getMetadata().getAnnotations()) // TODO: Support other ways of doing this .addToAnnotations(AnnotationKeys.ADDRESS_SPACE, Address.extractAddressSpace(address)) .endMetadata(); if (address.getMetadata().getResourceVersion() != null) { builder.editOrNewMetadata() .withResourceVersion(address.getMetadata().getResourceVersion()) .endMetadata(); } try { // Reset resource version to avoid unneeded extra writes final Address newAddress = new AddressBuilder(address).editOrNewMetadata().withResourceVersion(null).endMetadata().build(); builder.addToData("config.json", mapper.writeValueAsString(newAddress)); return builder.build(); } catch (IOException e) { log.info("Error serializing address for {}", address, e); throw new UncheckedIOException(e); } }
@Override public boolean replaceAddress(Address address) { ConfigMap newMap = null; try { String name = getConfigMapName(address.getMetadata().getNamespace(), address.getMetadata().getName()); newMap = create(address); ConfigMap result; if (address.getMetadata().getResourceVersion() != null) { result = client.configMaps() .withName(name) .lockResourceVersion(address.getMetadata().getResourceVersion()) .replace(newMap); } else { result = client.configMaps() .withName(name) .replace(newMap); } cache.replace(newMap); return result != null; } catch (KubernetesClientException e) { if (e.getStatus().getCode() == 404) { return false; } else { throw e; } } }