Skip to content

Commit a85c38b

Browse files
authored
v1.4.0 Release (#97)
1 parent a5b92c5 commit a85c38b

23 files changed

+425
-44
lines changed

.github/workflows/build-test-dev.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
- main
77

88
env:
9-
VERSION: 1.3.0
9+
VERSION: 1.4.0
1010
IMAGE_NAME: pubsubplus-eventbroker-operator
1111
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
1212
GCLOUD_PROJECT_ID_DEV: ${{ secrets.GCLOUD_PROJECT_ID }}
@@ -252,6 +252,11 @@ jobs:
252252
uses: ./.github/workflows/test-broker-chaos-situation.yml
253253
secrets: inherit
254254

255+
int-nodeport:
256+
needs: build
257+
uses: ./.github/workflows/test-nodeport.yml
258+
secrets: inherit
259+
255260
taints-and-tolerations:
256261
if: ${{ false }} # disable for now
257262
needs: build

.github/workflows/prep-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
release_tag:
55
description: 'Release tag'
66
required: true
7-
default: '1.3.0'
7+
default: '1.4.0'
88
prep_internal_release:
99
# Need to distinguish between internal and external releases
1010
# Internal release: Will use default internal location for created images (ghcr.io) and will tag and push operator candidate there
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
name: Integration Test for NodePort Service Type
2+
3+
on: workflow_call
4+
5+
jobs:
6+
test:
7+
name: Test
8+
runs-on: ubuntu-latest
9+
10+
permissions:
11+
contents: 'read'
12+
id-token: 'write'
13+
packages: 'read'
14+
15+
steps:
16+
- name: Set env and tools
17+
run: |
18+
echo "TESTNAMESPACE=op-test-nodeport-$(date +%s)" >> $GITHUB_ENV
19+
20+
- name: Check out code
21+
uses: actions/checkout@v4
22+
with:
23+
ref: ${{ github.head_ref }}
24+
fetch-depth: 0
25+
26+
- id: 'auth'
27+
name: 'Authenticate to Google Cloud'
28+
uses: 'google-github-actions/[email protected]'
29+
with:
30+
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
31+
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
32+
access_token_lifetime: 600s
33+
34+
- name: Use the GKE Autopilot test cluster
35+
uses: 'google-github-actions/[email protected]'
36+
with:
37+
cluster_name: 'dev-integrationtesting'
38+
location: 'us-central1'
39+
40+
- name: Login to Github Packages
41+
uses: docker/login-action@v2
42+
with:
43+
registry: ghcr.io
44+
username: ${{ github.actor }}
45+
password: ${{ secrets.GITHUB_TOKEN }}
46+
47+
- name: Deploy Operator
48+
run: |
49+
sleep 20;
50+
for i in {1..3}; do
51+
kubectl cluster-info
52+
kubectl get pods -n kube-system
53+
echo "current-context:" $(kubectl config current-context)
54+
echo "environment-kubeconfig:" ${KUBECONFIG}
55+
kubectl get ns pubsubplus-operator-system || kubectl create ns pubsubplus-operator-system
56+
if kubectl get deployment pubsubplus-eventbroker-operator -n pubsubplus-operator-system; then
57+
echo "pubsubplus-eventbroker-operator is already deployed"
58+
break
59+
else
60+
kubectl apply -f <(kubectl create secret generic regcred --from-file=.dockerconfigjson=${HOME}/.docker/config.json --type=kubernetes.io/dockerconfigjson -n pubsubplus-operator-system --dry-run=client -o yaml)
61+
make deploy | grep 'created \| configured'
62+
kubectl rollout status deployment pubsubplus-eventbroker-operator -n pubsubplus-operator-system --timeout=240s
63+
if [ $? -eq 0 ]; then
64+
break
65+
else
66+
echo "Rollout status check failed, retrying in 20 seconds..."
67+
sleep 20
68+
fi
69+
fi
70+
done
71+
72+
- name: Testing NodePort with Fixed Port Assignment
73+
run: |
74+
kubectl create ns $TESTNAMESPACE && kubectl config set-context --current --namespace=$TESTNAMESPACE
75+
kubectl apply -f ci/manifests/eventbroker-nonha-nodeport.yaml | grep "test-nonha-nodeport created"
76+
sleep 25 ; kubectl get all
77+
for i in {1..3}; do
78+
if kubectl wait pods --selector app.kubernetes.io/instance=test-nonha-nodeport --for condition=Ready --timeout=120s; then
79+
echo "Pods are ready."
80+
break
81+
else
82+
echo "Waiting for pods failed, retrying in 10 seconds..."
83+
kubectl describe pods --selector app.kubernetes.io/instance=test-nonha-nodeport
84+
sleep 10
85+
fi
86+
done
87+
88+
# Verify service type is NodePort
89+
kubectl get service test-nonha-nodeport-pubsubplus -o jsonpath='{.spec.type}' | grep "NodePort"
90+
91+
# Verify nodePort values are set correctly
92+
SEMP_NODEPORT=$(kubectl get service test-nonha-nodeport-pubsubplus -o jsonpath='{.spec.ports[?(@.name=="tcp-semp")].nodePort}')
93+
SMF_NODEPORT=$(kubectl get service test-nonha-nodeport-pubsubplus -o jsonpath='{.spec.ports[?(@.name=="tcp-smf")].nodePort}')
94+
WEB_NODEPORT=$(kubectl get service test-nonha-nodeport-pubsubplus -o jsonpath='{.spec.ports[?(@.name=="tcp-web")].nodePort}')
95+
96+
echo "SEMP NodePort: $SEMP_NODEPORT, Expected: 30080"
97+
echo "SMF NodePort: $SMF_NODEPORT, Expected: 30555"
98+
echo "WEB NodePort: $WEB_NODEPORT, Expected: 30008"
99+
100+
[ "$SEMP_NODEPORT" = "30080" ] && echo "SEMP NodePort test passed" || echo "SEMP NodePort test failed"
101+
[ "$SMF_NODEPORT" = "30555" ] && echo "SMF NodePort test passed" || echo "SMF NodePort test failed"
102+
[ "$WEB_NODEPORT" = "30008" ] && echo "WEB NodePort test passed" || echo "WEB NodePort test failed"
103+
104+
# Test connectivity through NodePort
105+
NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="ExternalIP")].address}')
106+
echo "Using node IP: $NODE_IP"
107+
108+
# Test SMF connectivity directly through NodePort
109+
echo "Testing direct NodePort connection to $NODE_IP:$SMF_NODEPORT"
110+
curl -O https://sftp.solace.com/download/SDKPERF_C_LINUX64
111+
tar -xvf SDKPERF_C_LINUX64
112+
pubSubTools/sdkperf_c -cip=tcp://$NODE_IP:$SMF_NODEPORT -mn=1000 -mr=0 -ptl=t1 -stl=t1 | grep "Total Messages"
113+
114+
kubectl delete eventbroker test-nonha-nodeport | grep deleted
115+
116+
- name: Delete broker deployment
117+
run: |
118+
kubectl delete ns $TESTNAMESPACE --ignore-not-found

