Skip to content

Commit 5144520

Browse files
authored
Merge pull request #174 from SAP/gardener
integrate gardener service
2 parents 4aee6b3 + 9bb54d2 commit 5144520

11 files changed

Lines changed: 73 additions & 41 deletions

File tree

ib.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
{'name': 'docker-registry-nginx', 'depends_on': ['images-base']},
3737
{'name': 'db', 'depends_on': ['images-base']},
3838
{'name': 'postgres'},
39+
{'name': 'service-gardener'},
3940
{'name': 'service-gcp'},
4041
{'name': 'service-namespace'},
4142
{'name': 'metrics'},

infrabox/generator/deployments.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,30 @@
526526
}
527527
]
528528
},
529+
{
530+
"type": "docker",
531+
"build_context": "../..",
532+
"name": "service-gardener",
533+
"docker_file": "src/services/gardener/Dockerfile",
534+
"resources": {
535+
"limits": {
536+
"cpu": 1,
537+
"memory": 2048
538+
}
539+
},
540+
"deployments": [
541+
{
542+
"type": "docker-registry",
543+
"host": "quay.io/infrabox",
544+
"repository": "service-gcp",
545+
"username": "infrabox+infrabox_ci",
546+
"password": {
547+
"$secret": "QUAY_PASSWORD"
548+
}
549+
}
550+
]
551+
},
552+
529553
{
530554
"type": "docker",
531555
"build_context": "../..",

src/api/handlers/project.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from werkzeug.datastructures import FileStorage
1515

16-
from pyinfraboxutils import get_logger
16+
from pyinfraboxutils import get_logger, get_root_url
1717

1818
from pyinfraboxutils.ibflask import OK
1919
from pyinfraboxutils.ibrestplus import api, response_model
@@ -388,7 +388,8 @@ def post(self, project_id):
388388
SELECT name FROM project WHERE id = %s
389389
''', [project_id])[0]
390390

391-
url = '%s/dashboard/#/project/%s/build/%s/1' % (os.environ['INFRABOX_ROOT_URL'],
391+
root_url = get_root_url('global')
392+
url = '%s/dashboard/#/project/%s/build/%s/1' % (root_url,
392393
project_name,
393394
build_number)
394395

src/scheduler/kubernetes/scheduler.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,16 @@ def _sync_services(self, pi):
226226
s['apiVersion'],
227227
pi['metadata']['namespace'],
228228
s['kind'].lower() + 's')
229-
self._create(url, service)
229+
try:
230+
self._create(url, service)
231+
except APIException as ae:
232+
if ae.result.status_code == 404:
233+
pi['status']['state'] = 'error'
234+
pi['status']['message'] = ae.result.text
235+
ready = False
236+
return
237+
else:
238+
raise ae
230239

231240
url = '%s/apis/%s/namespaces/%s/%s/%s' % (self.args.api_server,
232241
s['apiVersion'],

src/services/gardener/README.md

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ The InfraBox Garden Service can be used to dynamically provision a Kubernetes Cl
2727
"maxNodes": 1,
2828
"minNodes": 1,
2929
"zone": "eu-central-1a",
30-
"clusterVersion": "1.10",
30+
"clusterVersion": "1.10"
3131
}
3232
}]
3333
}]
@@ -79,31 +79,22 @@ kubectl get pods
7979

8080
## Install
8181
To install the service in your Kubernetes cluster you have to first create a AWS Service Account and configure gardener to use it (secretBindingRef). Next, create a kubeconfig which this service will use to communicate with Gardener. Create a secret containing the kubeconfig:
82+
8283
```bash
83-
kubectl -n infrabox-system create secret generic infrabox-service-garden-sa --from-file ./garden_kubeconfig
84+
kubectl -n infrabox-system create secret generic infrabox-service-gardener-sa --from-file ./garden_kubeconfig
8485
```
8586

86-
The names of the secret and the secretBindingRef can be chosen arbitrarily. The service will read the names from the environment variables mentioned below. The name of the kubeconfig entry within the secret (`garden_kubeconfig`) is mandatory.
87+
The names of the secret and the secretBindingRef can be chosen arbitrarily. The service will read the names from the environment variables mentioned below. The name of the kubeconfig entry within the secret (`garden_kubeconfig`) is mandatory.
88+
89+
Now use helm to install the Gardener Service. Edit values.yaml for specify the required values.
8790

88-
Now use helm to install the GCP Service.
91+
Parameter | Description | Default | Required
92+
--- | --- | --- | ---
93+
`gardener.project` | Name of the Gardener Project | `nil` | yes
94+
`gardener.namespace` | Name of the Gardener Namespace | `nil` | yes
95+
`gardener.secret_binding_ref` | Name of the Gardener Secret binding ref| `nil` | yes
8996

9097
```bash
9198
cd infrabox-service-gardener
9299
helm install --namespace infrabox-system -n infrabox-service-gardener .
93-
```
94-
95-
### Env variables
96-
The garden-operator depends on several environment variables:
97-
98-
#### mandatory:
99-
* `CRENDENTIALS_SECRET`: Name of the secret containing the kubeconfig for Gardener. Within the secret, the config must be stored under the name `garden_kubecfg`.
100-
* `GARDEN_NAMESPACE` : The namespace within Gardener to create new shoot clusters in.
101-
* `GARDENER_PROJECTNAME`: Name of the gardener project which will contain the generated clusters.
102-
* `SECRET_BINDING_REF`: secretBindingRef as configured in Gardener.
103-
104-
#### optional
105-
* `LOGLVL`: the logging level to use. Valid values are: `debug`, `info`, `warn`, `error`. default: `warn`.
106-
* `AWS_MAINTENANCE_AUTOUPDATE`: boolean. Enables autoupdate of kubernetes. default: `true`.
107-
* `AWS_MAINTENANCE_AUTOUPDATE_TWBEGIN`: Begin of the maintenance window. default: `220000+0100`. If used, must be set in conjunction with `AWS_MAINTENANCE_AUTOUPDATE_TWBEND`.
108-
* `AWS_MAINTENANCE_AUTOUPDATE_TWBEND`: End of the maintenance window. default: `230000+0100`. If used, must be set in conjunction with `AWS_MAINTENANCE_AUTOUPDATE_TWBEGIN`.
109-
100+
```

src/services/gardener/infrabox-service-garden/templates/_helpers.tpl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{{/*
33
Expand the name of the chart.
44
*/}}
5-
{{- define "infrabox-service-gcp.name" -}}
5+
{{- define "infrabox-service-gardener.name" -}}
66
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
77
{{- end -}}
88

@@ -11,7 +11,7 @@ Create a default fully qualified app name.
1111
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
1212
If release name contains chart name it will be used as a full name.
1313
*/}}
14-
{{- define "infrabox-service-gcp.fullname" -}}
14+
{{- define "infrabox-service-gardener.fullname" -}}
1515
{{- if .Values.fullnameOverride -}}
1616
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
1717
{{- else -}}
@@ -27,6 +27,6 @@ If release name contains chart name it will be used as a full name.
2727
{{/*
2828
Create chart name and version as used by the chart label.
2929
*/}}
30-
{{- define "infrabox-service-gcp.chart" -}}
30+
{{- define "infrabox-service-gardener.chart" -}}
3131
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
3232
{{- end -}}

src/services/gardener/infrabox-service-garden/templates/deployment.yaml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
apiVersion: extensions/v1beta1
22
kind: Deployment
33
metadata:
4-
name: {{ template "infrabox-service-gcp.fullname" . }}
4+
name: {{ template "infrabox-service-gardener.fullname" . }}
55
labels:
6-
app: {{ template "infrabox-service-gcp.name" . }}
7-
chart: {{ template "infrabox-service-gcp.chart" . }}
6+
app: {{ template "infrabox-service-gardener.name" . }}
7+
chart: {{ template "infrabox-service-gardener.chart" . }}
88
release: {{ .Release.Name }}
99
heritage: {{ .Release.Service }}
1010
spec:
@@ -34,6 +34,14 @@ spec:
3434
env:
3535
- name: WATCH_NAMESPACE
3636
value: infrabox-worker
37+
- name: CREDENTIALS_SECRET
38+
value: {{ .Values.gardener.credential_secret }}
39+
- name: GARDENER_NAMESPACE
40+
value: {{ .Values.gardener.namespace }}
41+
- name: GARDENER_PROJECTNAME
42+
value: {{ .Values.gardener.project }}
43+
- name: SECRET_BINDING_REF
44+
value: {{ .Values.gardener.secret_binding_ref }}
3745
volumes:
3846
- name: service-account
3947
secret:

src/services/gardener/infrabox-service-garden/values.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@ replicaCount: 1
33
image:
44
repository: quay.io/infrabox/service-gardener
55
tag: latest
6+
7+
gardener:
8+
credential_secret: infrabox-service-gardener-sa
9+
namespace: <REQUIRED>
10+
project: <REQUIRED>
11+
secret_binding_ref: <REQUIRED>

src/services/gardener/pkg/stub/handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (h *Handler) sync(shootCluster *v1alpha1.ShootCluster, log *logrus.Entry) e
127127
return nil
128128
}
129129

130-
const ENVGardenNamespace = "GARDEN_NAMESPACE"
130+
const ENVGardenNamespace = "GARDENER_NAMESPACE"
131131

132132
func (h *Handler) ensureThatGardenerFieldsAreSet(shootCluster *v1alpha1.ShootCluster, log *logrus.Entry) error {
133133
if len(shootCluster.Status.ClusterName) == 0 {

src/services/gardener/pkg/stub/shootOperations/common/constants.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package common
22

33
const (
44
EnvCredentialSecretName = "CREDENTIALS_SECRET" // env variable for name of input secret
5-
KeyGardenKubectlInSecret = "garden_kubecfg"
5+
KeyGardenKubectlInSecret = "gardener.conf"
66

77
// output secret
88
LabelForTargetSecret = "service.infrabox.net/secret-name"

0 commit comments

Comments
 (0)