Skip to content
This repository was archived by the owner on May 14, 2025. It is now read-only.

Commit 32ff7f1

Browse files
author
Corneil du Plessis
authored
Improve Carvel Deployment Support. (#5921)
* Improve Carvel Deployment Support. * Allow kapp-controller to select default service account. * Provide for specifying allocateLoadBalancerNodePorts and loadBalancerClass on skipper and dataflow server services.
1 parent b3be82a commit 32ff7f1

22 files changed

Lines changed: 298 additions & 112 deletions

build-carvel-package.sh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/bash
2+
3+
function create_and_clear() {
4+
rm -rf "$1"
5+
mkdir -p "$1"
6+
}
7+
8+
SCDIR=$(realpath $(dirname "$(readlink -f "${BASH_SOURCE[0]}")"))
9+
set -euxo pipefail
10+
pushd $SCDIR > /dev/null
11+
export DATAFLOW_VERSION=$(./mvnw help:evaluate -o -Dexpression=project.version -q -DforceStdout)
12+
export SKIPPER_VERSION=$(./mvnw help:evaluate -o -Dexpression=spring-cloud-skipper.version -pl spring-cloud-dataflow-parent -q -DforceStdout)
13+
14+
if [ "$PACKAGE_VERSION" = "" ]; then
15+
export PACKAGE_VERSION=$DATAFLOW_VERSION
16+
fi
17+
18+
# you can launch a local docker registry using docker run -d -p 5000:5000 --name registry registry:2.7
19+
# export REPO_PREFIX="<local-machine-ip>:5000/"
20+
if [ "$REPO_PREFIX" = "" ]; then
21+
REPO_PREFIX="docker.io/"
22+
fi
23+
24+
export PACKAGE_BUNDLE_REPOSITORY="${REPO_PREFIX}springcloud/scdf-oss-package"
25+
export REPOSITORY_BUNDLE="${REPO_PREFIX}springcloud/scdf-oss-repo"
26+
27+
export SKIPPER_REPOSITORY="springcloud/spring-cloud-skipper-server"
28+
export SERVER_REPOSITORY="springcloud/spring-cloud-dataflow-server"
29+
export CTR_VERSION=$DATAFLOW_VERSION
30+
export PACKAGE_NAME="scdf"
31+
export PACKAGE_BUNDLE_TEMPLATE="src/carvel/templates/bundle/package"
32+
export IMGPKG_LOCK_TEMPLATE="src/carvel/templates/imgpkg"
33+
export VENDIR_SRC_IN="src/carvel/config"
34+
export SERVER_VERSION="$DATAFLOW_VERSION"
35+
36+
export PACKAGE_BUNDLE_GENERATED=/tmp/generated/packagebundle
37+
export IMGPKG_LOCK_GENERATED_IN=/tmp/generated/imgpkgin
38+
export IMGPKG_LOCK_GENERATED_OUT=/tmp/generated/imgpkgout
39+
create_and_clear $PACKAGE_BUNDLE_GENERATED
40+
create_and_clear $IMGPKG_LOCK_GENERATED_IN
41+
create_and_clear $IMGPKG_LOCK_GENERATED_OUT
42+
43+
echo "bundle-path=$PACKAGE_BUNDLE_GENERATED"
44+
export SCDF_DIR="$SCDIR"
45+
46+
sh "$SCDIR/.github/actions/build-package-bundle/build-package-bundle.sh"
47+
48+
imgpkg push --bundle "$PACKAGE_BUNDLE_REPOSITORY:$PACKAGE_VERSION" --file "$PACKAGE_BUNDLE_GENERATED"
49+
50+
export REPO_BUNDLE_TEMPLATE="src/carvel/templates/bundle/repo"
51+
52+
export REPO_BUNDLE_RENDERED=/tmp/generated/reporendered
53+
export REPO_BUNDLE_GENERATED=/tmp/generated/repobundle
54+
create_and_clear $REPO_BUNDLE_RENDERED
55+
create_and_clear $REPO_BUNDLE_GENERATED
56+
57+
sh "$SCDIR/.github/actions/build-repository-bundle/build-repository-bundle.sh"
58+
59+
imgpkg push --bundle "$REPOSITORY_BUNDLE:$PACKAGE_VERSION" --file "$REPO_BUNDLE_GENERATED"
60+
61+
popd

build-containers.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
./mvnw install -s .settings.xml -DskipTests -T 1C -am -pl :spring-cloud-dataflow-server,:spring-cloud-skipper-server,:spring-cloud-dataflow-composed-task-runner
3+
./mvnw spring-boot:build-image -s .settings.xml -DskipTests -T 1C -pl :spring-cloud-dataflow-server,:spring-cloud-skipper-server,:spring-cloud-dataflow-composed-task-runner

src/carvel/config/dataflow-svc.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#@ load("@ytt:data", "data")
22
#@ load("dataflow.star", "service_spec_type")
3-
3+
#@ load("dataflow.star", "service_spec_type_loadbalancer")
4+
#@ load("dataflow.star", "service_spec_allocate_load_balancer_node_ports")
5+
#@ load("dataflow.star", "has_service_spec_load_balancer_class")
6+
#@ load("dataflow.star", "service_spec_load_balancer_class")
47
kind: Service
58
apiVersion: v1
69
metadata:
@@ -18,5 +21,11 @@ spec:
1821
- port: 80
1922
targetPort: 9393
2023
name: scdf-server
24+
#@ if service_spec_type_loadbalancer():
25+
allocateLoadBalancerNodePorts: #@ service_spec_allocate_load_balancer_node_ports()
26+
#@ if has_service_spec_load_balancer_class():
27+
loadBalancerClass: #@ service_spec_load_balancer_class()
28+
#@ end
29+
#@ end
2130
selector:
2231
app: scdf-server

src/carvel/config/dataflow.star

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,30 @@ end
8282
def image_pull_secrets():
8383
return [{"name": registry_secret_ref()}]
8484
end
85+
def has_service_spec_type():
86+
return non_empty_string(data.values.scdf.server.service.type)
87+
end
88+
89+
def service_spec_type_loadbalancer():
90+
return non_empty_string(data.values.scdf.server.service.type) and data.values.scdf.server.service.type == 'LoadBalancer'
91+
end
8592

8693
def service_spec_type():
8794
return data.values.scdf.server.service.type
8895
end
8996

97+
def service_spec_allocate_load_balancer_node_ports():
98+
return data.values.scdf.server.service.allocateLoadBalancerNodePorts
99+
end
100+
101+
def has_service_spec_load_balancer_class():
102+
return non_empty_string(data.values.scdf.server.service.loadBalancerClass)
103+
end
104+
105+
def service_spec_load_balancer_class():
106+
return data.values.scdf.server.service.loadBalancerClass
107+
end
108+
90109
def context_path():
91110
return data.values.scdf.server.contextPath
92111
end

src/carvel/config/skipper-svc.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#@ load("@ytt:data", "data")
22
#@ load("skipper.star", "service_spec_type")
3+
#@ load("skipper.star", "service_spec_type_loadbalancer")
4+
#@ load("skipper.star", "service_spec_allocate_load_balancer_node_ports")
5+
#@ load("skipper.star", "has_service_spec_load_balancer_class")
6+
#@ load("skipper.star", "service_spec_load_balancer_class")
37

48
apiVersion: v1
59
kind: Service
@@ -16,5 +20,11 @@ spec:
1620
ports:
1721
- port: 80
1822
targetPort: 7577
23+
#@ if service_spec_type_loadbalancer():
24+
allocateLoadBalancerNodePorts: #@ service_spec_allocate_load_balancer_node_ports()
25+
#@ if has_service_spec_load_balancer_class():
26+
loadBalancerClass: #@ service_spec_load_balancer_class()
27+
#@ end
28+
#@ end
1929
selector:
2030
app: skipper

src/carvel/config/skipper.star

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,23 @@ def service_spec_type():
9090
return data.values.scdf.skipper.service.type
9191
end
9292

93+
def service_spec_type_loadbalancer():
94+
return non_empty_string(data.values.scdf.skipper.service.type) and data.values.scdf.skipper.service.type == 'LoadBalancer'
95+
end
96+
97+
def service_spec_allocate_load_balancer_node_ports():
98+
return data.values.scdf.skipper.service.allocateLoadBalancerNodePorts
99+
end
100+
101+
def has_service_spec_load_balancer_class():
102+
return non_empty_string(data.values.scdf.skipper.service.loadBalancerClass)
103+
end
104+
105+
def service_spec_load_balancer_class():
106+
return data.values.scdf.skipper.service.loadBalancerClass
107+
end
108+
93109
def skipper_has_password():
94110
return non_empty_string(data.values.scdf.skipper.database.password)
95-
end
111+
end
112+

src/carvel/config/values/values.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ scdf:
1515
digest: ""
1616
service:
1717
type: ClusterIP
18+
allocateLoadBalancerNodePorts: true
19+
loadBalancerClass: ""
1820
resources:
1921
limits:
2022
cpu: ""
@@ -59,6 +61,8 @@ scdf:
5961
digest: ""
6062
service:
6163
type: ClusterIP
64+
allocateLoadBalancerNodePorts: true
65+
loadBalancerClass: ""
6266
resources:
6367
limits:
6468
cpu: ""

src/carvel/templates/bundle/repo/values-schema.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ components:
7979
- ClusterIP
8080
- ExternalName
8181
description: Service type
82+
allocateLoadBalancerNodePorts:
83+
type: boolean
84+
description: Indicates if load balancer should create node ports. Default is true
85+
loadBalancerClass:
86+
type: string
87+
description: Determines a specific configured type of load balancer.
8288
resources:
8389
type: object
8490
properties:
@@ -185,6 +191,12 @@ components:
185191
- ClusterIP
186192
- ExternalName
187193
description: Service type
194+
allocateLoadBalancerNodePorts:
195+
type: boolean
196+
description: Indicates if load balancer should create node ports. Default is true
197+
loadBalancerClass:
198+
type: string
199+
description: Determines a specific configured type of load balancer.
188200
resources:
189201
type: object
190202
properties:

src/carvel/test/ordering.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ describe('ordering', () => {
2929
expect(findAnnotation(skipperDeployment, 'kapp.k14s.io/change-group')).toBe('scdf.tanzu.vmware.com/skipper');
3030
expect(findAnnotation(dataflowService, 'kapp.k14s.io/change-group')).toBe('scdf.tanzu.vmware.com/server');
3131
expect(findAnnotation(dataflowDeployment, 'kapp.k14s.io/change-group')).toBe('scdf.tanzu.vmware.com/server');
32-
3332
expect(findAnnotations(dataflowService, 'kapp.k14s.io/change-rule')).toContainAnyValues([
3433
'upsert after upserting scdf.tanzu.vmware.com/skipper'
3534
]);

src/carvel/test/servers.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,25 @@ describe('servers', () => {
3737
dataValueYamls: [
3838
...DEFAULT_REQUIRED_DATA_VALUES,
3939
'scdf.server.service.type=LoadBalancer',
40-
'scdf.skipper.service.type=LoadBalancer'
40+
'scdf.server.service.allocateLoadBalancerNodePorts=false',
41+
'scdf.skipper.service.type=ClusterIP',
42+
'scdf.skipper.service.allocateLoadBalancerNodePorts=true'
4143
]
4244
});
4345
expect(result.success, result.stderr).toBeTruthy();
4446
const yaml = result.stdout;
4547

4648
const dataflowService = findService(yaml, SCDF_SERVER_NAME);
49+
console.log(dataflowService);
4750
expect(dataflowService).toBeTruthy();
4851
expect(dataflowService?.spec?.type).toBe('LoadBalancer');
4952

53+
expect(dataflowService?.spec?.allocateLoadBalancerNodePorts).toBe(false);
54+
5055
const skipperService = findService(yaml, SKIPPER_NAME);
5156
expect(skipperService).toBeTruthy();
52-
expect(skipperService?.spec?.type).toBe('LoadBalancer');
57+
expect(skipperService?.spec?.type).toBe('ClusterIP');
58+
expect(skipperService?.spec?.allocateLoadBalancerNodePorts).toBeFalsy();
5359
});
5460

5561
it('should have tagged images', async () => {

0 commit comments

Comments
 (0)