diff --git a/CHANGELOG.md b/CHANGELOG.md index f8ec6df9c52..4b291498800 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,5 +8,6 @@ * Added support for StorageClass - https://github.com/fabric8io/kubernetes-client/pull/978 Improvements - + * Fixed issue of SecurityContextConstraints not working - https://github.com/fabric8io/kubernetes-client/pull/982 + Note :- This got fixed by fixing model - https://github.com/fabric8io/kubernetes-model/pull/274 Dependencies Upgrade diff --git a/README.md b/README.md index 3873511db2c..11a7bd864b7 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,19 @@ Service myservice = client.services().inNamespace("default").createNew() .done(); ``` +You can also set the apiVersion of the resource like in the case of SecurityContextConstraints : + +```java +SecuirtyContextConstraints scc = new SecurityContextConstraintsBuilder() + .withApiVersion("v1") + .withNewMetadata().withName("scc").endMetadata() + .withAllowPrivilegedContainer(true) + .withNewRunAsUser() + .withType("RunAsAny") + .endRunAsUser() + .build(); +``` + ### Following events Use `io.fabric8.kubernetes.api.model.Event` as T for Watcher: diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java index e869a2a8b22..939ca3c106f 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java @@ -15,38 +15,20 @@ */ package io.fabric8.kubernetes.client.dsl.base; -import io.fabric8.kubernetes.api.model.HasMetadata; -import io.fabric8.kubernetes.api.model.LabelSelector; -import io.fabric8.kubernetes.api.model.LabelSelectorRequirement; -import io.fabric8.kubernetes.api.model.ObjectMeta; -import io.fabric8.kubernetes.client.OperationInfo; -import io.fabric8.kubernetes.client.dsl.Replaceable; -import io.fabric8.kubernetes.client.dsl.Resource; +import io.fabric8.kubernetes.api.builder.Function; +import io.fabric8.kubernetes.api.model.*; +import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.*; +import io.fabric8.kubernetes.client.dsl.*; import io.fabric8.kubernetes.client.dsl.internal.DefaultOperationInfo; +import io.fabric8.kubernetes.client.dsl.internal.WatchConnectionManager; +import io.fabric8.kubernetes.client.dsl.internal.WatchHTTPManager; import io.fabric8.kubernetes.client.internal.readiness.Readiness; +import io.fabric8.kubernetes.client.utils.URLUtils; import io.fabric8.kubernetes.client.utils.Utils; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; -import io.fabric8.kubernetes.api.builder.Function; -import io.fabric8.kubernetes.api.model.Doneable; -import io.fabric8.kubernetes.api.model.KubernetesResourceList; -import io.fabric8.kubernetes.api.model.RootPaths; -import io.fabric8.kubernetes.client.Config; -import io.fabric8.kubernetes.client.KubernetesClientException; -import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; -import io.fabric8.kubernetes.client.dsl.MixedOperation; -import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; -import io.fabric8.kubernetes.client.dsl.Deletable; -import io.fabric8.kubernetes.client.dsl.EditReplacePatchDeletable; -import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; -import io.fabric8.kubernetes.client.dsl.Gettable; -import io.fabric8.kubernetes.client.dsl.Reaper; -import io.fabric8.kubernetes.client.dsl.Watchable; -import io.fabric8.kubernetes.client.dsl.internal.WatchConnectionManager; -import io.fabric8.kubernetes.client.dsl.internal.WatchHTTPManager; -import io.fabric8.kubernetes.client.utils.URLUtils; import java.io.File; import java.io.FileInputStream; @@ -56,11 +38,7 @@ import java.lang.reflect.ParameterizedType; import java.net.MalformedURLException; import java.net.URL; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; diff --git a/kubernetes-examples/src/main/java/io/fabric8/openshift/examples/SecurityContextConstraintExample.java b/kubernetes-examples/src/main/java/io/fabric8/openshift/examples/SecurityContextConstraintExample.java new file mode 100644 index 00000000000..5fa429ce08f --- /dev/null +++ b/kubernetes-examples/src/main/java/io/fabric8/openshift/examples/SecurityContextConstraintExample.java @@ -0,0 +1,73 @@ +/** + * 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.openshift.examples; + +import io.fabric8.kubernetes.client.KubernetesClientException; +import io.fabric8.openshift.api.model.SecurityContextConstraints; +import io.fabric8.openshift.api.model.SecurityContextConstraintsBuilder; +import io.fabric8.openshift.client.DefaultOpenShiftClient; +import io.fabric8.openshift.client.OpenShiftClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SecurityContextConstraintExample { + + private static final Logger logger = LoggerFactory.getLogger(SecurityContextConstraintExample.class); + + //You need to be login as admin on OpenShift for this Example + //command for that is + //oc login -u system:admin + + public static void main(String[] args) throws InterruptedException { + + try (OpenShiftClient client = new DefaultOpenShiftClient()) { + + SecurityContextConstraints scc = new SecurityContextConstraintsBuilder() + .withNewMetadata().withName("scc").endMetadata() + .withAllowPrivilegedContainer(true) + .withNewRunAsUser() + .withType("RunAsAny") + .endRunAsUser() + .withNewSeLinuxContext() + .withType("RunAsAny") + .endSeLinuxContext() + .withNewFsGroup() + .withType("RunAsAny") + .endFsGroup() + .withNewSupplementalGroups() + .withType("RunAsAny") + .endSupplementalGroups() + .addToUsers("admin") + .addToGroups("admin-group") + .build(); + + log("Created SecurityContextConstraints", client.securityContextConstraints().create(scc)); + + client.close(); + + } catch (KubernetesClientException e) { + logger.error(e.getMessage(), e); + } + } + + private static void log(String action, Object obj) { + logger.info("{}: {}", action, obj); + } + + private static void log(String action) { + logger.info(action); + } +}