initial commit

This commit is contained in:
allard
2025-11-23 18:58:51 +01:00
commit 376a944abc
1553 changed files with 314731 additions and 0 deletions

6
dev/rabbitmq/README.md Normal file
View File

@@ -0,0 +1,6 @@
#aanmaken berichten
Let op , de service in de YAML-file is bewust een nodeport.
Kijk even op welke poort interne poort 5672 wordt geforward en gebruk die in
het GO-programmaatje.

View File

@@ -0,0 +1,19 @@
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: dev-rabbitmq
title: rabbitmq (dev)
description: rabbitmq instance running in Kubernetes
annotations:
backstage.io/kubernetes-label-selector: "app=rabbitmq"
links:
- url: https://github.com/AllardKrings/kubernetes/dev/rabbitmq
title: rabbitmq-configuration
docs:
- url: ./README.md
spec:
type: service
lifecycle: production
owner: group:default/allarddcs
subcomponentOf: component:default/DEV-cluster

55
dev/rabbitmq/consumer.go Executable file
View File

@@ -0,0 +1,55 @@
package main
import (
"log"
"github.com/streadway/amqp"
)
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
failOnError(err, "Failed to connect to RabbitMQ")
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
q, err := ch.QueueDeclare(
"Dial-DCS-queue", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
failOnError(err, "Failed to declare a queue")
msgs, err := ch.Consume(
q.Name, // queue
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
failOnError(err, "Failed to register a consumer")
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
}
}()
log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
<-forever
}

8
dev/rabbitmq/go.mod Executable file
View File

@@ -0,0 +1,8 @@
module rabbitmq
go 1.17
require (
github.com/rabbitmq/amqp091-go v1.10.0 // indirect
github.com/streadway/amqp v1.0.0 // indirect
)

21
dev/rabbitmq/go.sum Executable file
View File

@@ -0,0 +1,21 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rabbitmq/amqp091-go v1.8.1 h1:RejT1SBUim5doqcL6s7iN6SBmsQqyTgXb1xMlH0h1hA=
github.com/rabbitmq/amqp091-go v1.8.1/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc=
github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw=
github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o=
github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo=
github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

6
dev/rabbitmq/mqsend-py.sh Executable file
View File

@@ -0,0 +1,6 @@
while true; do
python3 sendMessage.py
sleep 10
done

6
dev/rabbitmq/mqsend.sh Executable file
View File

@@ -0,0 +1,6 @@
while true; do
go run sendMessage.go
sleep 10
done

135
dev/rabbitmq/rabbitmq.yaml Executable file
View File

@@ -0,0 +1,135 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
namespace: rabbitmq
labels:
app: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:3-management-alpine
volumeMounts:
- mountPath: /var/lib/rabbitmq
name: rabbitmq
subPath: rabbitmq/data
- mountPath: /var/log/rabbitmq
name: rabbitmq
subPath: rabbitmq/log
volumes:
- name: rabbitmq
persistentVolumeClaim:
claimName: rabbitmq-pvc
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
ports:
- name: port1
targetPort: 5672
port: 5672
- name: port2
targetPort: 15672
port: 15672
- name: port3
targetPort: 55670
port: 55670
- name: port4
targetPort: 55674
port: 55674
selector:
app: rabbitmq
type: NodePort
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv
spec:
storageClassName: ""
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4.1
nfs:
server: 192.168.2.110
path: /mnt/nfs_share/rabbitmq
readOnly: false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc
namespace: rabbitmq
spec:
storageClassName: ""
volumeName: rabbitmq-pv
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: rabbitmq-http
namespace: rabbitmq
spec:
entryPoints:
- web
routes:
- match: Host(`rabbitmq-prod.allarddcs.nl`)
kind: Rule
services:
- name: rabbitmq
port: 15672
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: rabbitmq-tls
namespace: rabbitmq
spec:
entryPoints:
- websecure
routes:
- match: Host(`rabbitmq-prod.allarddcs.nl`)
kind: Rule
services:
- name: rabbitmq
port: 15672
- match: Host(`rabbitmqa-prod.allarddcs.nl`)
kind: Rule
services:
- name: rabbitmq
port: 5672
tls:
certResolver: letsencrypt
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-to-https
spec:
redirectScheme:
scheme: https
permanent: true

View File

@@ -0,0 +1,31 @@
# example_consumer.py
import pika, os, time
def alldcs_process_function(msg):
# print(" ALLDCS processing")
# print(" [x] Received " + str(msg))
print(str(msg))
time.sleep(1) # delays for 5 seconds
# print(" ALLDCS processing finished");
return;
# Access the CLODUAMQP_URL environment variable and parse it (fallback to localhost)
url = os.environ.get('CLOUDAMQP_URL', 'amqp://guest:guest@localhost:32189/%2f')
params = pika.URLParameters(url)
connection = pika.BlockingConnection(params)
channel = connection.channel() # start a channel
channel.queue_declare(queue='ALLDCS') # Declare a queue
# create a function which is called on incoming messages
def callback(ch, method, properties, body):
alldcs_process_function(body)
# set up subscription on the queue
channel.basic_consume('ALLDCS',
callback,
auto_ack=True)
# start consuming (blocks)
channel.start_consuming()
connection.close()

