All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.fabric8.kubernetes.client.dsl.internal.NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableImpl Maven / Gradle / Ivy

/**
 * Copyright (C) 2015 Red Hat, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.fabric8.kubernetes.client.dsl.internal;

import io.fabric8.kubernetes.api.builder.TypedVisitor;
import io.fabric8.kubernetes.api.builder.VisitableBuilder;
import io.fabric8.kubernetes.api.builder.Visitor;
import io.fabric8.kubernetes.api.model.DeletionPropagation;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.ListOptions;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.client.BaseClient;
import io.fabric8.kubernetes.client.ClientContext;
import io.fabric8.kubernetes.client.Handlers;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.ResourceHandler;
import io.fabric8.kubernetes.client.Watch;
import io.fabric8.kubernetes.client.Watcher;
import io.fabric8.kubernetes.client.dsl.Applicable;
import io.fabric8.kubernetes.client.dsl.CascadingDeletable;
import io.fabric8.kubernetes.client.dsl.Deletable;
import io.fabric8.kubernetes.client.dsl.Gettable;
import io.fabric8.kubernetes.client.dsl.NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicable;
import io.fabric8.kubernetes.client.dsl.Readiable;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.dsl.VisitFromServerGetWatchDeleteRecreateWaitApplicable;
import io.fabric8.kubernetes.client.dsl.VisitFromServerWritable;
import io.fabric8.kubernetes.client.dsl.Waitable;
import io.fabric8.kubernetes.client.dsl.base.HasMetadataOperation;
import io.fabric8.kubernetes.client.dsl.base.OperationContext;
import io.fabric8.kubernetes.client.internal.readiness.Readiness;
import io.fabric8.kubernetes.client.utils.KubernetesResourceUtil;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;

import static io.fabric8.kubernetes.client.utils.DeleteAndCreateHelper.deleteAndCreateItem;

/**
 * Resource like operation with specific namespace rules.
 * 
If the item has a namespace, it is the default (unlike other operations) *
If the user call inNamespace, that will be used *
else the default namespace from the config will be used */ public class NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableImpl implements NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicable, Waitable, Readiable { private final NamespaceVisitOperationContext namespaceVisitOperationContext; private final OperationContext context; static class ChangeNamespace extends TypedVisitor { private final String explicitNamespace; ChangeNamespace(String explicitNamespace) { this.explicitNamespace = explicitNamespace; } @Override public void visit(ObjectMetaBuilder builder) { builder.withNamespace(explicitNamespace); } } public NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableImpl(OperationContext context, NamespaceVisitOperationContext namespaceVisitOperationContext) { this.context = context; this.namespaceVisitOperationContext = namespaceVisitOperationContext; } public NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableImpl(ClientContext clientContext, HasMetadata item) { this(HasMetadataOperationsImpl.defaultContext(clientContext).withItem(item), new NamespaceVisitOperationContext()); handlerOf(item, this.context); // validate the handler } @Override public HasMetadata apply() { return createOrReplace(); } @Override public HasMetadata createOrReplace() { if (namespaceVisitOperationContext.isDeletingExisting()) { return deleteAndCreateItem(get(), getResource()); } return getResource().createOrReplace(get()); } @Override public Waitable createOrReplaceAnd() { HasMetadata item = createOrReplace(); return newInstance(context.withItem(item), namespaceVisitOperationContext); } @Override public Boolean delete() { return getResource().delete(); } @Override public HasMetadata get() { if (!context.isReloadingFromServer()) { return (HasMetadata) context.getItem(); } return getResource().get(); } @Override public VisitFromServerGetWatchDeleteRecreateWaitApplicable inNamespace(String explicitNamespace) { HasMetadata item = acceptVisitors(get(), Collections.emptyList(), explicitNamespace, this.context); return newInstance(context.withItem(item).withNamespace(explicitNamespace), namespaceVisitOperationContext.withExplicitNamespace(explicitNamespace)); } @Override public Gettable fromServer() { return getResource().fromServer(); } @Override public Applicable deletingExisting() { return newInstance(context, namespaceVisitOperationContext.withDeletingExisting(true)); } @Override public VisitFromServerGetWatchDeleteRecreateWaitApplicable accept(Visitor... visitors) { HasMetadata item = acceptVisitors(get(), Arrays.asList(visitors), namespaceVisitOperationContext.getExplicitNamespace(), this.context); return newInstance(context.withItem(item), namespaceVisitOperationContext); } @Override public CascadingDeletable withGracePeriod(long gracePeriodSeconds) { return newInstance(context.withGracePeriodSeconds(gracePeriodSeconds), namespaceVisitOperationContext); } @Override public CascadingDeletable withPropagationPolicy(DeletionPropagation propagationPolicy) { return newInstance(context.withPropagationPolicy(propagationPolicy), namespaceVisitOperationContext); } @Override public Deletable cascading(boolean cascading) { return getResource().cascading(cascading); } @Override public Waitable withWaitRetryBackoff(long initialBackoff, TimeUnit backoffUnit, double backoffMultiplier) { return this; } @Override public Watch watch(Watcher watcher) { return getResource().watch(watcher); } @Override public Watch watch(String resourceVersion, Watcher watcher) { return getResource().watch(resourceVersion, watcher); } @Override public Watch watch(ListOptions options, Watcher watcher) { return getResource().watch(options, watcher); } Resource getResource() { HasMetadata meta = (HasMetadata) context.getItem(); ResourceHandler handler = handlerOf(meta, context); HasMetadataOperation> operation = handler.operation(context, null); return operation.newInstance(context).inNamespace(KubernetesResourceUtil.getNamespace(meta)).withName(KubernetesResourceUtil.getName(meta)); } protected Readiness getReadiness() { return Readiness.getInstance(); } @Override public final boolean isReady() { HasMetadata meta = fromServer().get(); if (meta == null) { return false; } return getReadiness().isReady(meta); } @Override public HasMetadata waitUntilReady(long amount, TimeUnit timeUnit) { return getResource().waitUntilReady(amount, timeUnit); } @Override public VisitFromServerWritable dryRun(boolean isDryRun) { return newInstance(context.withDryRun(isDryRun), namespaceVisitOperationContext); } public NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableImpl newInstance(OperationContext context, NamespaceVisitOperationContext namespaceVisitOperationContext) { return new NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableImpl(context, namespaceVisitOperationContext); } @Override public HasMetadata waitUntilCondition(Predicate condition, long amount, TimeUnit timeUnit) { return getResource().waitUntilCondition(condition, amount, timeUnit); } @Override public HasMetadata edit(Class visitorType, Visitor visitor) { return getResource().edit(visitorType, visitor); } @Override public HasMetadata edit(UnaryOperator function) { return getResource().edit(function); } @Override public HasMetadata edit(Visitor... visitors) { return getResource().edit(visitors); } @Override public HasMetadata accept(Consumer function) { return getResource().accept(function); } static HasMetadata acceptVisitors(HasMetadata item, List visitors, String explicitNamespace, OperationContext context) { ResourceHandler h = handlerOf(item, context); VisitableBuilder builder = h.edit(item); //Let's apply any visitor that might have been specified. for (Visitor v : visitors) { builder.accept(v); } if (explicitNamespace != null) { builder.accept(new ChangeNamespace(explicitNamespace)); } return builder.build(); } static > ResourceHandler handlerOf(T item, OperationContext context) { ResourceHandler result = Handlers.get(item, new BaseClient(context)); if (result == null) { throw new KubernetesClientException("Could not find a registered handler for item: [" + item + "]."); } return result; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy