From a3aa1ad07fe7d565fccf9dfb89e069a22b856840 Mon Sep 17 00:00:00 2001 From: okozachenko Date: Mon, 13 Jul 2020 23:49:41 +0300 Subject: [PATCH] Add cronjob in heat deployment to clean service every 1 hr Change-Id: I9d6d25ac55b5dd9ab6f5a1934f86699273fb4c6d --- chart/templates/clusterrole.yaml | 12 ++++ openstack_operator/heat.py | 3 + openstack_operator/objects.py | 4 ++ .../heat/cronjob-service-clean.yml.j2 | 56 +++++++++++++++++++ .../templates/heat/daemonset.yml.j2 | 10 ++++ 5 files changed, 85 insertions(+) create mode 100644 openstack_operator/templates/heat/cronjob-service-clean.yml.j2 diff --git a/chart/templates/clusterrole.yaml b/chart/templates/clusterrole.yaml index 39821942..1cbeb5a9 100644 --- a/chart/templates/clusterrole.yaml +++ b/chart/templates/clusterrole.yaml @@ -72,6 +72,18 @@ rules: - patch - update - watch +- apiGroups: + - batch + resources: + - cronjobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch - apiGroups: - dns.openstack.org resources: diff --git a/openstack_operator/heat.py b/openstack_operator/heat.py index c7a8dc04..a254df0c 100644 --- a/openstack_operator/heat.py +++ b/openstack_operator/heat.py @@ -44,6 +44,9 @@ def create_or_resume(name, spec, **_): name=name, spec=spec, component='engine', config_hash=config_hash) + utils.create_or_update('heat/cronjob-service-clean.yml.j2', + name=name, spec=spec) + if "ingress" in spec: utils.create_or_update('heat/ingress.yml.j2', name=name, spec=spec) diff --git a/openstack_operator/objects.py b/openstack_operator/objects.py index 6fc156eb..e67a340b 100644 --- a/openstack_operator/objects.py +++ b/openstack_operator/objects.py @@ -23,6 +23,7 @@ from combinations of apiVersion and kind to the exact model. """ from pykube.objects import ConfigMap +from pykube.objects import CronJob from pykube.objects import DaemonSet from pykube.objects import Deployment from pykube.objects import HorizontalPodAutoscaler @@ -83,6 +84,9 @@ MAPPING = { "autoscaling/v1": { "HorizontalPodAutoscaler": HorizontalPodAutoscaler, }, + "batch/v1beta1": { + "CronJob": CronJob, + }, "extensions/v1beta1": { "Ingress": Ingress }, diff --git a/openstack_operator/templates/heat/cronjob-service-clean.yml.j2 b/openstack_operator/templates/heat/cronjob-service-clean.yml.j2 new file mode 100644 index 00000000..cec04f98 --- /dev/null +++ b/openstack_operator/templates/heat/cronjob-service-clean.yml.j2 @@ -0,0 +1,56 @@ +--- +# Copyright 2020 VEXXHOST, Inc. +# +# 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. + +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: heat-service-clean + namespace: openstack + labels: + {{ labels("heat", name) | indent(4) }} +spec: + schedule: "* */1 * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: service-clean + image: vexxhost/heat-engine:latest + imagePullPolicy: Always + command: + - heat-manage + - service + - clean + volumeMounts: + - mountPath: /etc/heat + name: config + restartPolicy: OnFailure + volumes: + - name: config + secret: + secretName: heat-config + {% if 'nodeSelector' in spec %} + nodeSelector: + {{ spec.nodeSelector | to_yaml | indent(8) }} + {% endif %} + {% if 'tolerations' in spec %} + tolerations: + {{ spec.tolerations | to_yaml | indent(8) }} + {% endif %} + {% if 'hostAliases' in spec %} + hostAliases: + {{ spec.hostAliases | to_yaml | indent(8) }} + {% endif %} diff --git a/openstack_operator/templates/heat/daemonset.yml.j2 b/openstack_operator/templates/heat/daemonset.yml.j2 index a995ffdb..be24de94 100644 --- a/openstack_operator/templates/heat/daemonset.yml.j2 +++ b/openstack_operator/templates/heat/daemonset.yml.j2 @@ -53,6 +53,16 @@ spec: volumeMounts: - mountPath: /etc/heat name: config + - name: service-clean + image: vexxhost/heat-{{ component }}:latest + imagePullPolicy: Always + command: + - heat-manage + - service + - clean + volumeMounts: + - mountPath: /etc/heat + name: config {% endif %} containers: - name: heat-{{ component }}