.github/workflows/vulncheck_periodic.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
- cron: '0 */ * * *'
55

66
env:
7-
VERSION: 1.3.0
7+
VERSION: 1.4.0
88
IMAGE_NAME: pubsubplus-eventbroker-operator
99
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
1010
GCLOUD_PROJECT_ID_DEV: ${{ secrets.GCLOUD_PROJECT_ID }}
@@ -65,7 +65,7 @@ jobs:
6565
secrets: |
6666
secret/data/development/gcp-gcr GCP_SERVICE_ACCOUNT | GCP_DEV_SERVICE_ACCOUNT
6767
env:
68-
VERSION: 1.3.0
68+
VERSION: 1.4.0
6969
IMAGE_NAME: pubsubplus-eventbroker-operator
7070
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
7171
GCLOUD_PROJECT_ID_DEV: ${{ secrets.GCLOUD_PROJECT_ID }}
@@ -85,7 +85,7 @@ jobs:
8585
gcr.io/${{ env.GCLOUD_PROJECT_ID_DEV }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }}
8686
push: true
8787
env:
88-
VERSION: 1.3.0
88+
VERSION: 1.4.0
8989
IMAGE_NAME: pubsubplus-eventbroker-operator
9090
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
9191
GCLOUD_PROJECT_ID_DEV: ${{ secrets.GCLOUD_PROJECT_ID }}

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o manager main.go
1919

2020
# Use distroless as minimal base image to package the manager binary
2121
# Refer to https://github.com/GoogleContainerTools/distroless for more details
22-
FROM registry.access.redhat.com/ubi9/ubi-minimal:9.5-1745855087
22+
FROM registry.access.redhat.com/ubi9/ubi-minimal:9.6-1754000177
2323

2424
LABEL name="solace/pubsubplus-eventbroker-operator"
2525
LABEL maintainer="Solace Corporation"
2626
LABEL vendor="Solace Corporation"
27-
LABEL version="1.3.0"
28-
LABEL release="1.3.0"
27+
LABEL version="1.4.0"
28+
LABEL release="1.4.0"
2929
LABEL summary="Solace PubSub+ Event Broker Kubernetes Operator"
3030
LABEL description="The Solace PubSub+ Event Broker Kubernetes Operator deploys and manages the lifecycle of PubSub+ Event Brokers"
3131

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# To re-generate a bundle for another specific version without changing the standard setup, you can:
44
# - use the VERSION as arg of the bundle target (e.g make bundle VERSION=0.0.2)
55
# - use environment variables to overwrite this value (e.g export VERSION=0.0.2)
6-
VERSION ?= 1.3.0
6+
VERSION ?= 1.4.0
77

88
# API_VERSION defines the API version for the PubSubPlusEventBroker CRD
99
API_VERSION ?= v1beta1