View File

@@ -0,0 +1,6 @@
./rabbitmqadmin --host=rabbitmq-riscv.allarddcs.nl \
--port=443 \
--ssl \
--username=guest \
--password=guest \
declare queue name=testqueue durable=true

150
dev/rabbitmq/riscv/rabbitmq.yaml Executable file
View File

@@ -0,0 +1,150 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
namespace: rabbitmq
labels:
app: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: docker.io/riscv64/rabbitmq:3-management
volumeMounts:
- mountPath: /var/lib/rabbitmq
name: rabbitmq
subPath: rabbitmq/data
- mountPath: /var/log/rabbitmq
name: rabbitmq
subPath: rabbitmq/log
volumes:
- name: rabbitmq
persistentVolumeClaim:
claimName: rabbitmq-pvc
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
ports:
- name: port1
targetPort: 5672
port: 5672
- name: port2
targetPort: 15672
port: 15672
- name: port3
targetPort: 55670
port: 55670
- name: port4
targetPort: 55674
port: 55674
selector:
app: rabbitmq
type: NodePort
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv
spec:
storageClassName: ""
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4.1
nfs:
server: 192.168.2.110
path: /mnt/nfs_share/rabbitmq/riscv
readOnly: false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc
namespace: rabbitmq
spec:
storageClassName: ""
volumeName: rabbitmq-pv
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: rabbitmq-http
namespace: rabbitmq
spec:
entryPoints:
- web
routes:
- match: Host(`rabbitmq-riscv.allarddcs.nl`)
kind: Rule
middlewares:
- name: redirect-to-https
namespace: rabbitmq
services:
- name: rabbitmq
port: 15672
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: rabbitmq-tls
namespace: rabbitmq
spec:
entryPoints:
- websecure
routes:
- match: Host(`rabbitmq-riscv.allarddcs.nl`)
kind: Rule
services:
- name: rabbitmq
port: 15672
tls:
certResolver: letsencrypt
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-to-https
namespace: rabbitmq
spec:
redirectScheme:
scheme: https
permanent: true
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-amqp
namespace: rabbitmq
spec:
type: NodePort
ports:
- port: 5672
targetPort: 5672
protocol: TCP
nodePort: 31541 # You can specify or let k8s pick one in 30000-32767 range
name: amqp
selector:
app.kubernetes.io/name: rabbitmq

1190
dev/rabbitmq/riscv/rabbitmqadmin Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
./rabbitmqadmin \
--host=rabbitmq-riscv.allarddcs.nl \
--port=443 \
--ssl \
--username=guest \
--password=guest \
get queue=testqueue count=1 \
--arguments='{"requeue":false}'

View File

@@ -0,0 +1,6 @@
./rabbitmqadmin --host=rabbitmq-riscv.allarddcs.nl \
--port=443 \
--ssl \
--username=guest \
--password=guest \
publish routing_key=testqueue payload="Hello from CLI"

53
dev/rabbitmq/sendMessage.go Executable file
View File

@@ -0,0 +1,53 @@
package main
import (
"log"
// "github.com/streadway/amqp"
"github.com/rabbitmq/amqp091-go"
)
// Here we set the way error messages are displayed in the terminal.
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
func main() {
// Here we connect to RabbitMQ or send a message if there are any errors connecting.
conn, err := amqp091.Dial("amqp://guest:guest@localhost:32189/")
failOnError(err, "Failed to connect to RabbitMQ")
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
// We create a Queue to send the message to.
q, err := ch.QueueDeclare(
"ALL-DCS-queue", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
failOnError(err, "Failed to declare a queue")
// We set the payload for the message.
body := "Hallo Diederick, let's go hack!"
err = ch.Publish(
"", // exchange
q.Name, // routing key
false, // mandatory
false, // immediate
amqp091.Publishing{
DeliveryMode: amqp091.Persistent,
ContentType: "text/plain",
Body: []byte(body),
})
// If there is an error publishing the message, a log will be displayed in the terminal.
failOnError(err, "Failed to publish a message")
log.Printf(" [x] Congrats, sending message: %s", body)
}

View File

@@ -0,0 +1,17 @@
# example_publisher.py
import pika, os, logging
logging.basicConfig()
# Parse CLODUAMQP_URL (fallback to localhost)
url = os.environ.get('CLOUDAMQP_URL', 'amqp://guest:guest@localhost:32189/%2f')
params = pika.URLParameters(url)
params.socket_timeout = 5
connection = pika.BlockingConnection(params) # Connect to CloudAMQP
channel = connection.channel() # start a channel
channel.queue_declare(queue='ALLDCS') # Declare a queue
# send a message
channel.basic_publish(exchange='', routing_key='ALLDCS', body='Hello Diederick, lets go hack!!!')
print ("[x] Message sent to consumer")
connection.close()