add deployment
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
2024-11-06 17:32:24 +01:00
parent 63a8b3cf2d
commit dccd123868
5 changed files with 157 additions and 0 deletions

40
.woodpecker.yml Normal file
View File

@ -0,0 +1,40 @@
steps:
build:
image: plugins/kaniko
settings:
repo: ${FORGE_NAME}/${CI_REPO}
registry:
from_secret: container_registry
tags: latest,${CI_COMMIT_SHA},${CI_COMMIT_TAG}
username:
from_secret: container_registry_username
password:
from_secret: container_registry_password
dockerfile: Dockerfile
when:
- event: [push, tag]
scan_image:
image: aquasec/trivy
commands:
- trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_SHA --quiet --exit-code 1
when:
- event: [push, tag]
deploy:
image: portainer/kubectl-shell:latest
secrets:
- source: kube_config
target: KUBE_CONFIG_CONTENT
- source: encryption_key
target: ENCRYPTION_KEY
- source: secrets_checksum
target: MD5_CHECKSUM
commands:
- export IMAGE_TAG=$CI_COMMIT_TAG
- printf "$KUBE_CONFIG_CONTENT" > /tmp/kubeconfig
- export KUBECONFIG=/tmp/kubeconfig
- ./deployment/deploy.sh
when:
- event: tag

25
Dockerfile Normal file
View File

@ -0,0 +1,25 @@
FROM python:3.13-alpine
WORKDIR /app
COPY src/requirements.txt .
COPY src/main.py .
COPY src/message_processor.py .
RUN pip install --no-cache-dir -r requirements.txt
ENV MQTT_BROKER=""
ENV MQTT_PORT=""
ENV MQTT_CLIENT_PREFIX=""
ENV MQTT_BOX_TOPIC_PREFIXES=""
ENV MQTT_CENTRAL_TOPICS=""
ENV MQTT_STATUS_TOPIC=""
ENV OFF_TEMPERATURE=""
ENV LOW_TEMPERATURE=""
ENV DEFAULT_HIGH_TEMPERATURE=""
ENV MAINTENANCE_TEMPERATURE=""
ENV BOXES=""
CMD ["python", "main.py"]

View File

@ -0,0 +1,66 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: heating-controller-config
data:
MQTT_BROKER: "emqx01-anonymous-cluster-internal.broker.svc.cluster.local"
MQTT_PORT: "1883"
MQTT_CLIENT_PREFIX: "HeatingController"
MQTT_BOX_TOPIC_PREFIXES: |
{
"high_temp": "heating/config/high_temp/",
"cmd": "heating/command/"
}
MQTT_CENTRAL_TOPICS: |
{
"general_off": "heating/system/general_off",
"maintenance_mode": "heating/system/maintenance_mode",
"status": "heating/system/status"
}
MQTT_STATUS_TOPIC: "heating/status"
OFF_TEMPERATURE: "5.0"
LOW_TEMPERATURE: "15.0"
DEFAULT_HIGH_TEMPERATURE: "21.0"
MAINTENANCE_TEMPERATURE: "30.0"
BOXES: |
{
"box1": {
"label": "living_room",
"windows": [
{ "topic": "window/living_room/street_side", "label": "street_side" },
{ "topic": "window/living_room/garden_side", "label": "garden_side" }
],
"output_topic": "output/living_room"
},
"box2": {
"label": "kitchen",
"windows": [
{ "topic": "window/kitchen/street_side", "label": "street_side" },
{ "topic": "window/kitchen/garden_side", "label": "garden_side" },
{ "topic": "window/kitchen/garden_door", "label": "garden_door" }
],
"output_topic": "output/kitchen"
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: heating-controller
spec:
replicas: 1
selector:
matchLabels:
app: heating-controller
template:
metadata:
labels:
app: heating-controller
spec:
containers:
- name: heating-controller
image: %IMAGE%
envFrom:
- configMapRef:
name: heating-controller-config

25
deployment/deploy.sh Normal file
View File

@ -0,0 +1,25 @@
#!/bin/bash
if [ "$IMAGE_TAG" == "" ]; then
echo "Make sure IMAGE_TAG is set"
exit 1
fi
IMAGE_NAME=$FORGE_NAME/$CI_REPO
NAMESPACE=homea
DEPLOYMENT_DIR=$PWD/deployment
pushd $DEPLOYMENT_DIR > /dev/null
kubectl create namespace $NAMESPACE \
--dry-run=client \
-o yaml | \
kubectl -f - apply
cat $DEPLOYMENT_DIR/deploy-yml.tmpl | \
sed -e 's,%IMAGE%,'$IMAGE_NAME':'$IMAGE_TAG','g | \
kubectl apply -f - -n $NAMESPACE
popd > /dev/null

View File

@ -86,6 +86,7 @@ def _calculate_output_temperature(local_context):
if local_context['mode'] == 'high':
local_context['output_temperature'] = local_context['high_temperature']
return
# if we come here, something serious happened
logger.error(f"Error in calculation of output_temperature: {local_context=}")
return