api/v1beta1/eventbroker_types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@ type BrokerPort struct {
160160
//+kubebuilder:validation:Type:=number
161161
// Port number to expose on the service
162162
ServicePort int32 `json:"servicePort"`
163+
//+optional
164+
//+kubebuilder:validation:Minimum=30000
165+
//+kubebuilder:validation:Maximum=32767
166+
//+kubebuilder:validation:Type:=number
167+
// NodePort specifies a fixed node port when service type is NodePort
168+
NodePort int32 `json:"nodePort,omitempty"`
163169
}
164170

165171
// Service defines parameters configure Service details for the Broker

bundle/manifests/pubsubplus-eventbroker-operator.clusterserviceversion.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ metadata:
2020
certified: "true"
2121
com.redhat.delivery.operator.bundle: "true"
2222
com.redhat.openshift.versions: v4.10
23-
containerImage: docker.io/solace/pubsubplus-eventbroker-operator:1.3.0
24-
createdAt: "2025-05-04T22:11:52Z"
23+
containerImage: docker.io/solace/pubsubplus-eventbroker-operator:1.4.0
24+
createdAt: "2025-07-31T19:48:36Z"
2525
description: The Solace PubSub+ Event Broker Operator deploys and manages the
2626
lifecycle of PubSub+ Event Brokers
2727
operators.openshift.io/valid-subscription: '[]'
2828
operators.operatorframework.io/builder: operator-sdk-v1.34.1
2929
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
3030
repository: https://github.com/SolaceProducts/pubsubplus-kubernetes-quickstart
3131
support: Solace Products
32-
name: pubsubplus-eventbroker-operator.v1.3.0
32+
name: pubsubplus-eventbroker-operator.v1.4.0
3333
namespace: placeholder
3434
spec:
3535
apiservicedefinitions: {}
@@ -296,7 +296,7 @@ spec:
296296
valueFrom:
297297
fieldRef:
298298
fieldPath: metadata.annotations['olm.targetNamespaces']
299-
image: docker.io/solace/pubsubplus-eventbroker-operator:1.3.0
299+
image: docker.io/solace/pubsubplus-eventbroker-operator:1.4.0
300300
imagePullPolicy: Always
301301
livenessProbe:
302302
httpGet:
@@ -411,4 +411,4 @@ spec:
411411
provider:
412412
name: Solace Corporation
413413
url: www.solace.com
414-
version: 1.3.0
414+
version: 1.4.0

bundle/manifests/pubsubplus.solace.com_pubsubpluseventbrokers.yaml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ metadata:
44
annotations:
55
controller-gen.kubebuilder.io/version: v0.14.0
66
labels:
7-
app.kubernetes.io/version: v1.3.0
7+
app.kubernetes.io/version: v1.4.0
88
name: pubsubpluseventbrokers.pubsubplus.solace.com
99
spec:
1010
group: pubsubplus.solace.com
@@ -50,11 +50,14 @@ spec:
5050
nullable: true
5151
type: string
5252
brokerContainerSecurity:
53-
description: ContainerSecurityContext defines the container security context for the PubSubPlusEventBroker.
53+
description: ContainerSecurityContext defines the container security
54+
context for the PubSubPlusEventBroker.
5455
properties:
5556
readOnlyRootFilesystem:
5657
default: false
57-
description: 'Specifies if the root filesystem of the PubSubPlusEventBroker should be read-only. Note: This will only work for versions 10.9 and above.'
58+
description: 'Specifies if the root filesystem of the PubSubPlusEventBroker
59+
should be read-only. Note: This will only work for versions
60+
10.9 and above.'
5861
type: boolean
5962
runAsGroup:
6063
description: Specifies runAsGroup in container security context.
@@ -1457,6 +1460,13 @@ spec:
14571460
description: Unique name for the port that can be referred
14581461
to by services.
14591462
type: string
1463+
nodePort:
1464+
description: NodePort specifies a fixed node port when service
1465+
type is NodePort
1466+
format: int32
1467+
maximum: 32767
1468+
minimum: 30000
1469+
type: number
14601470
protocol:
14611471
default: TCP
14621472
description: Protocol for port. Must be UDP, TCP, or SCTP.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
apiVersion: pubsubplus.solace.com/v1beta1
3+
kind: PubSubPlusEventBroker
4+
metadata:
5+
name: test-nonha-nodeport
6+
spec:
7+
developer: true
8+
service:
9+
type: NodePort
10+
ports:
11+
- name: tcp-semp
12+
protocol: TCP
13+
containerPort: 8080
14+
servicePort: 8080
15+
nodePort: 30080
16+
- name: tcp-smf
17+
protocol: TCP
18+
containerPort: 55555
19+
servicePort: 55555
20+
nodePort: 30555
21+
- name: tcp-web
22+
protocol: TCP
23+
containerPort: 8008
24+
servicePort: 8008
25+
nodePort: 30008

0 commit comments

Comments
 (0)