-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reconcile the pyrra generated prometheusrule crs with azure prometheusrulegroups resources #1110
base: main
Are you sure you want to change the base?
Changes from 30 commits
c87a612
63151d5
7728238
28396c7
10e8438
f3f6f2d
a1d5ee2
13fea12
fa10f01
afd7fd8
48db0e5
e0cf42a
50b824f
f138a09
04aac84
da40ae5
bd48b3b
0e3a647
1a2baa2
730858b
ff46f57
a1377b7
c0066c9
3227610
6a25df2
c325b96
257877f
fd2b33c
ad2cf3c
d164a3b
b83adad
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
{ | ||
"name": "Kubebuilder DevContainer", | ||
"image": "golang:1.22", | ||
"features": { | ||
"ghcr.io/devcontainers/features/docker-in-docker:2": {}, | ||
"ghcr.io/devcontainers/features/git:1": {} | ||
}, | ||
|
||
"runArgs": ["--network=host"], | ||
|
||
"customizations": { | ||
"vscode": { | ||
"settings": { | ||
"terminal.integrated.shell.linux": "/bin/bash" | ||
}, | ||
"extensions": [ | ||
"ms-kubernetes-tools.vscode-kubernetes-tools", | ||
"ms-azuretools.vscode-docker" | ||
] | ||
} | ||
}, | ||
|
||
"onCreateCommand": "bash .devcontainer/post-install.sh" | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#!/bin/bash | ||
set -x | ||
|
||
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64 | ||
chmod +x ./kind | ||
mv ./kind /usr/local/bin/kind | ||
|
||
curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/linux/amd64 | ||
chmod +x kubebuilder | ||
mv kubebuilder /usr/local/bin/ | ||
|
||
KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt) | ||
curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl" | ||
chmod +x kubectl | ||
mv kubectl /usr/local/bin/kubectl | ||
|
||
docker network create -d=bridge --subnet=172.19.0.0/24 kind | ||
|
||
kind version | ||
kubebuilder version | ||
docker --version | ||
go version | ||
kubectl version --client |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file | ||
# Ignore build and test binaries. | ||
bin/ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# The azure subscription where the resources are located. | ||
AZ_SUBSCRIPTION_ID= | ||
# The resource group name which contains the resources managed by this controller. | ||
AZ_RESOURCE_GROUP_NAME= | ||
# The location of the resource group which contains the resources managed by this controller. | ||
AZ_RESOURCE_GROUP_LOCATION= | ||
# TODO: remove me. The action group needs to be decided based on user config. TBD how (maybe an extra label on the CR) | ||
AZ_ACTION_GROUP_ID= | ||
# The azure monitor workspace that will be associated with the PrometheusRuleGroups | ||
AZ_AZURE_MONITOR_WORKSPACE= | ||
# # The 'clusterName' property must match the cluster label that is added to the metrics when scraped from a specific cluster. By default, this label is set to the last part (resource name) of the cluster ID. | ||
AZ_CLUSTER_NAME= | ||
# Path to node executable | ||
NODE_PATH= | ||
# Path to az-prom-rules-converter tool | ||
AZ_PROM_RULES_CONVERTER_PATH= |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
name: Lint | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
jobs: | ||
lint: | ||
name: Run on Ubuntu | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Clone the code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Go | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: '~1.22' | ||
|
||
- name: Run linter | ||
uses: golangci/golangci-lint-action@v6 | ||
with: | ||
version: v1.59 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
name: Test Chart | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
jobs: | ||
test-e2e: | ||
name: Run on Ubuntu | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Clone the code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Go | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version-file: go.mod | ||
|
||
- name: Install the latest version of kind | ||
run: | | ||
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64 | ||
chmod +x ./kind | ||
sudo mv ./kind /usr/local/bin/kind | ||
|
||
- name: Verify kind installation | ||
run: kind version | ||
|
||
- name: Create kind cluster | ||
run: kind create cluster | ||
|
||
- name: Prepare dis-promrulegroups-operator | ||
run: | | ||
go mod tidy | ||
make docker-build IMG=dis-promrulegroups-operator:v0.1.0 | ||
kind load docker-image dis-promrulegroups-operator:v0.1.0 | ||
|
||
- name: Install Helm | ||
run: | | ||
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash | ||
|
||
- name: Verify Helm installation | ||
run: helm version | ||
|
||
- name: Lint Helm Chart | ||
run: | | ||
helm lint ./dist/chart | ||
|
||
# TODO: Uncomment if cert-manager is enabled | ||
# - name: Install cert-manager via Helm | ||
# run: | | ||
# helm repo add jetstack https://charts.jetstack.io | ||
# helm repo update | ||
# helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true | ||
# | ||
# - name: Wait for cert-manager to be ready | ||
# run: | | ||
# kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager | ||
# kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager-cainjector | ||
# kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager-webhook | ||
|
||
# TODO: Uncomment if Prometheus is enabled | ||
# - name: Install Prometheus Operator CRDs | ||
# run: | | ||
# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts | ||
# helm repo update | ||
# helm install prometheus-crds prometheus-community/prometheus-operator-crds | ||
# | ||
# - name: Install Prometheus via Helm | ||
# run: | | ||
# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts | ||
# helm repo update | ||
# helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace | ||
# | ||
# - name: Wait for Prometheus to be ready | ||
# run: | | ||
# kubectl wait --namespace monitoring --for=condition=available --timeout=300s deployment/prometheus-server | ||
|
||
- name: Install Helm chart for project | ||
run: | | ||
helm install my-release ./dist/chart --create-namespace --namespace dis-promrulegroups-operator-system | ||
|
||
- name: Check Helm release status | ||
run: | | ||
helm status my-release --namespace dis-promrulegroups-operator-system | ||
|
||
# TODO: Uncomment if prometheus.enabled is set to true to confirm that the ServiceMonitor gets created | ||
# - name: Check Presence of ServiceMonitor | ||
# run: | | ||
# kubectl wait --namespace dis-promrulegroups-operator-system --for=jsonpath='{.kind}'=ServiceMonitor servicemonitor/dis-promrulegroups-operator-controller-manager-metrics-monitor |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. add this workflows to the repo workflows folder, if e2e tests are implemented, so they get triggered. Remember to add path limitations so it only run when changes to this operator or pipeline is pushed |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
name: E2E Tests | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
jobs: | ||
test-e2e: | ||
name: Run on Ubuntu | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Clone the code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Go | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: '~1.22' | ||
|
||
- name: Install the latest version of kind | ||
run: | | ||
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64 | ||
chmod +x ./kind | ||
sudo mv ./kind /usr/local/bin/kind | ||
|
||
- name: Verify kind installation | ||
run: kind version | ||
|
||
- name: Create kind cluster | ||
run: kind create cluster | ||
|
||
- name: Running Test e2e | ||
run: | | ||
go mod tidy | ||
make test-e2e |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. add this workflows to the repo workflows folder so they get triggered. Remember to add path limitations so it only run when changes to this operator or pipeline is pushed |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
name: Tests | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
jobs: | ||
test: | ||
name: Run on Ubuntu | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Clone the code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Go | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: '~1.22' | ||
|
||
- name: Running Tests | ||
run: | | ||
go mod tidy | ||
make test |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Binaries for programs and plugins | ||
*.exe | ||
*.exe~ | ||
*.dll | ||
*.so | ||
*.dylib | ||
bin/* | ||
Dockerfile.cross | ||
|
||
# Test binary, built with `go test -c` | ||
*.test | ||
|
||
# Output of the go coverage tool, specifically when used with LiteIDE | ||
*.out | ||
|
||
# Go workspace file | ||
go.work | ||
|
||
# Kubernetes Generated files - skip generated files, except for vendored files | ||
!vendor/**/zz_generated.* | ||
|
||
# editor and IDE paraphernalia | ||
.idea | ||
.vscode | ||
*.swp | ||
*.swo | ||
*~ | ||
|
||
# Ignore .env | ||
.env |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
run: | ||
timeout: 5m | ||
allow-parallel-runners: true | ||
|
||
issues: | ||
# don't skip warning about doc comments | ||
# don't exclude the default set of lint | ||
exclude-use-default: false | ||
# restore some of the defaults | ||
# (fill in the rest as needed) | ||
exclude-rules: | ||
- path: "api/*" | ||
linters: | ||
- lll | ||
- path: "internal/*" | ||
linters: | ||
- dupl | ||
- lll | ||
linters: | ||
disable-all: true | ||
enable: | ||
- dupl | ||
- errcheck | ||
- exportloopref | ||
- ginkgolinter | ||
- goconst | ||
- gocyclo | ||
- gofmt | ||
- goimports | ||
- gosimple | ||
- govet | ||
- ineffassign | ||
- lll | ||
- misspell | ||
- nakedret | ||
- prealloc | ||
- revive | ||
- staticcheck | ||
- typecheck | ||
- unconvert | ||
- unparam | ||
- unused | ||
|
||
linters-settings: | ||
revive: | ||
rules: | ||
- name: comment-spacings |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Build the manager binary | ||
FROM golang:1.23 AS builder1 | ||
ARG TARGETOS | ||
ARG TARGETARCH | ||
|
||
WORKDIR /workspace | ||
# Copy the Go Modules manifests | ||
COPY go.mod go.mod | ||
COPY go.sum go.sum | ||
# cache deps before building and copying source so that we don't need to re-download as much | ||
# and so that source changes don't invalidate our downloaded layer | ||
RUN go mod download | ||
|
||
# Copy the go source | ||
COPY cmd/main.go cmd/main.go | ||
COPY internal/ internal/ | ||
|
||
# Build | ||
# the GOARCH has not a default value to allow the binary be built according to the host where the command | ||
# was called. For example, if we call make docker-build in a local env which has the Apple Silicon M1 SO | ||
# the docker BUILDPLATFORM arg will be linux/arm64 when for Apple x86 it will be linux/amd64. Therefore, | ||
# by leaving it empty we can ensure that the container and binary shipped on it will have the same platform. | ||
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager cmd/main.go | ||
|
||
|
||
FROM node:20 AS builder2 | ||
WORKDIR /tool | ||
RUN npm i --omit=dev https://gitpkg.now.sh/Azure/prometheus-collector/tools/az-prom-rules-converter?main | ||
|
||
|
||
# Use distroless as minimal base image to package the manager binary | ||
# Refer to https://github.com/GoogleContainerTools/distroless for more details | ||
FROM gcr.io/distroless/nodejs22-debian12:nonroot | ||
WORKDIR / | ||
COPY --from=builder1 /workspace/manager . | ||
COPY --from=builder2 /tool /tool/. | ||
ENV PATH="$PATH:nodejs/bin/" | ||
ENV ENVIRONMENT="prod" | ||
USER 65532:65532 | ||
|
||
ENTRYPOINT ["/manager"] | ||
tjololo marked this conversation as resolved.
Show resolved
Hide resolved
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add this workflows to the repo workflows folder so they get triggered. Remember to add path limitations so it only run when changes to this operator or pipeline is pushed