@Override public AddressApi withAddressSpace(AddressSpace addressSpace) { return new ConfigMapAddressApi(client, addressSpace.getAnnotation(AnnotationKeys.INFRA_UUID)); }
@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 Set<Address> listAddresses(String namespace) { return listAddressesWithLabels(namespace, Collections.emptyMap()); }
@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); }
@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 Set<Address> listAddressesWithLabels(String namespace, Map<String, String> labelSelector) { Map<String, String> labels = new LinkedHashMap<>(labelSelector); labels.put(LabelKeys.TYPE, "address-config"); labels.put(LabelKeys.INFRA_UUID, infraUuid); Set<Address> addresses = new LinkedHashSet<>(); ConfigMapList list = client.configMaps().withLabels(labels).list(); for (ConfigMap config : list.getItems()) { Address address = getAddressFromConfig(config); if (namespace.equals(address.getMetadata().getNamespace())) { addresses.add(address); } } return addresses; }
@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; } } }
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); } }
public void start() throws Exception { SchemaApi schemaApi = KubeSchemaApi.create(openShiftClient, openShiftClient.getNamespace(), isOpenShift(openShiftClient)); CachingSchemaProvider schemaProvider = new CachingSchemaProvider(); schemaApi.watchSchema(schemaProvider, options.getResyncInterval()); Kubernetes kubernetes = new KubernetesHelper(openShiftClient, options.getTemplateDir(), options.getInfraUuid()); BrokerSetGenerator clusterGenerator = new TemplateBrokerSetGenerator(kubernetes, options); EventLogger eventLogger = options.isEnableEventLogger() ? new KubeEventLogger(openShiftClient, openShiftClient.getNamespace(), Clock.systemUTC(), "standard-controller") : new LogEventLogger(); Metrics metrics = new Metrics(); Vertx vertx = Vertx.vertx(); BrokerClientFactory brokerClientFactory = new MutualTlsBrokerClientFactory(vertx, options.getCertDir()); addressController = new AddressController( options, new ConfigMapAddressApi(openShiftClient, options.getInfraUuid()), kubernetes, clusterGenerator, eventLogger, schemaProvider, vertx, metrics, new RandomBrokerIdGenerator(), brokerClientFactory); log.info("Starting standard controller for " + options.getAddressSpace()); addressController.start(); httpServer = new HTTPServer( 8889, metrics); httpServer.start(); }