Skip to content

Commit e3984af

Browse files
committed
Add decorator to remove namespace from ClusterRole and ClusterRoleBinding
1 parent 1ff7c69 commit e3984af

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed

extensions/kubernetes/vanilla/deployment/src/main/java/io/quarkus/kubernetes/deployment/KubernetesCommonHelper.java

+5
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,11 @@ private static Collection<DecoratorBuildItem> createRbacDecorators(String name,
291291
List<KubernetesEffectiveServiceAccountBuildItem> effectiveServiceAccounts,
292292
List<KubernetesRoleBindingBuildItem> roleBindingsFromExtensions) {
293293
List<DecoratorBuildItem> result = new ArrayList<>();
294+
295+
// Cluster resources does not have namespace
296+
result.add(new DecoratorBuildItem(target, new RemoveNamespaceFromClusterRoleBindingDecorator()));
297+
result.add(new DecoratorBuildItem(target, new RemoveNamespaceFromClusterRoleDecorator()));
298+
294299
boolean kubernetesClientRequiresRbacGeneration = kubernetesClientConfiguration
295300
.map(KubernetesClientCapabilityBuildItem::isGenerateRbac).orElse(false);
296301
Set<String> roles = new HashSet<>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.quarkus.kubernetes.deployment;
2+
3+
import io.dekorate.kubernetes.decorator.Decorator;
4+
import io.dekorate.kubernetes.decorator.NamedResourceDecorator;
5+
import io.fabric8.kubernetes.api.model.ObjectMeta;
6+
import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBindingBuilder;
7+
8+
/**
9+
* Decorator responsible for remove namespace from ClusterRoleBinding resource.
10+
*
11+
* This decorator executes after {@link AddNamespaceDecorator}.
12+
*/
13+
public class RemoveNamespaceFromClusterRoleBindingDecorator extends NamedResourceDecorator<ClusterRoleBindingBuilder> {
14+
15+
@Override
16+
public void andThenVisit(ClusterRoleBindingBuilder clusterRoleBindingBuilder, ObjectMeta objectMeta) {
17+
clusterRoleBindingBuilder
18+
.withNewMetadata()
19+
.withNamespace(null)
20+
.withName(objectMeta.getName())
21+
.endMetadata();
22+
}
23+
24+
@Override
25+
public Class<? extends Decorator>[] after() {
26+
return new Class[] { AddNamespaceDecorator.class };
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.quarkus.kubernetes.deployment;
2+
3+
import io.dekorate.kubernetes.decorator.Decorator;
4+
import io.dekorate.kubernetes.decorator.NamedResourceDecorator;
5+
import io.fabric8.kubernetes.api.model.ObjectMeta;
6+
import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBuilder;
7+
8+
/**
9+
* Decorator responsible for remove namespace from ClusterRole resource.
10+
*
11+
* This decorator executes after {@link AddNamespaceDecorator}.
12+
*/
13+
public class RemoveNamespaceFromClusterRoleDecorator extends NamedResourceDecorator<ClusterRoleBuilder> {
14+
15+
@Override
16+
public void andThenVisit(ClusterRoleBuilder clusterRoleBuilder, ObjectMeta objectMeta) {
17+
clusterRoleBuilder
18+
.withNewMetadata()
19+
.withNamespace(null)
20+
.withName(objectMeta.getName())
21+
.endMetadata();
22+
}
23+
24+
@Override
25+
public Class<? extends Decorator>[] after() {
26+
return new Class[] { AddNamespaceDecorator.class };
27+
}
28+
}

integration-tests/kubernetes/quarkus-standard-way/src/test/java/io/quarkus/it/kubernetes/KubernetesWithRbacFullTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public void assertGeneratedResources() throws IOException {
8484

8585
// secret-reader assertions
8686
ClusterRole secretReaderRole = getClusterRoleByName(kubernetesList, "secret-reader");
87+
assertThat(secretReaderRole.getMetadata().getNamespace()).isEqualTo(null);
8788
assertThat(secretReaderRole.getRules()).satisfiesOnlyOnce(r -> {
8889
assertThat(r.getApiGroups()).containsExactly("");
8990
assertThat(r.getResources()).containsExactly("secrets");
@@ -111,6 +112,7 @@ public void assertGeneratedResources() throws IOException {
111112
assertEquals("Group", clusterSubject.getKind());
112113
assertEquals("manager", clusterSubject.getName());
113114
assertEquals("rbac.authorization.k8s.io", clusterSubject.getApiGroup());
115+
assertThat(clusterRoleBinding.getMetadata().getNamespace()).isEqualTo(null);
114116
}
115117

116118
private int lastIndexOfKind(String content, String... kinds) {

0 commit comments

Comments
 (0)