Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
iplakas
First Controller
Commits
c92142d1
Commit
c92142d1
authored
Feb 09, 2021
by
Ioannis Plakas
Browse files
Create Universe
parents
Pipeline
#314
failed with stages
in 8 minutes and 10 seconds
Changes
46
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
684 additions
and
0 deletions
+684
-0
.gitignore
.gitignore
+24
-0
Dockerfile
Dockerfile
+27
-0
Makefile
Makefile
+80
-0
PROJECT
PROJECT
+7
-0
api/v1alpha1/groupversion_info.go
api/v1alpha1/groupversion_info.go
+36
-0
api/v1alpha1/pgouv_types.go
api/v1alpha1/pgouv_types.go
+70
-0
api/v1alpha1/zz_generated.deepcopy.go
api/v1alpha1/zz_generated.deepcopy.go
+114
-0
config/certmanager/certificate.yaml
config/certmanager/certificate.yaml
+26
-0
config/certmanager/kustomization.yaml
config/certmanager/kustomization.yaml
+5
-0
config/certmanager/kustomizeconfig.yaml
config/certmanager/kustomizeconfig.yaml
+16
-0
config/crd/bases/ubi.ubitech.eu_pgouvs.yaml
config/crd/bases/ubi.ubitech.eu_pgouvs.yaml
+81
-0
config/crd/kustomization.yaml
config/crd/kustomization.yaml
+21
-0
config/crd/kustomizeconfig.yaml
config/crd/kustomizeconfig.yaml
+17
-0
config/crd/patches/cainjection_in_pgouvs.yaml
config/crd/patches/cainjection_in_pgouvs.yaml
+8
-0
config/crd/patches/webhook_in_pgouvs.yaml
config/crd/patches/webhook_in_pgouvs.yaml
+17
-0
config/default/kustomization.yaml
config/default/kustomization.yaml
+70
-0
config/default/manager_auth_proxy_patch.yaml
config/default/manager_auth_proxy_patch.yaml
+25
-0
config/default/manager_webhook_patch.yaml
config/default/manager_webhook_patch.yaml
+23
-0
config/default/webhookcainjection_patch.yaml
config/default/webhookcainjection_patch.yaml
+15
-0
config/manager/kustomization.yaml
config/manager/kustomization.yaml
+2
-0
No files found.
.gitignore
0 → 100644
View file @
c92142d1
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
bin
# Test binary, build with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Kubernetes Generated files - skip generated files, except for vendored files
!vendor/**/zz_generated.*
# editor and IDE paraphernalia
.idea
*.swp
*.swo
*~
Dockerfile
0 → 100644
View file @
c92142d1
# Build the manager binary
FROM
golang:1.13 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
main.go main.go
COPY
api/ api/
COPY
controllers/ controllers/
# Build
RUN
CGO_ENABLED
=
0
GOOS
=
linux
GOARCH
=
amd64
GO111MODULE
=
on go build
-a
-o
manager main.go
# 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:nonroot
WORKDIR
/
COPY
--from=builder /workspace/manager .
USER
nonroot:nonroot
ENTRYPOINT
["/manager"]
Makefile
0 → 100644
View file @
c92142d1
# Image URL to use all building/pushing image targets
IMG
?=
controller:latest
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS
?=
"crd:trivialVersions=true"
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq
(,$(shell go env GOBIN))
GOBIN
=
$(
shell
go
env
GOPATH
)
/bin
else
GOBIN
=
$(
shell
go
env
GOBIN
)
endif
all
:
manager
# Run tests
test
:
generate fmt vet manifests
go
test
./...
-coverprofile
cover.out
# Build manager binary
manager
:
generate fmt vet
go build
-o
bin/manager main.go
# Run against the configured Kubernetes cluster in ~/.kube/config
run
:
generate fmt vet manifests
go run ./main.go
# Install CRDs into a cluster
install
:
manifests
kustomize build config/crd | kubectl apply
-f
-
# Uninstall CRDs from a cluster
uninstall
:
manifests
kustomize build config/crd | kubectl delete
-f
-
# Deploy controller in the configured Kubernetes cluster in ~/.kube/config
deploy
:
manifests
cd
config/manager
&&
kustomize edit
set
image
controller
=
${IMG}
kustomize build config/default | kubectl apply
-f
-
# Generate manifests e.g. CRD, RBAC etc.
manifests
:
controller-gen
$(CONTROLLER_GEN)
$(CRD_OPTIONS)
rbac:roleName
=
manager-role webhook
paths
=
"./..."
output:crd:artifacts:config
=
config/crd/bases
# Run go fmt against code
fmt
:
go
fmt
./...
# Run go vet against code
vet
:
go vet ./...
# Generate code
generate
:
controller-gen
$(CONTROLLER_GEN)
object:headerFile
=
"hack/boilerplate.go.txt"
paths
=
"./..."
# Build the docker image
docker-build
:
test
docker build
.
-t
${IMG}
# Push the docker image
docker-push
:
docker push
${IMG}
# find or download controller-gen
# download controller-gen if necessary
controller-gen
:
ifeq
(, $(shell which controller-gen))
@
{
\
set
-e
;
\
CONTROLLER_GEN_TMP_DIR
=
$$
(
mktemp
-d
)
;
\
cd
$$
CONTROLLER_GEN_TMP_DIR
;
\
go mod init tmp
;
\
go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.5
;
\
rm
-rf
$$
CONTROLLER_GEN_TMP_DIR
;
\
}
CONTROLLER_GEN
=
$(GOBIN)
/controller-gen
else
CONTROLLER_GEN
=
$(
shell
which controller-gen
)
endif
PROJECT
0 → 100644
View file @
c92142d1
domain: ubitech.eu
repo: pgouv-controller
resources:
- group: ubi
kind: Pgouv
version: v1alpha1
version: "2"
api/v1alpha1/groupversion_info.go
0 → 100644
View file @
c92142d1
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Package v1alpha1 contains API Schema definitions for the ubi v1alpha1 API group
// +kubebuilder:object:generate=true
// +groupName=ubi.ubitech.eu
package
v1alpha1
import
(
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/scheme"
)
var
(
// GroupVersion is group version used to register these objects
GroupVersion
=
schema
.
GroupVersion
{
Group
:
"ubi.ubitech.eu"
,
Version
:
"v1alpha1"
}
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder
=
&
scheme
.
Builder
{
GroupVersion
:
GroupVersion
}
// AddToScheme adds the types in this group-version to the given scheme.
AddToScheme
=
SchemeBuilder
.
AddToScheme
)
api/v1alpha1/pgouv_types.go
0 → 100644
View file @
c92142d1
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
v1alpha1
import
(
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
)
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
// PgouvSpec defines the desired state of Pgouv
type
PgouvSpec
struct
{
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Foo is an example field of Pgouv. Edit Pgouv_types.go to remove/update
Command
string
`json:"command"`
Replicas
int32
`json:"replicas"`
}
// PgouvStatus defines the observed state of Pgouv
type
PgouvStatus
struct
{
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
AliveRelplicas
int32
`json:"alivereplicas,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:JSONPath=".spec.command", name="Command", type="string"
// +kubebuilder:printcolumn:JSONPath=".spec.replicas", name="Desired Replicas", type="string"
// +kubebuilder:printcolumn:JSONPath=".status.allivereplicas", name="AliveReplicas", type="integer"
// Pgouv is the Schema for the pgouvs API
type
Pgouv
struct
{
metav1
.
TypeMeta
`json:",inline"`
metav1
.
ObjectMeta
`json:"metadata,omitempty"`
Spec
PgouvSpec
`json:"spec,omitempty"`
Status
PgouvStatus
`json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// PgouvList contains a list of Pgouv
type
PgouvList
struct
{
metav1
.
TypeMeta
`json:",inline"`
metav1
.
ListMeta
`json:"metadata,omitempty"`
Items
[]
Pgouv
`json:"items"`
}
func
init
()
{
SchemeBuilder
.
Register
(
&
Pgouv
{},
&
PgouvList
{})
}
api/v1alpha1/zz_generated.deepcopy.go
0 → 100644
View file @
c92142d1
// +build !ignore_autogenerated
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Code generated by controller-gen. DO NOT EDIT.
package
v1alpha1
import
(
runtime
"k8s.io/apimachinery/pkg/runtime"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func
(
in
*
Pgouv
)
DeepCopyInto
(
out
*
Pgouv
)
{
*
out
=
*
in
out
.
TypeMeta
=
in
.
TypeMeta
in
.
ObjectMeta
.
DeepCopyInto
(
&
out
.
ObjectMeta
)
out
.
Spec
=
in
.
Spec
out
.
Status
=
in
.
Status
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Pgouv.
func
(
in
*
Pgouv
)
DeepCopy
()
*
Pgouv
{
if
in
==
nil
{
return
nil
}
out
:=
new
(
Pgouv
)
in
.
DeepCopyInto
(
out
)
return
out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func
(
in
*
Pgouv
)
DeepCopyObject
()
runtime
.
Object
{
if
c
:=
in
.
DeepCopy
();
c
!=
nil
{
return
c
}
return
nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func
(
in
*
PgouvList
)
DeepCopyInto
(
out
*
PgouvList
)
{
*
out
=
*
in
out
.
TypeMeta
=
in
.
TypeMeta
in
.
ListMeta
.
DeepCopyInto
(
&
out
.
ListMeta
)
if
in
.
Items
!=
nil
{
in
,
out
:=
&
in
.
Items
,
&
out
.
Items
*
out
=
make
([]
Pgouv
,
len
(
*
in
))
for
i
:=
range
*
in
{
(
*
in
)[
i
]
.
DeepCopyInto
(
&
(
*
out
)[
i
])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PgouvList.
func
(
in
*
PgouvList
)
DeepCopy
()
*
PgouvList
{
if
in
==
nil
{
return
nil
}
out
:=
new
(
PgouvList
)
in
.
DeepCopyInto
(
out
)
return
out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func
(
in
*
PgouvList
)
DeepCopyObject
()
runtime
.
Object
{
if
c
:=
in
.
DeepCopy
();
c
!=
nil
{
return
c
}
return
nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func
(
in
*
PgouvSpec
)
DeepCopyInto
(
out
*
PgouvSpec
)
{
*
out
=
*
in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PgouvSpec.
func
(
in
*
PgouvSpec
)
DeepCopy
()
*
PgouvSpec
{
if
in
==
nil
{
return
nil
}
out
:=
new
(
PgouvSpec
)
in
.
DeepCopyInto
(
out
)
return
out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func
(
in
*
PgouvStatus
)
DeepCopyInto
(
out
*
PgouvStatus
)
{
*
out
=
*
in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PgouvStatus.
func
(
in
*
PgouvStatus
)
DeepCopy
()
*
PgouvStatus
{
if
in
==
nil
{
return
nil
}
out
:=
new
(
PgouvStatus
)
in
.
DeepCopyInto
(
out
)
return
out
}
config/certmanager/certificate.yaml
0 → 100644
View file @
c92142d1
# The following manifests contain a self-signed issuer CR and a certificate CR.
# More document can be found at https://docs.cert-manager.io
# WARNING: Targets CertManager 0.11 check https://docs.cert-manager.io/en/latest/tasks/upgrading/index.html for
# breaking changes
apiVersion
:
cert-manager.io/v1alpha2
kind
:
Issuer
metadata
:
name
:
selfsigned-issuer
namespace
:
system
spec
:
selfSigned
:
{}
---
apiVersion
:
cert-manager.io/v1alpha2
kind
:
Certificate
metadata
:
name
:
serving-cert
# this name should match the one appeared in kustomizeconfig.yaml
namespace
:
system
spec
:
# $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomize
dnsNames
:
-
$(SERVICE_NAME).$(SERVICE_NAMESPACE).svc
-
$(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local
issuerRef
:
kind
:
Issuer
name
:
selfsigned-issuer
secretName
:
webhook-server-cert
# this secret will not be prefixed, since it's not managed by kustomize
config/certmanager/kustomization.yaml
0 → 100644
View file @
c92142d1
resources
:
-
certificate.yaml
configurations
:
-
kustomizeconfig.yaml
config/certmanager/kustomizeconfig.yaml
0 → 100644
View file @
c92142d1
# This configuration is for teaching kustomize how to update name ref and var substitution
nameReference
:
-
kind
:
Issuer
group
:
cert-manager.io
fieldSpecs
:
-
kind
:
Certificate
group
:
cert-manager.io
path
:
spec/issuerRef/name
varReference
:
-
kind
:
Certificate
group
:
cert-manager.io
path
:
spec/commonName
-
kind
:
Certificate
group
:
cert-manager.io
path
:
spec/dnsNames
config/crd/bases/ubi.ubitech.eu_pgouvs.yaml
0 → 100644
View file @
c92142d1
---
apiVersion
:
apiextensions.k8s.io/v1beta1
kind
:
CustomResourceDefinition
metadata
:
annotations
:
controller-gen.kubebuilder.io/version
:
v0.2.5
creationTimestamp
:
null
name
:
pgouvs.ubi.ubitech.eu
spec
:
additionalPrinterColumns
:
-
JSONPath
:
.spec.command
name
:
Command
type
:
string
-
JSONPath
:
.spec.replicas
name
:
Desired Replicas
type
:
string
-
JSONPath
:
.status.allivereplicas
name
:
AliveReplicas
type
:
integer
group
:
ubi.ubitech.eu
names
:
kind
:
Pgouv
listKind
:
PgouvList
plural
:
pgouvs
singular
:
pgouv
scope
:
Namespaced
subresources
:
status
:
{}
validation
:
openAPIV3Schema
:
description
:
Pgouv is the Schema for the pgouvs API
properties
:
apiVersion
:
description
:
'
APIVersion
defines
the
versioned
schema
of
this
representation
of
an
object.
Servers
should
convert
recognized
schemas
to
the
latest
internal
value,
and
may
reject
unrecognized
values.
More
info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type
:
string
kind
:
description
:
'
Kind
is
a
string
value
representing
the
REST
resource
this
object
represents.
Servers
may
infer
this
from
the
endpoint
the
client
submits
requests
to.
Cannot
be
updated.
In
CamelCase.
More
info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type
:
string
metadata
:
type
:
object
spec
:
description
:
PgouvSpec defines the desired state of Pgouv
properties
:
command
:
description
:
Foo is an example field of Pgouv. Edit Pgouv_types.go to
remove/update
type
:
string
replicas
:
format
:
int32
type
:
integer
required
:
-
command
-
replicas
type
:
object
status
:
description
:
PgouvStatus defines the observed state of Pgouv
properties
:
alivereplicas
:
description
:
'
INSERT
ADDITIONAL
STATUS
FIELD
-
define
observed
state
of
cluster
Important:
Run
"make"
to
regenerate
code
after
modifying
this
file'
format
:
int32
type
:
integer
type
:
object
type
:
object
version
:
v1alpha1
versions
:
-
name
:
v1alpha1
served
:
true
storage
:
true
status
:
acceptedNames
:
kind
:
"
"
plural
:
"
"
conditions
:
[]
storedVersions
:
[]
config/crd/kustomization.yaml
0 → 100644
View file @
c92142d1
# This kustomization.yaml is not intended to be run by itself,
# since it depends on service name and namespace that are out of this kustomize package.
# It should be run by config/default
resources
:
-
bases/ubi.ubitech.eu_pgouvs.yaml
# +kubebuilder:scaffold:crdkustomizeresource
patchesStrategicMerge
:
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
# patches here are for enabling the conversion webhook for each CRD
#- patches/webhook_in_pgouvs.yaml
# +kubebuilder:scaffold:crdkustomizewebhookpatch
# [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix.
# patches here are for enabling the CA injection for each CRD
#- patches/cainjection_in_pgouvs.yaml
# +kubebuilder:scaffold:crdkustomizecainjectionpatch
# the following config is for teaching kustomize how to do kustomization for CRDs.
configurations
:
-
kustomizeconfig.yaml
config/crd/kustomizeconfig.yaml
0 → 100644
View file @
c92142d1
# This file is for teaching kustomize how to substitute name and namespace reference in CRD
nameReference
:
-
kind
:
Service
version
:
v1
fieldSpecs
:
-
kind
:
CustomResourceDefinition
group
:
apiextensions.k8s.io
path
:
spec/conversion/webhookClientConfig/service/name
namespace
:
-
kind
:
CustomResourceDefinition
group
:
apiextensions.k8s.io
path
:
spec/conversion/webhookClientConfig/service/namespace
create
:
false
varReference
:
-
path
:
metadata/annotations
config/crd/patches/cainjection_in_pgouvs.yaml
0 → 100644
View file @
c92142d1
# The following patch adds a directive for certmanager to inject CA into the CRD
# CRD conversion requires k8s 1.13 or later.
apiVersion
:
apiextensions.k8s.io/v1beta1
kind
:
CustomResourceDefinition
metadata
:
annotations
:
cert-manager.io/inject-ca-from
:
$(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
name
:
pgouvs.ubi.ubitech.eu
config/crd/patches/webhook_in_pgouvs.yaml
0 → 100644
View file @
c92142d1
# The following patch enables conversion webhook for CRD
# CRD conversion requires k8s 1.13 or later.
apiVersion
:
apiextensions.k8s.io/v1beta1
kind
:
CustomResourceDefinition
metadata
:
name
:
pgouvs.ubi.ubitech.eu
spec
:
conversion
:
strategy
:
Webhook
webhookClientConfig
:
# this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank,
# but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager)
caBundle
:
Cg==
service
:
namespace
:
system
name
:
webhook-service
path
:
/convert
config/default/kustomization.yaml
0 → 100644
View file @
c92142d1
# Adds namespace to all resources.
namespace
:
pgouv-controller-system
# Value of this field is prepended to the
# names of all resources, e.g. a deployment named
# "wordpress" becomes "alices-wordpress".
# Note that it should also match with the prefix (text before '-') of the namespace
# field above.
namePrefix
:
pgouv-controller-
# Labels to add to all resources and selectors.
#commonLabels:
# someName: someValue
bases
:
-
../crd
-
../rbac
-
../manager
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in
# crd/kustomization.yaml
#- ../webhook
# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required.
#- ../certmanager
# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'.
#- ../prometheus
patchesStrategicMerge
:
# Protect the /metrics endpoint by putting it behind auth.
# If you want your controller-manager to expose the /metrics
# endpoint w/o any authn/z, please comment the following line.
-
manager_auth_proxy_patch.yaml
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in
# crd/kustomization.yaml
#- manager_webhook_patch.yaml
# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'.
# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks.
# 'CERTMANAGER' needs to be enabled to use ca injection
#- webhookcainjection_patch.yaml
# the following config is for teaching kustomize how to do var substitution
vars
:
# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix.
#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR
# objref:
# kind: Certificate