Skip to content

Commit

Permalink
Add README and example
Browse files Browse the repository at this point in the history
  • Loading branch information
marcosnils committed May 8, 2020
1 parent be08838 commit 5b178d3
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 0 deletions.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
vendor
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
# vendor/
22 changes: 22 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Build the manager binary
FROM golang:1.14 as builder

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 . .
# Build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a

# 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/static:latest
WORKDIR /
COPY --from=builder /workspace/flux-gitlab-controller .
ENTRYPOINT ["/flux-gitlab-controller"]
34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# sample-controller

This repository implements a simple controller for watching Secrets created by gitlab and calling the API to update the deploy keys the specified repo

**Note:** go-get or vendor this package as `github.com/topfreegames/flux-gitlab-controller`.

## Details

The sample controller uses [client-go library](https://github.com/kubernetes/client-go/tree/master/tools/cache) extensively.

## Running

**Prerequisite**: Since the controller uses `apps/v1` deployments, the Kubernetes cluster version should be greater than 1.9.

```sh
# assumes you have a working kubeconfig, not required if operating in-cluster
go build
./flux-gitlab-controller -gitlab-token $TOKEN -kubeconfig=$HOME/.kube/config

# create a flux secret with the corresponding `fluxcd.io/git-url` and `fluxcd.io/sync-gc-mark` marks
kubectl create -f artifacts/examples/flux_secret.yaml

# Check that the fluxcd.io/deployKeyId has been created in the secret and that the repo contains
# the associated deployment key
kubectl get secret -o yaml flux-git-deploy
```

## What happens if someone removes the deployment key from the application repo?

In tha case, flux won't re-create the key as we're not constantly checking for deleted keys to avoid
putting too much pressure to the gitlab api.

In order for flux to re-create the key, the fluxcd.io/deployKeyId annotation needs to be removed
from the secret so flux realizes that the secret is not synched and will recreate the appropriate key
22 changes: 22 additions & 0 deletions artifacts/examples/flux_secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# This is a sample flux scret with a fake SSH private key file
apiVersion: v1
items:
- apiVersion: v1
data:
identity: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMk1YNzJvcHR0SFJoSzBTazRoaEVvZlZGT0syTFA5UFVoYUlrUWxwY1ptNFZsbXlvCnhzazJkcEpDeWllb2tzOXAwZ1FtK1I5ek1IWVlWYmdndWIvRVgybENJNDY4eE1uQWZLV0VlVEg0MGJERFhPL2kKSEozTGNoODlIMmVnNHJGV3VkU2ZWQm5pTC9tQzEwbjA2d2JyRmRCVHZobGVDSVFQbnFESjE2TXBwci9ZajBHUwpZemdSajNhNno4SWIxRXJ6QjF1REdCU1p5QVgwWEdMTjVpUmJqSjdXU09mcE9BN28xL09MdlhFb0dlSWQ5eTg0CldVd3hmZGp6ejdMbm1XRjZPKzY2TjdKTlRPdWpxK2hZaHEwNWZ5MFFsbDltSVBSNkNiQlFicUpSbE9USjNra04KK2NPcXg1amtwa1luQVBGdklLdlE1eDc3bzJtYnZpU0xCUzhKQndJREFRQUJBb0lCQVFDd2tNcnNuaFp2aHQvaQp3MTNkLzFCZjd3eTc5cmRXZk84OURlMmswajh5KzNXLythK2JneWRHZXluRnlYbklZd05abWlJNGhzSm5kYm1xCmtIaXZjNkM2Nmx5QjQvQ2tCWVV3d2d6ZVByTGg4YTJmVkpFREtCQWZXNHlJdVByVnl3Yk9CSDdtbk5LY3F3cEUKMjZ1UGlDb1JzWWVVYnNzbCtwTlNiTHNiVm41Rm43dzlqOVRXSmY2dE80VnUrSzQ4ek91WklGRWdvclplSFRxZwpoa2NaaXZKdEM5eWtwQ2xjRUdnTnZnSFhnOG03WllDdUtpWkJEN3BlSXBRT0tSdU5kSTdLY0ZneFJwY1lQSGJDClgzRnpiaTd5ZWVIdG51cXBVTGZZS2hmMDJuZDJweXJVUVgvVlg5NC9scHN5N1hsWGwyOCtKMHRHeVlETXMza1oKc1NDWXFGZ1JBb0dCQU92TGxONUc0ck44SDI5VFA5VUU3U1ltTkgxVW9MNHEwR1RLeWFoK3hWbFgvYno1L25jOApuZHNWZ0RtZE4xczZHMVBmYlJNQURDUjQyNUUyM2JZVEpjR1ovV1YwMUNLV2UyRE1ocTBRczVrYkdvVC9HQjByCksvUCtEYXBlUUMrdFlJQmdHN3R3ZnRoMFB3NkxzdkhxcDZzcGtXRGk0eHZkcXNBTzZYbFplazhaQW9HQkFPdFoKSXpMdHVzSmhzVUpmUk5VNTNUT0toeUhYdGQ3d09GemRabFVnZGlOMFRQUnF6Z0VRNTArSmNGRGQ3VU9wdnpQRgowdzIyMzBraWFXaGVGR2c1OG9TdEErNCt1NG8rZllDUXdBSFJYNkprY1VtWEEvT3F6aWNzSXQzR3E5SmxTVDZuCkRLRXRTeE8yaEhPN1IrMkJoRDdHbnU1MXZxUU02YUhQSEk2c0NyMGZBb0dCQUpMNlJHSkZSenhmNjJ4R05TekEKTkY2cVE5KzNwN2JDRTBJd2tZRGcvSHpUZDB1YmZQMndJQ21XL21WclZUMGRQRG1NdEgyNmN0Y3RLcGdhM2hxSApWdXFWNVRpZm1UZXlHMWZjUlRxTmhaV3pLbFdxZU1wOXhaa0NURnhkQVo5MmNBZTFZTFAyekdwNkUzQXFyakZUCmRvNGZqQW9iZ3pzMGNpSGphYThGa2xMSkFvR0FWYjU3RVlJRmFlNTN5MnUwUTA4NnBSMlNVQ1VzRU5aS1lxTVQKTm02R1BES1NHdmFTcVZiRVAza2VYNGdMZW54c3Vlc1lFc1lPb2JHVTM3NXZCdTRkeW5MU25NbGtRR0MyRHRJdAo4anVhOFNwUkQvT2lML09KK2tHZFRsbWtuaG5penAzRC96RG1TbjlUMEdwcU1VRGZzcE5nc2haWjU2RUF1Y0FnCmNtYUIzeGNDZ1lBalpGV1ExWlVNa1o3TXR1L1ZkVVFqY1d1cUNqNFVSR1p0QXlHd1ltcnFLNWJwcDZwQTB3OFQKVmRQWG1IL3RKR0xmOXVzWitXejhOUHpaV29YOS93bWRscXpYRHExa0pqTmVaNmU5eS9qaVFnSm1CSTZZV3YxTwovbmFBOHpGUERWRVZzYkRnODRrM3Nab2E0cWl2c1J4NWgxaGxMbUI0V1lZNmdTd3FaRXlselE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
kind: Secret
metadata:
annotations:
fluxcd.io/sync-checksum: 15ad2c0ec7fa7c7fcf66acbf9c460687131f34cd
fluxcd.io/git-url: git@gitlab.com:inkscape/inkscape.git
creationTimestamp: "2020-04-09T16:23:42Z"
labels:
fluxcd.io/sync-gc-mark: sha256.BClwuSLr2VHIW93jsMsq4HVvPXxLVJQk8T88w1cj1EQ
name: flux-git-deploy
resourceVersion: "37767663"
uid: 7a656b5d-7a7e-11ea-9402-128f408d69d1
type: Opaque
kind: List
metadata:
resourceVersion: ""
selfLink: ""
22 changes: 22 additions & 0 deletions artifacts/examples/secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# This is a sample flux scret with a fake SSH private key file
apiVersion: v1
items:
- apiVersion: v1
data:
identity: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMk1YNzJvcHR0SFJoSzBTazRoaEVvZlZGT0syTFA5UFVoYUlrUWxwY1ptNFZsbXlvCnhzazJkcEpDeWllb2tzOXAwZ1FtK1I5ek1IWVlWYmdndWIvRVgybENJNDY4eE1uQWZLV0VlVEg0MGJERFhPL2kKSEozTGNoODlIMmVnNHJGV3VkU2ZWQm5pTC9tQzEwbjA2d2JyRmRCVHZobGVDSVFQbnFESjE2TXBwci9ZajBHUwpZemdSajNhNno4SWIxRXJ6QjF1REdCU1p5QVgwWEdMTjVpUmJqSjdXU09mcE9BN28xL09MdlhFb0dlSWQ5eTg0CldVd3hmZGp6ejdMbm1XRjZPKzY2TjdKTlRPdWpxK2hZaHEwNWZ5MFFsbDltSVBSNkNiQlFicUpSbE9USjNra04KK2NPcXg1amtwa1luQVBGdklLdlE1eDc3bzJtYnZpU0xCUzhKQndJREFRQUJBb0lCQVFDd2tNcnNuaFp2aHQvaQp3MTNkLzFCZjd3eTc5cmRXZk84OURlMmswajh5KzNXLythK2JneWRHZXluRnlYbklZd05abWlJNGhzSm5kYm1xCmtIaXZjNkM2Nmx5QjQvQ2tCWVV3d2d6ZVByTGg4YTJmVkpFREtCQWZXNHlJdVByVnl3Yk9CSDdtbk5LY3F3cEUKMjZ1UGlDb1JzWWVVYnNzbCtwTlNiTHNiVm41Rm43dzlqOVRXSmY2dE80VnUrSzQ4ek91WklGRWdvclplSFRxZwpoa2NaaXZKdEM5eWtwQ2xjRUdnTnZnSFhnOG03WllDdUtpWkJEN3BlSXBRT0tSdU5kSTdLY0ZneFJwY1lQSGJDClgzRnpiaTd5ZWVIdG51cXBVTGZZS2hmMDJuZDJweXJVUVgvVlg5NC9scHN5N1hsWGwyOCtKMHRHeVlETXMza1oKc1NDWXFGZ1JBb0dCQU92TGxONUc0ck44SDI5VFA5VUU3U1ltTkgxVW9MNHEwR1RLeWFoK3hWbFgvYno1L25jOApuZHNWZ0RtZE4xczZHMVBmYlJNQURDUjQyNUUyM2JZVEpjR1ovV1YwMUNLV2UyRE1ocTBRczVrYkdvVC9HQjByCksvUCtEYXBlUUMrdFlJQmdHN3R3ZnRoMFB3NkxzdkhxcDZzcGtXRGk0eHZkcXNBTzZYbFplazhaQW9HQkFPdFoKSXpMdHVzSmhzVUpmUk5VNTNUT0toeUhYdGQ3d09GemRabFVnZGlOMFRQUnF6Z0VRNTArSmNGRGQ3VU9wdnpQRgowdzIyMzBraWFXaGVGR2c1OG9TdEErNCt1NG8rZllDUXdBSFJYNkprY1VtWEEvT3F6aWNzSXQzR3E5SmxTVDZuCkRLRXRTeE8yaEhPN1IrMkJoRDdHbnU1MXZxUU02YUhQSEk2c0NyMGZBb0dCQUpMNlJHSkZSenhmNjJ4R05TekEKTkY2cVE5KzNwN2JDRTBJd2tZRGcvSHpUZDB1YmZQMndJQ21XL21WclZUMGRQRG1NdEgyNmN0Y3RLcGdhM2hxSApWdXFWNVRpZm1UZXlHMWZjUlRxTmhaV3pLbFdxZU1wOXhaa0NURnhkQVo5MmNBZTFZTFAyekdwNkUzQXFyakZUCmRvNGZqQW9iZ3pzMGNpSGphYThGa2xMSkFvR0FWYjU3RVlJRmFlNTN5MnUwUTA4NnBSMlNVQ1VzRU5aS1lxTVQKTm02R1BES1NHdmFTcVZiRVAza2VYNGdMZW54c3Vlc1lFc1lPb2JHVTM3NXZCdTRkeW5MU25NbGtRR0MyRHRJdAo4anVhOFNwUkQvT2lML09KK2tHZFRsbWtuaG5penAzRC96RG1TbjlUMEdwcU1VRGZzcE5nc2haWjU2RUF1Y0FnCmNtYUIzeGNDZ1lBalpGV1ExWlVNa1o3TXR1L1ZkVVFqY1d1cUNqNFVSR1p0QXlHd1ltcnFLNWJwcDZwQTB3OFQKVmRQWG1IL3RKR0xmOXVzWitXejhOUHpaV29YOS93bWRscXpYRHExa0pqTmVaNmU5eS9qaVFnSm1CSTZZV3YxTwovbmFBOHpGUERWRVZzYkRnODRrM3Nab2E0cWl2c1J4NWgxaGxMbUI0V1lZNmdTd3FaRXlselE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
kind: Secret
metadata:
annotations:
fluxcd.io/sync-checksum: 15ad2c0ec7fa7c7fcf66acbf9c460687131f34cd
fluxcd.io/git-url: git@gitlab.com:inkscape/inkscape.git
creationTimestamp: "2020-04-09T16:23:42Z"
labels:
fluxcd.io/sync-gc-mark: sha256.BClwuSLr2VHIW93jsMsq4HVvPXxLVJQk8T88w1cj1EQ
name: flux-git-deploy
resourceVersion: "37767663"
uid: 7a656b5d-7a7e-11ea-9402-128f408d69d1
type: Opaque
kind: List
metadata:
resourceVersion: ""
selfLink: ""

0 comments on commit 5b178d3

Please sign in to comment.