This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 318c20667ddd464cb52831b8a14655d1c6a00d0a
Author: nferraro <ni.ferr...@gmail.com>
AuthorDate: Wed Jun 5 17:19:48 2019 +0200

    Fix #703: fix add reduced permissions to pod builder
---
 deploy/builder-role-binding.yaml              |  13 ++
 deploy/builder-role-kubernetes.yaml           |  34 +++++
 deploy/builder-role-openshift.yaml            |  78 ++++++++++++
 deploy/builder-service-account.yaml           |   6 +
 deploy/operator-role-kubernetes.yaml          |  12 ++
 deploy/operator-role-openshift.yaml           |  12 ++
 deploy/resources.go                           | 171 ++++++++++++++++++++++++++
 pkg/controller/build/schedule_pod.go          |   6 +-
 pkg/install/{serviceaccount.go => builder.go} |  33 ++---
 9 files changed, 341 insertions(+), 24 deletions(-)

diff --git a/deploy/builder-role-binding.yaml b/deploy/builder-role-binding.yaml
new file mode 100644
index 0000000..0217c79
--- /dev/null
+++ b/deploy/builder-role-binding.yaml
@@ -0,0 +1,13 @@
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+subjects:
+- kind: ServiceAccount
+  name: camel-k-builder
+roleRef:
+  kind: Role
+  name: camel-k-builder
+  apiGroup: rbac.authorization.k8s.io
diff --git a/deploy/builder-role-kubernetes.yaml 
b/deploy/builder-role-kubernetes.yaml
new file mode 100644
index 0000000..e3ee33e
--- /dev/null
+++ b/deploy/builder-role-kubernetes.yaml
@@ -0,0 +1,34 @@
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+rules:
+- apiGroups:
+  - camel.apache.org
+  resources:
+  - "*"
+  verbs:
+  - "*"
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  resources:
+  - events
+  verbs:
+  - get
+  - list
+  - watch
diff --git a/deploy/builder-role-openshift.yaml 
b/deploy/builder-role-openshift.yaml
new file mode 100644
index 0000000..ad92516
--- /dev/null
+++ b/deploy/builder-role-openshift.yaml
@@ -0,0 +1,78 @@
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+rules:
+- apiGroups:
+  - camel.apache.org
+  resources:
+  - "*"
+  verbs:
+  - "*"
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  resources:
+  - events
+  verbs:
+  - get
+  - list
+  - watch
+- apiGroups:
+  - ""
+  - "build.openshift.io"
+  resources:
+  - buildconfigs
+  - buildconfigs/webhooks
+  - builds
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  - "image.openshift.io"
+  resources:
+  - imagestreamimages
+  - imagestreammappings
+  - imagestreams
+  - imagestreams/secrets
+  - imagestreamtags
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  - build.openshift.io
+  attributeRestrictions: null
+  resources:
+  - buildconfigs/instantiate
+  - buildconfigs/instantiatebinary
+  - builds/clone
+  verbs:
+  - create
diff --git a/deploy/builder-service-account.yaml 
b/deploy/builder-service-account.yaml
new file mode 100644
index 0000000..7499e4f
--- /dev/null
+++ b/deploy/builder-service-account.yaml
@@ -0,0 +1,6 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
diff --git a/deploy/operator-role-kubernetes.yaml 
b/deploy/operator-role-kubernetes.yaml
index 5b44671..3ec172a 100644
--- a/deploy/operator-role-kubernetes.yaml
+++ b/deploy/operator-role-kubernetes.yaml
@@ -38,6 +38,18 @@ rules:
   - configmaps
   - secrets
   - serviceaccounts
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - rbac.authorization.k8s.io
+  resources:
   - roles
   - rolebindings
   verbs:
diff --git a/deploy/operator-role-openshift.yaml 
b/deploy/operator-role-openshift.yaml
index ea12152..6921e65 100644
--- a/deploy/operator-role-openshift.yaml
+++ b/deploy/operator-role-openshift.yaml
@@ -38,6 +38,18 @@ rules:
   - configmaps
   - secrets
   - serviceaccounts
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - rbac.authorization.k8s.io
+  resources:
   - roles
   - rolebindings
   verbs:
