Merge pull request #8878 from BlaineEXE/initial-generate-rbac-from-helm

build: start tracking rbac generated from helm chart
This commit is contained in:
Blaine Gardner authored and GitHub committed 2021-09-30 13:49:21 -06:00
commit 7aa4bbfff7
7 files changed
+1409 -1

No files matched your search

+19
View File
@@ -54,6 +54,25 @@ jobs:
working-directory: /Users/runner/go/src/github.com/rook/rook
run: tests/scripts/validate_modified_files.sh crd
# needed for gen-rbac
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: "3.9"
- name: Install pip dependencies
run: |
python -m pip install --upgrade pip
pip install ruamel.yaml==0.17.16
- name: run gen-rbac
working-directory: /Users/runner/go/src/github.com/rook/rook
run: GOPATH=$(go env GOPATH) make gen-rbac
- name: validate gen-rbac
working-directory: /Users/runner/go/src/github.com/rook/rook
run: tests/scripts/validate_modified_files.sh gen-rbac
- name: setup tmate session for debugging
if: failure()
uses: mxschmitt/action-tmate@v3
+51
View File
@@ -0,0 +1,51 @@
name: Generate RBAC from Helm charts
on:
push:
tags:
- v*
branches:
- master
- release-*
pull_request:
branches:
- master
- release-*
defaults:
run:
# reference: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell
shell: bash --noprofile --norc -eo pipefail -x {0}
jobs:
gen-rbac:
runs-on: ubuntu-18.04
steps:
- uses: actions/setup-go@v2
with:
go-version: 1.16
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: copy working directory to GOPATH
run: sudo mkdir -p /home/runner/go/src/github.com && sudo cp -a /home/runner/work/rook /home/runner/go/src/github.com/
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: "3.9"
- name: Install pip dependencies
run: |
python -m pip install --upgrade pip
pip install ruamel.yaml==0.17.16
- name: run gen-rbac
working-directory: /home/runner/go/src/github.com/rook/rook
run: GOPATH=$(go env GOPATH) make gen-rbac
- name: validate gen-rbac
working-directory: /home/runner/go/src/github.com/rook/rook
run: tests/scripts/validate_modified_files.sh gen-rbac
+4
View File
@@ -13,6 +13,7 @@
# limitations under the License.
include build/makelib/common.mk
include build/makelib/helm.mk
.PHONY: all
all: build
@@ -177,6 +178,9 @@ crds: $(CONTROLLER_GEN) $(YQ)
@echo Updating CRD manifests
@build/crds/build-crds.sh $(CONTROLLER_GEN) $(YQ)
gen-rbac: $(HELM) ## generate RBAC from Helm charts
HELM=$(HELM) ./build/rbac/get-helm-rbac.sh
.PHONY: all build.common cross.build.parallel
.PHONY: build build.all install test check vet fmt codegen mod.check clean distclean prune
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -eEuox pipefail
: ${HELM:=helm}
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
pushd "$SCRIPT_DIR"
${HELM} dependency update ../../cluster/charts/rook-ceph
${HELM} template ../../cluster/charts/rook-ceph \
--namespace rook-ceph \
--set crds.enabled=false | ./keep-rbac-yaml.py > rbac.yaml
popd
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env python3
# Read any number of YAML documents from stdin, and output RBAC-related documents to stdout sorted
# by Kubernetes Kind then Name.
import sys
# ruamel.yaml is a small fork from the python standard yaml library that preserves comments
import ruamel.yaml
# All the Kubernetes Kinds that we want to keep as RBAC
rbac_kinds = [
"PodSecurityPolicy",
"ServiceAccount",
"ClusterRole",
"ClusterRoleBinding",
"Role",
"RoleBinding",
]
# Log to stderr
def log(*values):
print(*values, file=sys.stderr, flush=True)
# Return <Kind>/<name> for a Kubernetes resource from a yaml doc
def kind_and_name(doc):
return doc["kind"] + "/" + doc["metadata"]["name"]
# Set up and configure the yaml parser/dumper
yaml=ruamel.yaml.YAML()
# output lists in the form that is indented from the parent like below
# parent:
# - list
# - items
yaml.indent(sequence=4, offset=2)
all_docs = yaml.load_all(sys.stdin.read())
kept_docs = []
docs_processed = 0
for doc in all_docs:
docs_processed += 1
kind = doc["kind"]
if kind not in rbac_kinds:
# we don't want non-RBAC resources
log("discarding doc:", kind_and_name(doc))
continue
log("keeping doc:", kind_and_name(doc))
# helm adds '# Source: <file>' comments to the top of each yaml doc. Strip these.
if doc.ca is not None and doc.ca.comment is not None:
comments = doc.ca.comment[1]
for comment in comments:
if comment.value.startswith("# Source: ") and comment.value.endswith(".yaml\n"):
log(" dropping comment:", comment.value.strip())
comments.remove(comment)
# helm-managed resources have a "chart" label, but we remove those for rendered RBAC
if "labels" in doc["metadata"] and "chart" in doc["metadata"]["labels"]:
log(" dropping 'chart' label")
del doc["metadata"]["labels"]["chart"]
kept_docs.append(doc)
kept_docs.sort(key=kind_and_name)
# Log to stderr the overall list of docs kept and a summary
for doc in kept_docs:
log(kind_and_name(doc))
log("docs processed:", docs_processed)
log("docs kept :", len(kept_docs))
# Dump to stdout (this should be the only time this script writes to stdout)
yaml.dump_all(kept_docs, sys.stdout)
+1239
View File
File diff suppressed because it is too large. Load diff
+5 -1
View File
@@ -8,6 +8,7 @@ CODEGEN_ERR="found codegen files! please run 'make codegen' and update your PR"
MOD_ERR="changes found by mod.check. You may need to run make clean"
CRD_ERR="changes found by 'make crds'. please run 'make crds' locally and update your PR"
BUILD_ERR="changes found by make build', please commit your go.sum or other changed files"
HELM_ERR="changes found by 'make gen-rbac'. please run 'make gen-rbac' locally and update your PR"
#############
# FUNCTIONS #
@@ -40,7 +41,10 @@ case "$1" in
build)
validate "$BUILD_ERR"
;;
gen-rbac)
validate "$HELM_ERR"
;;
*)
echo $"Usage: $0 {codegen|modcheck|crd|build}"
echo $"Usage: $0 {codegen|modcheck|crd|build|gen-rbac}"
exit 1
esac