KubernetesConfiguration.java

package org.entando.kubernetes.config;

import static org.awaitility.Awaitility.await;

import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import java.time.Duration;
import org.awaitility.core.ConditionFactory;
import org.entando.kubernetes.client.k8ssvc.DefaultK8SServiceClient;
import org.entando.kubernetes.client.k8ssvc.K8SServiceClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("!test")
public class KubernetesConfiguration {

    @Value("${entando.k8s.service.url}")
    private String k8sServiceUrl;
    @Value("${entando.k8s.service.url.normalize:true}")
    private boolean normalizeK8sServiceUrl;
    @Value("${spring.security.oauth2.client.registration.oidc.client-id}")
    private String clientId;
    @Value("${spring.security.oauth2.client.registration.oidc.client-secret}")
    private String clientSecret;
    @Value("${entando.auth-url}")
    private String tokenUri;
    @Value("${entando.k8s.plugin-readiness-timeout-in-minutes:5}")
    private long pluginReadinessTimeoutInMinutes;
    @Value("${entando.k8s.service-account.token-filepath}")
    private String serviceAccountTokenPath;

    @Bean
    public KubernetesClient client() {
        final Config config = new ConfigBuilder().build();
        return new DefaultKubernetesClient(config);
    }

    @Bean
    public K8SServiceClient k8SServiceClient() {
        return new DefaultK8SServiceClient(k8sServiceUrl, serviceAccountTokenPath, normalizeK8sServiceUrl);
    }

    @Bean
    public ConditionFactory k8SServiceWaitingConditionFactory() {
        return await().atMost(Duration.ofMinutes(pluginReadinessTimeoutInMinutes))
                .pollDelay(Duration.ZERO)
                .pollInterval(Duration.ofSeconds(10));
    }

}