diff --git a/deploy/resources.go b/deploy/resources.go
index cc87284..1c85319 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -24,6 +24,153 @@ var Resources map[string]string
 func init() {
        Resources = make(map[string]string)
 
+       Resources["builder-role-binding.yaml"] =
+               `
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+subjects:
+- kind: ServiceAccount
+  name: camel-k-builder
+roleRef:
+  kind: Role
+  name: camel-k-builder
+  apiGroup: rbac.authorization.k8s.io
+
+`
+       Resources["builder-role-kubernetes.yaml"] =
+               `
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+rules:
+- apiGroups:
+  - camel.apache.org
+  resources:
+  - "*"
+  verbs:
+  - "*"
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  resources:
+  - events
+  verbs:
+  - get
+  - list
+  - watch
+
+`
+       Resources["builder-role-openshift.yaml"] =
+               `
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+rules:
+- apiGroups:
+  - camel.apache.org
+  resources:
+  - "*"
+  verbs:
+  - "*"
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  resources:
+  - events
+  verbs:
+  - get
+  - list
+  - watch
+- apiGroups:
+  - ""
+  - "build.openshift.io"
+  resources:
+  - buildconfigs
+  - buildconfigs/webhooks
+  - builds
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  - "image.openshift.io"
+  resources:
+  - imagestreamimages
+  - imagestreammappings
+  - imagestreams
+  - imagestreams/secrets
+  - imagestreamtags
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - ""
+  - build.openshift.io
+  attributeRestrictions: null
+  resources:
+  - buildconfigs/instantiate
+  - buildconfigs/instantiatebinary
+  - builds/clone
+  verbs:
+  - create
+
+`
+       Resources["builder-service-account.yaml"] =
+               `
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: camel-k-builder
+  labels:
+    app: "camel-k"
+
+`
        Resources["camel-catalog-2.23.0.yaml"] =
                `
 apiVersion: camel.apache.org/v1alpha1
@@ -10816,6 +10963,18 @@ rules:
   - configmaps
   - secrets
   - serviceaccounts
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - rbac.authorization.k8s.io
+  resources:
   - roles
   - rolebindings
   verbs:
@@ -10899,6 +11058,18 @@ rules:
   - configmaps
   - secrets
   - serviceaccounts
+  verbs:
+  - create
+  - delete
+  - deletecollection
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - rbac.authorization.k8s.io
+  resources:
   - roles
   - rolebindings
   verbs:
diff --git a/pkg/controller/build/schedule_pod.go 
b/pkg/controller/build/schedule_pod.go
index ee84c54..801d84c 100644
--- a/pkg/controller/build/schedule_pod.go
+++ b/pkg/controller/build/schedule_pod.go
@@ -131,14 +131,14 @@ func (action *schedulePodAction) Handle(ctx 
context.Context, build *v1alpha1.Bui
 func (action *schedulePodAction) ensureServiceAccount(ctx context.Context, 
buildPod *corev1.Pod) error {
        sa := corev1.ServiceAccount{}
        saKey := k8sclient.ObjectKey{
-               Name:      "camel-k-operator",
+               Name:      "camel-k-builder",
                Namespace: buildPod.Namespace,
        }
 
        err := action.client.Get(ctx, saKey, &sa)
        if err != nil && k8serrors.IsNotFound(err) {
                // Create a proper service account
-               return install.ServiceAccountRoles(ctx, action.client, 
buildPod.Namespace)
+               return install.BuilderServiceAccountRoles(ctx, action.client, 
buildPod.Namespace)
        }
        return err
 }
@@ -161,7 +161,7 @@ func newBuildPod(build *v1alpha1.Build, operatorImage 
string) *corev1.Pod {
                        },
                },
                Spec: corev1.PodSpec{
-                       ServiceAccountName: "camel-k-operator",
+                       ServiceAccountName: "camel-k-builder",
                        Containers: []corev1.Container{
                                {
                                        Name:            "builder",
diff --git a/pkg/install/serviceaccount.go b/pkg/install/builder.go
similarity index 55%
rename from pkg/install/serviceaccount.go
rename to pkg/install/builder.go
index 7a9cf9f..27a1488 100644
--- a/pkg/install/serviceaccount.go
+++ b/pkg/install/builder.go
@@ -20,48 +20,39 @@ package install
 import (
        "context"
        "github.com/apache/camel-k/pkg/client"
-       "github.com/apache/camel-k/pkg/util/knative"
        "github.com/apache/camel-k/pkg/util/openshift"
 )
 
-// ServiceAccountRoles installs the service account and related roles in the 
given namespace
-func ServiceAccountRoles(ctx context.Context, c client.Client, namespace 
string) error {
+// BuilderServiceAccountRoles installs the builder service account and related 
roles in the given namespace
+func BuilderServiceAccountRoles(ctx context.Context, c client.Client, 
namespace string) error {
        isOpenshift, err := openshift.IsOpenShift(c)
        if err != nil {
                return err
        }
        if isOpenshift {
-               if err := installServiceAccountRolesOpenshift(ctx, c, 
namespace); err != nil {
+               if err := installBuilderServiceAccountRolesOpenshift(ctx, c, 
namespace); err != nil {
                        return err
                }
        } else {
-               if err := installServiceAccountRolesKubernetes(ctx, c, 
namespace); err != nil {
+               if err := installBuilderServiceAccountRolesKubernetes(ctx, c, 
namespace); err != nil {
                        return err
                }
        }
-       // Install Knative resources if required
-       isKnative, err := knative.IsInstalled(ctx, c)
-       if err != nil {
-               return err
-       }
-       if isKnative {
-               return installKnative(ctx, c, namespace, nil)
-       }
        return nil
 }
 
-func installServiceAccountRolesOpenshift(ctx context.Context, c client.Client, 
namespace string) error {
+func installBuilderServiceAccountRolesOpenshift(ctx context.Context, c 
client.Client, namespace string) error {
        return ResourcesOrCollect(ctx, c, namespace, nil, 
IdentityResourceCustomizer,
-               "operator-service-account.yaml",
-               "operator-role-openshift.yaml",
-               "operator-role-binding.yaml",
+               "builder-service-account.yaml",
+               "builder-role-openshift.yaml",
+               "builder-role-binding.yaml",
        )
 }
 
-func installServiceAccountRolesKubernetes(ctx context.Context, c 
client.Client, namespace string) error {
+func installBuilderServiceAccountRolesKubernetes(ctx context.Context, c 
client.Client, namespace string) error {
        return ResourcesOrCollect(ctx, c, namespace, nil, 
IdentityResourceCustomizer,
-               "operator-service-account.yaml",
-               "operator-role-kubernetes.yaml",
-               "operator-role-binding.yaml",
+               "builder-service-account.yaml",
+               "builder-role-kubernetes.yaml",
+               "builder-role-binding.yaml",
        )
 }

Reply via email to